Binary incompatibility between RH6.1 and potato on Alpha
Hi,
I'm sending this to the list (and to Chris who builds our glibc packages)
instead of reporting it as a bug against libc6.1 because I am not really
sure we are in the wrong here.
Basically, the problem is that binaries compiled on potato cannot be run on
Red Hat 6.1 for Alpha (though the opposite is not true, thankfully). It's
the old __register_frame_info problem from glibc2.0 days come back to haunt
us. :(
This program:
int main() { printf("foo!\n"); return 0; }
when compiled on Red Hat 6.1, produces this nm output:
[dhd@doppelbock dhd]$ nm test
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
00000001201005c0 ? _DYNAMIC
0000000120100568 ? _GLOBAL_OFFSET_TABLE_
0000000120000504 R _IO_stdin_used
0000000120100530 ? _PROCEDURE_LINKAGE_TABLE_
0000000120100518 ? __CTOR_END__
0000000120100510 ? __CTOR_LIST__
0000000120100528 ? __DTOR_END__
0000000120100520 ? __DTOR_LIST__
0000000120100700 A __bss_start
0000000120000460 t __do_global_ctors_aux
00000001200003c0 t __do_global_dtors_aux
00000001200004a0 W __gmon_start__
U __libc_start_main@@GLIBC_2.0
0000000120000380 W __start
0000000120100700 A _edata
0000000120100700 A _end
00000001200004c0 A _etext
00000001200004c0 ? _fini
0000000120000320 ? _init
0000000120000380 T _start
0000000120000400 T main
U printf@@GLIBC_2.0
Whereas on Debian:
dhd@blood-axp:~$ nm test
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000000000000 a *ABS*
0000000120100768 ? _DYNAMIC
00000001201006e0 ? _GLOBAL_OFFSET_TABLE_
000000012000066c R _IO_stdin_used
00000001201006a8 ? _PROCEDURE_LINKAGE_TABLE_
0000000120100690 ? __CTOR_END__
0000000120100688 ? __CTOR_LIST__
00000001201006a0 ? __DTOR_END__
0000000120100698 ? __DTOR_LIST__
0000000120100680 ? __EH_FRAME_BEGIN__
0000000120100680 ? __FRAME_END__
00000001201008a8 A __bss_start
w __deregister_frame_info@@GLIBC_2.0
00000001200004e0 t __do_frame_setup
0000000120000518 t __do_frame_takedown
00000001200005c0 t __do_global_ctors_aux
00000001200004a0 t __do_global_dtors_aux
0000000120000600 W __gmon_start__
U __libc_start_main@@GLIBC_2.0
w __register_frame_info@@GLIBC_2.0
0000000120000460 W __start
00000001201008a8 A _edata
00000001201008d8 A _end
0000000120000620 A _etext
0000000120000620 ? _fini
0000000120000400 ? _init
0000000120000460 T _start
0000000120000560 T main
U printf@@GLIBC_2.0
Predictably, trying to run the Debian-built program on Red Hat does this:
[dhd@doppelbock dhd]$ ./test
./test: error in loading shared libraries: ./test: symbol __register_frame_info, version GLIBC_2.0 not defined in file libc.so.6.1 with link time reference
Could the cause of this be that our glibc is built with gcc 2.96 snapshots,
whereas theirs is built with egcs 1.1.2? I say that they may be in the
wrong, because the glibc2.1 FAQ indicates that glibc2.1 is suppposed to
provide the exception handling symbols in order to prevent other libraries
from providing them.
Also, on i386, both Debian and Red Hat's glibc2.1 seem to be providing them,
since the same program does show __register_frame_info@@GLIBC_2.0 and
company in its 'nm' output (well, it's listed as 'U' on Red Hat, and 'w' on
Debian, but that's not really important since it's a dependency either way).
Reply to: