diff mbox

[RS6000] Make -msingle-pic-base remove the ELFv2 global entry code

Message ID 20150930061135.GB32709@bubble.grove.modra.org
State New
Headers show

Commit Message

Alan Modra Sept. 30, 2015, 6:11 a.m. UTC
For other ABIs, -msingle-pic-base makes gcc omit loading of the PIC
register in function prologues.  This patch makes the option affect
ELFv2 too.

I wrote a patch like this during the initial ELFv2 effort, but there
were many more important patches to push and this one somehow got
dropped.  Dusted off and retested at the request of powerpc64 kernel
people who'd like an option to disable ELFv2 global entry code for
the kernel.  OK mainline?

	* config/rs6000/rs6000.c (rs6000_emit_prologue): Don't set
	r2_setup_needed when TARGET_SINGLE_PIC_BASE.
	(rs6000_output_mi_thunk): Likewise.

Comments

David Edelsohn Sept. 30, 2015, 1:33 p.m. UTC | #1
On Wed, Sep 30, 2015 at 2:11 AM, Alan Modra <amodra@gmail.com> wrote:
> For other ABIs, -msingle-pic-base makes gcc omit loading of the PIC
> register in function prologues.  This patch makes the option affect
> ELFv2 too.
>
> I wrote a patch like this during the initial ELFv2 effort, but there
> were many more important patches to push and this one somehow got
> dropped.  Dusted off and retested at the request of powerpc64 kernel
> people who'd like an option to disable ELFv2 global entry code for
> the kernel.  OK mainline?
>
>         * config/rs6000/rs6000.c (rs6000_emit_prologue): Don't set
>         r2_setup_needed when TARGET_SINGLE_PIC_BASE.
>         (rs6000_output_mi_thunk): Likewise.

Okay.

Thanks, David
diff mbox

Patch

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index ae456ff..023f622 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -24118,13 +24118,13 @@  rs6000_emit_prologue (void)
 #define NOT_INUSE(R) do {} while (0)
 #endif
 
-  if (DEFAULT_ABI == ABI_ELFv2)
+  if (DEFAULT_ABI == ABI_ELFv2
+      && !TARGET_SINGLE_PIC_BASE)
     {
       cfun->machine->r2_setup_needed = df_regs_ever_live_p (TOC_REGNUM);
 
       /* With -mminimal-toc we may generate an extra use of r2 below.  */
-      if (!TARGET_SINGLE_PIC_BASE
-	  && TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
+      if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
 	cfun->machine->r2_setup_needed = true;
     }
 
@@ -26800,7 +26800,8 @@  rs6000_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
   /* Ensure we have a global entry point for the thunk.   ??? We could
      avoid that if the target routine doesn't need a global entry point,
      but we do not know whether this is the case at this point.  */
-  if (DEFAULT_ABI == ABI_ELFv2)
+  if (DEFAULT_ABI == ABI_ELFv2
+      && !TARGET_SINGLE_PIC_BASE)
     cfun->machine->r2_setup_needed = true;
 
   /* Run just enough of rest_of_compilation to get the insns emitted.