[lld] ef6d187 - [ELF] Fix assertion in cdsort (#71708)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 8 12:34:40 PST 2023


Author: spupyrev
Date: 2023-11-08T12:34:36-08:00
New Revision: ef6d187115a28c745108f2b26a5d5a62cedf9b3c

URL: https://github.com/llvm/llvm-project/commit/ef6d187115a28c745108f2b26a5d5a62cedf9b3c
DIFF: https://github.com/llvm/llvm-project/commit/ef6d187115a28c745108f2b26a5d5a62cedf9b3c.diff

LOG: [ELF] Fix assertion in cdsort (#71708)

It seems that some functions (.text.unlikely.xxx) may have zero size,
which
makes some builds with enabled assertions fail. Removing the assertion
and
extending one test to fix the build.
The sorting can process such zero-sized functions so no changes there
are needed

Added: 
    

Modified: 
    lld/ELF/CallGraphSort.cpp
    lld/test/ELF/cgprofile-txt2.s

Removed: 
    


################################################################################
diff  --git a/lld/ELF/CallGraphSort.cpp b/lld/ELF/CallGraphSort.cpp
index 5e36964da94fc52..a0cf491bbae35ba 100644
--- a/lld/ELF/CallGraphSort.cpp
+++ b/lld/ELF/CallGraphSort.cpp
@@ -287,7 +287,6 @@ DenseMap<const InputSectionBase *, int> elf::computeCacheDirectedSortOrder() {
     if (res.second) {
       // inSec does not appear before in the graph.
       sections.push_back(inSec);
-      assert(inSec->getSize() > 0 && "found a function with zero size");
       funcSizes.push_back(inSec->getSize());
       funcCounts.push_back(0);
     }

diff  --git a/lld/test/ELF/cgprofile-txt2.s b/lld/test/ELF/cgprofile-txt2.s
index b59b6eeb292fabf..bb9e78a4a2e9c2b 100644
--- a/lld/test/ELF/cgprofile-txt2.s
+++ b/lld/test/ELF/cgprofile-txt2.s
@@ -5,11 +5,13 @@
 # RUN: echo "B C 50" >> %t.call_graph
 # RUN: echo "C D 40" >> %t.call_graph
 # RUN: echo "D B 10" >> %t.call_graph
+# RUN: echo "D E 1" >> %t.call_graph
 # RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph --call-graph-profile-sort=hfsort -o %t2
 # RUN: llvm-readobj --symbols %t2 | FileCheck %s --check-prefix=CHECKC3
 # RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph --call-graph-profile-sort=cdsort -o %t2
 # RUN: llvm-readobj --symbols %t2 | FileCheck %s --check-prefix=CHECKCDS
 
+## The expected order is [B, C, D, E, A]
 # CHECKC3:      Name: A
 # CHECKC3-NEXT: Value: 0x201123
 # CHECKC3:      Name: B
@@ -18,7 +20,10 @@
 # CHECKC3-NEXT: Value: 0x201121
 # CHECKC3:      Name: D
 # CHECKC3-NEXT: Value: 0x201122
+# CHECKC3:      Name: E
+# CHECKC3-NEXT: Value: 0x201123
 
+## The expected order is [A, B, C, D, E]
 # CHECKCDS:      Name: A
 # CHECKCDS-NEXT: Value: 0x201120
 # CHECKCDS:      Name: B
@@ -27,6 +32,8 @@
 # CHECKCDS-NEXT: Value: 0x201122
 # CHECKCDS:      Name: D
 # CHECKCDS-NEXT: Value: 0x201123
+# CHECKCDS:      Name: E
+# CHECKCDS-NEXT: Value: 0x201124
 
 .section    .text.A,"ax", at progbits
 .globl  A
@@ -47,3 +54,7 @@ C:
 .globl  D
 D:
  nop
+
+.section    .text.E,"ax", at progbits
+.globl  E
+E:


        


More information about the llvm-commits mailing list