aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch')
-rw-r--r--toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch b/toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
new file mode 100644
index 0000000000..5c89f6804e
--- /dev/null
+++ b/toolchain/binutils/patches/2.39/050-PowerPC64-pcrel-got-relocs-against-local-symbols.patch
@@ -0,0 +1,38 @@
+From 4d7bba23a39fba18d6d13a2941a3c232011a7064 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Fri, 16 Sep 2022 18:08:44 +0930
+Subject: [PATCH 050/160] PowerPC64 pcrel got relocs against local symbols
+
+Not that anyone would want to indirect via the GOT when an address can
+be loaded directly with pla, the following:
+
+ pld 3,x@got@pcrel
+x:
+
+leads to "Internal error in md_apply_fix", because the generic parts
+of assembler fixup handling convert the fx_pcrel fixup to one without
+a symbol. Stop that happening.
+
+ * config/tc-ppc.c (ppc_force_relocation): Add PLT_PCREL34 and
+ assorted GOT_PCREL34 relocs.
+
+(cherry picked from commit 49c3ed081fed6b8e2b48fdc48f805f11e4589514)
+---
+ gas/config/tc-ppc.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/gas/config/tc-ppc.c
++++ b/gas/config/tc-ppc.c
+@@ -6676,6 +6676,12 @@ 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_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: