<html><body><p><tt>Rafael Espíndola <rafael.espindola@gmail.com> wrote on 16.12.2015 22:22:07:<br><br>> Are the two relocations created in the correct order? If so, we should<br>> probably change the default sort to use a stable sort and change the<br>> compare function to<br>> <br>> static int cmpRel(const ELFRelocationEntry *AP, const <br>> ELFRelocationEntry *BP) {<br>>   const ELFRelocationEntry &A = *AP;<br>>   const ELFRelocationEntry &B = *BP;<br>>   if (A.Offset != B.Offset)<br>>     return B.Offset - A.Offset;<br>>   return 0;<br>> }<br></tt><br><tt>The relocation are created in the correct order, but the above would not</tt><br><tt>help, since the two relocations are at *different* offsets; but sorting</tt><br><tt>by offset arranges them in exactly the wrong order.</tt><br><br><tt>There is a R_390_PLT32DBL at offset 2 in the insn (at the offset field),</tt><br><tt>which must come first, and there is a R_390_TLS_GDCALL at offset 0 in</tt><br><tt>the insn, which must come second.</tt><br><br><tt>> The function is there just for bug by bug compatibility with gas and<br>> as an easy hack for making the output stable. Ideally we just just<br>> delete it and fix any non deterministic code.<br></tt><br><tt>What gas does on s390x is to sort relocs for data sections (which is</tt><br><tt>required at least for .eh_frame as I understand), but does not sort</tt><br><tt>relocs for code sections.</tt><br><br><tt>Bye,</tt><br><tt>Ulrich</tt><br><BR>
</body></html>