From: Iain Buclaw Date: Sat, 23 Jan 2021 23:20:25 +0000 (+0100) Subject: libphobos: Fix executables segfault on mipsel architecture X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=81f928ec8e8abf1f21c5ff008c39b5d6af78f6cb;p=gcc.git libphobos: Fix executables segfault on mipsel architecture The dynamic section on MIPS is read-only, but this was not properly handled in the runtime library. The segfault only occurred for programs that linked to the shared libphobos library. libphobos/ChangeLog: PR d/98806 * libdruntime/gcc/sections/elf_shared.d (MIPS_Any): Declare version for MIPS32 and MIPS64. (getDependencies): Adjust dlpi_addr on MIPS_Any. --- diff --git a/libphobos/libdruntime/gcc/sections/elf_shared.d b/libphobos/libdruntime/gcc/sections/elf_shared.d index 9050413b261..427759a4f94 100644 --- a/libphobos/libdruntime/gcc/sections/elf_shared.d +++ b/libphobos/libdruntime/gcc/sections/elf_shared.d @@ -22,6 +22,8 @@ module gcc.sections.elf_shared; +version (MIPS32) version = MIPS_Any; +version (MIPS64) version = MIPS_Any; version (RISCV32) version = RISCV_Any; version (RISCV64) version = RISCV_Any; version (S390) version = IBMZ_Any; @@ -763,6 +765,8 @@ version (Shared) // in glibc: #define DL_RO_DYN_SECTION 1 version (RISCV_Any) strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate + else version (MIPS_Any) + strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate else strtab = cast(const(char)*)dyn.d_un.d_ptr; }