relocation errors on solaris 10 u10 due to symbol versioning from ld

Alan Modra amodra@gmail.com
Tue Oct 11 13:53:00 GMT 2011
On Mon, Oct 10, 2011 at 06:40:20AM -0700, Schneider, Bennett wrote:
> Hi,
> After updating to solaris 10 u10, I've been seeing issues with
> libstdc++ that I believe are a result of output from the gnu linker
> (binutils 2.19).  I'm getting relocation errors when using certain
> symbols from libstdc++.  LD_DEBUG output shows that these are not
> being considered because the interpreter believes that they have the
> hidden bit set: 

They do.  From include/elf/common.h

/* This flag appears in a Versym structure.  It means that the symbol
   is hidden, and is only visible with an explicit version number.
   This is a GNU extension.  */

#define VERSYM_HIDDEN		0x8000

/* This is the mask for the rest of the Versym information.  */

#define VERSYM_VERSION		0x7fff

> Using elfdump on libstdc++ shows that certain symbols seem to have
> extra bits set that are now being interpreted as hidden.

Yup

> The previous output was for the ver to be 32770 (0x8002).

ie. your previous tools (and possibly ld.so) did not understand the
HIDDEN bit.

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list