aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCObjectStreamer.cpp
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2023-06-26 17:58:29 -0700
committerFangrui Song <i@maskray.me>2023-06-26 17:58:29 -0700
commit665ccc19d38ccee9bba869ec9706610cefb10b0c (patch)
treee331e1f72c38f6fefa957bdeb6f4059dbfd1f547 /llvm/lib/MC/MCObjectStreamer.cpp
parent2c1108f44342019a67ce55bb98e2a05b57a70b9a (diff)
downloadllvm-665ccc19d38ccee9bba869ec9706610cefb10b0c.zip
llvm-665ccc19d38ccee9bba869ec9706610cefb10b0c.tar.gz
llvm-665ccc19d38ccee9bba869ec9706610cefb10b0c.tar.bz2
[MC] Add SMLoc to MCCFIInstruction
to help debug and report better diagnostics for functions like relaxDwarfCallFrameFragment (D153167). In MCStreamer, some emitCFI* functions already take a SMLoc argument. Add a SMLoc argument to the remaining functions that generate a MCCFIInstruction.
Diffstat (limited to 'llvm/lib/MC/MCObjectStreamer.cpp')
-rw-r--r--llvm/lib/MC/MCObjectStreamer.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index 64fbe61..9398eb8 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -510,13 +510,13 @@ void MCObjectStreamer::emitDwarfLocDirective(unsigned FileNo, unsigned Line,
}
static const MCExpr *buildSymbolDiff(MCObjectStreamer &OS, const MCSymbol *A,
- const MCSymbol *B) {
+ const MCSymbol *B, SMLoc Loc) {
MCContext &Context = OS.getContext();
MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;
const MCExpr *ARef = MCSymbolRefExpr::create(A, Variant, Context);
const MCExpr *BRef = MCSymbolRefExpr::create(B, Variant, Context);
const MCExpr *AddrDelta =
- MCBinaryExpr::create(MCBinaryExpr::Sub, ARef, BRef, Context);
+ MCBinaryExpr::create(MCBinaryExpr::Sub, ARef, BRef, Context, Loc);
return AddrDelta;
}
@@ -543,7 +543,7 @@ void MCObjectStreamer::emitDwarfAdvanceLineAddr(int64_t LineDelta,
Label, PointerSize);
return;
}
- const MCExpr *AddrDelta = buildSymbolDiff(*this, Label, LastLabel);
+ const MCExpr *AddrDelta = buildSymbolDiff(*this, Label, LastLabel, SMLoc());
insert(new MCDwarfLineAddrFragment(LineDelta, *AddrDelta));
}
@@ -566,9 +566,10 @@ void MCObjectStreamer::emitDwarfLineEndEntry(MCSection *Section,
}
void MCObjectStreamer::emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
- const MCSymbol *Label) {
- const MCExpr *AddrDelta = buildSymbolDiff(*this, Label, LastLabel);
- insert(new MCDwarfCallFrameFragment(*AddrDelta));
+ const MCSymbol *Label,
+ SMLoc Loc) {
+ const MCExpr *AddrDelta = buildSymbolDiff(*this, Label, LastLabel, Loc);
+ insert(new MCDwarfCallFrameFragment(*AddrDelta, nullptr));
}
void MCObjectStreamer::emitCVLocDirective(unsigned FunctionId, unsigned FileNo,