[llvm] r361248 - [DebugInfo] Handle '# line "file"' correctly for asm source.
Paul Robinson via llvm-commits
llvm-commits at lists.llvm.org
Tue May 21 04:59:03 PDT 2019
Author: probinson
Date: Tue May 21 04:59:03 2019
New Revision: 361248
URL: http://llvm.org/viewvc/llvm-project?rev=361248&view=rev
Log:
[DebugInfo] Handle '# line "file"' correctly for asm source.
This provides the correct file path for the original source, rather
than the preprocessed source.
Part of the fix for PR41839.
Differential Revision: https://reviews.llvm.org/D62074
Added:
llvm/trunk/test/MC/ELF/debug-hash-file.s
Modified:
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=361248&r1=361247&r2=361248&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Tue May 21 04:59:03 2019
@@ -165,6 +165,9 @@ private:
};
CppHashInfoTy CppHashInfo;
+ /// The filename from the first cpp hash file line comment, if any.
+ StringRef FirstCppHashFilename;
+
/// List of forward directional labels for diagnosis at the end.
SmallVector<std::tuple<SMLoc, CppHashInfoTy, MCSymbol *>, 4> DirLabels;
@@ -849,6 +852,13 @@ bool AsmParser::enabledGenDwarfForAssemb
// the assembler source was produced with debug info already) then emit one
// describing the assembler source file itself.
if (getContext().getGenDwarfFileNumber() == 0) {
+ // Use the first #line directive for this, if any. It's preprocessed, so
+ // there is no checksum, and of course no source directive.
+ if (!FirstCppHashFilename.empty())
+ getContext().setMCLineTableRootFile(/*CUID=*/0,
+ getContext().getCompilationDir(),
+ FirstCppHashFilename,
+ /*Cksum=*/None, /*Source=*/None);
const MCDwarfFile &RootFile =
getContext().getMCDwarfLineTable(/*CUID=*/0).getRootFile();
getContext().setGenDwarfFileNumber(getStreamer().EmitDwarfFileDirective(
@@ -2285,11 +2295,14 @@ bool AsmParser::parseCppHashLineFilename
// Get rid of the enclosing quotes.
Filename = Filename.substr(1, Filename.size() - 2);
- // Save the SMLoc, Filename and LineNumber for later use by diagnostics.
+ // Save the SMLoc, Filename and LineNumber for later use by diagnostics
+ // and possibly DWARF file info.
CppHashInfo.Loc = L;
CppHashInfo.Filename = Filename;
CppHashInfo.LineNumber = LineNumber;
CppHashInfo.Buf = CurBuffer;
+ if (FirstCppHashFilename.empty())
+ FirstCppHashFilename = Filename;
return false;
}
Added: llvm/trunk/test/MC/ELF/debug-hash-file.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/debug-hash-file.s?rev=361248&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/debug-hash-file.s (added)
+++ llvm/trunk/test/MC/ELF/debug-hash-file.s Tue May 21 04:59:03 2019
@@ -0,0 +1,21 @@
+// RUN: llvm-mc -triple x86_64-unknown-linux-gnu -filetype obj -g -dwarf-version 4 -o %t %s
+// RUN: llvm-dwarfdump -debug-info -debug-line %t | FileCheck %s
+
+// CHECK: DW_TAG_compile_unit
+// CHECK-NOT: DW_TAG_
+// CHECK: DW_AT_name ("/MyTest/Inputs{{(/|\\)+}}other.S")
+// CHECK: DW_TAG_label
+// CHECK-NOT: DW_TAG_
+// CHECK: DW_AT_decl_file ("/MyTest/Inputs{{(/|\\)+}}other.S")
+
+// CHECK: include_directories[ 1] = "/MyTest/Inputs"
+// CHECK: file_names[ 1]:
+// CHECK-NEXT: name: "other.S"
+// CHECK-NEXT: dir_index: 1
+
+# 1 "/MyTest/Inputs/other.S"
+
+foo:
+ nop
+ nop
+ nop
More information about the llvm-commits
mailing list