mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-27 05:50:43 +00:00
Replace DT_PPC_TLSOPT with DT_PPC_OPT.
This removes the DT_PPC_TLSOPT/DT_PPC64_TLSOPT dynamic tag and replaces it with DT_PPC_OPT/DT_PPC64_OPT tag to provide the same functionality and more. This isn't backwards compatible, but the TLSOPT tag hasn't been used since the tls optimisation support was never submitted to glibc. /include/elf/ * ppc.h (DT_PPC_TLSOPT): Delete. (DT_PPC_OPT, PPC_OPT_TLS): Define. * ppc64.h (DT_PPC64_TLSOPT): Delete. (DT_PPC64_OPT, PPC64_OPT_TLS, PPC64_OPT_MULTI_TOC): Define. bfd/ * elf32-ppc.c (ppc_elf_size_dynamic_sections): Use new DT_PPC_OPT tag to specify tls optimisation. * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise. (ppc64_elf_finish_dynamic_sections): Specify whether multiple toc pointers are used via DT_PPC64_OPT. binutils/ * readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT. (get_ppc64_dynamic_type): Replace PPC64_TLSOPT with PPC64_OPT.
This commit is contained in:
parent
a078d95abc
commit
e8910a83af
@ -1,3 +1,11 @@
|
||||
2013-10-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-ppc.c (ppc_elf_size_dynamic_sections): Use new DT_PPC_OPT
|
||||
tag to specify tls optimisation.
|
||||
* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise.
|
||||
(ppc64_elf_finish_dynamic_sections): Specify whether multiple
|
||||
toc pointers are used via DT_PPC64_OPT.
|
||||
|
||||
2013-10-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf64-ppc.c (STK_LR, STK_TOC, STK_LINKER): Define.
|
||||
|
@ -6488,7 +6488,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!htab->no_tls_get_addr_opt
|
||||
&& htab->tls_get_addr != NULL
|
||||
&& htab->tls_get_addr->plt.plist != NULL
|
||||
&& !add_dynamic_entry (DT_PPC_TLSOPT, 0))
|
||||
&& !add_dynamic_entry (DT_PPC_OPT, PPC_OPT_TLS))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -9790,6 +9790,8 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
|
||||
|
||||
if (htab->elf.dynamic_sections_created)
|
||||
{
|
||||
bfd_boolean tls_opt;
|
||||
|
||||
/* Add some entries to the .dynamic section. We fill in the
|
||||
values later, in ppc64_elf_finish_dynamic_sections, but we
|
||||
must add the entries now so that we get the correct size for
|
||||
@ -9821,11 +9823,14 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!htab->no_tls_get_addr_opt
|
||||
&& htab->tls_get_addr_fd != NULL
|
||||
&& htab->tls_get_addr_fd->elf.plt.plist != NULL
|
||||
&& !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
|
||||
return FALSE;
|
||||
tls_opt = (!htab->no_tls_get_addr_opt
|
||||
&& htab->tls_get_addr_fd != NULL
|
||||
&& htab->tls_get_addr_fd->elf.plt.plist != NULL);
|
||||
if (tls_opt || !htab->opd_abi)
|
||||
{
|
||||
if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (relocs)
|
||||
{
|
||||
@ -14659,6 +14664,11 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
|
||||
dyn.d_un.d_ptr = s->vma;
|
||||
break;
|
||||
|
||||
case DT_PPC64_OPT:
|
||||
if (htab->do_multi_toc && htab->multi_toc_needed)
|
||||
dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
|
||||
break;
|
||||
|
||||
case DT_PPC64_OPDSZ:
|
||||
s = bfd_get_section_by_name (output_bfd, ".opd");
|
||||
if (s == NULL)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-10-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT.
|
||||
(get_ppc64_dynamic_type): Replace PPC64_TLSOPT with PPC64_OPT.
|
||||
|
||||
2013-10-30 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* readelf.c (get_ppc64_symbol_other): New function.
|
||||
|
@ -1575,7 +1575,7 @@ get_ppc_dynamic_type (unsigned long type)
|
||||
switch (type)
|
||||
{
|
||||
case DT_PPC_GOT: return "PPC_GOT";
|
||||
case DT_PPC_TLSOPT: return "PPC_TLSOPT";
|
||||
case DT_PPC_OPT: return "PPC_OPT";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@ -1589,7 +1589,7 @@ get_ppc64_dynamic_type (unsigned long type)
|
||||
case DT_PPC64_GLINK: return "PPC64_GLINK";
|
||||
case DT_PPC64_OPD: return "PPC64_OPD";
|
||||
case DT_PPC64_OPDSZ: return "PPC64_OPDSZ";
|
||||
case DT_PPC64_TLSOPT: return "PPC64_TLSOPT";
|
||||
case DT_PPC64_OPT: return "PPC64_OPT";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1,3 +1,10 @@
|
||||
2013-10-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ppc.h (DT_PPC_TLSOPT): Delete.
|
||||
(DT_PPC_OPT, PPC_OPT_TLS): Define.
|
||||
* ppc64.h (DT_PPC64_TLSOPT): Delete.
|
||||
(DT_PPC64_OPT, PPC64_OPT_TLS, PPC64_OPT_MULTI_TOC): Define.
|
||||
|
||||
2013-10-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ppc64.h (STO_PPC64_LOCAL_BIT, STO_PPC64_LOCAL_MASK): Define.
|
||||
|
@ -176,7 +176,8 @@ END_RELOC_NUMBERS (R_PPC_max)
|
||||
#define DT_PPC_GOT (DT_LOPROC)
|
||||
|
||||
/* Specify that tls descriptors should be optimized. */
|
||||
#define DT_PPC_TLSOPT (DT_LOPROC + 1)
|
||||
#define DT_PPC_OPT (DT_LOPROC + 1)
|
||||
#define PPC_OPT_TLS 1
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
|
||||
|
@ -234,7 +234,9 @@ ppc64_encode_local_entry(unsigned int val)
|
||||
#define DT_PPC64_OPD (DT_LOPROC + 1)
|
||||
#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
|
||||
|
||||
/* Specify that tls descriptors should be optimized. */
|
||||
#define DT_PPC64_TLSOPT (DT_LOPROC + 3)
|
||||
/* Specify whether various optimisations are possible. */
|
||||
#define DT_PPC64_OPT (DT_LOPROC + 3)
|
||||
#define PPC64_OPT_TLS 1
|
||||
#define PPC64_OPT_MULTI_TOC 2
|
||||
|
||||
#endif /* _ELF_PPC64_H */
|
||||
|
Loading…
Reference in New Issue
Block a user