Skip to content

Commit

Permalink
[dsymutil] Accept line tables up to DWARFv5.
Browse files Browse the repository at this point in the history
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320469 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
JDevlieghere committed Dec 12, 2017
1 parent 45aa4ec commit e75cd38
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 3 deletions.
Binary file added test/tools/dsymutil/Inputs/dwarf4.o
Binary file not shown.
Binary file added test/tools/dsymutil/Inputs/dwarf5.o
Binary file not shown.
23 changes: 23 additions & 0 deletions test/tools/dsymutil/X86/dwarf4-linetable.test
Original file line number Diff line number Diff line change
@@ -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
23 changes: 23 additions & 0 deletions test/tools/dsymutil/X86/dwarf5-linetable.test
Original file line number Diff line number Diff line change
@@ -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
11 changes: 8 additions & 3 deletions tools/dsymutil/DwarfLinker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit e75cd38

Please sign in to comment.