From: George Rimar Date: Thu, 4 Aug 2016 08:56:17 +0000 (+0000) Subject: [ELF] - Linkerscript: Fixed SORT_BY_ALIGNMENT sorting order. X-Git-Tag: llvmorg-4.0.0-rc1~13350 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9e5386ceae655ac104cd0f3a9233cefa20b3fa36;p=platform%2Fupstream%2Fllvm.git [ELF] - Linkerscript: Fixed SORT_BY_ALIGNMENT sorting order. According to spec: "SORT_BY_ALIGNMENT will sort sections into descending order by alignment before placing them in the output file" Previously they were sorted into ascending order. llvm-svn: 277706 --- diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index 08d0b95..6117a03 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -136,14 +136,14 @@ template struct SectionsSorter { bool operator()(InputSectionBase *A, InputSectionBase *B) { int AlignmentCmp = A->Alignment - B->Alignment; if (Kind == SortKind::Align || (Kind == SortKind::AlignName && AlignmentCmp != 0)) - return AlignmentCmp < 0; + return AlignmentCmp > 0; int NameCmp = A->getSectionName().compare(B->getSectionName()); if (Kind == SortKind::Name || (Kind == SortKind::NameAlign && NameCmp != 0)) return NameCmp < 0; if (Kind == SortKind::NameAlign) - return AlignmentCmp < 0; + return AlignmentCmp > 0; if (Kind == SortKind::AlignName) return NameCmp < 0; diff --git a/lld/test/ELF/linkerscript/linkerscript-sort-nested.s b/lld/test/ELF/linkerscript/linkerscript-sort-nested.s index eed5734..bb89da9 100644 --- a/lld/test/ELF/linkerscript/linkerscript-sort-nested.s +++ b/lld/test/ELF/linkerscript/linkerscript-sort-nested.s @@ -8,22 +8,20 @@ # RUN: ld.lld -o %t1 --script %t1.script %t1.o %t2.o # RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=SORTED_AN %s # SORTED_AN: Contents of section .aaa: -# SORTED_AN-NEXT: 0120 02000000 00000000 22000000 00000000 -# SORTED_AN-NEXT: 0130 11000000 00000000 00000000 00000000 -# SORTED_AN-NEXT: 0140 55000000 00000000 00000000 00000000 -# SORTED_AN-NEXT: 0150 00000000 00000000 00000000 00000000 -# SORTED_AN-NEXT: 0160 01000000 00000000 +# SORTED_AN-NEXT: 0120 01000000 00000000 00000000 00000000 +# SORTED_AN-NEXT: 0130 11000000 00000000 00000000 00000000 +# SORTED_AN-NEXT: 0140 55000000 00000000 22000000 00000000 +# SORTED_AN-NEXT: 0150 02000000 00000000 ## Check sorting first by name and then by alignment. # RUN: echo "SECTIONS { .aaa : { *(SORT_BY_NAME(SORT_BY_ALIGNMENT(.aaa.*))) } }" > %t2.script # RUN: ld.lld -o %t2 --script %t2.script %t1.o %t2.o # RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=SORTED_NA %s -# SORTED_NA: Contents of section .aaa: -# SORTED_NA-NEXT: 0120 11000000 00000000 00000000 00000000 -# SORTED_NA-NEXT: 0130 00000000 00000000 00000000 00000000 -# SORTED_NA-NEXT: 0140 01000000 00000000 02000000 00000000 -# SORTED_NA-NEXT: 0150 22000000 00000000 00000000 00000000 -# SORTED_NA-NEXT: 0160 55000000 00000000 +# SORTED_NA: Contents of section .aaa: +# SORTED_NA: 01000000 00000000 00000000 00000000 +# SORTED_NA: 11000000 00000000 22000000 00000000 +# SORTED_NA: 02000000 00000000 00000000 00000000 +# SORTED_NA: 55000000 00000000 .global _start _start: diff --git a/lld/test/ELF/linkerscript/linkerscript-sort.s b/lld/test/ELF/linkerscript/linkerscript-sort.s index 591f978..2e3b63b 100644 --- a/lld/test/ELF/linkerscript/linkerscript-sort.s +++ b/lld/test/ELF/linkerscript/linkerscript-sort.s @@ -57,15 +57,14 @@ # RUN: ld.lld -o %t5 --script %t5.script %t1.o %t2.o # RUN: llvm-objdump -s %t5 | FileCheck -check-prefix=SORTED_ALIGNMENT %s # SORTED_ALIGNMENT: Contents of section .aaa: -# SORTED_ALIGNMENT-NEXT: 0120 01000000 00000000 55000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0130 02000000 00000000 44000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0140 03000000 00000000 33000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0150 04000000 00000000 00000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0160 22000000 00000000 00000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0170 00000000 00000000 00000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0180 05000000 00000000 00000000 00000000 -# SORTED_ALIGNMENT-NEXT: 0190 00000000 00000000 00000000 00000000 -# SORTED_ALIGNMENT-NEXT: 01a0 11000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0120 05000000 00000000 00000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0130 00000000 00000000 00000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0140 11000000 00000000 00000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0150 04000000 00000000 00000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0160 22000000 00000000 03000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0170 33000000 00000000 02000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0180 44000000 00000000 01000000 00000000 +# SORTED_ALIGNMENT-NEXT: 0190 55000000 00000000 .global _start _start: