From b91deca94e36b9f18156909e4c615fe7af8e3ae8 Mon Sep 17 00:00:00 2001 From: Han Shen Date: Mon, 6 Jul 2015 15:17:25 -0700 Subject: [PATCH] Make gold aarch64 accept long form of mapping symbols. 2015-07-07 Han Shen gold/ChangeLog: 2015-07-06 Han Shen * aarch64.cc (AArch64_relobj::do_count_local_symbols): Make legal of mapping symbols. --- gold/ChangeLog | 11 +++++++++-- gold/aarch64.cc | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 57468bedc60..bdc5a58d22b 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2015-07-07 Han Shen + + Make gold aarch64 accept long form of mapping symbols. + + * aarch64.cc (AArch64_relobj::do_count_local_symbols): Make legal + of mapping symbols. + 2015-06-29 Doug Kwan * testsuite/arm_bl_out_of_range.s: Align stub table so that it appears @@ -12,12 +19,12 @@ * testsuite/thumb_bl_out_of_range.s: Ditto. * testsuite/thumb_bl_out_of_range_local.s: Ditto. * testsuite/thumb_blx_out_of_range.s: Ditto. - + 2015-06-29 Han Shen Patch for erratum 843419 internal error. - * AArch64.cc (Erratum_stub::Insn_utilities): New typedef. + * aarch64.cc (Erratum_stub::Insn_utilities): New typedef. (Erratum_stub::update_erratum_insn): New method. (Stub_table::relocate_stubs): Modified to place relocated insn. (AArch64_relobj::fix_errata): Modified gold_assert. diff --git a/gold/aarch64.cc b/gold/aarch64.cc index e32f003737a..0d86d05d571 100644 --- a/gold/aarch64.cc +++ b/gold/aarch64.cc @@ -1831,10 +1831,17 @@ AArch64_relobj::do_count_local_symbols( Symbol_value& lv((*plocal_values)[i]); AArch64_address input_value = lv.input_value(); - // Check to see if this is a mapping symbol. + // Check to see if this is a mapping symbol. AArch64 mapping symbols are + // defined in "ELF for the ARM 64-bit Architecture", Table 4-4, Mapping + // symbols. + // Mapping symbols could be one of the following 4 forms - + // a) $x + // b) $x. + // c) $d + // d) $d. const char* sym_name = pnames + sym.get_st_name(); if (sym_name[0] == '$' && (sym_name[1] == 'x' || sym_name[1] == 'd') - && sym_name[2] == '\0') + && (sym_name[2] == '\0' || sym_name[2] == '.')) { bool is_ordinary; unsigned int input_shndx = -- 2.30.2