From 9737e8af48e257f24e860fbf36af8c314e73076a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 7 Oct 2019 13:17:59 +1030 Subject: [PATCH] PowerPC section flag tidy has_tls_get_addr_call is no longer named correctly as the flag is only set on finding a __tls_get_addr call without tlsld/tlsgd marker relocations. * elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call throughout. * elf64-ppc.c (nomark_tls_get_addr): Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-ppc.c | 15 ++++++++------- bfd/elf64-ppc.c | 15 ++++++++------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 09f34ed524..9f3489920b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-10-07 Alan Modra + + * elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call + throughout. + * elf64-ppc.c (nomark_tls_get_addr): Likewise. + 2019-10-04 Alan Modra * elf64-ppc.c (ppc64_elf_check_relocs): Move initialisation of vars. diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 89d1e94378..d5c3ae9d0b 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2222,8 +2222,9 @@ struct ppc_elf_link_hash_table /* Nonzero if this section has TLS related relocations. */ #define has_tls_reloc sec_flg0 -/* Nonzero if this section has a call to __tls_get_addr. */ -#define has_tls_get_addr_call sec_flg1 +/* Nonzero if this section has a call to __tls_get_addr lacking marker + relocs. */ +#define nomark_tls_get_addr sec_flg1 /* Flag set when PLTCALL relocs are detected. */ #define has_pltcall sec_flg2 @@ -3010,7 +3011,7 @@ ppc_elf_check_relocs (bfd *abfd, ; else /* Mark this section as having an old-style call. */ - sec->has_tls_get_addr_call = 1; + sec->nomark_tls_get_addr = 1; } switch (r_type) @@ -4464,7 +4465,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, setup insn. If we don't find matching arg setup relocs, don't do any tls optimization. */ if (pass == 0 - && sec->has_tls_get_addr_call + && sec->nomark_tls_get_addr && h != NULL && h == htab->tls_get_addr && !expecting_tls_get_addr @@ -4577,7 +4578,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, if (pass == 0) { if (!expecting_tls_get_addr - || !sec->has_tls_get_addr_call) + || !sec->nomark_tls_get_addr) continue; if (rel + 1 < relend @@ -4627,7 +4628,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, indirect call to __tls_get_addr without a marker. Disable optimization in this case. */ if ((tls_clear & (TLS_GD | TLS_LD)) != 0 - && !sec->has_tls_get_addr_call + && !sec->nomark_tls_get_addr && ((*tls_mask & (TLS_TLS | TLS_MARK)) != (TLS_TLS | TLS_MARK))) continue; @@ -7224,7 +7225,7 @@ ppc_elf_relocate_section (bfd *output_bfd, stays with its arg setup insns, ie. that the next reloc is the __tls_get_addr call associated with the current reloc. Edit both insns. */ - if (input_section->has_tls_get_addr_call + if (input_section->nomark_tls_get_addr && rel + 1 < relend && branch_reloc_hash_match (input_bfd, rel + 1, htab->tls_get_addr)) diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 30b07428be..31c86b4027 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3218,8 +3218,9 @@ struct ppc_link_hash_table /* Nonzero if this section has TLS related relocations. */ #define has_tls_reloc sec_flg0 -/* Nonzero if this section has an old-style call to __tls_get_addr. */ -#define has_tls_get_addr_call sec_flg1 +/* Nonzero if this section has a call to __tls_get_addr lacking marker + relocations. */ +#define nomark_tls_get_addr sec_flg1 /* Nonzero if this section has any toc or got relocs. */ #define has_toc_reloc sec_flg2 @@ -4925,7 +4926,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, ; else /* Mark this section as having an old-style call. */ - sec->has_tls_get_addr_call = 1; + sec->nomark_tls_get_addr = 1; } plt_list = &h->plt.plist; } @@ -7833,7 +7834,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info) setup insn. If we don't find matching arg setup relocs, don't do any tls optimization. */ if (pass == 0 - && sec->has_tls_get_addr_call + && sec->nomark_tls_get_addr && h != NULL && (h == &htab->tls_get_addr->elf || h == &htab->tls_get_addr_fd->elf) @@ -8034,7 +8035,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info) if (pass == 0) { if (!expecting_tls_get_addr - || !sec->has_tls_get_addr_call) + || !sec->nomark_tls_get_addr) continue; if (rel + 1 < relend @@ -8086,7 +8087,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info) Disable optimization in this case. */ if ((tls_clear & (TLS_GD | TLS_LD)) != 0 && (tls_set & TLS_EXPLICIT) == 0 - && !sec->has_tls_get_addr_call + && !sec->nomark_tls_get_addr && ((*tls_mask & (TLS_TLS | TLS_MARK)) != (TLS_TLS | TLS_MARK))) continue; @@ -14726,7 +14727,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, stays with its arg setup insns, ie. that the next reloc is the __tls_get_addr call associated with the current reloc. Edit both insns. */ - if (input_section->has_tls_get_addr_call + if (input_section->nomark_tls_get_addr && rel + 1 < relend && branch_reloc_hash_match (input_bfd, rel + 1, htab->tls_get_addr,