Handle R_X86_64_64 properly for x32

elfcpp/

	PR gold/14091
	* x86_64.h (R_X86_64_RELATIVE64): New.

gold/

	PR gold/14091
	* x86_64.cc (Target_x86_64::Scan::local): For x32, generate
	R_X86_64_RELATIVE64 instead of R_X86_64_RELATIVE in case of
	R_X86_64_64.
This commit is contained in:
H.J. Lu 2012-05-11 11:10:19 +00:00
parent 6750a3a775
commit fd885f3a4d
4 changed files with 16 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2012-05-11 H.J. Lu <hongjiu.lu@intel.com>
PR gold/14091
* x86_64.h (R_X86_64_RELATIVE64): New.
2012-05-01 Cary Coutant <ccoutant@google.com>
* dwarf.h (enum DW_TAG, enum DW_FORM, enum DW_AT, enum DW_ENCODING)

View File

@ -91,6 +91,7 @@ enum
R_X86_64_TLSDESC_CALL = 35, // Relaxable call through TLS descriptor
R_X86_64_TLSDESC = 36, // 2 by 64-bit TLS descriptor
R_X86_64_IRELATIVE = 37, // Adjust indirectly by program base
R_X86_64_RELATIVE64 = 38, // 64-bit adjust by program base
// GNU vtable garbage collection extensions.
R_X86_64_GNU_VTINHERIT = 250,
R_X86_64_GNU_VTENTRY = 251

View File

@ -1,3 +1,10 @@
2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
PR gold/14091
* x86_64.cc (Target_x86_64::Scan::local): For x32, generate
R_X86_64_RELATIVE64 instead of R_X86_64_RELATIVE in case of
R_X86_64_64.
2012-05-08 Cary Coutant <ccoutant@google.com>
* layout.cc (gdb_sections): Update GDB version, add .debug_addr.

View File

@ -2299,7 +2299,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
Reloc_section* rela_dyn = target->rela_dyn_section(layout);
rela_dyn->add_local_relative(object, r_sym,
elfcpp::R_X86_64_RELATIVE,
(size == 32
? elfcpp::R_X86_64_RELATIVE64
: elfcpp::R_X86_64_RELATIVE),
output_section, data_shndx,
reloc.get_r_offset(),
reloc.get_r_addend(), is_ifunc);