mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[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 llvm-svn: 361248
This commit is contained in:
parent
af086b6f89
commit
669be17384
@ -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::enabledGenDwarfForAssembly() {
|
||||
// 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::parseCppHashLineFilenameComment(SMLoc L) {
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
21
test/MC/ELF/debug-hash-file.s
Normal file
21
test/MC/ELF/debug-hash-file.s
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user