libgcj missing symbol __data_start
Andreas Krebbel
krebbel@linux.vnet.ibm.com
Wed Aug 26 17:49:00 GMT 2009
> Hard to say; I have no idea why s/390 should be any different from any
> of the other systems. We have a s/390 here at Red Hat but it might be
> easier if there's a way I could log onto your system and have a look.
No. It is unfortunately impossible to give you access to one of our
systems for various reasons. But I tried to track it down:
On x86_64 the __data_start is declared weak:
[boehm-gc]$ readelf -s .libs/libgcjgc_convenience.a | grep __data_start
80: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __data_start
On s390x the symbol is declared global. The difference seem to come from
boehm-gc/include/private/gcconfig.h which uses pragma weak for x86 but
not for S/390.
Since the symbol is weak on x86 the __data_start symbol missing in the
main executable does not lead to an error.
The following patch fixes all the failures on s390x. But I'm not sure if
that's the right thing to do:
Index: boehm-gc/include/private/gcconfig.h
===================================================================
*** boehm-gc/include/private/gcconfig.h.orig 2008-12-02
14:08:42.000000000 +0100
--- boehm-gc/include/private/gcconfig.h 2009-08-26 17:07:12.000000000 +0200
***************
*** 1826,1831 ****
--- 1826,1832 ----
# define OS_TYPE "LINUX"
# define LINUX_STACKBOTTOM
# define DYNAMIC_LOADING
+ # pragma weak __data_start
extern int __data_start[];
# define DATASTART ((ptr_t)(__data_start))
extern int _end[];
Bye,
-Andreas-
More information about the Gcc-patches
mailing list