It looks like ARM code is being executed as Thumb. The .s file assembled as ARM because that's always the default if there are no .thumb directives and no -mthumb command-line option. (It would need some minor changes to work in Thumb anyway). However, the CPSR value when we segfault indicates that the processor is executing in Thumb state ((cpsr & 0x20) == 0x20)
We end up in the wrong state because the call originating from caml_main() in the linked program calls caml_start_program with a "bl" instruction, so there is no switch from Thumb to ARM. As a result, we execute garbage at caml_start_program. This may indicate a bug in the linker, but since none of the symbols in the startup .s file are marked as function symbols, it might be that the linker isn't absolutely required to perform the correct fixup in this case. Can you try adding a ".type <function name>, %function" directive for each function in the startup .s file? If assembling and linking the resulting object results in a working program, this suggests that the linker is sensitive to the symbol type when doing branch fixups. If so, we can work around it my adding all the required .type directives for code symbols in ocaml, but we should still raise the issue as a possible linker bug. (gdb) r Starting program: /mnt/a.out Program received signal SIGSEGV, Segmentation fault. 0x00014f94 in caml_start_program () (gdb) i r r0 0x0 0 r1 0x0 0 r2 0xb8d7 47319 r3 0x0 0 r4 0xbefff9c4 3204446660 r5 0x4 4 r6 0xbefff8c4 3204446404 r7 0x0 0 r8 0x0 0 r9 0x0 0 r10 0x4001e000 1073864704 r11 0x0 0 r12 0x400b98c1 1074501825 sp 0xbefff748 0xbefff748 lr 0x153b1 86961 pc 0x14f94 0x14f94 <caml_start_program> cpsr 0x40000030 1073741872 (gdb) -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/810402 Title: all native ocaml programs segfault on armel To manage notifications about this bug go to: https://bugs.launchpad.net/binutils-linaro/+bug/810402/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
