mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
x86: Add GENERATE_RELATIVE_RELOC_P
Add GENERATE_RELATIVE_RELOC_P which returns TRUE if dynamic relative relocation should be generated. * elfxx-x86.h (GENERATE_RELATIVE_RELOC_P): New. * elf32-i386.c (elf_i386_relocate_section): Use it. * elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
This commit is contained in:
parent
1f92404c50
commit
f70656b260
@ -1,3 +1,9 @@
|
||||
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elfxx-x86.h (GENERATE_RELATIVE_RELOC_P): New.
|
||||
* elf32-i386.c (elf_i386_relocate_section): Use it.
|
||||
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
|
||||
|
||||
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elfxx-x86.h (RESOLVED_LOCALLY_P): New.
|
||||
|
@ -2531,10 +2531,7 @@ r_386_got32:
|
||||
htab->elf.sgot->contents + off);
|
||||
h->got.offset |= 1;
|
||||
|
||||
if (h->dynindx == -1
|
||||
&& !h->forced_local
|
||||
&& h->root.type != bfd_link_hash_undefweak
|
||||
&& bfd_link_pic (info))
|
||||
if (GENERATE_RELATIVE_RELOC_P (info, h))
|
||||
{
|
||||
/* PR ld/21402: If this symbol isn't dynamic
|
||||
in PIC, generate R_386_RELATIVE here. */
|
||||
|
@ -2797,10 +2797,7 @@ do_ifunc_pointer:
|
||||
as -1 | 1 still is -1. */
|
||||
h->got.offset |= 1;
|
||||
|
||||
if (h->dynindx == -1
|
||||
&& !h->forced_local
|
||||
&& h->root.type != bfd_link_hash_undefweak
|
||||
&& bfd_link_pic (info))
|
||||
if (GENERATE_RELATIVE_RELOC_P (info, h))
|
||||
{
|
||||
/* If this symbol isn't dynamic in PIC,
|
||||
generate R_X86_64_RELATIVE here. */
|
||||
|
@ -124,6 +124,18 @@
|
||||
|| (ELF_ST_VISIBILITY ((H)->other) \
|
||||
&& (H)->root.type == bfd_link_hash_undefweak))
|
||||
|
||||
/* TRUE if relative relocation should be generated. GOT reference to
|
||||
global symbol in PIC will lead to dynamic symbol. It becomes a
|
||||
problem when "time" or "times" is defined as a variable in an
|
||||
executable, clashing with functions of the same name in libc. If a
|
||||
symbol isn't undefined weak symbol, don't make it dynamic in PIC and
|
||||
generate relative relocation. */
|
||||
#define GENERATE_RELATIVE_RELOC_P(INFO, H) \
|
||||
((H)->dynindx == -1 \
|
||||
&& !(H)->forced_local \
|
||||
&& (H)->root.type != bfd_link_hash_undefweak \
|
||||
&& bfd_link_pic (INFO))
|
||||
|
||||
/* TRUE if TLS IE->LE transition is OK. */
|
||||
#define TLS_TRANSITION_IE_TO_LE_P(INFO, H, TLS_TYPE) \
|
||||
(bfd_link_executable (INFO) \
|
||||
|
Loading…
Reference in New Issue
Block a user