diff options
author | Cary Coutant <ccoutant@gmail.com> | 2017-01-10 07:46:30 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2017-01-10 07:46:43 -0800 |
commit | 98461510d3a8cefa6603980294bfc647cddcab97 (patch) | |
tree | dc33202fc8f637c12ed4c36fd8fceca3548e5915 /gold/reloc.cc | |
parent | df2946549f60624503663cc6c28cd5a6ef0ab434 (diff) | |
download | gdb-98461510d3a8cefa6603980294bfc647cddcab97.zip gdb-98461510d3a8cefa6603980294bfc647cddcab97.tar.gz gdb-98461510d3a8cefa6603980294bfc647cddcab97.tar.bz2 |
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.
Diffstat (limited to 'gold/reloc.cc')
-rw-r--r-- | gold/reloc.cc | 73 |
1 files changed, 70 insertions, 3 deletions
diff --git a/gold/reloc.cc b/gold/reloc.cc index bc5bc8b..26d84d0 100644 --- a/gold/reloc.cc +++ b/gold/reloc.cc @@ -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); @@ -1718,6 +1741,17 @@ Sized_relobj_file<32, false>::do_relocate_sections( 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( unsigned int shndx, @@ -1735,6 +1769,17 @@ Sized_relobj_file<32, true>::do_relocate_sections( 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( unsigned int shndx, @@ -1752,6 +1797,17 @@ Sized_relobj_file<64, false>::do_relocate_sections( 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( unsigned int shndx, @@ -1769,6 +1825,17 @@ Sized_relobj_file<64, true>::do_relocate_sections( 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( unsigned int shndx, |