bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/26551] A definition referenced by an unneeded (--as-needed) shar


From: i at maskray dot me
Subject: [Bug ld/26551] A definition referenced by an unneeded (--as-needed) shared object should be exported
Date: Wed, 02 Sep 2020 04:12:27 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=26551

--- Comment #7 from Fangrui Song <i at maskray dot me> ---
(In reply to H.J. Lu from comment #6)
> (In reply to Fangrui Song from comment #5)
> > ld.bfd a.o --as-needed b.so
> > 
> > Let a.o define a function which will be called by b.so via dlopen. In this
> > case, ld should export the function. This justification may look weak but I
> > think it is moving toward the right direction if we consider that GNU ld
> > from binutils 2.22 defaulted to --no-copy-dt-needed-entries (doing less
> > shared object traversal for more proper dependency tracking and avoiding
> > unneeded work).
> 
> LD creates dynamic section only if dynamic relocation is needed.
> For this test, since no dynamic relocation is needed, there is no
> dynamic section.  Since there is no dynamic section, there is no
> dynamic symbol table.



>a.c <<e cat
 #include <dlfcn.h>
 int foo() { return 42; }
 int main() {
   void *h = dlopen("./b.so", RTLD_LAZY);
   int (*bar)(void) = dlsym(h, "bar");
   return bar();
 }
e
>b.c <<e cat
 int foo();
 int bar() { return foo(); }
e

cc -fuse-ld=bfd -shared -fPIC b.c -ldl -o b.so
cc -fuse-ld=bfd -pie -fPIE a.c -Wl,--push-state -Wl,--as-needed ./b.so
-Wl,--pop-state -ldl

./a.out => symbol lookup error: ./b.so: undefined symbol: foo

-fuse-ld=gold or -fuse-ld=lld is good.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]