aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCObjectStreamer.cpp
diff options
context:
space:
mode:
authorFrederic Riss <friss@apple.com>2015-08-07 15:14:08 +0000
committerFrederic Riss <friss@apple.com>2015-08-07 15:14:08 +0000
commita5ab8443c122b6e1832e7cf6fbc8d33b8e031038 (patch)
tree534acdfc009d7d508829494b48f48aef4ab4f479 /llvm/lib/MC/MCObjectStreamer.cpp
parent01da42d8db3263ede2c10b466daed51f4b1d43e5 (diff)
downloadllvm-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.cpp16
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();