Bug#351629: Still in 2.3.6.ds1-10 with sarge binutils
Hi, I don't know if I can reopen this as a normal user, but I can still reproduce this with libc6-dev from etch and binutils from sarge, as the initial report stated. Unless the conflict between newer binutils and g++-3.3 has been fixed, that would seem to still leave a problem.
I'm using the original test case:
root@transwarp:/file/devel/test# gcc-3.3 -shared -o libtest.so test.c
/usr/lib/libc_nonshared.a(atexit.oS)(.text.__i686.get_pc_thunk.bx+0x0): In function `__i686.get_pc_thunk.bx':
: multiple definition of `__i686.get_pc_thunk.bx'
/usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginS.o(.gnu.linkonce.t.__i686.get_pc_thunk.bx+0x0): first defined here
collect2: ld returned 1 exit status
root@transwarp:/file/devel/test# dpkg -l libc6-dev libc6 gcc-3.3 gcc-3.4 binutils
ii libc6-dev 2.3.6.ds1-10 GNU C Library: Development Libraries and Header Files
ii libc6 2.3.6.ds1-10 GNU C Library: Shared libraries
ii gcc-3.3 3.3.5-13 The GNU C compiler
ii gcc-3.4 3.4.3-13sarge1 The GNU C compiler
ii binutils 2.15-6 The GNU assembler, linker and binary utilities
Aside from upgrading binutils, I found that the following combinations compiled and linked without errors:
- gcc-3.4 (with any version of libc6-dev)
- gcc-3.3 after replacing /usr/lib/libc_nonshared.a with the version from sarge's libc6-dev
- gcc-3.3 after replacing /usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginS.o and crtendS.o with the versions from gcc-3.4 (located in /usr/lib/gcc/i486-linux/3.4.4/)
This seems to stem from differences in the functions listed in the error message in the files in question; for example see
root@transwarp:/file/devel/test# egrep -ao '[[:print:]]*(thunk|atexit)[[:print:]]*' /usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginS.o
.gnu.linkonce.t.__i686.get_pc_thunk.bx
__i686.get_pc_thunk.bx
root@transwarp:/file/devel/test# egrep -ao '[[:print:]]*(thunk|atexit)[[:print:]]*' /usr/lib/gcc/i486-linux/3.4.4/crtbeginS.o
root@transwarp:/file/devel/test# egrep -ao '[[:print:]]*(thunk|atexit)[[:print:]]*' /usr/lib/libc_nonshared.a |grep -vx __i686.get_pc_thunk.bx |head -n3
atexit
.text.__i686.get_pc_thunk.bx
atexit.oS/ 1168353356 0 0 100644 1088 `
root@transwarp:/file/devel/test# egrep -ao '[[:print:]]*(thunk|atexit)[[:print:]]*' oldlibc_dev/usr/lib/libc_nonshared.a |grep -vx __i686.get_pc_thunk.bx |head -n3
atexit
.gnu.linkonce.t.__i686.get_pc_thunk.bx
atexit.oS/ 1164718190 0 0 100644 1028 `
So my questions are:
1) Why were these changes made to libc_nonshared.a (in two different minor libc6-dev uploads, it seems, including an NMU), and could they be reverted again for compatibility with gcc-3.3; and
2) Is there in the mean time any problem with using the older sarge version of libc6-dev with a current libc6? The dependency is looser between libstdc++6-dev and libstdc++6, for instance, allowing any later version of the latter to be used. Is there a specific reason that the libc6-dev->libc6 dependency is an equality?
Thanks,
Michael
Reply to: