]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PowerPC64 pcrel got relocs against local symbols
authorAlan Modra <amodra@gmail.com>
Fri, 16 Sep 2022 08:38:44 +0000 (18:08 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 16 Sep 2022 09:25:11 +0000 (18:55 +0930)
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

index 89bc7d3f9b9842149f64ae50e4efd37d2acc7dfc..2676133e8cef544e1a6312f3deac87eecbd5a30c 100644 (file)
@@ -6765,6 +6765,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: