This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug go/56431] -lpthread should be added to -lgo
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 27 Feb 2013 19:36:07 +0000
- Subject: [Bug go/56431] -lpthread should be added to -lgo
- Auto-submitted: auto-generated
- References: <bug-56431-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56431
--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> 2013-02-27 19:36:07 UTC ---
(In reply to comment #3)
> Object OBJ has a weak reference to SYM.
>
> OBJ is linked against shared library S1. S1 does not define SYM.
>
> S1 happens to be linked against shared library S2. S2 does define SYM.
>
> That will work fine: at runtime OBJ will see that SYM is defined, because S1
> brings in S2.
>
This isn't what happens. Since gold doesn't check S2 at link-time, it
resolves SYM to 0:
[hjl@gnu-6 pr15149]$ cat foo.c
#include <stdio.h>
extern int xxx () __attribute__((weak));
int
foo ()
{
if (&xxx)
return xxx ();
return 1;
}
int
main ()
{
printf ("xxx: %d\n", foo ());
return 0;
}
[hjl@gnu-6 pr15149]$ cat xxx.c
int
xxx ()
{
return 0;
}
[hjl@gnu-6 pr15149]$ cat yyy.c
/* Dummy */
[hjl@gnu-6 pr15149]$ make y
gcc -Wl,--no-copy-dt-needed-entries -c -o foo.o foo.c
gcc -Wl,--no-copy-dt-needed-entries -shared -fPIC -o libxxx.so xxx.c
gcc -Wl,--no-copy-dt-needed-entries -shared -fPIC -o libyyy.so yyy.c libxxx.so
-Wl,-rpath,.
gcc -Wl,--no-copy-dt-needed-entries -fuse-ld=gold -B./ -Wl,--no-as-needed -o y
foo.o libyyy.so -Wl,-rpath,.
[hjl@gnu-6 pr15149]$ ./y
xxx: 1
[hjl@gnu-6 pr15149]$
38: 0000000000000000 0 NOTYPE WEAK DEFAULT UND xxx
If gold sees SYM defined in S2, it will create a R_X86_64_JUMP_SLO relocation,
set xxx value to the PLT entry and resolve xxx to the PLT entry.
000000401ad0 000700000007 R_X86_64_JUMP_SLO 0000000000400570 xxx + 0
7: 0000000000400570 0 FUNC WEAK DEFAULT UND xxx
That is the difference between seeing SYM in S2 or not.