[llvm] r181864 - ELFRelocationEntry::operator<(): Try to stabilize the order. r_offset was insufficient to sort Relocs.
NAKAMURA Takumi
geek4civic at gmail.com
Tue May 14 19:16:23 PDT 2013
Author: chapuni
Date: Tue May 14 21:16:23 2013
New Revision: 181864
URL: http://llvm.org/viewvc/llvm-project?rev=181864&view=rev
Log:
ELFRelocationEntry::operator<(): Try to stabilize the order. r_offset was insufficient to sort Relocs.
It should fix llvm/test/CodeGen/ARM/ehabi-mc-compact-pr*.ll on some hosts.
RELOCATION RECORDS FOR [.ARM.exidx]:
0 R_ARM_PREL31 .text
0 R_ARM_NONE __aeabi_unwind_cpp_pr0
FIXME: I am not sure of the directions of extra comparators, in Type and Index.
For now, they are different from the direction in r_offset.
Modified:
llvm/trunk/include/llvm/MC/MCELFObjectWriter.h
Modified: llvm/trunk/include/llvm/MC/MCELFObjectWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCELFObjectWriter.h?rev=181864&r1=181863&r2=181864&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCELFObjectWriter.h (original)
+++ llvm/trunk/include/llvm/MC/MCELFObjectWriter.h Tue May 14 21:16:23 2013
@@ -45,7 +45,14 @@ struct ELFRelocationEntry {
// Support lexicographic sorting.
bool operator<(const ELFRelocationEntry &RE) const {
- return RE.r_offset < r_offset;
+ if (RE.r_offset != r_offset)
+ return RE.r_offset < r_offset;
+ if (Type != RE.Type)
+ return Type < RE.Type;
+ if (Index != RE.Index)
+ return Index < RE.Index;
+ llvm_unreachable("ELFRelocs might be unstable!");
+ return 0;
}
};
More information about the llvm-commits
mailing list