From 493d4b48decc2b3c5fe9d2df68bcee67fdd8b7cb Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 22 Oct 2015 04:54:42 -0700 Subject: Gold: Don't fail on R_386_GOT32X relocation This patch updates gold to treat the R_386_GOT32X relocation proposed in https://groups.google.com/forum/#!topic/ia32-abi/GbJJskkid4I the same as R_386_GOT32. FIXME: Gold should perform the transformations as suggested. elfcpp/ * i386.h (R_386_GOT32X): New. gold/ * i386.cc (Target_i386::Scan::get_reference_flags(): Treat R_386_GOT32X the same as R_386_GOT32. (Target_i386::Scan::local): Likewise. (Target_i386::Scan::possible_function_pointer_reloc): Likewise. (Target_i386::Scan::global): Likewise. (Target_i386::Relocate::relocate): Likewise. (Target_i386::Relocatable_size_for_reloc::get_size_for_reloc): Likewise. --- gold/i386.cc | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'gold/i386.cc') diff --git a/gold/i386.cc b/gold/i386.cc index 202f518..36c5724 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -1690,6 +1690,7 @@ Target_i386::Scan::get_reference_flags(unsigned int r_type) return Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF; case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: // Absolute in GOT. return Symbol::ABSOLUTE_REF; @@ -1854,6 +1855,7 @@ Target_i386::Scan::local(Symbol_table* symtab, break; case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: { // We need GOT section. Output_data_got<32, false>* got = target->got_section(symtab, layout); @@ -2105,6 +2107,7 @@ Target_i386::Scan::possible_function_pointer_reloc(unsigned int r_type) case elfcpp::R_386_8: case elfcpp::R_386_GOTOFF: case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: { return true; } @@ -2266,6 +2269,7 @@ Target_i386::Scan::global(Symbol_table* symtab, break; case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: { // The symbol requires a GOT section. Output_data_got<32, false>* got = target->got_section(symtab, layout); @@ -2834,6 +2838,7 @@ Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo, break; case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: // Convert // mov foo@GOT(%reg), %reg // to @@ -3617,6 +3622,7 @@ Target_i386::Relocatable_size_for_reloc::get_size_for_reloc( case elfcpp::R_386_32: case elfcpp::R_386_PC32: case elfcpp::R_386_GOT32: + case elfcpp::R_386_GOT32X: case elfcpp::R_386_PLT32: case elfcpp::R_386_GOTOFF: case elfcpp::R_386_GOTPC: -- cgit v1.1