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:17:46 +0000 (18:47 +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.

gas/config/tc-ppc.c

index 37a8b54a28ff8a4c0191d701b746bf8be811e7d3..1ed8ef2034b239ce5cb05a33d3a02f6ffd4536b6 100644 (file)
@@ -6689,6 +6689,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: