aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch')
-rw-r--r--toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch94
1 files changed, 94 insertions, 0 deletions
diff --git a/toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch b/toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
new file mode 100644
index 0000000000..19b80c3442
--- /dev/null
+++ b/toolchain/binutils/patches/2.39/055-Re-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
@@ -0,0 +1,94 @@
+From 010db38b54b589ca3e95b498aba2831064970171 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 21 Sep 2022 09:06:29 +0930
+Subject: [PATCH 055/160] Re: PowerPC64 pcrel got relocs against local symbols
+
+The last patch wasn't all that shiny. There are rather a lot more
+relocations that can hit the assertion in md_apply_fix if the symbol
+is local or absolute. Fix them all.
+
+ * config/tc-ppc.c (ppc_force_relocation): Add all relocs that
+ expect a symbol in md_apply_fix. Remove tls pcrel relocs
+ already covered in general tls match range.
+
+(cherry picked from commit 8b168f1a1e09e337d2a970f204a0230c091bbe58)
+---
+ gas/config/tc-ppc.c | 58 ++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 52 insertions(+), 6 deletions(-)
+
+--- a/gas/config/tc-ppc.c
++++ b/gas/config/tc-ppc.c
+@@ -6666,8 +6666,6 @@ ppc_force_relocation (fixS *fix)
+ int
+ ppc_force_relocation (fixS *fix)
+ {
+- /* Branch prediction relocations must force a relocation, as must
+- the vtable description relocs. */
+ switch (fix->fx_r_type)
+ {
+ case BFD_RELOC_PPC_B16_BRTAKEN:
+@@ -6676,12 +6674,60 @@ ppc_force_relocation (fixS *fix)
+ case BFD_RELOC_PPC_BA16_BRNTAKEN:
+ case BFD_RELOC_24_PLT_PCREL:
+ case BFD_RELOC_PPC64_TOC:
++ case BFD_RELOC_16_GOTOFF:
++ case BFD_RELOC_LO16_GOTOFF:
++ case BFD_RELOC_HI16_GOTOFF:
++ case BFD_RELOC_HI16_S_GOTOFF:
++ case BFD_RELOC_LO16_PLTOFF:
++ case BFD_RELOC_HI16_PLTOFF:
++ case BFD_RELOC_HI16_S_PLTOFF:
++ case BFD_RELOC_GPREL16:
++ case BFD_RELOC_16_BASEREL:
++ case BFD_RELOC_LO16_BASEREL:
++ case BFD_RELOC_HI16_BASEREL:
++ case BFD_RELOC_HI16_S_BASEREL:
++ case BFD_RELOC_PPC_TOC16:
++ case BFD_RELOC_PPC64_TOC16_LO:
++ case BFD_RELOC_PPC64_TOC16_HI:
++ case BFD_RELOC_PPC64_TOC16_HA:
++ case BFD_RELOC_PPC64_PLTGOT16:
++ case BFD_RELOC_PPC64_PLTGOT16_LO:
++ case BFD_RELOC_PPC64_PLTGOT16_HI:
++ case BFD_RELOC_PPC64_PLTGOT16_HA:
++ case BFD_RELOC_PPC64_GOT16_DS:
++ case BFD_RELOC_PPC64_GOT16_LO_DS:
++ case BFD_RELOC_PPC64_PLT16_LO_DS:
++ case BFD_RELOC_PPC64_SECTOFF_DS:
++ case BFD_RELOC_PPC64_SECTOFF_LO_DS:
++ case BFD_RELOC_PPC64_TOC16_DS:
++ case BFD_RELOC_PPC64_TOC16_LO_DS:
++ case BFD_RELOC_PPC64_PLTGOT16_DS:
++ case BFD_RELOC_PPC64_PLTGOT16_LO_DS:
++ case BFD_RELOC_PPC_EMB_NADDR16:
++ case BFD_RELOC_PPC_EMB_NADDR16_LO:
++ case BFD_RELOC_PPC_EMB_NADDR16_HI:
++ case BFD_RELOC_PPC_EMB_NADDR16_HA:
++ case BFD_RELOC_PPC_EMB_SDAI16:
++ case BFD_RELOC_PPC_EMB_SDA2I16:
++ case BFD_RELOC_PPC_EMB_SDA2REL:
++ case BFD_RELOC_PPC_EMB_SDA21:
++ case BFD_RELOC_PPC_EMB_MRKREF:
++ case BFD_RELOC_PPC_EMB_RELSEC16:
++ case BFD_RELOC_PPC_EMB_RELST_LO:
++ case BFD_RELOC_PPC_EMB_RELST_HI:
++ case BFD_RELOC_PPC_EMB_RELST_HA:
++ case BFD_RELOC_PPC_EMB_BIT_FLD:
++ case BFD_RELOC_PPC_EMB_RELSDA:
++ case BFD_RELOC_PPC_VLE_SDA21:
++ case BFD_RELOC_PPC_VLE_SDA21_LO:
++ case BFD_RELOC_PPC_VLE_SDAREL_LO16A:
++ case BFD_RELOC_PPC_VLE_SDAREL_LO16D:
++ case BFD_RELOC_PPC_VLE_SDAREL_HI16A:
++ case BFD_RELOC_PPC_VLE_SDAREL_HI16D:
++ case BFD_RELOC_PPC_VLE_SDAREL_HA16A:
++ case BFD_RELOC_PPC_VLE_SDAREL_HA16D:
+ case BFD_RELOC_PPC64_PLT_PCREL34:
+ case BFD_RELOC_PPC64_GOT_PCREL34:
+- case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:
+- case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:
+- case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:
+- case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:
+ return 1;
+ case BFD_RELOC_PPC_B26:
+ case BFD_RELOC_PPC_BA26: