This is the mail archive of the 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 Wed, 26 Aug 2015, 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.

Instead of implementing your own sorting algorithm you could also have 
adjusted the comparison functions to provide a stable sort (never return 
zero for different arguments), ala:

  cmp (void *a, void *b) {
    if (a == b)
      return 0;
    if (contents of a and b differ)
      return -1/1;
    /* Contents same, but pointers differ, leave them in original
       order.  */
    return (a < b) ? -1 : 1;


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