Noticed while testing with LLVM 15, but it affects plain -current as well. If I take a binary that was linked with ld.bfd and strip it (i.e. this is now using llvm-strip), it breaks the output file in such a way that it cannot be executed:
: i386.p; cat a.c #include <stdio.h> int main() { printf("test\n"); } : i386.p; make a LDFLAGS=-fuse-ld=/usr/bin/ld.bfd cc -O2 -pipe -fuse-ld=/usr/bin/ld.bfd -o a a.c : i386.p; strip -o a.stripped a : i386.p; ./a test : i386.p; ./a.stripped Abort trap Seems that the SIGABRT is from kern_exec's sys_execve -> exec_process_vmcmds() failing. Binaries from the above available at https://junkpile.org/a https://junkpile.org/a.stripped Does anyone have an idea what might be wrong please? (The reason why the machine is even doing this in the first place is that ports/lang/gcc isn't building on i386 with llvm 15 and ld.lld, which is another story. Still, it seems suboptimal the llvm-strip is breaking this binary. For now I'm using unstripped ld.bfd-generated gcc binaries to workaround these two issues). : i386.p; readelf -S a There are 26 section headers, starting at offset 0x20d0: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .init PROGBITS 00000220 000220 00000d 00 AX 0 0 16 [ 2] .plt PROGBITS 00000230 000230 000060 04 AX 0 0 4 [ 3] .text PROGBITS 00000290 000290 0002e8 00 AX 0 0 16 [ 4] .fini PROGBITS 00000580 000580 00000d 00 AX 0 0 16 [ 5] .interp PROGBITS 20000000 001000 000013 00 A 0 0 1 [ 6] .note.openbsd.ide NOTE 20000014 001014 000018 00 A 0 0 4 [ 7] .hash HASH 2000002c 00102c 000070 04 A 9 0 4 [ 8] .gnu.hash GNU_HASH 2000009c 00109c 000034 04 A 9 0 4 [ 9] .dynsym DYNSYM 200000d0 0010d0 000170 10 A 10 13 4 [10] .dynstr STRTAB 20000240 001240 000066 00 A 0 0 1 [11] .rel.dyn REL 200002a8 0012a8 000010 08 A 9 0 4 [12] .rel.plt REL 200002b8 0012b8 000028 08 A 9 2 4 [13] .rodata PROGBITS 200002e0 0012e0 000005 01 AMS 0 0 1 [14] .eh_frame_hdr PROGBITS 200002e8 0012e8 000034 00 A 0 0 4 [15] .eh_frame PROGBITS 2000031c 00131c 0000cc 00 A 0 0 4 [16] .openbsd.randomda PROGBITS 20001f18 001f18 000004 00 WA 0 0 4 [17] .jcr PROGBITS 20001f1c 001f1c 000004 00 WA 0 0 4 [18] .dynamic DYNAMIC 20001f20 001f20 0000a8 08 WA 10 0 4 [19] .ctors PROGBITS 20001fc8 001fc8 000008 00 WA 0 0 4 [20] .dtors PROGBITS 20001fd0 001fd0 000008 00 WA 0 0 4 [21] .got PROGBITS 20001fd8 001fd8 000028 04 WA 0 0 4 [22] .bss NOBITS 20002000 002000 000030 00 WA 0 0 4 [23] .shstrtab STRTAB 00000000 002000 0000cf 00 0 0 1 [24] .symtab SYMTAB 00000000 0024e0 000350 10 25 35 4 [25] .strtab STRTAB 00000000 002830 000153 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) : i386.p; readelf -S a.stripped There are 24 section headers, starting at offset 0x10c0: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .init PROGBITS 00000220 000220 00000d 00 AX 0 0 16 [ 2] .plt PROGBITS 00000230 000230 000060 04 AX 0 0 4 [ 3] .text PROGBITS 00000290 000290 0002e8 00 AX 0 0 16 [ 4] .fini PROGBITS 00000580 000580 00000d 00 AX 0 0 16 [ 5] .interp PROGBITS 20000000 00058d 000013 00 A 0 0 1 [ 6] .note.openbsd.ide NOTE 20000014 0005a1 000018 00 A 0 0 4 [ 7] .hash HASH 2000002c 0005b9 000070 04 A 9 0 4 [ 8] .gnu.hash GNU_HASH 2000009c 000629 000034 04 A 9 0 4 [ 9] .dynsym DYNSYM 200000d0 00065d 000170 10 A 10 13 4 [10] .dynstr STRTAB 20000240 0007cd 000066 00 A 0 0 1 [11] .rel.dyn REL 200002a8 000835 000010 08 A 9 0 4 [12] .rel.plt REL 200002b8 000845 000028 08 A 9 2 4 [13] .rodata PROGBITS 200002e0 00086d 000005 01 AMS 0 0 1 [14] .eh_frame_hdr PROGBITS 200002e8 000875 000034 00 A 0 0 4 [15] .eh_frame PROGBITS 2000031c 0008a9 0000cc 00 A 0 0 4 [16] .openbsd.randomda PROGBITS 20001f18 000f18 000004 00 WA 0 0 4 [17] .jcr PROGBITS 20001f1c 000f1c 000004 00 WA 0 0 4 [18] .dynamic DYNAMIC 20001f20 000f20 0000a8 08 WA 10 0 4 [19] .ctors PROGBITS 20001fc8 000fc8 000008 00 WA 0 0 4 [20] .dtors PROGBITS 20001fd0 000fd0 000008 00 WA 0 0 4 [21] .got PROGBITS 20001fd8 000fd8 000028 04 WA 0 0 4 [22] .bss NOBITS 20002000 001000 000030 00 WA 0 0 4 [23] .shstrtab STRTAB 00000000 001000 0000bf 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific)