diff options
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/powerpc.cc | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index f600b84..8ccb431 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2014-03-05 Alan Modra <amodra@gmail.com> + + * powerpc.cc (Target_powerpc::Scan::local, global): Support + R_PPC64_ADDR64_LOCAL. + (Target_powerpc::Relocate::relocate): Likewise. + 2014-03-03 Alan Modra <amodra@gmail.com> * dwp.cc (print_version): Update copyright year to current. diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 1aa4791..8130149 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -5482,6 +5482,7 @@ Target_powerpc<size, big_endian>::Scan::local( case elfcpp::R_PPC64_DTPREL16_HIGHESTA: case elfcpp::R_PPC64_TLSGD: case elfcpp::R_PPC64_TLSLD: + case elfcpp::R_PPC64_ADDR64_LOCAL: break; case elfcpp::R_POWERPC_GOT16: @@ -5928,6 +5929,7 @@ Target_powerpc<size, big_endian>::Scan::global( case elfcpp::R_PPC64_DTPREL16_HIGHESTA: case elfcpp::R_PPC64_TLSGD: case elfcpp::R_PPC64_TLSLD: + case elfcpp::R_PPC64_ADDR64_LOCAL: break; case elfcpp::R_POWERPC_GOT16: @@ -7137,6 +7139,13 @@ Target_powerpc<size, big_endian>::Relocate::relocate( value -= dtp_offset; break; + case elfcpp::R_PPC64_ADDR64_LOCAL: + if (gsym != NULL) + value += object->ppc64_local_entry_offset(gsym); + else + value += object->ppc64_local_entry_offset(r_sym); + break; + default: break; } @@ -7339,6 +7348,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate( case elfcpp::R_PPC64_ADDR64: case elfcpp::R_PPC64_REL64: case elfcpp::R_PPC64_TOC: + case elfcpp::R_PPC64_ADDR64_LOCAL: Reloc::addr64(view, value); break; |