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