Rename PowerPC64 pcrel GOT TLS relocations

These relocations should have had REL in their names, to reflect the
fact that they are pc-relative.  Fix that now by adding _PCREL.
I've added some back-compatibility code to support anyone using
.reloc with the old relocations.

include/
	* elf/ppc64.h (elf_ppc64_reloc_type): Rename
	R_PPC64_GOT_TLSGD34 to R_PPC64_GOT_TLSGD_PCREL34,
	R_PPC64_GOT_TLSLD34 to R_PPC64_GOT_TLSLD_PCREL34,
	R_PPC64_GOT_TPREL34 to R_PPC64_GOT_TPREL_PCREL34, and
	R_PPC64_GOT_DTPREL34 to R_PPC64_GOT_DTPREL_PCREL34.
bfd/
	* reloc.c: Rename
	BFD_RELOC_PPC64_GOT_TLSGD34 to BFD_RELOC_PPC64_GOT_TLSGD_PCREL34,
	BFD_RELOC_PPC64_GOT_TLSLD34 to BFD_RELOC_PPC64_GOT_TLSLD_PCREL34,
	BFD_RELOC_PPC64_GOT_TPREL34 to BFD_RELOC_PPC64_GOT_TPREL_PCREL34,
	BFD_RELOC_PPC64_GOT_DTPREL34 to BFD_RELOC_PPC64_GOT_DTPREL_PCREL34.
	* elf64-ppc.c: Update throughout for reloc renaming.
	(ppc64_elf_reloc_name_lookup): Handle old reloc names.
	* libbfd.h: Regenerate.
	* bfd-in2.h: Regenerate.
gas/
	* config/tc-ppc.c: Update throughout for reloc renaming.
elfcpp/
	* powerpc.h: Rename
	R_PPC64_GOT_TLSGD34 to R_PPC64_GOT_TLSGD_PCREL34,
	R_PPC64_GOT_TLSLD34 to R_PPC64_GOT_TLSLD_PCREL34,
	R_PPC64_GOT_TPREL34 to R_PPC64_GOT_TPREL_PCREL34, and
	R_PPC64_GOT_DTPREL34 to R_PPC64_GOT_DTPREL_PCREL34.
gold/
	* powerpc.cc: Update throughout for reloc renaming.
This commit is contained in:
Alan Modra 2020-06-06 11:56:20 +09:30
parent 1fc47f8089
commit 87c69f9732
13 changed files with 173 additions and 121 deletions

View File

@ -1,3 +1,15 @@
2020-06-06 Alan Modra <amodra@gmail.com>
* reloc.c: Rename
BFD_RELOC_PPC64_GOT_TLSGD34 to BFD_RELOC_PPC64_GOT_TLSGD_PCREL34,
BFD_RELOC_PPC64_GOT_TLSLD34 to BFD_RELOC_PPC64_GOT_TLSLD_PCREL34,
BFD_RELOC_PPC64_GOT_TPREL34 to BFD_RELOC_PPC64_GOT_TPREL_PCREL34,
BFD_RELOC_PPC64_GOT_DTPREL34 to BFD_RELOC_PPC64_GOT_DTPREL_PCREL34.
* elf64-ppc.c: Update throughout for reloc renaming.
(ppc64_elf_reloc_name_lookup): Handle old reloc names.
* libbfd.h: Regenerate.
* bfd-in2.h: Regenerate.
2020-06-05 H.J. Lu <hongjiu.lu@intel.com> 2020-06-05 H.J. Lu <hongjiu.lu@intel.com>
PR ld/26080 PR ld/26080

View File

@ -3045,10 +3045,10 @@ instruction. */
BFD_RELOC_PPC64_DTPREL16_HIGHESTA, BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_TPREL34,
BFD_RELOC_PPC64_DTPREL34, BFD_RELOC_PPC64_DTPREL34,
BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSGD_PCREL34,
BFD_RELOC_PPC64_GOT_TLSLD34, BFD_RELOC_PPC64_GOT_TLSLD_PCREL34,
BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_TPREL_PCREL34,
BFD_RELOC_PPC64_GOT_DTPREL34, BFD_RELOC_PPC64_GOT_DTPREL_PCREL34,
BFD_RELOC_PPC64_TLS_PCREL, BFD_RELOC_PPC64_TLS_PCREL,
/* IBM 370/390 relocations */ /* IBM 370/390 relocations */

View File

@ -930,16 +930,16 @@ static reloc_howto_type ppc64_elf_howto_raw[] =
HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed, HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
ppc64_elf_unhandled_reloc), ppc64_elf_unhandled_reloc),
HOW (R_PPC64_GOT_TLSGD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, HOW (R_PPC64_GOT_TLSGD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
ppc64_elf_unhandled_reloc), ppc64_elf_unhandled_reloc),
HOW (R_PPC64_GOT_TLSLD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, HOW (R_PPC64_GOT_TLSLD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
ppc64_elf_unhandled_reloc), ppc64_elf_unhandled_reloc),
HOW (R_PPC64_GOT_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, HOW (R_PPC64_GOT_TPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
ppc64_elf_unhandled_reloc), ppc64_elf_unhandled_reloc),
HOW (R_PPC64_GOT_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, HOW (R_PPC64_GOT_DTPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
ppc64_elf_unhandled_reloc), ppc64_elf_unhandled_reloc),
HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont, HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont,
@ -999,8 +999,7 @@ ppc_howto_init (void)
} }
static reloc_howto_type * static reloc_howto_type *
ppc64_elf_reloc_type_lookup (bfd *abfd, ppc64_elf_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
bfd_reloc_code_real_type code)
{ {
enum elf_ppc64_reloc_type r = R_PPC64_NONE; enum elf_ppc64_reloc_type r = R_PPC64_NONE;
@ -1280,13 +1279,13 @@ ppc64_elf_reloc_type_lookup (bfd *abfd,
break; break;
case BFD_RELOC_PPC64_DTPREL34: r = R_PPC64_DTPREL34; case BFD_RELOC_PPC64_DTPREL34: r = R_PPC64_DTPREL34;
break; break;
case BFD_RELOC_PPC64_GOT_TLSGD34: r = R_PPC64_GOT_TLSGD34; case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34: r = R_PPC64_GOT_TLSGD_PCREL34;
break; break;
case BFD_RELOC_PPC64_GOT_TLSLD34: r = R_PPC64_GOT_TLSLD34; case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34: r = R_PPC64_GOT_TLSLD_PCREL34;
break; break;
case BFD_RELOC_PPC64_GOT_TPREL34: r = R_PPC64_GOT_TPREL34; case BFD_RELOC_PPC64_GOT_TPREL_PCREL34: r = R_PPC64_GOT_TPREL_PCREL34;
break; break;
case BFD_RELOC_PPC64_GOT_DTPREL34: r = R_PPC64_GOT_DTPREL34; case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34: r = R_PPC64_GOT_DTPREL_PCREL34;
break; break;
case BFD_RELOC_PPC64_ADDR16_HIGHER34: r = R_PPC64_ADDR16_HIGHER34; case BFD_RELOC_PPC64_ADDR16_HIGHER34: r = R_PPC64_ADDR16_HIGHER34;
break; break;
@ -1318,16 +1317,33 @@ ppc64_elf_reloc_type_lookup (bfd *abfd,
}; };
static reloc_howto_type * static reloc_howto_type *
ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, ppc64_elf_reloc_name_lookup (bfd *abfd, const char *r_name)
const char *r_name)
{ {
unsigned int i; unsigned int i;
static char *compat_map[][2] = {
{ "R_PPC64_GOT_TLSGD34", "R_PPC64_GOT_TLSGD_PCREL34" },
{ "R_PPC64_GOT_TLSLD34", "R_PPC64_GOT_TLSLD_PCREL34" },
{ "R_PPC64_GOT_TPREL34", "R_PPC64_GOT_TPREL_PCREL34" },
{ "R_PPC64_GOT_DTPREL34", "R_PPC64_GOT_DTPREL_PCREL34" }
};
for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++) for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
if (ppc64_elf_howto_raw[i].name != NULL if (ppc64_elf_howto_raw[i].name != NULL
&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0) && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
return &ppc64_elf_howto_raw[i]; return &ppc64_elf_howto_raw[i];
/* Handle old names of relocations in case they were used by
.reloc directives.
FIXME: Remove this soon. Mapping the reloc names is very likely
completely unnecessary. */
for (i = 0; i < ARRAY_SIZE (compat_map); i++)
if (strcasecmp (compat_map[i][0], r_name) == 0)
{
_bfd_error_handler (_("warning: %s should be used rather than %s"),
compat_map[i][1], compat_map[i][0]);
return ppc64_elf_reloc_name_lookup (abfd, compat_map[i][1]);
}
return NULL; return NULL;
} }
@ -4584,10 +4600,10 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_DTPREL34: case R_PPC64_DTPREL34:
case R_PPC64_PCREL34: case R_PPC64_PCREL34:
case R_PPC64_GOT_PCREL34: case R_PPC64_GOT_PCREL34:
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
case R_PPC64_GOT_DTPREL34: case R_PPC64_GOT_DTPREL_PCREL34:
case R_PPC64_PLT_PCREL34: case R_PPC64_PLT_PCREL34:
case R_PPC64_PLT_PCREL34_NOTOC: case R_PPC64_PLT_PCREL34_NOTOC:
case R_PPC64_PCREL28: case R_PPC64_PCREL28:
@ -4671,7 +4687,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_LO:
case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_GOT_TLSLD16_HI:
case R_PPC64_GOT_TLSLD16_HA: case R_PPC64_GOT_TLSLD16_HA:
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
tls_type = TLS_TLS | TLS_LD; tls_type = TLS_TLS | TLS_LD;
goto dogottls; goto dogottls;
@ -4679,7 +4695,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_LO:
case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_HI:
case R_PPC64_GOT_TLSGD16_HA: case R_PPC64_GOT_TLSGD16_HA:
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
tls_type = TLS_TLS | TLS_GD; tls_type = TLS_TLS | TLS_GD;
goto dogottls; goto dogottls;
@ -4687,7 +4703,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_LO_DS:
case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HI:
case R_PPC64_GOT_TPREL16_HA: case R_PPC64_GOT_TPREL16_HA:
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
if (bfd_link_dll (info)) if (bfd_link_dll (info))
info->flags |= DF_STATIC_TLS; info->flags |= DF_STATIC_TLS;
tls_type = TLS_TLS | TLS_TPREL; tls_type = TLS_TLS | TLS_TPREL;
@ -4697,7 +4713,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_GOT_DTPREL16_LO_DS: case R_PPC64_GOT_DTPREL16_LO_DS:
case R_PPC64_GOT_DTPREL16_HI: case R_PPC64_GOT_DTPREL16_HI:
case R_PPC64_GOT_DTPREL16_HA: case R_PPC64_GOT_DTPREL16_HA:
case R_PPC64_GOT_DTPREL34: case R_PPC64_GOT_DTPREL_PCREL34:
tls_type = TLS_TLS | TLS_DTPREL; tls_type = TLS_TLS | TLS_DTPREL;
dogottls: dogottls:
sec->has_tls_reloc = 1; sec->has_tls_reloc = 1;
@ -8015,7 +8031,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
{ {
case R_PPC64_GOT_TLSLD16: case R_PPC64_GOT_TLSLD16:
case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_LO:
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
expecting_tls_get_addr = 1; expecting_tls_get_addr = 1;
found_tls_get_addr_arg = 1; found_tls_get_addr_arg = 1;
/* Fall through. */ /* Fall through. */
@ -8036,7 +8052,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
case R_PPC64_GOT_TLSGD16: case R_PPC64_GOT_TLSGD16:
case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_LO:
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
expecting_tls_get_addr = 1; expecting_tls_get_addr = 1;
found_tls_get_addr_arg = 1; found_tls_get_addr_arg = 1;
/* Fall through. */ /* Fall through. */
@ -8053,7 +8069,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
tls_type = TLS_TLS | TLS_GD; tls_type = TLS_TLS | TLS_GD;
break; break;
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
case R_PPC64_GOT_TPREL16_DS: case R_PPC64_GOT_TPREL16_DS:
case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_LO_DS:
case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HI:
@ -15019,7 +15035,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
} }
break; break;
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
if ((tls_mask & TLS_TLS) != 0 if ((tls_mask & TLS_TLS) != 0
&& (tls_mask & TLS_TPREL) == 0) && (tls_mask & TLS_TPREL) == 0)
{ {
@ -15212,7 +15228,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
} }
break; break;
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0) if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
{ {
pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset); pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@ -15222,7 +15238,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
{ {
/* IE, pla -> pld */ /* IE, pla -> pld */
pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26); pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26);
r_type = R_PPC64_GOT_TPREL34; r_type = R_PPC64_GOT_TPREL_PCREL34;
} }
else else
{ {
@ -15238,7 +15254,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
} }
break; break;
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0) if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
{ {
pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset); pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@ -15974,7 +15990,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_LO:
case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_HI:
case R_PPC64_GOT_TLSGD16_HA: case R_PPC64_GOT_TLSGD16_HA:
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
tls_type = TLS_TLS | TLS_GD; tls_type = TLS_TLS | TLS_GD;
goto dogot; goto dogot;
@ -15982,7 +15998,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_LO:
case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_GOT_TLSLD16_HI:
case R_PPC64_GOT_TLSLD16_HA: case R_PPC64_GOT_TLSLD16_HA:
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
tls_type = TLS_TLS | TLS_LD; tls_type = TLS_TLS | TLS_LD;
goto dogot; goto dogot;
@ -15990,7 +16006,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_LO_DS:
case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HI:
case R_PPC64_GOT_TPREL16_HA: case R_PPC64_GOT_TPREL16_HA:
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
tls_type = TLS_TLS | TLS_TPREL; tls_type = TLS_TLS | TLS_TPREL;
goto dogot; goto dogot;
@ -15998,7 +16014,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_DTPREL16_LO_DS: case R_PPC64_GOT_DTPREL16_LO_DS:
case R_PPC64_GOT_DTPREL16_HI: case R_PPC64_GOT_DTPREL16_HI:
case R_PPC64_GOT_DTPREL16_HA: case R_PPC64_GOT_DTPREL16_HA:
case R_PPC64_GOT_DTPREL34: case R_PPC64_GOT_DTPREL_PCREL34:
tls_type = TLS_TLS | TLS_DTPREL; tls_type = TLS_TLS | TLS_DTPREL;
goto dogot; goto dogot;
@ -16197,10 +16213,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
relocation = got->output_section->vma + got->output_offset + off; relocation = got->output_section->vma + got->output_offset + off;
addend = 0; addend = 0;
if (!(r_type == R_PPC64_GOT_PCREL34 if (!(r_type == R_PPC64_GOT_PCREL34
|| r_type == R_PPC64_GOT_TLSGD34 || r_type == R_PPC64_GOT_TLSGD_PCREL34
|| r_type == R_PPC64_GOT_TLSLD34 || r_type == R_PPC64_GOT_TLSLD_PCREL34
|| r_type == R_PPC64_GOT_TPREL34 || r_type == R_PPC64_GOT_TPREL_PCREL34
|| r_type == R_PPC64_GOT_DTPREL34)) || r_type == R_PPC64_GOT_DTPREL_PCREL34))
addend = -(TOCstart + htab->sec_info[input_section->id].toc_off); addend = -(TOCstart + htab->sec_info[input_section->id].toc_off);
} }
break; break;
@ -17022,10 +17038,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
case R_PPC64_GOT_PCREL34: case R_PPC64_GOT_PCREL34:
case R_PPC64_TPREL34: case R_PPC64_TPREL34:
case R_PPC64_DTPREL34: case R_PPC64_DTPREL34:
case R_PPC64_GOT_TLSGD34: case R_PPC64_GOT_TLSGD_PCREL34:
case R_PPC64_GOT_TLSLD34: case R_PPC64_GOT_TLSLD_PCREL34:
case R_PPC64_GOT_TPREL34: case R_PPC64_GOT_TPREL_PCREL34:
case R_PPC64_GOT_DTPREL34: case R_PPC64_GOT_DTPREL_PCREL34:
case R_PPC64_PLT_PCREL34: case R_PPC64_PLT_PCREL34:
case R_PPC64_PLT_PCREL34_NOTOC: case R_PPC64_PLT_PCREL34_NOTOC:
case R_PPC64_D28: case R_PPC64_D28:

View File

@ -1603,10 +1603,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_PPC64_DTPREL16_HIGHESTA", "BFD_RELOC_PPC64_DTPREL16_HIGHESTA",
"BFD_RELOC_PPC64_TPREL34", "BFD_RELOC_PPC64_TPREL34",
"BFD_RELOC_PPC64_DTPREL34", "BFD_RELOC_PPC64_DTPREL34",
"BFD_RELOC_PPC64_GOT_TLSGD34", "BFD_RELOC_PPC64_GOT_TLSGD_PCREL34",
"BFD_RELOC_PPC64_GOT_TLSLD34", "BFD_RELOC_PPC64_GOT_TLSLD_PCREL34",
"BFD_RELOC_PPC64_GOT_TPREL34", "BFD_RELOC_PPC64_GOT_TPREL_PCREL34",
"BFD_RELOC_PPC64_GOT_DTPREL34", "BFD_RELOC_PPC64_GOT_DTPREL_PCREL34",
"BFD_RELOC_PPC64_TLS_PCREL", "BFD_RELOC_PPC64_TLS_PCREL",
"BFD_RELOC_I370_D12", "BFD_RELOC_I370_D12",
"BFD_RELOC_CTOR", "BFD_RELOC_CTOR",

View File

@ -3025,13 +3025,13 @@ ENUMX
ENUMX ENUMX
BFD_RELOC_PPC64_DTPREL34 BFD_RELOC_PPC64_DTPREL34
ENUMX ENUMX
BFD_RELOC_PPC64_GOT_TLSGD34 BFD_RELOC_PPC64_GOT_TLSGD_PCREL34
ENUMX ENUMX
BFD_RELOC_PPC64_GOT_TLSLD34 BFD_RELOC_PPC64_GOT_TLSLD_PCREL34
ENUMX ENUMX
BFD_RELOC_PPC64_GOT_TPREL34 BFD_RELOC_PPC64_GOT_TPREL_PCREL34
ENUMX ENUMX
BFD_RELOC_PPC64_GOT_DTPREL34 BFD_RELOC_PPC64_GOT_DTPREL_PCREL34
ENUMX ENUMX
BFD_RELOC_PPC64_TLS_PCREL BFD_RELOC_PPC64_TLS_PCREL
ENUMDOC ENUMDOC

View File

@ -1,3 +1,11 @@
2020-06-06 Alan Modra <amodra@gmail.com>
* powerpc.h: Rename
R_PPC64_GOT_TLSGD34 to R_PPC64_GOT_TLSGD_PCREL34,
R_PPC64_GOT_TLSLD34 to R_PPC64_GOT_TLSLD_PCREL34,
R_PPC64_GOT_TPREL34 to R_PPC64_GOT_TPREL_PCREL34, and
R_PPC64_GOT_DTPREL34 to R_PPC64_GOT_DTPREL_PCREL34.
2020-01-18 Nick Clifton <nickc@redhat.com> 2020-01-18 Nick Clifton <nickc@redhat.com>
Binutils 2.34 branch created. Binutils 2.34 branch created.

View File

@ -205,10 +205,10 @@ enum
R_PPC64_PCREL28 = 145, R_PPC64_PCREL28 = 145,
R_PPC64_TPREL34 = 146, R_PPC64_TPREL34 = 146,
R_PPC64_DTPREL34 = 147, R_PPC64_DTPREL34 = 147,
R_PPC64_GOT_TLSGD34 = 148, R_PPC64_GOT_TLSGD_PCREL34 = 148,
R_PPC64_GOT_TLSLD34 = 149, R_PPC64_GOT_TLSLD_PCREL34 = 149,
R_PPC64_GOT_TPREL34 = 150, R_PPC64_GOT_TPREL_PCREL34 = 150,
R_PPC64_GOT_DTPREL34 = 151, R_PPC64_GOT_DTPREL_PCREL34 = 151,
R_PPC_VLE_REL8 = 216, R_PPC_VLE_REL8 = 216,
R_PPC_VLE_REL15 = 217, R_PPC_VLE_REL15 = 217,

View File

@ -1,3 +1,7 @@
2020-06-06 Alan Modra <amodra@gmail.com>
* config/tc-ppc.c: Update throughout for reloc renaming.
2020-06-05 Jose E. Marchesi <jose.marchesi@oracle.com> 2020-06-05 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/tc-bpf.c (md_apply_fix): Avoid GCC 10 warning * config/tc-bpf.c (md_apply_fix): Avoid GCC 10 warning

View File

@ -2233,10 +2233,10 @@ ppc_elf_suffix (char **str_p, expressionS *exp_p)
MAP64 ("got@pcrel", BFD_RELOC_PPC64_GOT_PCREL34), MAP64 ("got@pcrel", BFD_RELOC_PPC64_GOT_PCREL34),
MAP64 ("plt@pcrel", BFD_RELOC_PPC64_PLT_PCREL34), MAP64 ("plt@pcrel", BFD_RELOC_PPC64_PLT_PCREL34),
MAP64 ("tls@pcrel", BFD_RELOC_PPC64_TLS_PCREL), MAP64 ("tls@pcrel", BFD_RELOC_PPC64_TLS_PCREL),
MAP64 ("got@tlsgd@pcrel", BFD_RELOC_PPC64_GOT_TLSGD34), MAP64 ("got@tlsgd@pcrel", BFD_RELOC_PPC64_GOT_TLSGD_PCREL34),
MAP64 ("got@tlsld@pcrel", BFD_RELOC_PPC64_GOT_TLSLD34), MAP64 ("got@tlsld@pcrel", BFD_RELOC_PPC64_GOT_TLSLD_PCREL34),
MAP64 ("got@tprel@pcrel", BFD_RELOC_PPC64_GOT_TPREL34), MAP64 ("got@tprel@pcrel", BFD_RELOC_PPC64_GOT_TPREL_PCREL34),
MAP64 ("got@dtprel@pcrel", BFD_RELOC_PPC64_GOT_DTPREL34), MAP64 ("got@dtprel@pcrel", BFD_RELOC_PPC64_GOT_DTPREL_PCREL34),
MAP64 ("higher34", BFD_RELOC_PPC64_ADDR16_HIGHER34), MAP64 ("higher34", BFD_RELOC_PPC64_ADDR16_HIGHER34),
MAP64 ("highera34", BFD_RELOC_PPC64_ADDR16_HIGHERA34), MAP64 ("highera34", BFD_RELOC_PPC64_ADDR16_HIGHERA34),
MAP64 ("highest34", BFD_RELOC_PPC64_ADDR16_HIGHEST34), MAP64 ("highest34", BFD_RELOC_PPC64_ADDR16_HIGHEST34),
@ -3219,10 +3219,10 @@ fixup_size (bfd_reloc_code_real_type reloc, bfd_boolean *pc_relative)
case BFD_RELOC_64_PCREL: case BFD_RELOC_64_PCREL:
case BFD_RELOC_64_PLT_PCREL: case BFD_RELOC_64_PLT_PCREL:
case BFD_RELOC_PPC64_GOT_PCREL34: case BFD_RELOC_PPC64_GOT_PCREL34:
case BFD_RELOC_PPC64_GOT_TLSGD34: case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:
case BFD_RELOC_PPC64_GOT_TLSLD34: case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:
case BFD_RELOC_PPC64_GOT_TPREL34: case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:
case BFD_RELOC_PPC64_GOT_DTPREL34: case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:
case BFD_RELOC_PPC64_PCREL28: case BFD_RELOC_PPC64_PCREL28:
case BFD_RELOC_PPC64_PCREL34: case BFD_RELOC_PPC64_PCREL34:
case BFD_RELOC_PPC64_PLT_PCREL34: case BFD_RELOC_PPC64_PLT_PCREL34:
@ -3804,10 +3804,10 @@ md_assemble (char *str)
/* Fall through. */ /* Fall through. */
case BFD_RELOC_PPC64_GOT_PCREL34: case BFD_RELOC_PPC64_GOT_PCREL34:
case BFD_RELOC_PPC64_PLT_PCREL34: case BFD_RELOC_PPC64_PLT_PCREL34:
case BFD_RELOC_PPC64_GOT_TLSGD34: case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:
case BFD_RELOC_PPC64_GOT_TLSLD34: case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:
case BFD_RELOC_PPC64_GOT_TPREL34: case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:
case BFD_RELOC_PPC64_GOT_DTPREL34: case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:
if (operand->bitm != 0x3ffffffffULL if (operand->bitm != 0x3ffffffffULL
|| (operand->flags & PPC_OPERAND_NEGATIVE) != 0) || (operand->flags & PPC_OPERAND_NEGATIVE) != 0)
as_warn (_("%s unsupported on this instruction"), "@pcrel"); as_warn (_("%s unsupported on this instruction"), "@pcrel");
@ -7532,10 +7532,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
case BFD_RELOC_PPC64_DTPREL16_HIGHESTA: case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:
case BFD_RELOC_PPC64_TPREL34: case BFD_RELOC_PPC64_TPREL34:
case BFD_RELOC_PPC64_DTPREL34: case BFD_RELOC_PPC64_DTPREL34:
case BFD_RELOC_PPC64_GOT_TLSGD34: case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:
case BFD_RELOC_PPC64_GOT_TLSLD34: case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:
case BFD_RELOC_PPC64_GOT_TPREL34: case BFD_RELOC_PPC64_GOT_TPREL_PCREL34:
case BFD_RELOC_PPC64_GOT_DTPREL34: case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:
gas_assert (fixP->fx_addsy != NULL); gas_assert (fixP->fx_addsy != NULL);
S_SET_THREAD_LOCAL (fixP->fx_addsy); S_SET_THREAD_LOCAL (fixP->fx_addsy);
fieldval = 0; fieldval = 0;

View File

@ -1,3 +1,7 @@
2020-06-06 Alan Modra <amodra@gmail.com>
* powerpc.cc: Update throughout for reloc renaming.
2020-05-22 Alan Modra <amodra@gmail.com> 2020-05-22 Alan Modra <amodra@gmail.com>
PR 25882 PR 25882

View File

@ -7286,10 +7286,10 @@ Target_powerpc<size, big_endian>::Scan::get_reference_flags(
case elfcpp::R_PPC64_TLSLD: case elfcpp::R_PPC64_TLSLD:
case elfcpp::R_PPC64_TPREL34: case elfcpp::R_PPC64_TPREL34:
case elfcpp::R_PPC64_DTPREL34: case elfcpp::R_PPC64_DTPREL34:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
ref = Symbol::TLS_REF; ref = Symbol::TLS_REF;
break; break;
@ -7883,7 +7883,7 @@ Target_powerpc<size, big_endian>::Scan::local(
target->got_section(symtab, layout); target->got_section(symtab, layout);
break; break;
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_POWERPC_GOT_TLSGD16: case elfcpp::R_POWERPC_GOT_TLSGD16:
case elfcpp::R_POWERPC_GOT_TLSGD16_LO: case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
case elfcpp::R_POWERPC_GOT_TLSGD16_HI: case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
@ -7908,7 +7908,7 @@ Target_powerpc<size, big_endian>::Scan::local(
} }
break; break;
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_POWERPC_GOT_TLSLD16: case elfcpp::R_POWERPC_GOT_TLSLD16:
case elfcpp::R_POWERPC_GOT_TLSLD16_LO: case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
case elfcpp::R_POWERPC_GOT_TLSLD16_HI: case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
@ -7932,7 +7932,7 @@ Target_powerpc<size, big_endian>::Scan::local(
} }
break; break;
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
case elfcpp::R_POWERPC_GOT_DTPREL16: case elfcpp::R_POWERPC_GOT_DTPREL16:
case elfcpp::R_POWERPC_GOT_DTPREL16_LO: case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
case elfcpp::R_POWERPC_GOT_DTPREL16_HI: case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
@ -7945,7 +7945,7 @@ Target_powerpc<size, big_endian>::Scan::local(
} }
break; break;
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_POWERPC_GOT_TPREL16: case elfcpp::R_POWERPC_GOT_TPREL16:
case elfcpp::R_POWERPC_GOT_TPREL16_LO: case elfcpp::R_POWERPC_GOT_TPREL16_LO:
case elfcpp::R_POWERPC_GOT_TPREL16_HI: case elfcpp::R_POWERPC_GOT_TPREL16_HI:
@ -8177,10 +8177,10 @@ Target_powerpc<size, big_endian>::Scan::local(
case elfcpp::R_PPC64_PLT_PCREL34: case elfcpp::R_PPC64_PLT_PCREL34:
case elfcpp::R_PPC64_PLT_PCREL34_NOTOC: case elfcpp::R_PPC64_PLT_PCREL34_NOTOC:
case elfcpp::R_PPC64_GOT_PCREL34: case elfcpp::R_PPC64_GOT_PCREL34:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
target->set_power10_stubs(); target->set_power10_stubs();
break; break;
default: default:
@ -8616,7 +8616,7 @@ Target_powerpc<size, big_endian>::Scan::global(
target->got_section(symtab, layout); target->got_section(symtab, layout);
break; break;
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_POWERPC_GOT_TLSGD16: case elfcpp::R_POWERPC_GOT_TLSGD16:
case elfcpp::R_POWERPC_GOT_TLSGD16_LO: case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
case elfcpp::R_POWERPC_GOT_TLSGD16_HI: case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
@ -8665,7 +8665,7 @@ Target_powerpc<size, big_endian>::Scan::global(
} }
break; break;
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_POWERPC_GOT_TLSLD16: case elfcpp::R_POWERPC_GOT_TLSLD16:
case elfcpp::R_POWERPC_GOT_TLSLD16_LO: case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
case elfcpp::R_POWERPC_GOT_TLSLD16_HI: case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
@ -8689,7 +8689,7 @@ Target_powerpc<size, big_endian>::Scan::global(
} }
break; break;
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
case elfcpp::R_POWERPC_GOT_DTPREL16: case elfcpp::R_POWERPC_GOT_DTPREL16:
case elfcpp::R_POWERPC_GOT_DTPREL16_LO: case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
case elfcpp::R_POWERPC_GOT_DTPREL16_HI: case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
@ -8709,7 +8709,7 @@ Target_powerpc<size, big_endian>::Scan::global(
} }
break; break;
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_POWERPC_GOT_TPREL16: case elfcpp::R_POWERPC_GOT_TPREL16:
case elfcpp::R_POWERPC_GOT_TPREL16_LO: case elfcpp::R_POWERPC_GOT_TPREL16_LO:
case elfcpp::R_POWERPC_GOT_TPREL16_HI: case elfcpp::R_POWERPC_GOT_TPREL16_HI:
@ -8935,10 +8935,10 @@ Target_powerpc<size, big_endian>::Scan::global(
case elfcpp::R_PPC64_PLT_PCREL34: case elfcpp::R_PPC64_PLT_PCREL34:
case elfcpp::R_PPC64_PLT_PCREL34_NOTOC: case elfcpp::R_PPC64_PLT_PCREL34_NOTOC:
case elfcpp::R_PPC64_GOT_PCREL34: case elfcpp::R_PPC64_GOT_PCREL34:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
target->set_power10_stubs(); target->set_power10_stubs();
break; break;
default: default:
@ -10263,7 +10263,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|| r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO
|| r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HI || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HI
|| r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HA || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HA
|| r_type == elfcpp::R_PPC64_GOT_TLSGD34) || r_type == elfcpp::R_PPC64_GOT_TLSGD_PCREL34)
{ {
// First instruction of a global dynamic sequence, arg setup insn. // First instruction of a global dynamic sequence, arg setup insn.
const bool final = gsym == NULL || gsym->final_value_is_known(); const bool final = gsym == NULL || gsym->final_value_is_known();
@ -10285,14 +10285,14 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
gold_assert(object->local_has_got_offset(r_sym, got_type)); gold_assert(object->local_has_got_offset(r_sym, got_type));
value = object->local_got_offset(r_sym, got_type); value = object->local_got_offset(r_sym, got_type);
} }
if (r_type == elfcpp::R_PPC64_GOT_TLSGD34) if (r_type == elfcpp::R_PPC64_GOT_TLSGD_PCREL34)
value += target->got_section()->address(); value += target->got_section()->address();
else else
value -= target->got_section()->got_base_offset(object); value -= target->got_section()->got_base_offset(object);
} }
if (tls_type == tls::TLSOPT_TO_IE) if (tls_type == tls::TLSOPT_TO_IE)
{ {
if (r_type == elfcpp::R_PPC64_GOT_TLSGD34) if (r_type == elfcpp::R_PPC64_GOT_TLSGD_PCREL34)
{ {
Insn* iview = reinterpret_cast<Insn*>(view); Insn* iview = reinterpret_cast<Insn*>(view);
uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview); uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview);
@ -10303,7 +10303,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
elfcpp::Swap<32, big_endian>::writeval(iview, pinsn >> 32); elfcpp::Swap<32, big_endian>::writeval(iview, pinsn >> 32);
elfcpp::Swap<32, big_endian>::writeval(iview + 1, elfcpp::Swap<32, big_endian>::writeval(iview + 1,
pinsn & 0xffffffff); pinsn & 0xffffffff);
r_type = elfcpp::R_PPC64_GOT_TPREL34; r_type = elfcpp::R_PPC64_GOT_TPREL_PCREL34;
} }
else else
{ {
@ -10325,7 +10325,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
} }
else if (tls_type == tls::TLSOPT_TO_LE) else if (tls_type == tls::TLSOPT_TO_LE)
{ {
if (r_type == elfcpp::R_PPC64_GOT_TLSGD34) if (r_type == elfcpp::R_PPC64_GOT_TLSGD_PCREL34)
{ {
Insn* iview = reinterpret_cast<Insn*>(view); Insn* iview = reinterpret_cast<Insn*>(view);
uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview); uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview);
@ -10369,14 +10369,14 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|| r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO
|| r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HI || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HI
|| r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HA || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HA
|| r_type == elfcpp::R_PPC64_GOT_TLSLD34) || r_type == elfcpp::R_PPC64_GOT_TLSLD_PCREL34)
{ {
// First instruction of a local dynamic sequence, arg setup insn. // First instruction of a local dynamic sequence, arg setup insn.
const tls::Tls_optimization tls_type = target->optimize_tls_ld(); const tls::Tls_optimization tls_type = target->optimize_tls_ld();
if (tls_type == tls::TLSOPT_NONE) if (tls_type == tls::TLSOPT_NONE)
{ {
value = target->tlsld_got_offset(); value = target->tlsld_got_offset();
if (r_type == elfcpp::R_PPC64_GOT_TLSLD34) if (r_type == elfcpp::R_PPC64_GOT_TLSLD_PCREL34)
value += target->got_section()->address(); value += target->got_section()->address();
else else
value -= target->got_section()->got_base_offset(object); value -= target->got_section()->got_base_offset(object);
@ -10384,7 +10384,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
else else
{ {
gold_assert(tls_type == tls::TLSOPT_TO_LE); gold_assert(tls_type == tls::TLSOPT_TO_LE);
if (r_type == elfcpp::R_PPC64_GOT_TLSLD34) if (r_type == elfcpp::R_PPC64_GOT_TLSLD_PCREL34)
{ {
Insn* iview = reinterpret_cast<Insn*>(view); Insn* iview = reinterpret_cast<Insn*>(view);
uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview); uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview);
@ -10425,7 +10425,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|| r_type == elfcpp::R_POWERPC_GOT_DTPREL16_LO || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_LO
|| r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HI || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HI
|| r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HA || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HA
|| r_type == elfcpp::R_PPC64_GOT_DTPREL34) || r_type == elfcpp::R_PPC64_GOT_DTPREL_PCREL34)
{ {
// Accesses relative to a local dynamic sequence address, // Accesses relative to a local dynamic sequence address,
// no optimisation here. // no optimisation here.
@ -10439,7 +10439,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
gold_assert(object->local_has_got_offset(r_sym, GOT_TYPE_DTPREL)); gold_assert(object->local_has_got_offset(r_sym, GOT_TYPE_DTPREL));
value = object->local_got_offset(r_sym, GOT_TYPE_DTPREL); value = object->local_got_offset(r_sym, GOT_TYPE_DTPREL);
} }
if (r_type == elfcpp::R_PPC64_GOT_DTPREL34) if (r_type == elfcpp::R_PPC64_GOT_DTPREL_PCREL34)
value += target->got_section()->address(); value += target->got_section()->address();
else else
value -= target->got_section()->got_base_offset(object); value -= target->got_section()->got_base_offset(object);
@ -10448,7 +10448,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|| r_type == elfcpp::R_POWERPC_GOT_TPREL16_LO || r_type == elfcpp::R_POWERPC_GOT_TPREL16_LO
|| r_type == elfcpp::R_POWERPC_GOT_TPREL16_HI || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HI
|| r_type == elfcpp::R_POWERPC_GOT_TPREL16_HA || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HA
|| r_type == elfcpp::R_PPC64_GOT_TPREL34) || r_type == elfcpp::R_PPC64_GOT_TPREL_PCREL34)
{ {
// First instruction of initial exec sequence. // First instruction of initial exec sequence.
const bool final = gsym == NULL || gsym->final_value_is_known(); const bool final = gsym == NULL || gsym->final_value_is_known();
@ -10465,7 +10465,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
gold_assert(object->local_has_got_offset(r_sym, GOT_TYPE_TPREL)); gold_assert(object->local_has_got_offset(r_sym, GOT_TYPE_TPREL));
value = object->local_got_offset(r_sym, GOT_TYPE_TPREL); value = object->local_got_offset(r_sym, GOT_TYPE_TPREL);
} }
if (r_type == elfcpp::R_PPC64_GOT_TPREL34) if (r_type == elfcpp::R_PPC64_GOT_TPREL_PCREL34)
value += target->got_section()->address(); value += target->got_section()->address();
else else
value -= target->got_section()->got_base_offset(object); value -= target->got_section()->got_base_offset(object);
@ -10473,7 +10473,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
else else
{ {
gold_assert(tls_type == tls::TLSOPT_TO_LE); gold_assert(tls_type == tls::TLSOPT_TO_LE);
if (r_type == elfcpp::R_PPC64_GOT_TPREL34) if (r_type == elfcpp::R_PPC64_GOT_TPREL_PCREL34)
{ {
Insn* iview = reinterpret_cast<Insn*>(view); Insn* iview = reinterpret_cast<Insn*>(view);
uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview); uint64_t pinsn = elfcpp::Swap<32, big_endian>::readval(iview);
@ -10745,10 +10745,10 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
case elfcpp::R_PPC64_PLT_PCREL34: case elfcpp::R_PPC64_PLT_PCREL34:
case elfcpp::R_PPC64_PLT_PCREL34_NOTOC: case elfcpp::R_PPC64_PLT_PCREL34_NOTOC:
case elfcpp::R_PPC64_PCREL28: case elfcpp::R_PPC64_PCREL28:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
case elfcpp::R_PPC64_REL16_HIGHER34: case elfcpp::R_PPC64_REL16_HIGHER34:
case elfcpp::R_PPC64_REL16_HIGHERA34: case elfcpp::R_PPC64_REL16_HIGHERA34:
case elfcpp::R_PPC64_REL16_HIGHEST34: case elfcpp::R_PPC64_REL16_HIGHEST34:
@ -11285,10 +11285,10 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
case elfcpp::R_PPC64_PCREL28: case elfcpp::R_PPC64_PCREL28:
case elfcpp::R_PPC64_TPREL34: case elfcpp::R_PPC64_TPREL34:
case elfcpp::R_PPC64_DTPREL34: case elfcpp::R_PPC64_DTPREL34:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
overflow = Reloc::CHECK_SIGNED; overflow = Reloc::CHECK_SIGNED;
break; break;
} }
@ -11587,10 +11587,10 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
case elfcpp::R_PPC64_PLT_PCREL34_NOTOC: case elfcpp::R_PPC64_PLT_PCREL34_NOTOC:
case elfcpp::R_PPC64_TPREL34: case elfcpp::R_PPC64_TPREL34:
case elfcpp::R_PPC64_DTPREL34: case elfcpp::R_PPC64_DTPREL34:
case elfcpp::R_PPC64_GOT_TLSGD34: case elfcpp::R_PPC64_GOT_TLSGD_PCREL34:
case elfcpp::R_PPC64_GOT_TLSLD34: case elfcpp::R_PPC64_GOT_TLSLD_PCREL34:
case elfcpp::R_PPC64_GOT_TPREL34: case elfcpp::R_PPC64_GOT_TPREL_PCREL34:
case elfcpp::R_PPC64_GOT_DTPREL34: case elfcpp::R_PPC64_GOT_DTPREL_PCREL34:
if (size == 32) if (size == 32)
goto unsupp; goto unsupp;
status = Reloc::addr34(view, value, overflow); status = Reloc::addr34(view, value, overflow);

View File

@ -1,3 +1,11 @@
2020-06-06 Alan Modra <amodra@gmail.com>
* elf/ppc64.h (elf_ppc64_reloc_type): Rename
R_PPC64_GOT_TLSGD34 to R_PPC64_GOT_TLSGD_PCREL34,
R_PPC64_GOT_TLSLD34 to R_PPC64_GOT_TLSLD_PCREL34,
R_PPC64_GOT_TPREL34 to R_PPC64_GOT_TPREL_PCREL34, and
R_PPC64_GOT_DTPREL34 to R_PPC64_GOT_DTPREL_PCREL34.
2020-06-04 Jose E. Marchesi <jose.marchesi@oracle.com> 2020-06-04 Jose E. Marchesi <jose.marchesi@oracle.com>
* opcode/cgen.h: Get an `endian' argument in both * opcode/cgen.h: Get an `endian' argument in both

View File

@ -183,10 +183,10 @@ START_RELOC_NUMBERS (elf_ppc64_reloc_type)
RELOC_NUMBER (R_PPC64_PCREL28, 145) RELOC_NUMBER (R_PPC64_PCREL28, 145)
RELOC_NUMBER (R_PPC64_TPREL34, 146) RELOC_NUMBER (R_PPC64_TPREL34, 146)
RELOC_NUMBER (R_PPC64_DTPREL34, 147) RELOC_NUMBER (R_PPC64_DTPREL34, 147)
RELOC_NUMBER (R_PPC64_GOT_TLSGD34, 148) RELOC_NUMBER (R_PPC64_GOT_TLSGD_PCREL34, 148)
RELOC_NUMBER (R_PPC64_GOT_TLSLD34, 149) RELOC_NUMBER (R_PPC64_GOT_TLSLD_PCREL34, 149)
RELOC_NUMBER (R_PPC64_GOT_TPREL34, 150) RELOC_NUMBER (R_PPC64_GOT_TPREL_PCREL34, 150)
RELOC_NUMBER (R_PPC64_GOT_DTPREL34, 151) RELOC_NUMBER (R_PPC64_GOT_DTPREL_PCREL34, 151)
#ifndef RELOC_MACROS_GEN_FUNC #ifndef RELOC_MACROS_GEN_FUNC
/* Relocation only used internally by gas or ld. If you need to use /* Relocation only used internally by gas or ld. If you need to use
@ -225,7 +225,7 @@ END_RELOC_NUMBERS (R_PPC64_max)
#define IS_PPC64_TLS_RELOC(R) \ #define IS_PPC64_TLS_RELOC(R) \
(((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) \ (((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) \
|| ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA) \ || ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA) \
|| ((R) >= R_PPC64_TPREL34 && (R) <= R_PPC64_GOT_DTPREL34)) || ((R) >= R_PPC64_TPREL34 && (R) <= R_PPC64_GOT_DTPREL_PCREL34))
/* e_flags bits specifying ABI. /* e_flags bits specifying ABI.
1 for original function descriptor using ABI, 1 for original function descriptor using ABI,