mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +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:
@ -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>
|
2017-10-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elfxx-x86.h (RESOLVED_LOCALLY_P): New.
|
* elfxx-x86.h (RESOLVED_LOCALLY_P): New.
|
||||||
|
@ -2531,10 +2531,7 @@ r_386_got32:
|
|||||||
htab->elf.sgot->contents + off);
|
htab->elf.sgot->contents + off);
|
||||||
h->got.offset |= 1;
|
h->got.offset |= 1;
|
||||||
|
|
||||||
if (h->dynindx == -1
|
if (GENERATE_RELATIVE_RELOC_P (info, h))
|
||||||
&& !h->forced_local
|
|
||||||
&& h->root.type != bfd_link_hash_undefweak
|
|
||||||
&& bfd_link_pic (info))
|
|
||||||
{
|
{
|
||||||
/* PR ld/21402: If this symbol isn't dynamic
|
/* PR ld/21402: If this symbol isn't dynamic
|
||||||
in PIC, generate R_386_RELATIVE here. */
|
in PIC, generate R_386_RELATIVE here. */
|
||||||
|
@ -2797,10 +2797,7 @@ do_ifunc_pointer:
|
|||||||
as -1 | 1 still is -1. */
|
as -1 | 1 still is -1. */
|
||||||
h->got.offset |= 1;
|
h->got.offset |= 1;
|
||||||
|
|
||||||
if (h->dynindx == -1
|
if (GENERATE_RELATIVE_RELOC_P (info, h))
|
||||||
&& !h->forced_local
|
|
||||||
&& h->root.type != bfd_link_hash_undefweak
|
|
||||||
&& bfd_link_pic (info))
|
|
||||||
{
|
{
|
||||||
/* If this symbol isn't dynamic in PIC,
|
/* If this symbol isn't dynamic in PIC,
|
||||||
generate R_X86_64_RELATIVE here. */
|
generate R_X86_64_RELATIVE here. */
|
||||||
|
@ -124,6 +124,18 @@
|
|||||||
|| (ELF_ST_VISIBILITY ((H)->other) \
|
|| (ELF_ST_VISIBILITY ((H)->other) \
|
||||||
&& (H)->root.type == bfd_link_hash_undefweak))
|
&& (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. */
|
/* TRUE if TLS IE->LE transition is OK. */
|
||||||
#define TLS_TRANSITION_IE_TO_LE_P(INFO, H, TLS_TYPE) \
|
#define TLS_TRANSITION_IE_TO_LE_P(INFO, H, TLS_TYPE) \
|
||||||
(bfd_link_executable (INFO) \
|
(bfd_link_executable (INFO) \
|
||||||
|
Reference in New Issue
Block a user