This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH]: Handle R_SPARC_GOTDATA* in gold...
- From: David Miller <davem at davemloft dot net>
- To: binutils at sourceware dot org
- Cc: iant at google dot com
- Date: Mon, 08 Feb 2010 17:23:53 -0800 (PST)
- Subject: [PATCH]: Handle R_SPARC_GOTDATA* in gold...
For now just treat them like normal GOT relcations.
I'm working on GOTDATA_OP optimization support in the BFD linker
backend, and I'll add code to optimize them in GOLD in the future too.
Without this patch, if you have objects with the GOTDATA_OP relocation
in them gold won't be able to work.
Ok to commit?
gold/
2010-02-08 David S. Miller <davem@davemloft.net>
* sparc.cc (Target_sparc::Scan::local): Handle R_SPARC_GOTDATA_OP*
just like R_SPARC_GOT{10,13,22}.
(Target_sparc::Scan::local): Likewise.
(Target_sparc::Relocate:relocate): Likewise.
---
gold/sparc.cc | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/gold/sparc.cc b/gold/sparc.cc
index fee9554..6075c44 100644
--- a/gold/sparc.cc
+++ b/gold/sparc.cc
@@ -1703,6 +1703,9 @@ Target_sparc<size, big_endian>::Scan::local(
case elfcpp::R_SPARC_PC22:
break;
+ case elfcpp::R_SPARC_GOTDATA_OP:
+ case elfcpp::R_SPARC_GOTDATA_OP_HIX22:
+ case elfcpp::R_SPARC_GOTDATA_OP_LOX10:
case elfcpp::R_SPARC_GOT10:
case elfcpp::R_SPARC_GOT13:
case elfcpp::R_SPARC_GOT22:
@@ -2070,6 +2073,9 @@ Target_sparc<size, big_endian>::Scan::global(
}
break;
+ case elfcpp::R_SPARC_GOTDATA_OP:
+ case elfcpp::R_SPARC_GOTDATA_OP_HIX22:
+ case elfcpp::R_SPARC_GOTDATA_OP_LOX10:
case elfcpp::R_SPARC_GOT10:
case elfcpp::R_SPARC_GOT13:
case elfcpp::R_SPARC_GOT22:
@@ -2412,6 +2418,9 @@ Target_sparc<size, big_endian>::Relocate::relocate(
unsigned int got_offset = 0;
switch (r_type)
{
+ case elfcpp::R_SPARC_GOTDATA_OP:
+ case elfcpp::R_SPARC_GOTDATA_OP_HIX22:
+ case elfcpp::R_SPARC_GOTDATA_OP_LOX10:
case elfcpp::R_SPARC_GOT10:
case elfcpp::R_SPARC_GOT13:
case elfcpp::R_SPARC_GOT22:
@@ -2518,10 +2527,15 @@ Target_sparc<size, big_endian>::Relocate::relocate(
Reloc::lo10(view, got_offset, addend);
break;
+ case elfcpp::R_SPARC_GOTDATA_OP:
+ break;
+
+ case elfcpp::R_SPARC_GOTDATA_OP_LOX10:
case elfcpp::R_SPARC_GOT13:
Reloc::rela32_13(view, got_offset, addend);
break;
+ case elfcpp::R_SPARC_GOTDATA_OP_HIX22:
case elfcpp::R_SPARC_GOT22:
Reloc::hi22(view, got_offset, addend);
break;
--
1.6.6.1