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

Schneider, Bennett Bennett.Schneider@tektronix.com
Mon Oct 10 13:40:00 GMT 2011


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:
03888: 1: symbol=_ZNSi6ignoreEv;  lookup in file=a.out  [ ELF ]
03888: 1: symbol=_ZNSi6ignoreEv;  lookup in file=/home/server/lib/libstdc++.so.6  [ ELF ]
03888: 1: symbol=_ZNSi6ignoreEv;  hash index=3055;  version=32770;  skipping symbol with GNU version hidden bit set in file=/home/server/lib/libstdc++.so.6
03888: 1: symbol=_ZNSi6ignoreEv;  lookup in file=/lib/libm.so.2  [ ELF ]
03888: 1: symbol=_ZNSi6ignoreEv;  lookup in file=/home/server/lib/libgcc_s.so.1  [ ELF ]
03888: 1: symbol=_ZNSi6ignoreEv;  lookup in file=/lib/libc.so.1  [ ELF ]
03888: 1: 
03888: 1: 
03888: 1: libc.so.1: a.out: fatal: relocation error: file a.out: symbol _ZNSi6ignoreEv: referenced symbol not found

Using elfdump on libstdc++ shows that certain symbols seem to have extra bits set that are now being interpreted as hidden.  The previous output was for the ver to be 32770 (0x8002).  Gcc is being built with gas and gnu ld, and this seems to occur on both sparc and x86 distributions.  Building with sun ld does not show this problem.  It seems like these might be using the BSF_DYNAMIC flag, but I'm not familiar enough with the binutils source to confirm this.

Output from elfdump:
     index    value      size      type bind oth ver shndx          name
      [72]  0x00048ca4 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv
     [384]  0x0004893c 0x0000001f  FUNC GLOB  D   2H .text          _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw
     [647]  0x00048bf8 0x00000035  FUNC GLOB  D   2H .text          _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
     [887]  0x0004895c 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv
     [935]  0x00048b90 0x00000042  FUNC GLOB  D   2H .text          _ZNSs7_M_moveEPcPKcj
     [958]  0x00048998 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
     [990]  0x00048aa8 0x00000040  FUNC GLOB  D   2H .text          _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw
    [1154]  0x00048a6c 0x00000039  FUNC GLOB  D   2H .text          _ZNKSs15_M_check_lengthEjjPKc
    [1331]  0x000489d4 0x0000002f  FUNC GLOB  D   2H .text          _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj
    [1406]  0x00048ae8 0x00000042  FUNC GLOB  D   2H .text          _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj
    [1520]  0x00048f48 0x000001fe  FUNC GLOB  D   2H .text          _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi
    [1604]  0x00048ce0 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv
    [1615]  0x00048c30 0x00000037  FUNC GLOB  D   2H .text          _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv
    [1831]  0x00048b2c 0x00000042  FUNC GLOB  D   2H .text          _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj
    [2080]  0x00048828 0x00000010  FUNC GLOB  D   2H .text          _ZNSt11char_traitsIwE2eqERKwS2_
    [2185]  0x00048a04 0x0000002c  FUNC GLOB  D   2H .text          _ZNSs4_Rep26_M_set_length_and_sharableEj
    [2342]  0x00048e48 0x00000100  FUNC GLOB  D   2H .text          _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv
    [2397]  0x00048b70 0x00000020  FUNC GLOB  D   2H .text          _ZNSs9_M_assignEPcjc
    [2400]  0x00049148 0x000001fa  FUNC GLOB  D   2H .text          _ZNSi6ignoreEi
    [2617]  0x00048818 0x00000010  FUNC GLOB  D   2H .text          _ZNSt11char_traitsIcE2eqERKcS2_
    [2798]  0x00048c68 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv
    [3055]  0x00048d58 0x000000f0  FUNC GLOB  D   2H .text          _ZNSi6ignoreEv
    [3326]  0x00048a30 0x00000039  FUNC GLOB  D   2H .text          _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc
    [3336]  0x00048d1c 0x0000003a  FUNC GLOB  D   2H .text          _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv
    [3381]  0x00048bd4 0x00000023  FUNC GLOB  D   2H .text          _ZNSs7_M_copyEPcPKcj
    [3447]  0x00048920 0x0000001b  FUNC GLOB  D   2H .text          _ZNKSs11_M_disjunctEPKc

Has anyone seen similar behavior?  Alternately, can anyone provide a reason why some symbols are showing this version and if this behavior is correct?  I've searched both the bug listings and this mailing list, but haven't seen anything related.

Thanks,
Bennett Schneider



More information about the Binutils mailing list