|
|
7ab123 |
commit e8910a83af41c3dbfd00191b2720d4094f8d9532
|
|
|
7ab123 |
Author: Alan Modra <amodra@gmail.com>
|
|
|
7ab123 |
Date: Tue Oct 29 16:34:35 2013 +1030
|
|
|
7ab123 |
|
|
|
7ab123 |
Replace DT_PPC_TLSOPT with DT_PPC_OPT.
|
|
|
7ab123 |
|
|
|
7ab123 |
This removes the DT_PPC_TLSOPT/DT_PPC64_TLSOPT dynamic tag and replaces
|
|
|
7ab123 |
it with DT_PPC_OPT/DT_PPC64_OPT tag to provide the same functionality
|
|
|
7ab123 |
and more. This isn't backwards compatible, but the TLSOPT tag hasn't
|
|
|
7ab123 |
been used since the tls optimisation support was never submitted to
|
|
|
7ab123 |
glibc.
|
|
|
7ab123 |
|
|
|
7ab123 |
/include/elf/
|
|
|
7ab123 |
* ppc.h (DT_PPC_TLSOPT): Delete.
|
|
|
7ab123 |
(DT_PPC_OPT, PPC_OPT_TLS): Define.
|
|
|
7ab123 |
* ppc64.h (DT_PPC64_TLSOPT): Delete.
|
|
|
7ab123 |
(DT_PPC64_OPT, PPC64_OPT_TLS, PPC64_OPT_MULTI_TOC): Define.
|
|
|
7ab123 |
bfd/
|
|
|
7ab123 |
* elf32-ppc.c (ppc_elf_size_dynamic_sections): Use new DT_PPC_OPT
|
|
|
7ab123 |
tag to specify tls optimisation.
|
|
|
7ab123 |
* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise.
|
|
|
7ab123 |
(ppc64_elf_finish_dynamic_sections): Specify whether multiple
|
|
|
7ab123 |
toc pointers are used via DT_PPC64_OPT.
|
|
|
7ab123 |
binutils/
|
|
|
7ab123 |
* readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT.
|
|
|
7ab123 |
(get_ppc64_dynamic_type): Replace PPC64_TLSOPT with PPC64_OPT.
|
|
|
7ab123 |
|
|
|
7ab123 |
Index: gdb-7.6.1/bfd/elf32-ppc.c
|
|
|
7ab123 |
===================================================================
|
|
|
7ab123 |
--- gdb-7.6.1.orig/bfd/elf32-ppc.c
|
|
|
7ab123 |
+++ gdb-7.6.1/bfd/elf32-ppc.c
|
|
|
7ab123 |
@@ -6443,7 +6443,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
|
|
|
7ab123 |
if (!htab->no_tls_get_addr_opt
|
|
|
7ab123 |
&& htab->tls_get_addr != NULL
|
|
|
7ab123 |
&& htab->tls_get_addr->plt.plist != NULL
|
|
|
7ab123 |
- && !add_dynamic_entry (DT_PPC_TLSOPT, 0))
|
|
|
7ab123 |
+ && !add_dynamic_entry (DT_PPC_OPT, PPC_OPT_TLS))
|
|
|
7ab123 |
return FALSE;
|
|
|
7ab123 |
}
|
|
|
7ab123 |
|
|
|
7ab123 |
Index: gdb-7.6.1/bfd/elf64-ppc.c
|
|
|
7ab123 |
===================================================================
|
|
|
7ab123 |
--- gdb-7.6.1.orig/bfd/elf64-ppc.c
|
|
|
7ab123 |
+++ gdb-7.6.1/bfd/elf64-ppc.c
|
|
|
7ab123 |
@@ -9580,6 +9580,8 @@ ppc64_elf_size_dynamic_sections (bfd *ou
|
|
|
7ab123 |
|
|
|
7ab123 |
if (htab->elf.dynamic_sections_created)
|
|
|
7ab123 |
{
|
|
|
7ab123 |
+ bfd_boolean tls_opt;
|
|
|
7ab123 |
+
|
|
|
7ab123 |
/* Add some entries to the .dynamic section. We fill in the
|
|
|
7ab123 |
values later, in ppc64_elf_finish_dynamic_sections, but we
|
|
|
7ab123 |
must add the entries now so that we get the correct size for
|
|
|
7ab123 |
@@ -9611,11 +9613,14 @@ ppc64_elf_size_dynamic_sections (bfd *ou
|
|
|
7ab123 |
return FALSE;
|
|
|
7ab123 |
}
|
|
|
7ab123 |
|
|
|
7ab123 |
- if (!htab->no_tls_get_addr_opt
|
|
|
7ab123 |
- && htab->tls_get_addr_fd != NULL
|
|
|
7ab123 |
- && htab->tls_get_addr_fd->elf.plt.plist != NULL
|
|
|
7ab123 |
- && !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
|
|
|
7ab123 |
- return FALSE;
|
|
|
7ab123 |
+ tls_opt = (!htab->no_tls_get_addr_opt
|
|
|
7ab123 |
+ && htab->tls_get_addr_fd != NULL
|
|
|
7ab123 |
+ && htab->tls_get_addr_fd->elf.plt.plist != NULL);
|
|
|
7ab123 |
+ if (tls_opt || !htab->opd_abi)
|
|
|
7ab123 |
+ {
|
|
|
7ab123 |
+ if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
|
|
|
7ab123 |
+ return FALSE;
|
|
|
7ab123 |
+ }
|
|
|
7ab123 |
|
|
|
7ab123 |
if (relocs)
|
|
|
7ab123 |
{
|
|
|
7ab123 |
@@ -14394,6 +14399,11 @@ ppc64_elf_finish_dynamic_sections (bfd *
|
|
|
7ab123 |
dyn.d_un.d_ptr = s->vma;
|
|
|
7ab123 |
break;
|
|
|
7ab123 |
|
|
|
7ab123 |
+ case DT_PPC64_OPT:
|
|
|
7ab123 |
+ if (htab->do_multi_toc && htab->multi_toc_needed)
|
|
|
7ab123 |
+ dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
|
|
|
7ab123 |
+ break;
|
|
|
7ab123 |
+
|
|
|
7ab123 |
case DT_PPC64_OPDSZ:
|
|
|
7ab123 |
s = bfd_get_section_by_name (output_bfd, ".opd");
|
|
|
7ab123 |
if (s == NULL)
|
|
|
7ab123 |
Index: gdb-7.6.1/include/elf/ppc.h
|
|
|
7ab123 |
===================================================================
|
|
|
7ab123 |
--- gdb-7.6.1.orig/include/elf/ppc.h
|
|
|
7ab123 |
+++ gdb-7.6.1/include/elf/ppc.h
|
|
|
7ab123 |
@@ -176,7 +176,8 @@ END_RELOC_NUMBERS (R_PPC_max)
|
|
|
7ab123 |
#define DT_PPC_GOT (DT_LOPROC)
|
|
|
7ab123 |
|
|
|
7ab123 |
/* Specify that tls descriptors should be optimized. */
|
|
|
7ab123 |
-#define DT_PPC_TLSOPT (DT_LOPROC + 1)
|
|
|
7ab123 |
+#define DT_PPC_OPT (DT_LOPROC + 1)
|
|
|
7ab123 |
+#define PPC_OPT_TLS 1
|
|
|
7ab123 |
|
|
|
7ab123 |
/* Processor specific flags for the ELF header e_flags field. */
|
|
|
7ab123 |
|
|
|
7ab123 |
Index: gdb-7.6.1/include/elf/ppc64.h
|
|
|
7ab123 |
===================================================================
|
|
|
7ab123 |
--- gdb-7.6.1.orig/include/elf/ppc64.h
|
|
|
7ab123 |
+++ gdb-7.6.1/include/elf/ppc64.h
|
|
|
7ab123 |
@@ -225,7 +225,9 @@ ppc64_encode_local_entry(unsigned int va
|
|
|
7ab123 |
#define DT_PPC64_OPD (DT_LOPROC + 1)
|
|
|
7ab123 |
#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
|
|
|
7ab123 |
|
|
|
7ab123 |
-/* Specify that tls descriptors should be optimized. */
|
|
|
7ab123 |
-#define DT_PPC64_TLSOPT (DT_LOPROC + 3)
|
|
|
7ab123 |
+/* Specify whether various optimisations are possible. */
|
|
|
7ab123 |
+#define DT_PPC64_OPT (DT_LOPROC + 3)
|
|
|
7ab123 |
+#define PPC64_OPT_TLS 1
|
|
|
7ab123 |
+#define PPC64_OPT_MULTI_TOC 2
|
|
|
7ab123 |
|
|
|
7ab123 |
#endif /* _ELF_PPC64_H */
|