mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-23 15:12:50 +00:00
95 lines
3.4 KiB
Diff
95 lines
3.4 KiB
Diff
|
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:
|