diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-04-11 07:34:49 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-04-11 07:56:48 -0700 |
commit | e3c0e327923e27c7d96e6e44e22e10998ff158d7 (patch) | |
tree | d4dfd7ed0875d03e7b6c8f1cd51b855fe07d80fb /bfd/elf32-i386.c | |
parent | fbed9c2759d43ea6991264c2e963660b5e9202d1 (diff) | |
download | gdb-e3c0e327923e27c7d96e6e44e22e10998ff158d7.zip gdb-e3c0e327923e27c7d96e6e44e22e10998ff158d7.tar.gz gdb-e3c0e327923e27c7d96e6e44e22e10998ff158d7.tar.bz2 |
Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL
When checking R_386_GOTOFF/R_X86_64_GOTOFF64 for building shared library,
we should check SYMBOL_REFERENCES_LOCAL instead of SYMBOLIC_BIND to cover
more cases.
bfd/
* elf32-i386.c (elf_i386_relocate_section): Replace SYMBOLIC_BIND
with SYMBOL_REFERENCES_LOCAL when checking R_386_GOTOFF against
protected data symbol when building shared library.
* elf64-x86-64.c (elf_x86_64_relocate_section): Check
R_X86_64_GOTOFF64 against undefined symbol and replace
SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL when checking
R_X86_64_GOTOFF64 against protected data symbol when building
shared library.
ld/testsuite/
* ld-i386/i386.exp: Run protected6a.
* ld-i386/protected6.d: Renamed to ...
* ld-i386/protected6a.d: This.
* ld-x86-64/hidden4.d: New file.
* ld-x86-64/hidden4.s: Likewise.
* ld-x86-64/hidden5.d: Likewise.
* ld-x86-64/hidden5.s: Likewise.
* ld-x86-64/protected6.d: Renamed to ...
* ld-x86-64/protected6a.d: This.
* ld-x86-64/x86-64.exp: Run hidden4, hidden5, protected6a,
protected7a and protected7b.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r-- | bfd/elf32-i386.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index af16da3..f71bce1 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -3717,7 +3717,7 @@ elf_i386_relocate_section (bfd *output_bfd, /* Check to make sure it isn't a protected function or data symbol for shared library since it may not be local when used as function address or with copy relocation. We also - need to make sure that a symbol is defined locally. */ + need to make sure that a symbol is referenced locally. */ if (info->shared && h) { if (!h->def_regular) @@ -3747,7 +3747,7 @@ elf_i386_relocate_section (bfd *output_bfd, return FALSE; } else if (!info->executable - && !SYMBOLIC_BIND (info, h) + && !SYMBOL_REFERENCES_LOCAL (info, h) && (h->type == STT_FUNC || h->type == STT_OBJECT) && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) |