This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Use stable sort for ld -r relocs


On 26 Aug 2015 23:32, Alan Modra wrote:
> A number of targets emit multiple relocs at a given r_offset, and
> depend on those relocs staying in their original order.  qsort doesn't
> satisfy this requirement, although it appears from my non-rigorous
> testing that glibc's msort.c implementation may in fact be stable.
> 
> I made the mistake of backporting my PR 17666 fix to 2.25.1, thinking
> the code had enough time to settle on mainline, but for anyone with a
> system libc that provides an unstable qsort this will mean 2.25.1
> ld -r may be broken on some targets.
> 
> 	PR 18867
> 	* elflink.c (cmp_ext32l_r_offset, cmp_ext32b_r_offset): Delete.
> 	(cmp_ext64l_r_offset, cmp_ext64b_r_offset): Delete.
> 	(ext32l_r_offset, ext32b_r_offset, ext64l_r_offset, ext64b_r_offset):
> 	New functions.
> 	(elf_link_adjust_relocs): Use an insertion sort to sort relocs.

were you planning on making another change ?  i tested master
(1dc7a6235090327d7b5586f85e6115c3cd13ed83) and it still crashes
on alpha.  this hack makes things work:
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
...
-      sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
+      sort = 0; //bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
...
-mike

Attachment: signature.asc
Description: Digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]