qsort: pe-dll.c reloc sorting

* pe-dll.c (reloc_data_type): Add idx field.
	(reloc_sort): Perform final sort by idx.
	(generate_reloc): Set idx.
This commit is contained in:
Alan Modra 2019-10-14 13:55:32 +10:30
parent 6ce9ba7afc
commit 08dec09d8a
2 changed files with 19 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2019-10-14 Alan Modra <amodra@gmail.com>
* pe-dll.c (reloc_data_type): Add idx field.
(reloc_sort): Perform final sort by idx.
(generate_reloc): Set idx.
2019-10-13 Nick Clifton <nickc@redhat.com> 2019-10-13 Nick Clifton <nickc@redhat.com>
* NEWS: Delete superflous "Changes in 2.33" comment. * NEWS: Delete superflous "Changes in 2.33" comment.

View File

@ -445,16 +445,25 @@ typedef struct
bfd_vma vma; bfd_vma vma;
char type; char type;
short extra; short extra;
int idx;
} }
reloc_data_type; reloc_data_type;
static int static int
reloc_sort (const void *va, const void *vb) reloc_sort (const void *va, const void *vb)
{ {
bfd_vma a = ((const reloc_data_type *) va)->vma; const reloc_data_type *a = (const reloc_data_type *) va;
bfd_vma b = ((const reloc_data_type *) vb)->vma; const reloc_data_type *b = (const reloc_data_type *) vb;
return (a > b) ? 1 : ((a < b) ? -1 : 0); if (a->vma > b->vma)
return 1;
if (a->vma < b->vma)
return -1;
if (a->idx > b->idx)
return 1;
if (a->idx < b->idx)
return -1;
return 0;
} }
static int static int
@ -1596,6 +1605,7 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
} }
reloc_data[total_relocs].vma = sec_vma + relocs[i]->address; reloc_data[total_relocs].vma = sec_vma + relocs[i]->address;
reloc_data[total_relocs].idx = total_relocs;
#define BITS_AND_SHIFT(bits, shift) (bits * 1000 | shift) #define BITS_AND_SHIFT(bits, shift) (bits * 1000 | shift)