[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:23:56 PDT 2013
Rafael, could you please reconfirm the sort order in r_offset, Type and Index?
2013/5/15 NAKAMURA Takumi <geek4civic at gmail.com>:
> 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;
> }
> };
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list