diff options
author | Frederic Riss <friss@apple.com> | 2015-08-07 15:14:08 +0000 |
---|---|---|
committer | Frederic Riss <friss@apple.com> | 2015-08-07 15:14:08 +0000 |
commit | a5ab8443c122b6e1832e7cf6fbc8d33b8e031038 (patch) | |
tree | 534acdfc009d7d508829494b48f48aef4ab4f479 /llvm/lib/MC/MCObjectStreamer.cpp | |
parent | 01da42d8db3263ede2c10b466daed51f4b1d43e5 (diff) | |
download | llvm-a5ab8443c122b6e1832e7cf6fbc8d33b8e031038.zip llvm-a5ab8443c122b6e1832e7cf6fbc8d33b8e031038.tar.gz llvm-a5ab8443c122b6e1832e7cf6fbc8d33b8e031038.tar.bz2 |
[MC/Dwarf] Allow to specify custom parameters for linetable emission.
NFC patch for current users, but llvm-dsymutil will use the new
functionality to adapt to the input linetable.
Based on a patch by Adrian Prantl.
llvm-svn: 244318
Diffstat (limited to 'llvm/lib/MC/MCObjectStreamer.cpp')
-rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index 0a63777..3906464 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -321,8 +321,10 @@ static const MCExpr *buildSymbolDiff(MCObjectStreamer &OS, const MCSymbol *A, return AddrDelta; } -static void emitDwarfSetLineAddr(MCObjectStreamer &OS, int64_t LineDelta, - const MCSymbol *Label, int PointerSize) { +static void emitDwarfSetLineAddr(MCObjectStreamer &OS, + MCDwarfLineTableParams Params, + int64_t LineDelta, const MCSymbol *Label, + int PointerSize) { // emit the sequence to set the address OS.EmitIntValue(dwarf::DW_LNS_extended_op, 1); OS.EmitULEB128IntValue(PointerSize + 1); @@ -330,7 +332,7 @@ static void emitDwarfSetLineAddr(MCObjectStreamer &OS, int64_t LineDelta, OS.EmitSymbolValue(Label, PointerSize); // emit the sequence for the LineDelta (from 1) and a zero address delta. - MCDwarfLineAddr::Emit(&OS, LineDelta, 0); + MCDwarfLineAddr::Emit(&OS, Params, LineDelta, 0); } void MCObjectStreamer::EmitDwarfAdvanceLineAddr(int64_t LineDelta, @@ -338,13 +340,15 @@ void MCObjectStreamer::EmitDwarfAdvanceLineAddr(int64_t LineDelta, const MCSymbol *Label, unsigned PointerSize) { if (!LastLabel) { - emitDwarfSetLineAddr(*this, LineDelta, Label, PointerSize); + emitDwarfSetLineAddr(*this, Assembler->getDWARFLinetableParams(), LineDelta, + Label, PointerSize); return; } const MCExpr *AddrDelta = buildSymbolDiff(*this, Label, LastLabel); int64_t Res; if (AddrDelta->evaluateAsAbsolute(Res, getAssembler())) { - MCDwarfLineAddr::Emit(this, LineDelta, Res); + MCDwarfLineAddr::Emit(this, Assembler->getDWARFLinetableParams(), LineDelta, + Res); return; } insert(new MCDwarfLineAddrFragment(LineDelta, *AddrDelta)); @@ -451,7 +455,7 @@ void MCObjectStreamer::FinishImpl() { MCGenDwarfInfo::Emit(this); // Dump out the dwarf file & directory tables and line tables. - MCDwarfLineTable::Emit(this); + MCDwarfLineTable::Emit(this, getAssembler().getDWARFLinetableParams()); flushPendingLabels(nullptr); getAssembler().Finish(); |