[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: binutils-gold and symbols files



Michael Biebl wrote:
> Apart from the addition end@base symbol, binutils-gold also doesn't seem to
> honor the -export-symbols-regex linker flag, which is most likely the cause
>  for the other additional symbols I see.
> 
> Is this a known issue? If not, could you please forward that to upstream.
I checked it and it seems to work with:

echo 'void testme(unsigned int t){}int main(){return 0;}' > test.c && \
echo "{ global:\nmain;\nlocal: *; };" > test.ver && \
gcc test.c -o test -Wl,-version-script,test.ver && \
readelf -s test|grep testme |grep GLOBAL

This should make testme local.... and it works.

-version-script is what does the work and -export-symbols-regex is just an 
option of libtool. I would guess that libtool-stuff is the problem here..... I 
looked through the code in dbus-glib and found the -version-script stuff in 
the configure script. It is enabled and disabled using 
supports_anon_versioning. The script to test for that support is:

    supports_anon_versioning=no
    case `$LD -v 2>&1` in
      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
      *\ 2.11.*) ;; # other 2.11 versions
      *) supports_anon_versioning=yes ;;
    esac

The output of `ld -v 2` is "GNU gold (GNU Binutils for Debian 2.20) 1.9". So 
it will catch the 1.9 here and just say "hey, i am sure that you are evil".... 
which is of course wrong. So auto* stuff must be updated here. I will create a 
bug for libtool.

Best regards,
	Peter


Reply to: