Remove unnecessary target dependencies on relocation format.
2015-11-09 Cary Coutant <ccoutant@gmail.com> Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com> gold/ * copy-relocs.h (Copy_relocs::copy_reloc): Replace reloc parameter with type, offset, addend. (Copy_relocs::save): Likewise. * copy-relocs.cc (Copy_relocs::copy_reloc): Likewise. (Copy_relocs::save): Likewise. * aarch64.cc (Target_aarch64::copy_reloc): Pass r_type, r_offset, and r_addend to Copy_relocs::copy_reloc. * arm.cc (Target_arm::copy_reloc): Likewise. * i386.cc (Target_i386::copy_reloc): Likewise. * mips.cc (Target_mips::copy_reloc): Likewise. * powerpc.cc (Target_powerpc::copy_reloc): Likewise. * s390.cc (Target_s390::copy_reloc): Likewise. * sparc.cc (Target_sparc::copy_reloc): Likewise. * tilegx.cc (Target_tilegx::copy_reloc): Likewise. * x86_64.cc (Target_x86_64::copy_reloc): Likewise.
This commit is contained in:
parent
dddc0e16ef
commit
859d79870d
@ -1,3 +1,22 @@
|
||||
2015-11-09 Cary Coutant <ccoutant@gmail.com>
|
||||
Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
|
||||
|
||||
* copy-relocs.h (Copy_relocs::copy_reloc): Replace reloc parameter
|
||||
with type, offset, addend.
|
||||
(Copy_relocs::save): Likewise.
|
||||
* copy-relocs.cc (Copy_relocs::copy_reloc): Likewise.
|
||||
(Copy_relocs::save): Likewise.
|
||||
* aarch64.cc (Target_aarch64::copy_reloc): Pass r_type, r_offset,
|
||||
and r_addend to Copy_relocs::copy_reloc.
|
||||
* arm.cc (Target_arm::copy_reloc): Likewise.
|
||||
* i386.cc (Target_i386::copy_reloc): Likewise.
|
||||
* mips.cc (Target_mips::copy_reloc): Likewise.
|
||||
* powerpc.cc (Target_powerpc::copy_reloc): Likewise.
|
||||
* s390.cc (Target_s390::copy_reloc): Likewise.
|
||||
* sparc.cc (Target_sparc::copy_reloc): Likewise.
|
||||
* tilegx.cc (Target_tilegx::copy_reloc): Likewise.
|
||||
* x86_64.cc (Target_x86_64::copy_reloc): Likewise.
|
||||
|
||||
2015-11-05 Cary Coutant <ccoutant@gmail.com>
|
||||
|
||||
PR gold/19119
|
||||
|
@ -3338,10 +3338,13 @@ class Target_aarch64 : public Sized_target<size, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Information about this specific target which we pass to the
|
||||
|
@ -2806,9 +2806,11 @@ class Target_arm : public Sized_target<32, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rel<32, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<32>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<32>(sym),
|
||||
object, shndx, output_section, reloc,
|
||||
object, shndx, output_section,
|
||||
r_type, reloc.get_r_offset(), 0,
|
||||
this->rel_dyn_section(layout));
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,9 @@ Copy_relocs<sh_type, size, big_endian>::copy_reloc(
|
||||
Sized_relobj_file<size, big_endian>* object,
|
||||
unsigned int shndx,
|
||||
Output_section* output_section,
|
||||
const Reloc& rel,
|
||||
unsigned int r_type,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
|
||||
typename elfcpp::Elf_types<size>::Elf_Swxword r_addend,
|
||||
Output_data_reloc<sh_type, true, size, big_endian>* reloc_section)
|
||||
{
|
||||
if (this->need_copy_reloc(sym, object, shndx))
|
||||
@ -51,7 +53,8 @@ Copy_relocs<sh_type, size, big_endian>::copy_reloc(
|
||||
{
|
||||
// We may not need a COPY relocation. Save this relocation to
|
||||
// possibly be emitted later.
|
||||
this->save(sym, object, shndx, output_section, rel);
|
||||
this->save(sym, object, shndx, output_section,
|
||||
r_type, r_offset, r_addend);
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,14 +179,13 @@ Copy_relocs<sh_type, size, big_endian>::save(
|
||||
Sized_relobj_file<size, big_endian>* object,
|
||||
unsigned int shndx,
|
||||
Output_section* output_section,
|
||||
const Reloc& rel)
|
||||
unsigned int r_type,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
|
||||
typename elfcpp::Elf_types<size>::Elf_Swxword r_addend)
|
||||
{
|
||||
unsigned int reloc_type = elfcpp::elf_r_type<size>(rel.get_r_info());
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr addend =
|
||||
Reloc_types<sh_type, size, big_endian>::get_reloc_addend_noerror(&rel);
|
||||
this->entries_.push_back(Copy_reloc_entry(sym, reloc_type, object, shndx,
|
||||
output_section, rel.get_r_offset(),
|
||||
addend));
|
||||
this->entries_.push_back(Copy_reloc_entry(sym, r_type, object, shndx,
|
||||
output_section, r_offset,
|
||||
r_addend));
|
||||
}
|
||||
|
||||
// Emit any saved relocs.
|
||||
|
@ -65,10 +65,15 @@ class Copy_relocs
|
||||
// will wind up. REL is the reloc itself. The Output_data_reloc
|
||||
// section is where the dynamic relocs are put.
|
||||
void
|
||||
copy_reloc(Symbol_table*, Layout*, Sized_symbol<size>* sym,
|
||||
copy_reloc(Symbol_table*,
|
||||
Layout*,
|
||||
Sized_symbol<size>* sym,
|
||||
Sized_relobj_file<size, big_endian>* object,
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
const Reloc& rel,
|
||||
unsigned int shndx,
|
||||
Output_section* output_section,
|
||||
unsigned int r_type,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
|
||||
typename elfcpp::Elf_types<size>::Elf_Swxword r_addend,
|
||||
Output_data_reloc<sh_type, true, size, big_endian>*);
|
||||
|
||||
// Return whether there are any saved relocations.
|
||||
@ -135,8 +140,13 @@ class Copy_relocs
|
||||
|
||||
// Save a reloc against SYM for possible emission later.
|
||||
void
|
||||
save(Symbol*, Sized_relobj_file<size, big_endian>*, unsigned int shndx,
|
||||
Output_section*, const Reloc& rel);
|
||||
save(Symbol*,
|
||||
Sized_relobj_file<size, big_endian>*,
|
||||
unsigned int shndx,
|
||||
Output_section*,
|
||||
unsigned int r_type,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
|
||||
typename elfcpp::Elf_types<size>::Elf_Swxword r_addend);
|
||||
|
||||
// The target specific relocation type of the COPY relocation.
|
||||
const unsigned int copy_reloc_type_;
|
||||
|
@ -828,9 +828,11 @@ class Target_i386 : public Sized_target<32, false>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rel<32, false>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<32>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<32>(sym),
|
||||
object, shndx, output_section, reloc,
|
||||
object, shndx, output_section,
|
||||
r_type, reloc.get_r_offset(), 0,
|
||||
this->rel_dyn_section(layout));
|
||||
}
|
||||
|
||||
|
@ -3602,10 +3602,12 @@ class Target_mips : public Sized_target<size, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rel<size, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rel_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(), 0,
|
||||
this->rel_dyn_section(layout));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1207,10 +1207,13 @@ class Target_powerpc : public Sized_target<size, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Look over all the input sections, deciding where to place stubs.
|
||||
|
@ -681,10 +681,13 @@ class Target_s390 : public Sized_target<size, true>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, true>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Information about this specific target which we pass to the
|
||||
|
@ -415,10 +415,13 @@ class Target_sparc : public Sized_target<size, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Information about this specific target which we pass to the
|
||||
|
@ -594,10 +594,13 @@ class Target_tilegx : public Sized_target<size, big_endian>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Information about this specific target which we pass to the
|
||||
|
@ -968,10 +968,13 @@ class Target_x86_64 : public Sized_target<size, false>
|
||||
unsigned int shndx, Output_section* output_section,
|
||||
Symbol* sym, const elfcpp::Rela<size, false>& reloc)
|
||||
{
|
||||
unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
|
||||
this->copy_relocs_.copy_reloc(symtab, layout,
|
||||
symtab->get_sized_symbol<size>(sym),
|
||||
object, shndx, output_section,
|
||||
reloc, this->rela_dyn_section(layout));
|
||||
r_type, reloc.get_r_offset(),
|
||||
reloc.get_r_addend(),
|
||||
this->rela_dyn_section(layout));
|
||||
}
|
||||
|
||||
// Information about this specific target which we pass to the
|
||||
|
Loading…
Reference in New Issue
Block a user