mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 21:44:19 +08:00
x86: Add TLS_TRANSITION_IE_TO_LE_P
Add TLS_TRANSITION_IE_TO_LE_P which returns TRUE if TLS IE->LE transition is OK. * elfxx-x86.h (TLS_TRANSITION_IE_TO_LE_P): New. * elf32-i386.c (elf_i386_tls_transition): Use it. * elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
This commit is contained in:
parent
e98fdf1ab0
commit
51537393bd
@ -1,3 +1,9 @@
|
|||||||
|
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* elfxx-x86.h (TLS_TRANSITION_IE_TO_LE_P): New.
|
||||||
|
* elf32-i386.c (elf_i386_tls_transition): Use it.
|
||||||
|
* elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
|
||||||
|
|
||||||
2017-10-05 H.J. Lu <hongjiu.lu@intel.com>
|
2017-10-05 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elf32-ppc.c (readonly_dynrelocs): Add a link_info argument.
|
* elf32-ppc.c (readonly_dynrelocs): Add a link_info argument.
|
||||||
|
@ -1105,10 +1105,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
|
|||||||
{
|
{
|
||||||
unsigned int new_to_type = to_type;
|
unsigned int new_to_type = to_type;
|
||||||
|
|
||||||
if (bfd_link_executable (info)
|
if (TLS_TRANSITION_IE_TO_LE_P (info, h, tls_type))
|
||||||
&& h != NULL
|
|
||||||
&& h->dynindx == -1
|
|
||||||
&& (tls_type & GOT_TLS_IE))
|
|
||||||
new_to_type = R_386_TLS_LE_32;
|
new_to_type = R_386_TLS_LE_32;
|
||||||
|
|
||||||
if (to_type == R_386_TLS_GD
|
if (to_type == R_386_TLS_GD
|
||||||
|
@ -1281,10 +1281,7 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd,
|
|||||||
{
|
{
|
||||||
unsigned int new_to_type = to_type;
|
unsigned int new_to_type = to_type;
|
||||||
|
|
||||||
if (bfd_link_executable (info)
|
if (TLS_TRANSITION_IE_TO_LE_P (info, h, tls_type))
|
||||||
&& h != NULL
|
|
||||||
&& h->dynindx == -1
|
|
||||||
&& tls_type == GOT_TLS_IE)
|
|
||||||
new_to_type = R_X86_64_TPOFF32;
|
new_to_type = R_X86_64_TPOFF32;
|
||||||
|
|
||||||
if (to_type == R_X86_64_TLSGD
|
if (to_type == R_X86_64_TLSGD
|
||||||
|
@ -74,6 +74,13 @@
|
|||||||
&& ((EH)->elf.root.u.def.section->owner->flags & DYNAMIC) != 0 \
|
&& ((EH)->elf.root.u.def.section->owner->flags & DYNAMIC) != 0 \
|
||||||
&& ((EH)->elf.root.u.def.section->flags & SEC_CODE) == 0)
|
&& ((EH)->elf.root.u.def.section->flags & SEC_CODE) == 0)
|
||||||
|
|
||||||
|
/* TRUE if TLS IE->LE transition is OK. */
|
||||||
|
#define TLS_TRANSITION_IE_TO_LE_P(INFO, H, TLS_TYPE) \
|
||||||
|
(bfd_link_executable (INFO) \
|
||||||
|
&& (H) != NULL \
|
||||||
|
&& (H)->dynindx == -1 \
|
||||||
|
&& (TLS_TYPE & GOT_TLS_IE))
|
||||||
|
|
||||||
/* x86 ELF linker hash entry. */
|
/* x86 ELF linker hash entry. */
|
||||||
|
|
||||||
struct elf_x86_link_hash_entry
|
struct elf_x86_link_hash_entry
|
||||||
|
Loading…
Reference in New Issue
Block a user