summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-06-28 10:17:08 +0930
committerAlan Modra <amodra@gmail.com>2019-06-28 10:17:08 +0930
commitc432bbbaaa072438e6303b819bdcb4289c2b22e0 (patch)
tree15cfc4379068d45412637895fceeecdddf2c973a /gold
parent60d53d7f032ad7af09760afbaf01b2ec413f198a (diff)
downloadbinutils-gdb-c432bbbaaa072438e6303b819bdcb4289c2b22e0.tar.gz
[GOLD] R_PPC64_REL16_HIGH relocs
These relocs have been around for quite a while. It's past time gold supported them. elfcpp/ * powerpc.h (R_PPC64_REL16_HIGH, R_PPC64_REL16_HIGHA), (R_PPC64_REL16_HIGHER, R_PPC64_REL16_HIGHERA), (R_PPC64_REL16_HIGHEST, R_PPC64_REL16_HIGHESTA): Define. gold/ * powerpc.cc (Target_powerpc::Scan::get_reference_flags): Handle REL16_HIGH* relocs. (Target_powerpc::Scan::local): Likewise. (Target_powerpc::Scan::global): Likewise. (Target_powerpc::Relocate::relocate): Likewise.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog8
-rw-r--r--gold/powerpc.cc30
2 files changed, 38 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 1c66f6e70cd..955e556c60a 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,11 @@
+2019-06-28 Alan Modra <amodra@gmail.com>
+
+ * powerpc.cc (Target_powerpc::Scan::get_reference_flags): Handle
+ REL16_HIGH* relocs.
+ (Target_powerpc::Scan::local): Likewise.
+ (Target_powerpc::Scan::global): Likewise.
+ (Target_powerpc::Relocate::relocate): Likewise.
+
2019-06-10 Martin Liska <mliska@suse.cz>
* errors.h: Include string.
diff --git a/gold/powerpc.cc b/gold/powerpc.cc
index e251a9341f4..1f2407130b2 100644
--- a/gold/powerpc.cc
+++ b/gold/powerpc.cc
@@ -6464,6 +6464,12 @@ Target_powerpc<size, big_endian>::Scan::get_reference_flags(
case elfcpp::R_POWERPC_REL16_LO:
case elfcpp::R_POWERPC_REL16_HI:
case elfcpp::R_POWERPC_REL16_HA:
+ case elfcpp::R_PPC64_REL16_HIGH:
+ case elfcpp::R_PPC64_REL16_HIGHA:
+ case elfcpp::R_PPC64_REL16_HIGHER:
+ case elfcpp::R_PPC64_REL16_HIGHERA:
+ case elfcpp::R_PPC64_REL16_HIGHEST:
+ case elfcpp::R_PPC64_REL16_HIGHESTA:
ref = Symbol::RELATIVE_REF;
break;
@@ -6964,6 +6970,12 @@ Target_powerpc<size, big_endian>::Scan::local(
case elfcpp::R_POWERPC_REL16_HI:
case elfcpp::R_POWERPC_REL16_HA:
case elfcpp::R_POWERPC_REL16DX_HA:
+ case elfcpp::R_PPC64_REL16_HIGH:
+ case elfcpp::R_PPC64_REL16_HIGHA:
+ case elfcpp::R_PPC64_REL16_HIGHER:
+ case elfcpp::R_PPC64_REL16_HIGHERA:
+ case elfcpp::R_PPC64_REL16_HIGHEST:
+ case elfcpp::R_PPC64_REL16_HIGHESTA:
case elfcpp::R_POWERPC_SECTOFF:
case elfcpp::R_POWERPC_SECTOFF_LO:
case elfcpp::R_POWERPC_SECTOFF_HI:
@@ -7604,6 +7616,12 @@ Target_powerpc<size, big_endian>::Scan::global(
case elfcpp::R_POWERPC_REL16_HI:
case elfcpp::R_POWERPC_REL16_HA:
case elfcpp::R_POWERPC_REL16DX_HA:
+ case elfcpp::R_PPC64_REL16_HIGH:
+ case elfcpp::R_PPC64_REL16_HIGHA:
+ case elfcpp::R_PPC64_REL16_HIGHER:
+ case elfcpp::R_PPC64_REL16_HIGHERA:
+ case elfcpp::R_PPC64_REL16_HIGHEST:
+ case elfcpp::R_PPC64_REL16_HIGHESTA:
case elfcpp::R_POWERPC_SECTOFF:
case elfcpp::R_POWERPC_SECTOFF_LO:
case elfcpp::R_POWERPC_SECTOFF_HI:
@@ -9411,6 +9429,12 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
case elfcpp::R_POWERPC_REL16_HI:
case elfcpp::R_POWERPC_REL16_HA:
case elfcpp::R_POWERPC_REL16DX_HA:
+ case elfcpp::R_PPC64_REL16_HIGH:
+ case elfcpp::R_PPC64_REL16_HIGHA:
+ case elfcpp::R_PPC64_REL16_HIGHER:
+ case elfcpp::R_PPC64_REL16_HIGHERA:
+ case elfcpp::R_PPC64_REL16_HIGHEST:
+ case elfcpp::R_PPC64_REL16_HIGHESTA:
case elfcpp::R_POWERPC_REL14:
case elfcpp::R_POWERPC_REL14_BRTAKEN:
case elfcpp::R_POWERPC_REL14_BRNTAKEN:
@@ -9973,6 +9997,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
// Fall through.
case elfcpp::R_POWERPC_ADDR16_HI:
case elfcpp::R_POWERPC_REL16_HI:
+ case elfcpp::R_PPC64_REL16_HIGH:
case elfcpp::R_PPC64_TOC16_HI:
case elfcpp::R_POWERPC_GOT16_HI:
case elfcpp::R_POWERPC_PLT16_HI:
@@ -9995,6 +10020,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
// Fall through.
case elfcpp::R_POWERPC_ADDR16_HA:
case elfcpp::R_POWERPC_REL16_HA:
+ case elfcpp::R_PPC64_REL16_HIGHA:
case elfcpp::R_PPC64_TOC16_HA:
case elfcpp::R_POWERPC_GOT16_HA:
case elfcpp::R_POWERPC_PLT16_HA:
@@ -10018,6 +10044,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
goto unsupp;
// Fall through.
case elfcpp::R_PPC64_ADDR16_HIGHER:
+ case elfcpp::R_PPC64_REL16_HIGHER:
case elfcpp::R_PPC64_TPREL16_HIGHER:
Reloc::addr16_hi2(view, value);
break;
@@ -10028,6 +10055,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
goto unsupp;
// Fall through.
case elfcpp::R_PPC64_ADDR16_HIGHERA:
+ case elfcpp::R_PPC64_REL16_HIGHERA:
case elfcpp::R_PPC64_TPREL16_HIGHERA:
Reloc::addr16_ha2(view, value);
break;
@@ -10038,6 +10066,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
goto unsupp;
// Fall through.
case elfcpp::R_PPC64_ADDR16_HIGHEST:
+ case elfcpp::R_PPC64_REL16_HIGHEST:
case elfcpp::R_PPC64_TPREL16_HIGHEST:
Reloc::addr16_hi3(view, value);
break;
@@ -10048,6 +10077,7 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
goto unsupp;
// Fall through.
case elfcpp::R_PPC64_ADDR16_HIGHESTA:
+ case elfcpp::R_PPC64_REL16_HIGHESTA:
case elfcpp::R_PPC64_TPREL16_HIGHESTA:
Reloc::addr16_ha3(view, value);
break;