diff options
author | Fangrui Song <i@maskray.me> | 2023-06-26 17:58:29 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2023-06-26 17:58:29 -0700 |
commit | 665ccc19d38ccee9bba869ec9706610cefb10b0c (patch) | |
tree | e331e1f72c38f6fefa957bdeb6f4059dbfd1f547 /llvm/lib/MC/MCObjectStreamer.cpp | |
parent | 2c1108f44342019a67ce55bb98e2a05b57a70b9a (diff) | |
download | llvm-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.cpp | 13 |
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, |