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.
|
||||
uint32_t PrologueEnd = *StmtList + 10 + LineTable.Prologue.PrologueLength;
|
||||
// FIXME: LLVM hardcodes it's prologue values. We just copy the
|
||||
// FIXME: LLVM hardcodes its prologue values. We just copy the
|
||||
// prologue over and that works because we act as both producer and
|
||||
// consumer. It would be nicer to have a real configurable line
|
||||
// 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.OpcodeBase > 13)
|
||||
reportWarning("line table parameters mismatch. Cannot emit.");
|
||||
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;
|
||||
MCDwarfLineTableParams Params;
|
||||
Params.DWARF2LineOpcodeBase = LineTable.Prologue.OpcodeBase;
|
||||
|
|
Loading…
Reference in New Issue