Implement SORT_BY_INIT_PRIORITY.
2016-06-28 Igor Kudrin <ikudrin@accesssoftek.com> gold/ PR gold/18098 * script-c.h (Sort_wildcard): Add SORT_WILDCARD_BY_INIT_PRIORITY. * script-sections.cc (Input_section_sorter::get_init_priority): New method. (Input_section_sorter::operator()): Handle SORT_WILDCARD_BY_INIT_PRIORITY. (Output_section_element_input::print): Likewise. * script.cc (script_keyword_parsecodes): Add entry SORT_BY_INIT_PRIORITY. * yyscript.y (SORT_BY_INIT_PRIORITY): New token. (wildcard_section): Handle SORT_BY_INIT_PRIORITY. * testsuite/Makefile.am (script_test_14): New test. * testsuite/Makefile.in: Regenerate. * testsuite/script_test_14.s: New test source file. * testsuite/script_test_14.sh: New test script. * testsuite/script_test_14.t: New test linker script.
This commit is contained in:
parent
f224a3c590
commit
8032ac0339
2 changed files with 13 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-06-28 Igor Kudrin <ikudrin@accesssoftek.com>
|
||||
|
||||
* aarch64.cc (Target_aarch64::Scan::local): Move the call to got_section
|
||||
from the top level to the places of its use.
|
||||
|
||||
2016-06-28 Igor Kudrin <ikudrin@accesssoftek.com>
|
||||
|
||||
PR gold/18098
|
||||
|
|
|
@ -5958,8 +5958,6 @@ Target_aarch64<size, big_endian>::Scan::local(
|
|||
|
||||
typedef Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian>
|
||||
Reloc_section;
|
||||
Output_data_got_aarch64<size, big_endian>* got =
|
||||
target->got_section(symtab, layout);
|
||||
unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
|
||||
|
||||
// A local STT_GNU_IFUNC symbol may require a PLT entry.
|
||||
|
@ -6004,6 +6002,8 @@ Target_aarch64<size, big_endian>::Scan::local(
|
|||
case elfcpp::R_AARCH64_LD64_GOTPAGE_LO15:
|
||||
// The above relocations are used to access GOT entries.
|
||||
{
|
||||
Output_data_got_aarch64<size, big_endian>* got =
|
||||
target->got_section(symtab, layout);
|
||||
bool is_new = false;
|
||||
// This symbol requires a GOT entry.
|
||||
if (is_ifunc)
|
||||
|
@ -6056,6 +6056,8 @@ Target_aarch64<size, big_endian>::Scan::local(
|
|||
// Create a GOT entry for the tp-relative offset.
|
||||
if (!parameters->doing_static_link())
|
||||
{
|
||||
Output_data_got_aarch64<size, big_endian>* got =
|
||||
target->got_section(symtab, layout);
|
||||
got->add_local_with_rel(object, r_sym, GOT_TYPE_TLS_OFFSET,
|
||||
target->rela_dyn_section(layout),
|
||||
elfcpp::R_AARCH64_TLS_TPREL64);
|
||||
|
@ -6063,6 +6065,8 @@ Target_aarch64<size, big_endian>::Scan::local(
|
|||
else if (!object->local_has_got_offset(r_sym,
|
||||
GOT_TYPE_TLS_OFFSET))
|
||||
{
|
||||
Output_data_got_aarch64<size, big_endian>* got =
|
||||
target->got_section(symtab, layout);
|
||||
got->add_local(object, r_sym, GOT_TYPE_TLS_OFFSET);
|
||||
unsigned int got_offset =
|
||||
object->local_got_offset(r_sym, GOT_TYPE_TLS_OFFSET);
|
||||
|
@ -6086,6 +6090,8 @@ Target_aarch64<size, big_endian>::Scan::local(
|
|||
}
|
||||
gold_assert(tlsopt == tls::TLSOPT_NONE);
|
||||
|
||||
Output_data_got_aarch64<size, big_endian>* got =
|
||||
target->got_section(symtab, layout);
|
||||
got->add_local_pair_with_rel(object,r_sym, data_shndx,
|
||||
GOT_TYPE_TLS_PAIR,
|
||||
target->rela_dyn_section(layout),
|
||||
|
|
Loading…
Reference in a new issue