[AArch64] Cortex-A53 Erratum 835769 -- sort maps

2014-11-24  Tejas Belagod  <tejas.belagod@arm.com>

  bfd/
    * elfnn-aarch64.c (elf_aarch64_compare_mapping): New.
    (erratum_835769_scan): Sort map list.
This commit is contained in:
Jiong Wang 2014-11-24 13:43:39 +00:00
parent a441dfbc4e
commit 520c7b56ac
2 changed files with 32 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2014-11-24 Tejas Belagod <tejas.belagod@arm.com>
* elfnn-aarch64.c (elf_aarch64_compare_mapping): New.
(erratum_835769_scan): Sort map list.
2014-11-24 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (plt_stub_pad): Correct.

View file

@ -2937,6 +2937,29 @@ aarch64_erratum_sequence (uint32_t insn_1, uint32_t insn_2)
return FALSE;
}
/* Used to order a list of mapping symbols by address. */
static int
elf_aarch64_compare_mapping (const void *a, const void *b)
{
const elf_aarch64_section_map *amap = (const elf_aarch64_section_map *) a;
const elf_aarch64_section_map *bmap = (const elf_aarch64_section_map *) b;
if (amap->vma > bmap->vma)
return 1;
else if (amap->vma < bmap->vma)
return -1;
else if (amap->type > bmap->type)
/* Ensure results do not depend on the host qsort for objects with
multiple mapping symbols at the same address by sorting on type
after vma. */
return 1;
else if (amap->type < bmap->type)
return -1;
else
return 0;
}
static bfd_boolean
erratum_835769_scan (bfd *input_bfd,
struct bfd_link_info *info,
@ -2974,6 +2997,10 @@ erratum_835769_scan (bfd *input_bfd,
return TRUE;
sec_data = elf_aarch64_section_data (section);
qsort (sec_data->map, sec_data->mapcount,
sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping);
for (span = 0; span < sec_data->mapcount; span++)
{
unsigned int span_start = sec_data->map[span].vma;