mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
PR gold/12392
* i386.cc (Target_i386::do_finalize_sections): Define __rel_iplt symbols if necessary. * x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2011-07-05 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
PR gold/12392
|
||||||
|
* i386.cc (Target_i386::do_finalize_sections): Define __rel_iplt
|
||||||
|
symbols if necessary.
|
||||||
|
* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
|
||||||
|
|
||||||
2011-07-05 Ian Lance Taylor <iant@google.com>
|
2011-07-05 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
PR gold/12952
|
PR gold/12952
|
||||||
|
40
gold/i386.cc
40
gold/i386.cc
@ -2181,6 +2181,46 @@ Target_i386::do_finalize_sections(
|
|||||||
uint32_t data_size = this->got_plt_->current_data_size();
|
uint32_t data_size = this->got_plt_->current_data_size();
|
||||||
symtab->get_sized_symbol<32>(sym)->set_symsize(data_size);
|
symtab->get_sized_symbol<32>(sym)->set_symsize(data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parameters->doing_static_link() && this->plt_ == NULL)
|
||||||
|
{
|
||||||
|
// If linking statically, make sure that the __rel_iplt symbols
|
||||||
|
// were defined if necessary, even if we didn't create a PLT.
|
||||||
|
static const Define_symbol_in_segment syms[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"__rel_iplt_start", // name
|
||||||
|
elfcpp::PT_LOAD, // segment_type
|
||||||
|
elfcpp::PF_W, // segment_flags_set
|
||||||
|
elfcpp::PF(0), // segment_flags_clear
|
||||||
|
0, // value
|
||||||
|
0, // size
|
||||||
|
elfcpp::STT_NOTYPE, // type
|
||||||
|
elfcpp::STB_GLOBAL, // binding
|
||||||
|
elfcpp::STV_HIDDEN, // visibility
|
||||||
|
0, // nonvis
|
||||||
|
Symbol::SEGMENT_START, // offset_from_base
|
||||||
|
true // only_if_ref
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__rel_iplt_end", // name
|
||||||
|
elfcpp::PT_LOAD, // segment_type
|
||||||
|
elfcpp::PF_W, // segment_flags_set
|
||||||
|
elfcpp::PF(0), // segment_flags_clear
|
||||||
|
0, // value
|
||||||
|
0, // size
|
||||||
|
elfcpp::STT_NOTYPE, // type
|
||||||
|
elfcpp::STB_GLOBAL, // binding
|
||||||
|
elfcpp::STV_HIDDEN, // visibility
|
||||||
|
0, // nonvis
|
||||||
|
Symbol::SEGMENT_START, // offset_from_base
|
||||||
|
true // only_if_ref
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
symtab->define_symbols(layout, 2, syms,
|
||||||
|
layout->script_options()->saw_sections_clause());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return whether a direct absolute static relocation needs to be applied.
|
// Return whether a direct absolute static relocation needs to be applied.
|
||||||
|
@ -2599,6 +2599,46 @@ Target_x86_64::do_finalize_sections(
|
|||||||
uint64_t data_size = this->got_plt_->current_data_size();
|
uint64_t data_size = this->got_plt_->current_data_size();
|
||||||
symtab->get_sized_symbol<64>(sym)->set_symsize(data_size);
|
symtab->get_sized_symbol<64>(sym)->set_symsize(data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parameters->doing_static_link() && this->plt_ == NULL)
|
||||||
|
{
|
||||||
|
// If linking statically, make sure that the __rela_iplt symbols
|
||||||
|
// were defined if necessary, even if we didn't create a PLT.
|
||||||
|
static const Define_symbol_in_segment syms[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"__rela_iplt_start", // name
|
||||||
|
elfcpp::PT_LOAD, // segment_type
|
||||||
|
elfcpp::PF_W, // segment_flags_set
|
||||||
|
elfcpp::PF(0), // segment_flags_clear
|
||||||
|
0, // value
|
||||||
|
0, // size
|
||||||
|
elfcpp::STT_NOTYPE, // type
|
||||||
|
elfcpp::STB_GLOBAL, // binding
|
||||||
|
elfcpp::STV_HIDDEN, // visibility
|
||||||
|
0, // nonvis
|
||||||
|
Symbol::SEGMENT_START, // offset_from_base
|
||||||
|
true // only_if_ref
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__rela_iplt_end", // name
|
||||||
|
elfcpp::PT_LOAD, // segment_type
|
||||||
|
elfcpp::PF_W, // segment_flags_set
|
||||||
|
elfcpp::PF(0), // segment_flags_clear
|
||||||
|
0, // value
|
||||||
|
0, // size
|
||||||
|
elfcpp::STT_NOTYPE, // type
|
||||||
|
elfcpp::STB_GLOBAL, // binding
|
||||||
|
elfcpp::STV_HIDDEN, // visibility
|
||||||
|
0, // nonvis
|
||||||
|
Symbol::SEGMENT_START, // offset_from_base
|
||||||
|
true // only_if_ref
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
symtab->define_symbols(layout, 2, syms,
|
||||||
|
layout->script_options()->saw_sections_clause());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform a relocation.
|
// Perform a relocation.
|
||||||
|
Reference in New Issue
Block a user