diff options
author | Ian Lance Taylor <ian@airs.com> | 2008-08-04 22:22:13 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2008-08-04 22:22:13 +0000 |
commit | de4c45bd54870058d0ee91a652df9f1652b12cdb (patch) | |
tree | 84e4795da42d1cc11212fdea401c73944d38bac3 /gold/x86_64.cc | |
parent | e5e6a5ff6ea89e1f8627d16d492288e0b8e834b1 (diff) | |
download | gdb-de4c45bd54870058d0ee91a652df9f1652b12cdb.zip gdb-de4c45bd54870058d0ee91a652df9f1652b12cdb.tar.gz gdb-de4c45bd54870058d0ee91a652df9f1652b12cdb.tar.bz2 |
* symtab.h (Symbol::use_plt_offset): New function.
* i386.cc (Relocate::relocate): Call Symbol::use_plt_offset.
* powerpc.cc (Relocate::relocate): Likewise.
* sparc.cc (Relocate::relocate): Likewise.
* x86_64.cc (Relocate::relocate): Likewise.
* testsuite/weak_plt.sh: New test.
* testsuite/weak_plt_main.cc: New test.
* testsuite/weak_plt_shared.cc: New test.
* testsuite/Makefile.am (check_SCRIPTS): Add weak_plt.sh.
(check_PROGRAMS): Add weak_plt.
(check_DATA): Add weak_plt_shared.so.
(weak_plt_main_pic.o, weak_plt): New targets.
(weak_plt_shared_pic.o, weak_plt_shared.so): New targets.
* testsuite/Makefile.in: Rebuild.
* testsuite/Makefile.am (weak_alias_test_1.so): Depend upon
gcctestdir/ld.
(weak_alias_test_2.so, weak_alias_test_4.so): Likewise.
* testsuite/Makefile.in: Rebuild.
Diffstat (limited to 'gold/x86_64.cc')
-rw-r--r-- | gold/x86_64.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/gold/x86_64.cc b/gold/x86_64.cc index c426370..cbbd5cc 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -1665,10 +1665,10 @@ Target_x86_64::Relocate::relocate(const Relocate_info<64, false>* relinfo, // Pick the value to use for symbols defined in shared objects. Symbol_value<64> symval; if (gsym != NULL - && (gsym->is_from_dynobj() - || (parameters->options().shared() - && (gsym->is_undefined() || gsym->is_preemptible()))) - && gsym->has_plt_offset()) + && gsym->use_plt_offset(r_type == elfcpp::R_X86_64_PC64 + || r_type == elfcpp::R_X86_64_PC32 + || r_type == elfcpp::R_X86_64_PC16 + || r_type == elfcpp::R_X86_64_PC8)) { symval.set_output_value(target->plt_section()->address() + gsym->plt_offset()); |