Commit 068f9cf7 authored by Alan Modra's avatar Alan Modra

Replace DT_PPC_TLSOPT with DT_PPC_OPT.

(cherry picked from commit e8910a83af41c3dbfd00191b2720d4094f8d9532)
parent 8ac63197
2013-11-15 Alan Modra <amodra@gmail.com> 2013-11-15 Alan Modra <amodra@gmail.com>
Apply changes from mainline to 2.24 Apply changes from mainline to 2.24
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> 2013-10-30 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (STK_LR, STK_TOC, STK_LINKER): Define. * elf64-ppc.c (STK_LR, STK_TOC, STK_LINKER): Define.
(savegpr0_tail, restgpr0_tail, savefpr0_tail, restfpr0_tail) (savegpr0_tail, restgpr0_tail, savefpr0_tail, restfpr0_tail)
......
...@@ -6488,7 +6488,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, ...@@ -6488,7 +6488,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
if (!htab->no_tls_get_addr_opt if (!htab->no_tls_get_addr_opt
&& htab->tls_get_addr != NULL && htab->tls_get_addr != NULL
&& htab->tls_get_addr->plt.plist != 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; return FALSE;
} }
......
...@@ -9790,6 +9790,8 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, ...@@ -9790,6 +9790,8 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
if (htab->elf.dynamic_sections_created) if (htab->elf.dynamic_sections_created)
{ {
bfd_boolean tls_opt;
/* Add some entries to the .dynamic section. We fill in the /* Add some entries to the .dynamic section. We fill in the
values later, in ppc64_elf_finish_dynamic_sections, but we values later, in ppc64_elf_finish_dynamic_sections, but we
must add the entries now so that we get the correct size for 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, ...@@ -9821,11 +9823,14 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd,
return FALSE; return FALSE;
} }
if (!htab->no_tls_get_addr_opt tls_opt = (!htab->no_tls_get_addr_opt
&& htab->tls_get_addr_fd != NULL && htab->tls_get_addr_fd != NULL
&& htab->tls_get_addr_fd->elf.plt.plist != NULL && htab->tls_get_addr_fd->elf.plt.plist != NULL);
&& !add_dynamic_entry (DT_PPC64_TLSOPT, 0)) if (tls_opt || !htab->opd_abi)
return FALSE; {
if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
return FALSE;
}
if (relocs) if (relocs)
{ {
...@@ -14659,6 +14664,11 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd, ...@@ -14659,6 +14664,11 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
dyn.d_un.d_ptr = s->vma; dyn.d_un.d_ptr = s->vma;
break; 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: case DT_PPC64_OPDSZ:
s = bfd_get_section_by_name (output_bfd, ".opd"); s = bfd_get_section_by_name (output_bfd, ".opd");
if (s == NULL) if (s == NULL)
......
2013-11-15 Alan Modra <amodra@gmail.com> 2013-11-15 Alan Modra <amodra@gmail.com>
Apply changes from mainline to 2.24 Apply changes from mainline to 2.24
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> 2013-10-30 Ulrich Weigand <uweigand@de.ibm.com>
* readelf.c (get_ppc64_symbol_other): New function. * readelf.c (get_ppc64_symbol_other): New function.
(get_symbol_other): Use it for EM_PPC64. (get_symbol_other): Use it for EM_PPC64.
......
...@@ -1575,7 +1575,7 @@ get_ppc_dynamic_type (unsigned long type) ...@@ -1575,7 +1575,7 @@ get_ppc_dynamic_type (unsigned long type)
switch (type) switch (type)
{ {
case DT_PPC_GOT: return "PPC_GOT"; case DT_PPC_GOT: return "PPC_GOT";
case DT_PPC_TLSOPT: return "PPC_TLSOPT"; case DT_PPC_OPT: return "PPC_OPT";
default: default:
return NULL; return NULL;
} }
...@@ -1589,7 +1589,7 @@ get_ppc64_dynamic_type (unsigned long type) ...@@ -1589,7 +1589,7 @@ get_ppc64_dynamic_type (unsigned long type)
case DT_PPC64_GLINK: return "PPC64_GLINK"; case DT_PPC64_GLINK: return "PPC64_GLINK";
case DT_PPC64_OPD: return "PPC64_OPD"; case DT_PPC64_OPD: return "PPC64_OPD";
case DT_PPC64_OPDSZ: return "PPC64_OPDSZ"; case DT_PPC64_OPDSZ: return "PPC64_OPDSZ";
case DT_PPC64_TLSOPT: return "PPC64_TLSOPT"; case DT_PPC64_OPT: return "PPC64_OPT";
default: default:
return NULL; return NULL;
} }
......
2013-11-15 Alan Modra <amodra@gmail.com> 2013-11-15 Alan Modra <amodra@gmail.com>
Apply changes from mainline to 2.24 Apply changes from mainline to 2.24
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> 2013-10-30 Alan Modra <amodra@gmail.com>
* ppc64.h (STO_PPC64_LOCAL_BIT, STO_PPC64_LOCAL_MASK): Define. * ppc64.h (STO_PPC64_LOCAL_BIT, STO_PPC64_LOCAL_MASK): Define.
(ppc64_decode_local_entry, ppc64_encode_local_entry): New functions. (ppc64_decode_local_entry, ppc64_encode_local_entry): New functions.
......
...@@ -176,7 +176,8 @@ END_RELOC_NUMBERS (R_PPC_max) ...@@ -176,7 +176,8 @@ END_RELOC_NUMBERS (R_PPC_max)
#define DT_PPC_GOT (DT_LOPROC) #define DT_PPC_GOT (DT_LOPROC)
/* Specify that tls descriptors should be optimized. */ /* 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. */ /* Processor specific flags for the ELF header e_flags field. */
......
...@@ -234,7 +234,9 @@ ppc64_encode_local_entry(unsigned int val) ...@@ -234,7 +234,9 @@ ppc64_encode_local_entry(unsigned int val)
#define DT_PPC64_OPD (DT_LOPROC + 1) #define DT_PPC64_OPD (DT_LOPROC + 1)
#define DT_PPC64_OPDSZ (DT_LOPROC + 2) #define DT_PPC64_OPDSZ (DT_LOPROC + 2)
/* Specify that tls descriptors should be optimized. */ /* Specify whether various optimisations are possible. */
#define DT_PPC64_TLSOPT (DT_LOPROC + 3) #define DT_PPC64_OPT (DT_LOPROC + 3)
#define PPC64_OPT_TLS 1
#define PPC64_OPT_MULTI_TOC 2
#endif /* _ELF_PPC64_H */ #endif /* _ELF_PPC64_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment