RISC-V: Use new linker emulations for glibc ABI.

Message ID 20180504214523.11936-1-jimw@sifive.com
State New
Headers show
Series
  • RISC-V: Use new linker emulations for glibc ABI.
Related show

Commit Message

Jim Wilson May 4, 2018, 9:45 p.m.
I've submitted a binutils patch that adds some new linker emulations to fix
a linker problem with library paths.  The rv64/lp64d linker looks in /lib64
when glibc says it should look in /lib64/lp64d.  To make the binutils patch
work, I had to add 4 new emulations because we have 6 ABIs.  This patch
modifies the compiler to use the new linker emulations in the linux port.  This
was done in a backwards compatible way, so the linker still looks in the
original dir after the ABI specific dir, and I didn't change the emulation
names for the default lp64d and ilp32d ABIs.

This was tested with riscv{32,64}-{elf,linux} builds and tests.  There were
no regressions.

This will go in after the binutils patch goes in.

Jim

	gcc/
	* config/riscv/linux.h (MUSL_ABI_SUFFIX): Delete unnecessary backslash.
	(LD_EMUL_SUFFIX): New.
---
 gcc/config/riscv/linux.h | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

-- 
2.14.1

Comments

Jim Wilson May 8, 2018, 9:32 p.m. | #1
On Fri, May 4, 2018 at 2:45 PM, Jim Wilson <jimw@sifive.com> wrote:
> I've submitted a binutils patch that adds some new linker emulations to fix

> a linker problem with library paths.  The rv64/lp64d linker looks in /lib64

> when glibc says it should look in /lib64/lp64d.  To make the binutils patch

> work, I had to add 4 new emulations because we have 6 ABIs.  This patch

> modifies the compiler to use the new linker emulations in the linux port.  This

> was done in a backwards compatible way, so the linker still looks in the

> original dir after the ABI specific dir, and I didn't change the emulation

> names for the default lp64d and ilp32d ABIs.


Committed, with a corrected ChangeLog entry.

        * config/riscv/linux.h (MUSL_ABI_SUFFIX): Delete unnecessary backslash.
        (LD_EMUL_SUFFIX): New.
        (LINK_SPEC): Use it.

Jim

Patch

diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h
index aa8a28d5d31..85561846dad 100644
--- a/gcc/config/riscv/linux.h
+++ b/gcc/config/riscv/linux.h
@@ -30,7 +30,7 @@  along with GCC; see the file COPYING3.  If not see
   "%{mabi=ilp32d:}" \
   "%{mabi=lp64:-sf}" \
   "%{mabi=lp64f:-sp}" \
-  "%{mabi=lp64d:}" \
+  "%{mabi=lp64d:}"
 
 #undef MUSL_DYNAMIC_LINKER
 #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1"
@@ -49,8 +49,16 @@  along with GCC; see the file COPYING3.  If not see
 
 #define CPP_SPEC "%{pthread:-D_REENTRANT}"
 
+#define LD_EMUL_SUFFIX \
+  "%{mabi=lp64d:}" \
+  "%{mabi=lp64f:_lp64f}" \
+  "%{mabi=lp64:_lp64}" \
+  "%{mabi=ilp32d:}" \
+  "%{mabi=ilp32f:_ilp32f}" \
+  "%{mabi=ilp32:_ilp32}"
+
 #define LINK_SPEC "\
--melf" XLEN_SPEC "lriscv \
+-melf" XLEN_SPEC "lriscv" LD_EMUL_SUFFIX " \
 %{mno-relax:--no-relax} \
 %{shared} \
   %{!shared: \