[RS6000] Don't support inline PLT for ABI_V4 bss-plt
Segher Boessenkool
segher@kernel.crashing.org
Fri Feb 8 22:53:00 GMT 2019
Hi Alan,
On Fri, Feb 08, 2019 at 11:05:57AM +1030, Alan Modra wrote:
> Inline PLT calls need PLT to be an array of addresses. bss-plt works
> differently.
>
> Bootstrap and regression test on powerpc64-linux biarch in progress.
> OK assuming no regressions?
>
> * config/rs6000/rs6000.c (rs6000_longcall_ref): Don't use
> inline plt for ABI_V4 bss-plt.
> (rs6000_call_sysv): Likewise.
>
> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
> index 711278c7422..cced90bb518 100644
> --- a/gcc/config/rs6000/rs6000.c
> +++ b/gcc/config/rs6000/rs6000.c
> @@ -32819,7 +32819,8 @@ rs6000_longcall_ref (rtx call_ref, rtx arg)
> }
>
> if (HAVE_AS_PLTSEQ
> - && (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4))
> + && (DEFAULT_ABI == ABI_ELFv2
> + || (DEFAULT_ABI == ABI_V4 && TARGET_SECURE_PLT)))
> {
> rtx base = const0_rtx;
> int regno;
> @@ -37981,7 +37982,7 @@ rs6000_call_sysv (rtx value, rtx func_desc, rtx tlsarg, rtx cookie)
> func = rs6000_longcall_ref (func_desc, tlsarg);
> /* If the longcall was implemented using PLT16 relocs, then r11
> needs to be valid at the call for lazy linking. */
This comment could use some work.
> - if (HAVE_AS_PLTSEQ)
> + if (HAVE_AS_PLTSEQ && REGNO (func) == 11)
This (and all occurrences below) need some explanation. It is probably
best if you factor out
bool something = (REGNO (func) == 11));
(with a descriptive name) and use that?
The patch is okay (for all branches) with those things improved. Thanks!
Segher
More information about the Gcc-patches
mailing list