[llvm] [MC] Don't treat altentry symbols as atoms (PR #97479)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 2 13:54:56 PDT 2024
https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/97479
The current `setAtom` is inaccurate: a `.alt_entry` label can also be
recognized as an atom. This is mostly benign, but might cause two
locations only separated by an `.alt_entry` to have different atoms.
The `evaluateAsAbsolute` code added by https://reviews.llvm.org/D153167
would not fold `A-B` when they are only separated by a `.alt_entry`
label, leading to a spurious error.
The fix is similar to #82268: add a special case for `.alt_entry`.
Fix #97116
>From 631058bba0a6685700e4ab084d3f83b75e5126ea Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Tue, 2 Jul 2024 13:54:48 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
=?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.5-bogner
---
llvm/lib/MC/MCMachOStreamer.cpp | 2 +-
llvm/test/MC/MachO/cfi-advance-loc-err.s | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index d67b95820a8a9..0b34d87033b7b 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -508,7 +508,7 @@ void MCMachOStreamer::finishImpl() {
DenseMap<const MCFragment *, const MCSymbol *> DefiningSymbolMap;
for (const MCSymbol &Symbol : getAssembler().symbols()) {
if (getAssembler().isSymbolLinkerVisible(Symbol) && Symbol.isInSection() &&
- !Symbol.isVariable()) {
+ !Symbol.isVariable() && !cast<MCSymbolMachO>(Symbol).isAltEntry()) {
// An atom defining symbol should never be internal to a fragment.
assert(Symbol.getOffset() == 0 &&
"Invalid offset in atom defining symbol!");
diff --git a/llvm/test/MC/MachO/cfi-advance-loc-err.s b/llvm/test/MC/MachO/cfi-advance-loc-err.s
index 3143dd84efc63..77b6544cb12d8 100644
--- a/llvm/test/MC/MachO/cfi-advance-loc-err.s
+++ b/llvm/test/MC/MachO/cfi-advance-loc-err.s
@@ -9,6 +9,11 @@ _foo:
subq $8, %rsp
.cfi_adjust_cfa_offset 8
+ .alt_entry _bar
+_bar: # alt_entry label can appear here as it is not an atom
+ addq $8, %rsp
+ .cfi_adjust_cfa_offset -8
+
tmp0: # non-private label cannot appear here
addq $8, %rsp
# CHECK: :[[#@LINE+1]]:3: error: invalid CFI advance_loc expression
More information about the llvm-commits
mailing list