Hello I think you should report this issue upstream directly.
It doesn't seem to be a packaging bug. Thanks Sylvestre Le 06/11/2021 à 14:00, Alejandro Colomar a écrit : > Package: lld > Version: 1:13.0-53~exp1 > Severity: normal > Tags: upstream > X-Debbugs-Cc: alx.manpa...@gmail.com, Michael Kerrisk (man-pages) > <mtk.manpa...@gmail.com>, Diego Elio Pettenò <flamee...@flameeyes.com>, > 997...@bugs.debian.org > > Dear Maintainer, > > A week ago I detected a bug in ld.gold, where it differs from ld.bfd: > <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=997999>. > > In the meantime, I've known about ld.lld, and wondered its behavior > regarding --no-allow-shlib-undefined. After some experiment, it's > the same buggy behavior that ld.gold has, and differs from ld.bfd. > > I would expect --no-allow-shlib-undefined to search recursively through > all of my dependencies and check if any of them has undefined symbols, > and report an error if so. ld.bfd has that behavior. > > Instead, ld.lld (and ld.gold) only check that my direct dependencies > have their symbols resolved, but they do not check the dependencies > of my dependencies. > > That creates the possibility that an unmet dependency will cause a run-time > error, as I show in the example below. > > Commands to reproduce the bug: > > $ ll > total 20 > -rw-r--r-- 1 user user 29 Oct 28 11:47 bar.c > -rw-r--r-- 1 user user 60 Oct 28 13:47 foobar.c > -rw-r--r-- 1 user user 83 Oct 28 11:46 foo.c > -rw-r--r-- 1 user user 52 Oct 28 13:47 foovar.c > -rw-r--r-- 1 user user 56 Oct 28 13:31 main.c > $ > $ cat bar.c > int bar(void) > { > return 1; > } > $ cat foo.c > int bar(void); > > int foo(void) > { > return 1; > } > > int foo_bar(void) > { > return bar(); > } > $ cat foobar.c > int foo_bar(void); > > int foobar(void) > { > return foo_bar(); > } > $ cat foovar.c > int foo(void); > > int foobar(void) > { > return foo(); > } > $ cat main.c > int foobar(void); > > int main(void) > { > return foobar(); > } > $ > $ cc -c -fpic -Wall -Wextra -Werror main.c foo.c bar.c foobar.c foovar.c > $ > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libbar.so bar.o > -fuse-ld=bfd > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libbar.so bar.o > -fuse-ld=gold > $ > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoo.so foo.o > -fuse-ld=bfd > /usr/bin/ld.bfd: foo.o: in function `foo_bar': > foo.c:(.text+0x10): undefined reference to `bar' > collect2: error: ld returned 1 exit status > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoo.so foo.o > -fuse-ld=gold > foo.o:foo.c:function foo_bar: error: undefined reference to 'bar' > collect2: error: ld returned 1 exit status > $ > $ cc -shared -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoo.so foo.o -fuse-ld=bfd > $ cc -shared -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoo.so foo.o -fuse-ld=gold > $ > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoobar.so foobar.o -L. > -lfoo -fuse-ld=bfd > /usr/bin/ld.bfd: ./libfoo.so: undefined reference to `bar' > collect2: error: ld returned 1 exit status > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoobar.so foobar.o -L. > -lfoo -fuse-ld=gold > ./libfoo.so: error: undefined reference to 'bar' > collect2: error: ld returned 1 exit status > $ > $ cc -shared -Wl,--no-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoobar.so foobar.o -L. -lfoo > -fuse-ld=bfd > $ cc -shared -Wl,--no-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoobar.so foobar.o -L. -lfoo > -fuse-ld=gold > $ > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoovar.so foovar.o -L. > -lfoo -fuse-ld=bfd > /usr/bin/ld.bfd: ./libfoo.so: undefined reference to `bar' > collect2: error: ld returned 1 exit status > $ cc -shared -Wl,--no-undefined -Wl,--no-allow-shlib-undefined > -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -o libfoovar.so foovar.o -L. > -lfoo -fuse-ld=gold > ./libfoo.so: error: undefined reference to 'bar' > collect2: error: ld returned 1 exit status > $ > $ cc -shared -Wl,--no-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoovar.so foovar.o -L. -lfoo > -fuse-ld=bfd > $ cc -shared -Wl,--no-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o libfoovar.so foovar.o -L. -lfoo > -fuse-ld=gold > $ > $ # NOTE: bfd and gold behave differently here! > $ # gold will produce a buggy binary!! > $ cc -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o foobar -Wl,-rpath=. main.o -L. -lfoobar > -fuse-ld=bfd > /usr/bin/ld.bfd: ./libfoo.so: undefined reference to `bar' > collect2: error: ld returned 1 exit status > $ cc -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o foobar -Wl,-rpath=. main.o -L. -lfoobar > -fuse-ld=gold > $ > $ LD_LIBRARY_PATH=. ./foobar > ./foobar: symbol lookup error: ./libfoo.so: undefined symbol: bar > $ > $ # NOTE: bfd and gold behave differently here! > $ # gold will produce a binary that luckily works here, > $ # but might break inadvertently if a future libfoovar starts using > foo_bar()! > $ cc -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o foovar -Wl,-rpath=. main.o -L. -lfoovar > -fuse-ld=bfd > /usr/bin/ld.bfd: ./libfoo.so: undefined reference to `bar' > collect2: error: ld returned 1 exit status > $ cc -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--as-needed > -Wl,--no-copy-dt-needed-entries -o foovar -Wl,-rpath=. main.o -L. -lfoovar > -fuse-ld=gold > $ > $ LD_LIBRARY_PATH=. ./foovar > $ > > -- System Information: > Debian Release: bookworm/sid > APT prefers unstable > APT policy: (500, 'unstable'), (1, 'experimental') > Architecture: amd64 (x86_64) > > Kernel: Linux 5.14.0-3-amd64 (SMP w/12 CPU threads) > Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE > Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), > LANGUAGE=en_US:en > Shell: /bin/sh linked to /usr/bin/dash > Init: systemd (via /run/systemd/system) > LSM: AppArmor: enabled > > Versions of packages lld depends on: > ii lld-13 1:13.0.0-9~exp1 > > lld recommends no packages. > > lld suggests no packages. > > -- no debconf information > _______________________________________________ > Pkg-llvm-team mailing list > pkg-llvm-t...@alioth-lists.debian.net > https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-llvm-team