From 238a62fe455dee8e90dfc2707d9fcf8bfe4cd06a Mon Sep 17 00:00:00 2001 From: Rafael Auler 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,@object + .section .my.nobits.section,"awx",@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