aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '4.4.5/gentoo/30_all_gcc-4.4-ppc-msingle-pic-base.patch')
-rw-r--r--4.4.5/gentoo/30_all_gcc-4.4-ppc-msingle-pic-base.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/4.4.5/gentoo/30_all_gcc-4.4-ppc-msingle-pic-base.patch b/4.4.5/gentoo/30_all_gcc-4.4-ppc-msingle-pic-base.patch
new file mode 100644
index 0000000..59b62e4
--- /dev/null
+++ b/4.4.5/gentoo/30_all_gcc-4.4-ppc-msingle-pic-base.patch
@@ -0,0 +1,93 @@
+https://bugs.gentoo.org/347281
+
+backported from gcc-4.6
+
+From a9321d3549b5d29024c4bb011bf6e75903aef4e9 Mon Sep 17 00:00:00 2001
+From: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
+Date: Sat, 9 Oct 2010 12:45:39 +0200
+Subject: [PATCHv3] PowerPC: Add msingle-pic-base option.
+
+Do not generate fPIC/fpic prologue nor save
+and restore PIC register.
+
+Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
+---
+ v2: Use Var instead of Mask and add some docs per
+ Michael Meissner <meissner@linux.vnet.ibm.com>
+ v3: Make order in if statement consistent.
+
+ gcc/config/rs6000/rs6000.c | 5 +++++
+ gcc/config/rs6000/rs6000.opt | 4 ++++
+ gcc/doc/invoke.texi | 9 ++++++++-
+ 3 files changed, 17 insertions(+), 1 deletions(-)
+
+diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
+index 63f8ef9..310d28b 100644
+--- a/gcc/config/rs6000/rs6000.c
++++ b/gcc/config/rs6000/rs6000.c
+@@ -16036,8 +16036,10 @@ rs6000_reg_live_or_pic_offset_p (int reg)
+ return ((df_regs_ever_live_p (reg)
+ && (!call_used_regs[reg]
+ || (reg == RS6000_PIC_OFFSET_TABLE_REGNUM
++ && !TARGET_SINGLE_PIC_BASE
+ && TARGET_TOC && TARGET_MINIMAL_TOC)))
+ || (reg == RS6000_PIC_OFFSET_TABLE_REGNUM
++ && !TARGET_SINGLE_PIC_BASE
+ && ((DEFAULT_ABI == ABI_V4 && flag_pic != 0)
+ || (DEFAULT_ABI == ABI_DARWIN && flag_pic))));
+ }
+@@ -16737,6 +16739,9 @@ rs6000_emit_prologue (void)
+ insn = emit_insn (generate_set_vrsave (reg, info, 0));
+ }
+
++ if (TARGET_SINGLE_PIC_BASE)
++ return; /* Do not set PIC register */
++
+ /* If we are using RS6000_PIC_OFFSET_TABLE_REGNUM, we need to set it up. */
+ if ((TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
+ || (DEFAULT_ABI == ABI_V4
+diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
+index 8a62352..2adb6dd 100644
+--- a/gcc/config/rs6000/rs6000.opt
++++ b/gcc/config/rs6000/rs6000.opt
+@@ -119,6 +119,10 @@ mupdate
+ Target Report RejectNegative InverseMask(NO_UPDATE, UPDATE)
+ Generate load/store with update instructions
+
++msingle-pic-base
++Target Report Var(TARGET_SINGLE_PIC_BASE) Init(0)
++Do not load the PIC register in function prologues
++
+ mavoid-indexed-addresses
+ Target Report Var(TARGET_AVOID_XFORM) Init(-1)
+ Avoid generation of indexed load/store instructions when possible
+diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
+index 393e418..fc30537 100644
+--- a/gcc/doc/invoke.texi
++++ b/gcc/doc/invoke.texi
+@@ -728,7 +728,7 @@ See RS/6000 and PowerPC Options.
+ -mstrict-align -mno-strict-align -mrelocatable @gol
+ -mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
+ -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
+--mdynamic-no-pic -maltivec -mswdiv @gol
++-mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base @gol
+ -mprioritize-restricted-insns=@var{priority} @gol
+ -msched-costly-dep=@var{dependence_type} @gol
+ -minsert-sched-nops=@var{scheme} @gol
+@@ -14129,6 +14129,13 @@ relocatable, but that its external references are relocatable. The
+ resulting code is suitable for applications, but not shared
+ libraries.
+
++@item -msingle-pic-base
++@opindex msingle-pic-base
++Treat the register used for PIC addressing as read-only, rather than
++loading it in the prologue for each function. The run-time system is
++responsible for initializing this register with an appropriate value
++before execution begins.
++
+ @item -mprioritize-restricted-insns=@var{priority}
+ @opindex mprioritize-restricted-insns
+ This option controls the priority that is assigned to
+--
+1.7.2.2
+