ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] Как пролезли undefined symbol?
@ 2009-05-16  7:56 Max Ivanov
  2009-05-16  8:00 ` Damir Shayhutdinov
  2009-05-16  8:23 ` Alexey Tourbin
  0 siblings, 2 replies; 12+ messages in thread
From: Max Ivanov @ 2009-05-16  7:56 UTC (permalink / raw)
  To: ALT Linux Team development discussions

Добрый день! Как такое могло получиться: /usr/lib/mlt/libmltcore.so:
undefined symbol: pow
столько закручивали гайки, а оно всё равно вот такое пропускает.

Пофиксил, отправил, вина моя и посыпаю голову пеплом. Но всё же, может
есть какой макрос, что б проверяло на эти самые undefined и не
пропускало?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  7:56 [devel] Как пролезли undefined symbol? Max Ivanov
@ 2009-05-16  8:00 ` Damir Shayhutdinov
  2009-05-16  8:23 ` Alexey Tourbin
  1 sibling, 0 replies; 12+ messages in thread
From: Damir Shayhutdinov @ 2009-05-16  8:00 UTC (permalink / raw)
  To: ALT Linux Team development discussions

> Добрый день! Как такое могло получиться: /usr/lib/mlt/libmltcore.so:
> undefined symbol: pow
> столько закручивали гайки, а оно всё равно вот такое пропускает.
>
> Пофиксил, отправил, вина моя и посыпаю голову пеплом. Но всё же, может
> есть какой макрос, что б проверяло на эти самые undefined и не
> пропускало?
То, что не в libdir  выдает warning вместо error, когда там undefined
symbol. Ибо есть много ложных срабатываний, на всяких плагинах и т.п.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  7:56 [devel] Как пролезли undefined symbol? Max Ivanov
  2009-05-16  8:00 ` Damir Shayhutdinov
@ 2009-05-16  8:23 ` Alexey Tourbin
  2009-05-16  8:32   ` Boris Savelev
  2009-05-16  9:49   ` Max Ivanov
  1 sibling, 2 replies; 12+ messages in thread
From: Alexey Tourbin @ 2009-05-16  8:23 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1327 bytes --]

On Sat, May 16, 2009 at 11:56:21AM +0400, Max Ivanov wrote:
> Добрый день! Как такое могло получиться: /usr/lib/mlt/libmltcore.so:
> undefined symbol: pow
> столько закручивали гайки, а оно всё равно вот такое пропускает.
> 
> Пофиксил, отправил, вина моя и посыпаю голову пеплом. Но всё же, может
> есть какой макрос, что б проверяло на эти самые undefined и не
> пропускало?

В "плагинах" в общем случае нельзя требовать чтобы все символы были
непосредственно разрешены.

$ ldd -r /usr/lib64/zsh/zpty.so |& head
undefined symbol: mypid (/usr/lib64/zsh/zpty.so)
undefined symbol: lines (/usr/lib64/zsh/zpty.so)
undefined symbol: errflag       (/usr/lib64/zsh/zpty.so)
undefined symbol: scriptname    (/usr/lib64/zsh/zpty.so)
undefined symbol: coprocin      (/usr/lib64/zsh/zpty.so)
undefined symbol: columns       (/usr/lib64/zsh/zpty.so)
undefined symbol: contflag      (/usr/lib64/zsh/zpty.so)
undefined symbol: retflag       (/usr/lib64/zsh/zpty.so)
undefined symbol: breaks        (/usr/lib64/zsh/zpty.so)
undefined symbol: lastval       (/usr/lib64/zsh/zpty.so)
$

Эти символы определны в /bin/zsh.  Для этого /bin/zsh линкуется
с флагом -rdynamic.  Это такая легальная схема, почему в elf shared
object могут допускаться undefined symbols.

Макрос называется
%set_verify_elf_method strict

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  8:23 ` Alexey Tourbin
@ 2009-05-16  8:32   ` Boris Savelev
  2009-05-16  8:43     ` Alexey Tourbin
  2009-05-16  9:49   ` Max Ivanov
  1 sibling, 1 reply; 12+ messages in thread
From: Boris Savelev @ 2009-05-16  8:32 UTC (permalink / raw)
  To: ALT Linux Team development discussions; +Cc: Alexey Tourbin

16 мая 2009 г. 12:23 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> On Sat, May 16, 2009 at 11:56:21AM +0400, Max Ivanov wrote:
>> Добрый день! Как такое могло получиться: /usr/lib/mlt/libmltcore.so:
>> undefined symbol: pow
>> столько закручивали гайки, а оно всё равно вот такое пропускает.
>>
>> Пофиксил, отправил, вина моя и посыпаю голову пеплом. Но всё же, может
>> есть какой макрос, что б проверяло на эти самые undefined и не
>> пропускало?
>
> В "плагинах" в общем случае нельзя требовать чтобы все символы были
> непосредственно разрешены.
>
> $ ldd -r /usr/lib64/zsh/zpty.so |& head
> undefined symbol: mypid (/usr/lib64/zsh/zpty.so)
> undefined symbol: lines (/usr/lib64/zsh/zpty.so)
> undefined symbol: errflag       (/usr/lib64/zsh/zpty.so)
> undefined symbol: scriptname    (/usr/lib64/zsh/zpty.so)
> undefined symbol: coprocin      (/usr/lib64/zsh/zpty.so)
> undefined symbol: columns       (/usr/lib64/zsh/zpty.so)
> undefined symbol: contflag      (/usr/lib64/zsh/zpty.so)
> undefined symbol: retflag       (/usr/lib64/zsh/zpty.so)
> undefined symbol: breaks        (/usr/lib64/zsh/zpty.so)
> undefined symbol: lastval       (/usr/lib64/zsh/zpty.so)
> $
>
> Эти символы определны в /bin/zsh.  Для этого /bin/zsh линкуется
> с флагом -rdynamic.  Это такая легальная схема, почему в elf shared
> object могут допускаться undefined symbols.
>
> Макрос называется
> %set_verify_elf_method strict
>
а что означает "bad_elf_symbols"?
http://git.altlinux.org/tasks/6284/task/log

-- 
С уважением, Борис Савельев

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  8:32   ` Boris Savelev
@ 2009-05-16  8:43     ` Alexey Tourbin
  2009-05-16  9:09       ` Boris Savelev
  0 siblings, 1 reply; 12+ messages in thread
From: Alexey Tourbin @ 2009-05-16  8:43 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 997 bytes --]

On Sat, May 16, 2009 at 12:32:14PM +0400, Boris Savelev wrote:
> а что означает "bad_elf_symbols"?
> http://git.altlinux.org/tasks/6284/task/log

bad_elf_symbols означает глобальную проверку одновременно для всех
имеющихся бинариков в репозитарии.  Она сбрабатывает только тогда,
когда какого-то символа вообще нигде нет.  А если для undefined symbol
в одном бинарике имеется определение в каком-то другом бинарике, то
считается что всё нормально.  То есть связи между бинариками она вообще
не анализирует.

Эта проверка работает так:
1) Составляет полный список определенных символов (def) для всех
бинариков в репозитарии.
2) Составляет полный список неопределенных/ссылочных символов (ref) для
всех бинариков в репозитарии.
3) Из ref вычитает def, результат называется bad_elf_symbols.

Наличие bad_elf_symbols обычно означает, что в бинарике содержатся
вызовы несуществующих функций.  В момент вызова несуществующей функции
всё упадёт (а с LD_BIND_NOW=1 упадёт сразу же).

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  8:43     ` Alexey Tourbin
@ 2009-05-16  9:09       ` Boris Savelev
  2009-05-16  9:21         ` Alexey Tourbin
  0 siblings, 1 reply; 12+ messages in thread
From: Boris Savelev @ 2009-05-16  9:09 UTC (permalink / raw)
  To: ALT Linux Team development discussions

16 мая 2009 г. 12:43 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> On Sat, May 16, 2009 at 12:32:14PM +0400, Boris Savelev wrote:
>> а что означает "bad_elf_symbols"?
>> http://git.altlinux.org/tasks/6284/task/log
>
> bad_elf_symbols означает глобальную проверку одновременно для всех
> имеющихся бинариков в репозитарии.  Она сбрабатывает только тогда,
> когда какого-то символа вообще нигде нет.  А если для undefined symbol
> в одном бинарике имеется определение в каком-то другом бинарике, то
> считается что всё нормально.  То есть связи между бинариками она вообще
> не анализирует.
>
> Эта проверка работает так:
> 1) Составляет полный список определенных символов (def) для всех
> бинариков в репозитарии.
> 2) Составляет полный список неопределенных/ссылочных символов (ref) для
> всех бинариков в репозитарии.
> 3) Из ref вычитает def, результат называется bad_elf_symbols.
>
> Наличие bad_elf_symbols обычно означает, что в бинарике содержатся
> вызовы несуществующих функций.  В момент вызова несуществующей функции
> всё упадёт (а с LD_BIND_NOW=1 упадёт сразу же).
>
ааа. дело в том что символы есть, но бинарник с нужными символами не в
%_bindir, а в %_libdir/%name/
из-за этого проверка валится?

-- 
С уважением, Борис Савельев

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  9:09       ` Boris Savelev
@ 2009-05-16  9:21         ` Alexey Tourbin
  2009-05-16  9:36           ` Boris Savelev
  0 siblings, 1 reply; 12+ messages in thread
From: Alexey Tourbin @ 2009-05-16  9:21 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2159 bytes --]

On Sat, May 16, 2009 at 01:09:10PM +0400, Boris Savelev wrote:
> 16 мая 2009 г. 12:43 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> > On Sat, May 16, 2009 at 12:32:14PM +0400, Boris Savelev wrote:
> >> а что означает "bad_elf_symbols"?
> >> http://git.altlinux.org/tasks/6284/task/log
> >
> > bad_elf_symbols означает глобальную проверку одновременно для всех
> > имеющихся бинариков в репозитарии.  Она сбрабатывает только тогда,
> > когда какого-то символа вообще нигде нет.  А если для undefined symbol
> > в одном бинарике имеется определение в каком-то другом бинарике, то
> > считается что всё нормально.  То есть связи между бинариками она вообще
> > не анализирует.
> >
> > Эта проверка работает так:
> > 1) Составляет полный список определенных символов (def) для всех
> > бинариков в репозитарии.
> > 2) Составляет полный список неопределенных/ссылочных символов (ref) для
> > всех бинариков в репозитарии.
> > 3) Из ref вычитает def, результат называется bad_elf_symbols.
> >
> > Наличие bad_elf_symbols обычно означает, что в бинарике содержатся
> > вызовы несуществующих функций.  В момент вызова несуществующей функции
> > всё упадёт (а с LD_BIND_NOW=1 упадёт сразу же).
> >
> ааа. дело в том что символы есть, но бинарник с нужными символами не в
> %_bindir, а в %_libdir/%name/
> из-за этого проверка валится?

Нет.  Лучше давайте конкретно что-то рассмотрим.
http://git.altlinux.org/tasks/6284/task/log

        x86_64: NEW bad_elf_symbols detected:                                                                                                
monkeystudio-1.8.3.3-alt1.svn3087.x86_64.rpm /usr/lib64/monkeystudio/plugins/base/libAStyle.so U _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv

Здесь говорится: файл /usr/lib64/monkeystudio/plugins/base/libAStyle.so
содержит вызов функции _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv.
Но эта функция нигде не определна, то есть не экспортируется ни в каком
другом бинарике.

В проверке bad_elf_symbols расположение файлов никак не влияет на
проверку.  В проверке /usr/lib/rpm/verify-elf расположение файлов
влияет на проверку.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  9:21         ` Alexey Tourbin
@ 2009-05-16  9:36           ` Boris Savelev
  2009-05-16  9:54             ` Alexey Tourbin
  0 siblings, 1 reply; 12+ messages in thread
From: Boris Savelev @ 2009-05-16  9:36 UTC (permalink / raw)
  To: ALT Linux Team development discussions

16 мая 2009 г. 13:21 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv

objdump -T /usr/bin/monkeystudio | grep
_ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
081da6f6 g    DF .text  00000039  Base
_ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv

я видимо что-то не до конца понимаю-(
тем не менее, ничего не падает-))

-- 
С уважением, Борис Савельев

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  8:23 ` Alexey Tourbin
  2009-05-16  8:32   ` Boris Savelev
@ 2009-05-16  9:49   ` Max Ivanov
  2009-05-16  9:52     ` Mikhail Gusarov
  1 sibling, 1 reply; 12+ messages in thread
From: Max Ivanov @ 2009-05-16  9:49 UTC (permalink / raw)
  To: ALT Linux Team development discussions

>
> Эти символы определны в /bin/zsh.  Для этого /bin/zsh линкуется
> с флагом -rdynamic.  Это такая легальная схема, почему в elf shared
> object могут допускаться undefined symbols.
>
> Макрос называется
> %set_verify_elf_method strict

В каком разделе wiki это лучше описать? SpecTips?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  9:49   ` Max Ivanov
@ 2009-05-16  9:52     ` Mikhail Gusarov
  0 siblings, 0 replies; 12+ messages in thread
From: Mikhail Gusarov @ 2009-05-16  9:52 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 197 bytes --]


Twas brillig at 13:49:00 16.05.2009 UTC+04 when ivanov.maxim@gmail.com did gyre and gimble:

 MI> В каком разделе wiki это лучше описать? SpecTips?

Да.

-- 

[-- Attachment #2: Type: application/pgp-signature, Size: 834 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  9:36           ` Boris Savelev
@ 2009-05-16  9:54             ` Alexey Tourbin
  2009-05-16 10:17               ` Boris Savelev
  0 siblings, 1 reply; 12+ messages in thread
From: Alexey Tourbin @ 2009-05-16  9:54 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1214 bytes --]

On Sat, May 16, 2009 at 01:36:11PM +0400, Boris Savelev wrote:
> 16 мая 2009 г. 13:21 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> > _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
> 
> objdump -T /usr/bin/monkeystudio | grep
> _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
> 081da6f6 g    DF .text  00000039  Base
> _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv

Давайте смотреть тот пакет который собрался.

$ rsync -vaP git.altlinux.org::tasks/6284 $TMPDIR/tasks/
...
$ cd $TMPDIR/tasks/6284
$ rpmpeek ./build/1/x86_64/rpms/monkeystudio-1.8.3.3-alt1.svn3087.x86_64.rpm objdump -T ./usr/lib64/monkeystudio/plugins/base/libAStyle.so |grep _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
0000000000000000      D  *UND*  0000000000000000              _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
$ rpmpeek ./build/1/x86_64/rpms/monkeystudio-1.8.3.3-alt1.svn3087.x86_64.rpm objdump -T ./usr/bin/monkeystudio |grep _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
$ 

Вызов функции есть, самой функции нету.  Вот и вся правда.
Почему оно так собралось я не знаю.

> я видимо что-то не до конца понимаю-(
> тем не менее, ничего не падает-))

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Как пролезли undefined symbol?
  2009-05-16  9:54             ` Alexey Tourbin
@ 2009-05-16 10:17               ` Boris Savelev
  0 siblings, 0 replies; 12+ messages in thread
From: Boris Savelev @ 2009-05-16 10:17 UTC (permalink / raw)
  To: ALT Linux Team development discussions

16 мая 2009 г. 13:54 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> On Sat, May 16, 2009 at 01:36:11PM +0400, Boris Savelev wrote:
>> 16 мая 2009 г. 13:21 пользователь Alexey Tourbin <at@altlinux.ru> написал:
>> > _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
>>
>> objdump -T /usr/bin/monkeystudio | grep
>> _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
>> 081da6f6 g    DF .text  00000039  Base
>> _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
>
> Давайте смотреть тот пакет который собрался.
>
> $ rsync -vaP git.altlinux.org::tasks/6284 $TMPDIR/tasks/
> ...
> $ cd $TMPDIR/tasks/6284
> $ rpmpeek ./build/1/x86_64/rpms/monkeystudio-1.8.3.3-alt1.svn3087.x86_64.rpm objdump -T ./usr/lib64/monkeystudio/plugins/base/libAStyle.so |grep _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
> 0000000000000000      D  *UND*  0000000000000000              _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
> $ rpmpeek ./build/1/x86_64/rpms/monkeystudio-1.8.3.3-alt1.svn3087.x86_64.rpm objdump -T ./usr/bin/monkeystudio |grep _ZN10BasePlugin11qt_metacallEN11QMetaObject4CallEiPPv
> $
>
> Вызов функции есть, самой функции нету.  Вот и вся правда.
> Почему оно так собралось я не знаю.
>
все. теперь дошло, что это воспроизводится только на х86_64
спасибо.

-- 
С уважением, Борис Савельев

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2009-05-16 10:17 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-16  7:56 [devel] Как пролезли undefined symbol? Max Ivanov
2009-05-16  8:00 ` Damir Shayhutdinov
2009-05-16  8:23 ` Alexey Tourbin
2009-05-16  8:32   ` Boris Savelev
2009-05-16  8:43     ` Alexey Tourbin
2009-05-16  9:09       ` Boris Savelev
2009-05-16  9:21         ` Alexey Tourbin
2009-05-16  9:36           ` Boris Savelev
2009-05-16  9:54             ` Alexey Tourbin
2009-05-16 10:17               ` Boris Savelev
2009-05-16  9:49   ` Max Ivanov
2009-05-16  9:52     ` Mikhail Gusarov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git