bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/6022] New: local wildcard breaks versioning scripts for -rdynami


From: madcoder at debian dot org
Subject: [Bug ld/6022] New: local wildcard breaks versioning scripts for -rdynamic executables
Date: 2 Apr 2008 10:19:22 -0000

Basically, as soon as you have a version script with a { local: *; } wildcard, 
the symbols from other versions are *not* exported in executables built for 
back-linking.

Attached is a tarball with a simple test case for the issue.

Right now running make shows the following output. The issue being obviously 
that there is no `VER_2 sym_ver2` in the executable linked with a version 
script using local wildcards, OTOH a shared object obviously has the expected 
results.

Using explicit versioning from the C source using internal symbols (e.g. 
internal_sym_ver{1,2}) with asm(".symver internal_sym_ver2,sym_ver2@@VER_2") 
fails in the same way.

=====================================================
$ make
gcc -rdynamic -DMAIN -Wl,--version-script=local.ver   -O2 -Wall -Wextra -o exe 
test.c
gcc -rdynamic -DMAIN -Wl,--version-script=nolocal.ver -O2 -Wall -Wextra -o 
exe-no test.c
gcc -shared -fPIC    -Wl,--version-script=local.ver   -O2 -Wall -Wextra -o 
lib.so test.c
gcc -shared -fPIC    -Wl,--version-script=nolocal.ver -O2 -Wall -Wextra -o 
lib-no.so test.c
objdump -T exe exe-no

exe:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000      DF *UND*  00000000000001c2  GLIBC_2.2.5 
__libc_start_main
0000000000000000 g    DO *ABS*  0000000000000000  VER_1       VER_1
0000000000000000 g    DO *ABS*  0000000000000000  VER_2       VER_2
0000000000400570 g    DF .text  0000000000000002  VER_1       sym_ver1



exe-no:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000      DF *UND*  00000000000001c2  GLIBC_2.2.5 
__libc_start_main
0000000000000000 g    DO *ABS*  0000000000000000  VER_1       VER_1
0000000000000000 g    DO *ABS*  0000000000000000  VER_2       VER_2
00000000004005a0 g    DF .text  0000000000000002  VER_1       sym_ver1
00000000004005b0 g    DF .text  0000000000000002  VER_2       sym_ver2


objdump -T lib.so lib-no.so

lib.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000418 l    d  .init  0000000000000000              .init
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000              
_Jv_RegisterClasses
0000000000000000  w   DF *UND*  00000000000000c5  GLIBC_2.2.5 __cxa_finalize
0000000000000000 g    DO *ABS*  0000000000000000  VER_1       VER_1
0000000000000000 g    DO *ABS*  0000000000000000  VER_2       VER_2
0000000000000530 g    DF .text  0000000000000002  VER_1       sym_ver1
0000000000000540 g    DF .text  0000000000000002  VER_2       sym_ver2



lib-no.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
00000000000004f0 l    d  .init  0000000000000000              .init
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000              
_Jv_RegisterClasses
0000000000000000  w   DF *UND*  00000000000000c5  GLIBC_2.2.5 __cxa_finalize
0000000000200910 g    D  *ABS*  0000000000000000  Base        _end
0000000000000000 g    DO *ABS*  0000000000000000  VER_1       VER_1
0000000000200900 g    D  *ABS*  0000000000000000  Base        _edata
0000000000000000 g    DO *ABS*  0000000000000000  VER_2       VER_2
0000000000200900 g    D  *ABS*  0000000000000000  Base        __bss_start
0000000000000610 g    DF .text  0000000000000002  VER_1       sym_ver1
00000000000004f0 g    DF .init  0000000000000000  Base        _init
0000000000000668 g    DF .fini  0000000000000000  Base        _fini
0000000000000620 g    DF .text  0000000000000002  VER_2       sym_ver2
=====================================================

ld --version
GNU ld (GNU Binutils for Debian) 2.18.0.20080103

-- 
           Summary: local wildcard breaks versioning scripts for -rdynamic
                    executables
           Product: binutils
           Version: 2.18
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
        AssignedTo: unassigned at sources dot redhat dot com
        ReportedBy: madcoder at debian dot org
                CC: bug-binutils at gnu dot org


http://sourceware.org/bugzilla/show_bug.cgi?id=6022

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]