mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
2012-03-15 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::got_section): Make .got section read-only if -z now is given.
This commit is contained in:
parent
a4456d242d
commit
7b8957f8c3
@ -1,3 +1,8 @@
|
||||
2012-03-15 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
* arm.cc (Target_arm::got_section): Make .got section read-only
|
||||
if -z now is given.
|
||||
|
||||
2012-03-15 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR gold/13850
|
||||
|
15
gold/arm.cc
15
gold/arm.cc
@ -4174,11 +4174,22 @@ Target_arm<big_endian>::got_section(Symbol_table* symtab, Layout* layout)
|
||||
{
|
||||
gold_assert(symtab != NULL && layout != NULL);
|
||||
|
||||
// When using -z now, we can treat .got as a relro section.
|
||||
// Without -z now, it is modified after program startup by lazy
|
||||
// PLT relocations.
|
||||
bool is_got_relro = parameters->options().now();
|
||||
Output_section_order got_order = (is_got_relro
|
||||
? ORDER_RELRO_LAST
|
||||
: ORDER_DATA);
|
||||
|
||||
// Unlike some targets (.e.g x86), ARM does not use separate .got and
|
||||
// .got.plt sections in output. The output .got section contains both
|
||||
// PLT and non-PLT GOT entries.
|
||||
this->got_ = new Arm_output_data_got<big_endian>(symtab, layout);
|
||||
|
||||
layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
|
||||
(elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE),
|
||||
this->got_, ORDER_DATA, false);
|
||||
this->got_, got_order, is_got_relro);
|
||||
|
||||
// The old GNU linker creates a .got.plt section. We just
|
||||
// create another set of data in the .got section. Note that we
|
||||
@ -4187,7 +4198,7 @@ Target_arm<big_endian>::got_section(Symbol_table* symtab, Layout* layout)
|
||||
this->got_plt_ = new Output_data_space(4, "** GOT PLT");
|
||||
layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
|
||||
(elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE),
|
||||
this->got_plt_, ORDER_DATA, false);
|
||||
this->got_plt_, got_order, is_got_relro);
|
||||
|
||||
// The first three entries are reserved.
|
||||
this->got_plt_->set_current_data_size(3 * 4);
|
||||
|
Loading…
Reference in New Issue
Block a user