Both targets #define DL_RO_DYN_SECTION 1, which means that glibc won't adjust .dynamic section on start-up. We must do it ourselves in section_elf_shared, see the version paths for OpenBSD and NetBSD for how. --- strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); ---
Confirmed RISCV works, however the SiFive developers think that this behaviour was accidentally copied from MIPS, rather than something that is part of the documented ABI. Until I hear back, that means there's at least one target that definitely requires special handling.
Fixed in https://github.com/dlang/druntime/pull/3353