From 2f4d895197e7b137f50624bef58c9b614bf081e5 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Sat, 7 Sep 2019 00:09:21 +0000 Subject: [PATCH] RISC-V: Re-enable -msave-restore for shared libraries. This re-enables -msave-restore for shared libraries, and uses the t-slibgcc-libgcc file to get the save-restore routines included directly in shared libraries so that we don't need to indirect through the PLT to reach them, which doesn't work. gcc/ * config/riscv/riscv.c (riscv_option_override): Revert 2019-08-30 change. libgcc/ * config.host (riscv*-*-linux*): Add t-slibgcc-libgcc to tmake_file. (riscv*-*-freebsd*): Likewise. From-SVN: r275478 --- gcc/ChangeLog | 5 +++++ gcc/config/riscv/riscv.c | 10 ---------- libgcc/ChangeLog | 5 +++++ libgcc/config.host | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91069bff50a..46c1b50346e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-09-06 Jim Wilson + + * config/riscv/riscv.c (riscv_option_override): Revert 2019-08-30 + change. + 2019-09-06 Segher Boessenkool * config/rs6000/rs6000.md (unspec): Delete UNSPEC_MV_CR_OV. diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c index 1e7528f1cb9..9b16a1eb9c2 100644 --- a/gcc/config/riscv/riscv.c +++ b/gcc/config/riscv/riscv.c @@ -4636,16 +4636,6 @@ riscv_option_override (void) error ("%<-mriscv-attribute%> RISC-V ELF attribute requires GNU as 2.32" " [%<-mriscv-attribute%>]"); #endif - - /* The save-restore routines use t0 which is clobbered by the plt header, - so we can't use them when building shared libraries. */ - if (TARGET_SAVE_RESTORE && flag_pic && TARGET_PLT) - { - target_flags &= ~MASK_SAVE_RESTORE; - if (target_flags_explicit & MASK_SAVE_RESTORE) - warning (0, "%<-msave-restore%> disabled; not supported with PLT " - "based shared libraries"); - } } /* Implement TARGET_CONDITIONAL_REGISTER_USAGE. */ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 1ffb236add2..df5d99684e6 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2019-09-06 Jim Wilson + + * config.host (riscv*-*-linux*): Add t-slibgcc-libgcc to tmake_file. + (riscv*-*-freebsd*): Likewise. + 2019-09-03 Ulrich Weigand * config.host: Remove references to spu. diff --git a/libgcc/config.host b/libgcc/config.host index a3976702ab5..1db52878a5e 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -1201,12 +1201,12 @@ pru-*-*) tm_file="$tm_file pru/pru-abi.h" ;; riscv*-*-linux*) - tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address}" + tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address} t-slibgcc-libgcc" extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o crtendS.o crtbeginT.o" md_unwind_header=riscv/linux-unwind.h ;; riscv*-*-freebsd*) - tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address}" + tmake_file="${tmake_file} riscv/t-softfp${host_address} t-softfp riscv/t-elf riscv/t-elf${host_address} t-slibgcc-libgcc" extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o crtendS.o crtbeginT.o" ;; riscv*-*-*)