[llvm] [BOLT] Don't choke on nobits symbols (PR #136384)

Rafael Auler via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 18 16:01:24 PDT 2025


https://github.com/rafaelauler created https://github.com/llvm/llvm-project/pull/136384

None

>From 238a62fe455dee8e90dfc2707d9fcf8bfe4cd06a Mon Sep 17 00:00:00 2001
From: Rafael Auler <rafaelauler at fb.com>
Date: Fri, 18 Apr 2025 14:47:17 -0700
Subject: [PATCH] [BOLT] Don't choke on nobits symbols

---
 bolt/lib/Rewrite/RewriteInstance.cpp |  5 +++--
 bolt/test/X86/nobits-symbol.s        | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)
 create mode 100644 bolt/test/X86/nobits-symbol.s

diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 37dcfa868c211..45bc995ce906f 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -1055,10 +1055,11 @@ void RewriteInstance::discoverFileObjects() {
       continue;
     }
 
-    if (!Section->isText()) {
+    if (!Section->isText() || Section->isVirtual()) {
       assert(SymbolType != SymbolRef::ST_Function &&
              "unexpected function inside non-code section");
-      LLVM_DEBUG(dbgs() << "BOLT-DEBUG: rejecting as symbol is not in code\n");
+      LLVM_DEBUG(dbgs() << "BOLT-DEBUG: rejecting as symbol is not in code or "
+                           "is in nobits section\n");
       registerName(SymbolSize);
       continue;
     }
diff --git a/bolt/test/X86/nobits-symbol.s b/bolt/test/X86/nobits-symbol.s
new file mode 100644
index 0000000000000..4110c79930b29
--- /dev/null
+++ b/bolt/test/X86/nobits-symbol.s
@@ -0,0 +1,24 @@
+## Check that llvm-bolt doesn't choke on symbols defined in nobits sections.
+
+# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o
+# RUN: %clang %cflags %t.o -o %t.exe
+# RUN: llvm-bolt %t.exe -o %t
+#
+
+  .type            symbol_in_nobits, at object
+  .section        .my.nobits.section,"awx", at nobits
+  .globl           symbol_in_nobits
+  .p2align         4, 0x0
+symbol_in_nobits:
+  .zero  0x100000
+  .size   symbol_in_nobits, 0x100000
+
+	.text
+  .globl main
+  .type main, %function
+main:
+	.cfi_startproc
+.LBB06:
+  retq
+	.cfi_endproc
+.size main, .-main



More information about the llvm-commits mailing list