From d9392bfa032b448839abadb523aff65b8ccb3dba Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Tue, 23 Apr 2019 22:53:12 +0000 Subject: libphobos: Add D support for RISC-V Linux 2019-04-23 Iain Buclaw * configure.tgt: Add riscv*-*-linux* as supported target. * libdruntime/gcc/sections/elf_shared.d (getDependencies): Adjust dlpi_addr on RISCV32 and RISCV64. * src/std/math.d: Add IEEE FPU control support for RISCV. From-SVN: r270522 --- libphobos/libdruntime/gcc/sections/elf_shared.d | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'libphobos/libdruntime/gcc') diff --git a/libphobos/libdruntime/gcc/sections/elf_shared.d b/libphobos/libdruntime/gcc/sections/elf_shared.d index 4cf5a23..89adcea 100644 --- a/libphobos/libdruntime/gcc/sections/elf_shared.d +++ b/libphobos/libdruntime/gcc/sections/elf_shared.d @@ -22,6 +22,9 @@ module gcc.sections.elf_shared; +version (RISCV32) version = RISCV_Any; +version (RISCV64) version = RISCV_Any; + version (CRuntime_Glibc) enum SharedELF = true; else version (CRuntime_Musl) enum SharedELF = true; else version (FreeBSD) enum SharedELF = true; @@ -723,7 +726,16 @@ version (Shared) version (CRuntime_Musl) strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate else version (linux) - strtab = cast(const(char)*)dyn.d_un.d_ptr; + { + // This might change in future glibc releases (after 2.29) as dynamic sections + // are not required to be read-only on RISC-V. This was copy & pasted from MIPS + // while upstreaming RISC-V support. Otherwise MIPS is the only arch which sets + // 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 + strtab = cast(const(char)*)dyn.d_un.d_ptr; + } else version (FreeBSD) strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate else version (NetBSD) -- cgit v1.1