Refactor Sized_relobj_file::do_relocate_sections.
gold/ * aarch64.cc (AArch64_relobj::do_relocate_sections): Call Sized_relobj_file::relocate_section_range(). * arm.cc (Arm_relobj::do_relocate_sections): Likewise. * object.h (Sized_relobj_file::relocate_section_range): New method. * reloc.cc (Sized_relobj_file::do_relocate_sections): Move implementation... (Sized_relobj_file::relocate_section_range): ...to new method.
This commit is contained in:
parent
df2946549f
commit
98461510d3
|
@ -1,3 +1,13 @@
|
|||
2017-01-10 Cary Coutant <ccoutant@gmail.com>
|
||||
|
||||
* aarch64.cc (AArch64_relobj::do_relocate_sections): Call
|
||||
Sized_relobj_file::relocate_section_range().
|
||||
* arm.cc (Arm_relobj::do_relocate_sections): Likewise.
|
||||
* object.h (Sized_relobj_file::relocate_section_range): New method.
|
||||
* reloc.cc (Sized_relobj_file::do_relocate_sections): Move
|
||||
implementation...
|
||||
(Sized_relobj_file::relocate_section_range): ...to new method.
|
||||
|
||||
2017-01-10 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* testsuite/ver_test_8.sh: Accept .TOC. in lieu of
|
||||
|
|
|
@ -2044,9 +2044,9 @@ AArch64_relobj<size, big_endian>::do_relocate_sections(
|
|||
const unsigned char* pshdrs, Output_file* of,
|
||||
typename Sized_relobj_file<size, big_endian>::Views* pviews)
|
||||
{
|
||||
// Call parent to relocate sections.
|
||||
Sized_relobj_file<size, big_endian>::do_relocate_sections(symtab, layout,
|
||||
pshdrs, of, pviews);
|
||||
// Relocate the section data.
|
||||
this->relocate_section_range(symtab, layout, pshdrs, of, pviews,
|
||||
1, this->shnum() - 1);
|
||||
|
||||
// We do not generate stubs if doing a relocatable link.
|
||||
if (parameters->options().relocatable())
|
||||
|
|
|
@ -6587,9 +6587,9 @@ Arm_relobj<big_endian>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
typename Sized_relobj_file<32, big_endian>::Views* pviews)
|
||||
{
|
||||
// Call parent to relocate sections.
|
||||
Sized_relobj_file<32, big_endian>::do_relocate_sections(symtab, layout,
|
||||
pshdrs, of, pviews);
|
||||
// Relocate the section data.
|
||||
this->relocate_section_range(symtab, layout, pshdrs, of, pviews,
|
||||
1, this->shnum() - 1);
|
||||
|
||||
// We do not generate stubs if doing a relocatable link.
|
||||
if (parameters->options().relocatable())
|
||||
|
|
|
@ -2562,6 +2562,13 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
|
|||
const unsigned char* pshdrs, Output_file* of,
|
||||
Views* pviews);
|
||||
|
||||
// Relocate section data for a range of sections.
|
||||
void
|
||||
relocate_section_range(const Symbol_table* symtab, const Layout* layout,
|
||||
const unsigned char* pshdrs, Output_file* of,
|
||||
Views* pviews, unsigned int start_shndx,
|
||||
unsigned int end_shndx);
|
||||
|
||||
// Adjust this local symbol value. Return false if the symbol
|
||||
// should be discarded from the output file.
|
||||
virtual bool
|
||||
|
|
|
@ -871,7 +871,30 @@ Sized_relobj_file<size, big_endian>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
Views* pviews)
|
||||
{
|
||||
unsigned int shnum = this->shnum();
|
||||
this->relocate_section_range(symtab, layout, pshdrs, of, pviews,
|
||||
1, this->shnum() - 1);
|
||||
}
|
||||
|
||||
// Relocate section data for the range of sections START_SHNDX through
|
||||
// END_SHNDX.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
void
|
||||
Sized_relobj_file<size, big_endian>::relocate_section_range(
|
||||
const Symbol_table* symtab,
|
||||
const Layout* layout,
|
||||
const unsigned char* pshdrs,
|
||||
Output_file* of,
|
||||
Views* pviews,
|
||||
unsigned int start_shndx,
|
||||
unsigned int end_shndx)
|
||||
{
|
||||
gold_assert(start_shndx >= 1);
|
||||
gold_assert(end_shndx < this->shnum());
|
||||
|
||||
if (end_shndx < start_shndx)
|
||||
return;
|
||||
|
||||
Sized_target<size, big_endian>* target =
|
||||
parameters->sized_target<size, big_endian>();
|
||||
|
||||
|
@ -883,8 +906,8 @@ Sized_relobj_file<size, big_endian>::do_relocate_sections(
|
|||
relinfo.layout = layout;
|
||||
relinfo.object = this;
|
||||
|
||||
const unsigned char* p = pshdrs + This::shdr_size;
|
||||
for (unsigned int i = 1; i < shnum; ++i, p += This::shdr_size)
|
||||
const unsigned char* p = pshdrs + start_shndx * This::shdr_size;
|
||||
for (unsigned int i = start_shndx; i <= end_shndx; ++i, p += This::shdr_size)
|
||||
{
|
||||
typename This::Shdr shdr(p);
|
||||
|
||||
|
@ -1717,6 +1740,17 @@ Sized_relobj_file<32, false>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
Views* pviews);
|
||||
|
||||
template
|
||||
void
|
||||
Sized_relobj_file<32, false>::relocate_section_range(
|
||||
const Symbol_table* symtab,
|
||||
const Layout* layout,
|
||||
const unsigned char* pshdrs,
|
||||
Output_file* of,
|
||||
Views* pviews,
|
||||
unsigned int start_shndx,
|
||||
unsigned int end_shndx);
|
||||
|
||||
template
|
||||
unsigned char*
|
||||
Sized_relobj_file<32, false>::do_get_output_view(
|
||||
|
@ -1734,6 +1768,17 @@ Sized_relobj_file<32, true>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
Views* pviews);
|
||||
|
||||
template
|
||||
void
|
||||
Sized_relobj_file<32, true>::relocate_section_range(
|
||||
const Symbol_table* symtab,
|
||||
const Layout* layout,
|
||||
const unsigned char* pshdrs,
|
||||
Output_file* of,
|
||||
Views* pviews,
|
||||
unsigned int start_shndx,
|
||||
unsigned int end_shndx);
|
||||
|
||||
template
|
||||
unsigned char*
|
||||
Sized_relobj_file<32, true>::do_get_output_view(
|
||||
|
@ -1751,6 +1796,17 @@ Sized_relobj_file<64, false>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
Views* pviews);
|
||||
|
||||
template
|
||||
void
|
||||
Sized_relobj_file<64, false>::relocate_section_range(
|
||||
const Symbol_table* symtab,
|
||||
const Layout* layout,
|
||||
const unsigned char* pshdrs,
|
||||
Output_file* of,
|
||||
Views* pviews,
|
||||
unsigned int start_shndx,
|
||||
unsigned int end_shndx);
|
||||
|
||||
template
|
||||
unsigned char*
|
||||
Sized_relobj_file<64, false>::do_get_output_view(
|
||||
|
@ -1768,6 +1824,17 @@ Sized_relobj_file<64, true>::do_relocate_sections(
|
|||
Output_file* of,
|
||||
Views* pviews);
|
||||
|
||||
template
|
||||
void
|
||||
Sized_relobj_file<64, true>::relocate_section_range(
|
||||
const Symbol_table* symtab,
|
||||
const Layout* layout,
|
||||
const unsigned char* pshdrs,
|
||||
Output_file* of,
|
||||
Views* pviews,
|
||||
unsigned int start_shndx,
|
||||
unsigned int end_shndx);
|
||||
|
||||
template
|
||||
unsigned char*
|
||||
Sized_relobj_file<64, true>::do_get_output_view(
|
||||
|
|
Loading…
Reference in New Issue