This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: Undefined weak symbol bug
On Tue, Mar 25, 2003 at 02:20:00PM -0800, Roland McGrath wrote:
> Can you formulate this as a complete test case we can add to elf/?
>
Here it is.
H.J.
----
2003-03-25 H.J. Lu <hjl at gnu dot org>
* elf/Makefile (tests): Add tst-weak1.
(modules-names): Add tst-weak1mod1.
($(objpfx)tst-weak1): New target.
($(objpfx)tst-weak1.out): Likewise.
* elf/tst-weak1.c: New file.
* elf/tst-weak1mod1.c: Likewise.
--- elf/Makefile.weak-test 2003-03-19 08:15:39.000000000 -0800
+++ elf/Makefile 2003-03-25 15:45:47.000000000 -0800
@@ -142,7 +142,8 @@ tests += loadtest restest1 preloadtest l
$(tests-nodlopen-$(have-z-nodlopen)) neededtest neededtest2 \
neededtest3 neededtest4 unload2 lateglobal initfirst global \
restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
- circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8
+ circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \
+ tst-weak1
# reldep9
test-srcs = tst-pathopt
tests-vis-yes = vismain
@@ -167,7 +168,8 @@ modules-names = testobj1 testobj2 testob
circlemod1 circlemod1a circlemod2 circlemod2a \
circlemod3 circlemod3a \
reldep8mod1 reldep8mod2 reldep8mod3 \
- reldep9mod1 reldep9mod2 reldep9mod3
+ reldep9mod1 reldep9mod2 reldep9mod3 \
+ tst-weak1mod1
ifeq (yes,$(have-initfini-array))
modules-names += tst-array2dep
endif
@@ -605,6 +607,9 @@ $(objpfx)tst-array4.out: $(objpfx)tst-ar
$< > $@
cmp $@ tst-array4.exp > /dev/null
+$(objpfx)tst-weak1: $(objpfx)tst-weak1mod1.so
+$(objpfx)tst-weak1.out: $(objpfx)tst-weak1
+
check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
$(objpfx)check-textrel: check-textrel.c
$(native-compile)
--- elf/tst-weak1.c.weak-test 2003-03-25 15:51:42.000000000 -0800
+++ elf/tst-weak1.c 2003-03-25 16:01:07.000000000 -0800
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+extern int main_hidden __attribute__ ((weak));
+asm (".hidden main_hidden");
+
+int shared_hidden = 1;
+
+extern int * shared_hidden_p (void);
+
+int
+main (void)
+{
+ int ret = 0;
+
+ ret += &main_hidden != NULL;
+ ret += shared_hidden_p () != NULL;
+ printf ("&main_hidden: %p should be (nil).\n", &main_hidden);
+ printf ("&shlib_hidden: %p should be (nil).\n", shared_hidden_p ());
+ return ret;
+}
--- elf/tst-weak1mod1.c.weak-test 2003-03-25 15:51:20.000000000 -0800
+++ elf/tst-weak1mod1.c 2003-03-25 15:56:45.000000000 -0800
@@ -0,0 +1,10 @@
+extern int shared_hidden __attribute__ ((weak));
+asm (".hidden shared_hidden");
+
+int main_hidden = 1;
+
+int *
+shared_hidden_p (void)
+{
+ return &shared_hidden;
+}