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:
Alan Modra 2013-10-29 16:34:35 +10:30
parent a078d95abc
commit e8910a83af
8 changed files with 44 additions and 11 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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)

View File

@ -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.

View File

@ -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;
}

View File

@ -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.

View File

@ -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. */

View File

@ -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 */