https://issues.dlang.org/show_bug.cgi?id=14663
--- Comment #4 from Martin Nowak <[email protected]> --- It dies in the runtime linker itself before _start and before library initialization. It's hard to find out b/c the runtime linker neither has symbols nor debug information. From a ktrace/utrace dump it seems that it happens shortly after relocation the symbols in liblinkdep.so https://github.com/freebsd/freebsd/blob/d16fdde7e16c8c6a2133a2385b83ce0955e576b1/libexec/rtld-elf/rtld.c#L2622. Seems there is something wrong with linking segments. When linked with clang it's: Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x00000000000006ec 0x00000000000006ec R E 200000 LOAD 0x00000000000006f0 0x00000000002006f0 0x00000000002006f0 0x00000000000002a8 0x00000000000002a8 RW 200000 DYNAMIC 0x0000000000000760 0x0000000000200760 0x0000000000200760 0x00000000000001d0 0x00000000000001d0 RW 8 GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 RW 8 Section to Segment mapping: Segment Sections... 00 .hash .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .eh_frame 01 .ctors .dtors .jcr .data.rel.ro .dynamic .got .got.plt .data .minfo 02 .dynamic 03 When linked with gcc it becomes: Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000200aa8 0x0000000000200ac0 RWE 200000 DYNAMIC 0x0000000000200830 0x0000000000200830 0x0000000000200830 0x0000000000000210 0x0000000000000210 RW 8 GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 RW 10 Section to Segment mapping: Segment Sections... 00 .hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .eh_frame .init_array .fini_array .ctors .dtors .jcr .data.rel.ro .dynamic .got .got.plt .data .minfo .bss 01 .dynamic 02 For some reason the readonly segment get's merged with the writeable segment. We had something similar already as issue 13117. --
