forked from OSchip/llvm-project
[dsymutil] Accept line tables up to DWARFv5.
This patch removes the hard-coded check for DWARFv2 line tables. Now dsymutil accepts line tables for DWARF versions 2 to 5 (inclusive). Differential revision: https://reviews.llvm.org/D41084 rdar://35968319 llvm-svn: 320469
This commit is contained in:
parent
657159c273
commit
f0945f48bd
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,23 @@
|
||||||
|
# RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/ -y %s -o - | llvm-dwarfdump -debug-line - | FileCheck %s
|
||||||
|
|
||||||
|
# Source:
|
||||||
|
# int main() {
|
||||||
|
# return 0;
|
||||||
|
# }
|
||||||
|
# Compile with:
|
||||||
|
# clang -gdwarf-4 dwarf4.c -c -o dwarf4.o
|
||||||
|
|
||||||
|
---
|
||||||
|
triple: 'x86_64-apple-darwin'
|
||||||
|
objects:
|
||||||
|
- filename: dwarf4.o
|
||||||
|
timestamp: 1513021112
|
||||||
|
symbols:
|
||||||
|
- { sym: _main, objAddr: 0x0000000000000000, binAddr: 0x0000000100000FA0, size: 0x0000000F }
|
||||||
|
...
|
||||||
|
|
||||||
|
# CHECK: .debug_line contents:
|
||||||
|
# CHECK: debug_line
|
||||||
|
# CHECK: Line table prologue:
|
||||||
|
# CHECK: total_length:
|
||||||
|
# CHECK: version: 4
|
|
@ -0,0 +1,23 @@
|
||||||
|
# RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/ -y %s -o - | llvm-dwarfdump -debug-line - | FileCheck %s
|
||||||
|
|
||||||
|
# Source:
|
||||||
|
# int main() {
|
||||||
|
# return 0;
|
||||||
|
# }
|
||||||
|
# Compile with:
|
||||||
|
# clang -gdwarf-5 dwarf5.c -c -o dwarf5.o
|
||||||
|
|
||||||
|
---
|
||||||
|
triple: 'x86_64-apple-darwin'
|
||||||
|
objects:
|
||||||
|
- filename: dwarf5.o
|
||||||
|
timestamp: 1513021112
|
||||||
|
symbols:
|
||||||
|
- { sym: _main, objAddr: 0x0000000000000000, binAddr: 0x0000000100000FA0, size: 0x0000000F }
|
||||||
|
...
|
||||||
|
|
||||||
|
# CHECK: .debug_line contents:
|
||||||
|
# CHECK: debug_line
|
||||||
|
# CHECK: Line table prologue:
|
||||||
|
# CHECK: total_length:
|
||||||
|
# CHECK: version: 5
|
|
@ -3232,16 +3232,21 @@ void DwarfLinker::patchLineTableForUnit(CompileUnit &Unit,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finished extracting, now emit the line tables.
|
// Finished extracting, now emit the line tables.
|
||||||
uint32_t PrologueEnd = *StmtList + 10 + LineTable.Prologue.PrologueLength;
|
// FIXME: LLVM hardcodes its prologue values. We just copy the
|
||||||
// FIXME: LLVM hardcodes it's prologue values. We just copy the
|
|
||||||
// prologue over and that works because we act as both producer and
|
// prologue over and that works because we act as both producer and
|
||||||
// consumer. It would be nicer to have a real configurable line
|
// consumer. It would be nicer to have a real configurable line
|
||||||
// table emitter.
|
// table emitter.
|
||||||
if (LineTable.Prologue.getVersion() != 2 ||
|
if (LineTable.Prologue.getVersion() < 2 ||
|
||||||
|
LineTable.Prologue.getVersion() > 5 ||
|
||||||
LineTable.Prologue.DefaultIsStmt != DWARF2_LINE_DEFAULT_IS_STMT ||
|
LineTable.Prologue.DefaultIsStmt != DWARF2_LINE_DEFAULT_IS_STMT ||
|
||||||
LineTable.Prologue.OpcodeBase > 13)
|
LineTable.Prologue.OpcodeBase > 13)
|
||||||
reportWarning("line table parameters mismatch. Cannot emit.");
|
reportWarning("line table parameters mismatch. Cannot emit.");
|
||||||
else {
|
else {
|
||||||
|
uint32_t PrologueEnd = *StmtList + 10 + LineTable.Prologue.PrologueLength;
|
||||||
|
// DWARFv5 has an extra 2 bytes of information before the header_length
|
||||||
|
// field.
|
||||||
|
if (LineTable.Prologue.getVersion() == 5)
|
||||||
|
PrologueEnd += 2;
|
||||||
StringRef LineData = OrigDwarf.getDWARFObj().getLineSection().Data;
|
StringRef LineData = OrigDwarf.getDWARFObj().getLineSection().Data;
|
||||||
MCDwarfLineTableParams Params;
|
MCDwarfLineTableParams Params;
|
||||||
Params.DWARF2LineOpcodeBase = LineTable.Prologue.OpcodeBase;
|
Params.DWARF2LineOpcodeBase = LineTable.Prologue.OpcodeBase;
|
||||||
|
|
Loading…
Reference in New Issue