forked from Imagelibrary/binutils-gdb
* layout.cc (Layout::Layout): Initialize increase_relro_.
(Layout::get_output_section): Add is_relro, is_last_relro, and is_first_non_relro parameters. Change all callers. (Layout::choose_output_section): Likewise. (Layout::add_output_section_data): Likewise. (Layout::make_output_section): Likewise. (Layout::set_segment_offsets): Clear increase_relro when using a linker script. * layout.h (class Layout): Add increase_relro method. Add increase_relro_ field. Update declarations. * output.cc (Output_section::Output_section): Initialize is_last_relro_ and is_first_non_relro_. (Output_segment::add_output_section): Group relro sections is do_sort is true. Handle is_last_relro and is_first_non_relro. (Output_segment::maximum_alignment): Remove relro handling. (Output_segment::set_section_addresses): Add increase_relro parameter. Change all callers. Add initial alignment to align relro sections on separate page. Remove old relro handling. (Output_segment::set_section_list_addresses): Remove in_relro parameter. Change all callers. (Output_segment::set_offset): Add increase parameter. Change all callers. Remove old relro handling. * output.h (class Output_section): Add new methods: is_last_relro, set_is_last_relro, is_first_non_relro, set_is_first_non_relro. Add is_last_relro_ and is_first_non_relro_ fields. * i386.cc (Target_i386::got_section): Don't call set_is_relro. Create separate .got.plt section. Call increase_relro. * x86_64.cc (Target_x86_64::got_section): Likewise. * testsuite/relro_script_test.t: Add .got.plt.
This commit is contained in:
@@ -1026,8 +1026,8 @@ Target_sparc<size, big_endian>::got_section(Symbol_table* symtab,
|
||||
os = layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
|
||||
(elfcpp::SHF_ALLOC
|
||||
| elfcpp::SHF_WRITE),
|
||||
this->got_, false);
|
||||
os->set_is_relro();
|
||||
this->got_, false, true, false,
|
||||
false);
|
||||
|
||||
// Define _GLOBAL_OFFSET_TABLE_ at the start of the .got section.
|
||||
symtab->define_in_output_data("_GLOBAL_OFFSET_TABLE_", NULL,
|
||||
@@ -1053,7 +1053,8 @@ Target_sparc<size, big_endian>::rela_dyn_section(Layout* layout)
|
||||
gold_assert(layout != NULL);
|
||||
this->rela_dyn_ = new Reloc_section(parameters->options().combreloc());
|
||||
layout->add_output_section_data(".rela.dyn", elfcpp::SHT_RELA,
|
||||
elfcpp::SHF_ALLOC, this->rela_dyn_, true);
|
||||
elfcpp::SHF_ALLOC, this->rela_dyn_, true,
|
||||
false, false, false);
|
||||
}
|
||||
return this->rela_dyn_;
|
||||
}
|
||||
@@ -1155,7 +1156,8 @@ Output_data_plt_sparc<size, big_endian>::Output_data_plt_sparc(Layout* layout)
|
||||
{
|
||||
this->rel_ = new Reloc_section(false);
|
||||
layout->add_output_section_data(".rela.plt", elfcpp::SHT_RELA,
|
||||
elfcpp::SHF_ALLOC, this->rel_, true);
|
||||
elfcpp::SHF_ALLOC, this->rel_, true,
|
||||
false, false, false);
|
||||
}
|
||||
|
||||
template<int size, bool big_endian>
|
||||
@@ -1372,7 +1374,7 @@ Target_sparc<size, big_endian>::make_plt_entry(Symbol_table* symtab,
|
||||
(elfcpp::SHF_ALLOC
|
||||
| elfcpp::SHF_EXECINSTR
|
||||
| elfcpp::SHF_WRITE),
|
||||
this->plt_, false);
|
||||
this->plt_, false, false, false, false);
|
||||
|
||||
// Define _PROCEDURE_LINKAGE_TABLE_ at the start of the .plt section.
|
||||
symtab->define_in_output_data("_PROCEDURE_LINKAGE_TABLE_", NULL,
|
||||
|
||||
Reference in New Issue
Block a user