[llvm] r320469 - [dsymutil] Accept line tables up to DWARFv5.
Jonas Devlieghere via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 12 03:32:21 PST 2017
Author: jdevlieghere
Date: Tue Dec 12 03:32:21 2017
New Revision: 320469
URL: http://llvm.org/viewvc/llvm-project?rev=320469&view=rev
Log:
[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
Added:
llvm/trunk/test/tools/dsymutil/Inputs/dwarf4.o
llvm/trunk/test/tools/dsymutil/Inputs/dwarf5.o
llvm/trunk/test/tools/dsymutil/X86/dwarf4-linetable.test
llvm/trunk/test/tools/dsymutil/X86/dwarf5-linetable.test
Modified:
llvm/trunk/tools/dsymutil/DwarfLinker.cpp
Added: llvm/trunk/test/tools/dsymutil/Inputs/dwarf4.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/dwarf4.o?rev=320469&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/dsymutil/Inputs/dwarf4.o (added) and llvm/trunk/test/tools/dsymutil/Inputs/dwarf4.o Tue Dec 12 03:32:21 2017 differ
Added: llvm/trunk/test/tools/dsymutil/Inputs/dwarf5.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/dwarf5.o?rev=320469&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/dsymutil/Inputs/dwarf5.o (added) and llvm/trunk/test/tools/dsymutil/Inputs/dwarf5.o Tue Dec 12 03:32:21 2017 differ
Added: llvm/trunk/test/tools/dsymutil/X86/dwarf4-linetable.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/dwarf4-linetable.test?rev=320469&view=auto
==============================================================================
--- llvm/trunk/test/tools/dsymutil/X86/dwarf4-linetable.test (added)
+++ llvm/trunk/test/tools/dsymutil/X86/dwarf4-linetable.test Tue Dec 12 03:32:21 2017
@@ -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
Added: llvm/trunk/test/tools/dsymutil/X86/dwarf5-linetable.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/dwarf5-linetable.test?rev=320469&view=auto
==============================================================================
--- llvm/trunk/test/tools/dsymutil/X86/dwarf5-linetable.test (added)
+++ llvm/trunk/test/tools/dsymutil/X86/dwarf5-linetable.test Tue Dec 12 03:32:21 2017
@@ -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
Modified: llvm/trunk/tools/dsymutil/DwarfLinker.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfLinker.cpp?rev=320469&r1=320468&r2=320469&view=diff
==============================================================================
--- llvm/trunk/tools/dsymutil/DwarfLinker.cpp (original)
+++ llvm/trunk/tools/dsymutil/DwarfLinker.cpp Tue Dec 12 03:32:21 2017
@@ -3232,16 +3232,21 @@ void DwarfLinker::patchLineTableForUnit(
}
// 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;
More information about the llvm-commits
mailing list