__gmon_start__ symbol vs. dependencies between shared libraries
Thomas Schwinge
thomas@codesourcery.com
Tue Dec 1 14:20:00 GMT 2009
There is a problem in the SH code, illustrated here in context of the
elf/order2 test. A false dependency is induced that later on prevents
dlclose from unloading shared libraries.
$ LD_DEBUG=all ./order2 --direct
[...]
27997: calling init: ./order2mod3.so
27997:
27997: symbol=__gmon_start__; lookup in file=/home/thomas/tmp/order2-sh/order2 [0]
27997: symbol=__gmon_start__; lookup in file=/lib/libdl.so.2 [0]
27997: symbol=__gmon_start__; lookup in file=/lib/libc.so.6 [0]
27997: symbol=__gmon_start__; lookup in file=/lib/ld-linux.so.2 [0]
27997: symbol=__gmon_start__; lookup in file=/home/thomas/tmp/order2-sh/order2mod1.so [0]
27997:
27997: file=/home/thomas/tmp/order2-sh/order2mod1.so [0]; needed by ./order2mod3.so [0] (relocation dependency)
27997:
27997: binding file ./order2mod3.so [0] to /home/thomas/tmp/order2-sh/order2mod1.so [0]: normal symbol `__gmon_start__'
[...]
That is, __gmon_start__ is required for order2mod3.so, and is bound to
order2mod1.so's (weak) definition. Correct would be that order2mod3.so
falls back to its *own* (weak) definition of it, unless the real
definition of this symbol is linked in through gcrt1.o.
The following tiny patch fixes this, and makes the following tests pass,
which failed previously: elf/reldep3.out, elf/neededtest.out,
elf/order2.out.
2009-12-01 Thomas Schwinge <thomas@codesourcery.com>
* sysdeps/sh/elf/initfini.c (__gmon_start__): Make it hidden.
Index: sysdeps/sh/elf/initfini.c
===================================================================
--- sysdeps/sh/elf/initfini.c (revision 267788)
+++ sysdeps/sh/elf/initfini.c (working copy)
@@ -1,5 +1,5 @@
/* Special .init and .fini section support for SH.
- Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -106,6 +106,7 @@
.section .text\n\
.align 5\n\
.weak __gmon_start__\n\
+ .hidden __gmon_start__\n\
.type __gmon_start__,@function\n\
__gmon_start__:\n\
mov.l r14,@-r15\n\
Regards,
Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20091201/213ef0c2/attachment.sig>
More information about the Libc-alpha
mailing list