|
Message-ID: <20150501101016.GE863@port70.net> Date: Fri, 1 May 2015 12:10:16 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: musl@...ts.openwall.com Subject: Re: building musl libc.so with gcc -flto * Andre McCurdy <armccurdy@...il.com> [2015-04-30 22:48:09 -0700]: > I'm able to reproduce the problem I saw previously with the latest > musl git version. Behaviour is that some binaries dynamically linked > with gold (notably busybox) seem to run well but most binaries > segfault at startup. > > I'm using gcc 4.9.2 and binutils 2.25, but I should also mention that > I'm using OpenEmbedded to build the toolchain and musl support in OE > is still quite experimental... > > Below is a link to a base64 encoded tar file containing two > dynamically linked "hello world" x86 binaries. Both were created using > the same OE toolchain (the only difference was the -fuse-ld=XXX option > used). "hello.bfd" runs well, "hello.gold" segfaults. Hopefully they > can give some clues about what's happening. > > http://pastebin.com/raw.php?i=RKJBqAg1 $ nm -D hello.gold w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable w _Jv_RegisterClasses 08049670 A __bss_start w __deregister_frame_info U __libc_start_main w __register_frame_info 08049670 A _edata 08049690 A _end U printf $ nm -D hello.bfd 08049564 B __bss_start U __libc_start_main 08049564 D _edata 08049584 B _end U printf i'm not sure where gold expects __register_frame_info to be defined.. the call chain is __dls3 -> do_init_fini -> _init -> frame_dummy -> __register_frame_info@plt -> 0 objdump: 0804846e <frame_dummy>: 804846e: 55 push %ebp 804846f: b8 70 83 04 08 mov $0x8048370,%eax 8048474: 89 e5 mov %esp,%ebp 8048476: 83 ec 08 sub $0x8,%esp 8048479: 85 c0 test %eax,%eax 804847b: 74 14 je 8048491 <frame_dummy+0x23> 804847d: 50 push %eax 804847e: 50 push %eax 804847f: 68 78 96 04 08 push $0x8049678 8048484: 68 18 85 04 08 push $0x8048518 8048489: e8 e2 fe ff ff call 8048370 <__register_frame_info@plt> ... 08048370 <__register_frame_info@plt>: 8048370: ff 25 50 96 04 08 jmp *0x8049650 ... GOT at this point: 0x08049648: 0xf7f92263 (__libc_start_main) 0x0804964c: 0x00000000 (should be __deregister_frame_info?) 0x08049650: 0x00000000 (should be __register_frame_info?) 0x08049654: 0xf7fbedeb (printf) readelf says: Relocation section '.rel.plt' at offset 0x308 contains 4 entries: Offset Info Type Sym.Value Sym. Name 08049648 00000107 R_386_JUMP_SLOT 00000000 __libc_start_main 0804964c 00000907 R_386_JUMP_SLOT 08048360 __deregister_frame_inf 08049650 00000607 R_386_JUMP_SLOT 08048370 __register_frame_info 08049654 00000507 R_386_JUMP_SLOT 00000000 printf Symbol table '.dynsym' contains 11 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main 2: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab 3: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable 4: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses 5: 00000000 0 FUNC GLOBAL DEFAULT UND printf 6: 08048370 0 FUNC WEAK DEFAULT UND __register_frame_info 7: 08049690 0 NOTYPE GLOBAL DEFAULT ABS _end 8: 08049670 0 NOTYPE GLOBAL DEFAULT ABS _edata 9: 08048360 0 FUNC WEAK DEFAULT UND __deregister_frame_info 10: 08049670 0 NOTYPE GLOBAL DEFAULT ABS __bss_start Symbol table '.symtab' contains 39 entries: Num: Value Size Type Bind Vis Ndx Name ... 32: 00000000 0 FUNC WEAK DEFAULT UND __deregister_frame_info 33: 00000000 0 FUNC WEAK DEFAULT UND __register_frame_info
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.