aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfxx-x86.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-05-18 06:43:19 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-05-18 06:43:34 -0700
commit011b32fd4270fb7111ee1f63695ccd44562ee7df (patch)
tree110abd5acda6059b6296fa3ba26bfa65543ce9de /bfd/elfxx-x86.c
parent4bba0fb1c6d391a217c25e44398a7e1c7090155f (diff)
downloadgdb-011b32fd4270fb7111ee1f63695ccd44562ee7df.zip
gdb-011b32fd4270fb7111ee1f63695ccd44562ee7df.tar.gz
gdb-011b32fd4270fb7111ee1f63695ccd44562ee7df.tar.bz2
x86: Don't set eh->local_ref to 1 for linker defined symbols
Since symbols created by HIDDEN and PROVIDE_HIDDEN assignments in linker script may be marked as defined, but not hidden, we can't set eh->local_ref to 1 in _bfd_x86_elf_link_symbol_references_local. Also R_386_GOT32X should be handled as just like R_386_GOT32 when relocating a section. The input R_386_GOT32X relocations, which can be relaxed, should have been converted to R_386_PC32, R_386_32 or R_386_GOTOFF. bfd/ PR ld/23189 * elf32-i386.c (elf_i386_relocate_section): Handle R_386_GOT32X like R_386_GOT32. * elfxx-x86.c (_bfd_x86_elf_link_symbol_references_local): Don't set eh->local_ref to 1 for linker defined symbols. ld/ PR ld/23189 * testsuite/ld-i386/i386.exp: Run pr23189. * testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-i386/pr23189.d: New file. * testsuite/ld-i386/pr23189.s: Likewise. * testsuite/ld-i386/pr23189.t: Likewise. * testsuite/ld-x86-64/pr23189.d: Likewise. * testsuite/ld-x86-64/pr23189.s: Likewise. * testsuite/ld-x86-64/pr23189.t: Likewise.
Diffstat (limited to 'bfd/elfxx-x86.c')
-rw-r--r--bfd/elfxx-x86.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 936b4c6..f4dbddf 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -2047,7 +2047,11 @@ _bfd_x86_elf_link_symbol_references_local (struct bfd_link_info *info,
return TRUE;
}
- eh->local_ref = 1;
+ /* Symbols created by HIDDEN and PROVIDE_HIDDEN assignments in linker
+ script aren't forced local here yet. */
+ if (!h->root.ldscript_def)
+ eh->local_ref = 1;
+
return FALSE;
}