[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