[devel] --as-needed и --gc-section was: Re: [sisyphus] systemd

Ivan A. Melnikov iv на altlinux.org
Пт Янв 28 21:58:24 UTC 2011


On Thu, 27 Jan 2011 15:21:43 +0300
Alexey Shabalin <a.shabalin на gmail.com> wrote:

> 2011/1/26 Alexey Shabalin <a.shabalin на gmail.com>:
[...]
> 
> Что-то я не пойму, как бороться с этим(в Makefile ничего криминального
> не обнаружил):
> 
> lib.req: WARNING: /home/alex/tmp/systemd-buildroot/bin/systemd:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/bin/systemd-ask-password: overlinked
> libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING: /home/alex/tmp/systemd-buildroot/bin/systemd-notify:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/bin/systemd-tty-ask-password-agent:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-ac-power:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-cgroups-agent:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-fsck: overlinked
> libraries: /lib64/ld-linux-x86-64.so.2 /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-initctl:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-kmsg-syslogd:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-logger:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-modules-load:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-quotacheck:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-random-seed:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-readahead-collect:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-readahead-replay:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-remount-api-vfs:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-reply-password:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-shutdown:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-shutdownd:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-sysctl:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-timestamp:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-tmpfiles:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-update-utmp:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-user-sessions:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib/systemd/systemd-vconsole-setup:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> /lib64/libselinux.so.1
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/lib64/security/pam_systemd.so:
> overlinked libraries: /lib64/ld-linux-x86-64.so.2
> lib.req: WARNING:
> /home/alex/tmp/systemd-buildroot/usr/bin/systemd-cgls: overlinked
> libraries: /lib64/libselinux.so.1
> 

Похоже на то, что -Wl,--as-needed и -Wl,--gc-sections довольно
интересно взаимодействуют. Сначала отрабатывает --as-needed, видит что
символы из библиотеки нужны, оставляет её; затем --gc-sections удаляет
все секции, которые порождали зависимость. Получаем перелинкованную
прогамму.

Завтра (теперь уже сегодня) попробую воспроизвести на более простом
примере.

P.S. Поскольку это теперь больше вопрос по тулчейну, перевожу в devel на .

-- 
WBR,
Ivan A. Melnikov


Подробная информация о списке рассылки Devel