mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 22:58:50 +00:00
[dwarfdump] Dump full filenames as DW_AT_(decl|call)_file attribute values
Reviewers: dblaikie samsonov Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5192 llvm-svn: 218246
This commit is contained in:
parent
d6f638ebe4
commit
bfc90ed2e1
@ -31,7 +31,7 @@ static const DWARFUnit *findUnitAndExtractFast(DWARFDebugInfoEntryMinimal &DIE,
|
|||||||
return (Unit && DIE.extractFast(Unit, Offset)) ? Unit : nullptr;
|
return (Unit && DIE.extractFast(Unit, Offset)) ? Unit : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDebugInfoEntryMinimal::dump(raw_ostream &OS, const DWARFUnit *u,
|
void DWARFDebugInfoEntryMinimal::dump(raw_ostream &OS, DWARFUnit *u,
|
||||||
unsigned recurseDepth,
|
unsigned recurseDepth,
|
||||||
unsigned indent) const {
|
unsigned indent) const {
|
||||||
DataExtractor debug_info_data = u->getDebugInfoExtractor();
|
DataExtractor debug_info_data = u->getDebugInfoExtractor();
|
||||||
@ -74,7 +74,7 @@ void DWARFDebugInfoEntryMinimal::dump(raw_ostream &OS, const DWARFUnit *u,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
|
void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
|
||||||
const DWARFUnit *u,
|
DWARFUnit *u,
|
||||||
uint32_t *offset_ptr,
|
uint32_t *offset_ptr,
|
||||||
uint16_t attr, uint16_t form,
|
uint16_t attr, uint16_t form,
|
||||||
unsigned indent) const {
|
unsigned indent) const {
|
||||||
@ -99,7 +99,17 @@ void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
|
|||||||
OS << "\t(";
|
OS << "\t(";
|
||||||
|
|
||||||
const char *Name = nullptr;
|
const char *Name = nullptr;
|
||||||
if (Optional<uint64_t> Val = formValue.getAsUnsignedConstant())
|
std::string File;
|
||||||
|
if (attr == DW_AT_decl_file || attr == DW_AT_call_file) {
|
||||||
|
if (const auto *LT = u->getContext().getLineTableForUnit(u))
|
||||||
|
if (LT->getFileNameByIndex(
|
||||||
|
formValue.getAsUnsignedConstant().getValue(),
|
||||||
|
u->getCompilationDir(),
|
||||||
|
DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath, File)) {
|
||||||
|
File = '"' + File + '"';
|
||||||
|
Name = File.c_str();
|
||||||
|
}
|
||||||
|
} else if (Optional<uint64_t> Val = formValue.getAsUnsignedConstant())
|
||||||
Name = AttributeValueString(attr, *Val);
|
Name = AttributeValueString(attr, *Val);
|
||||||
|
|
||||||
if (Name) {
|
if (Name) {
|
||||||
|
@ -38,9 +38,9 @@ public:
|
|||||||
DWARFDebugInfoEntryMinimal()
|
DWARFDebugInfoEntryMinimal()
|
||||||
: Offset(0), SiblingIdx(0), AbbrevDecl(nullptr) {}
|
: Offset(0), SiblingIdx(0), AbbrevDecl(nullptr) {}
|
||||||
|
|
||||||
void dump(raw_ostream &OS, const DWARFUnit *u, unsigned recurseDepth,
|
void dump(raw_ostream &OS, DWARFUnit *u, unsigned recurseDepth,
|
||||||
unsigned indent = 0) const;
|
unsigned indent = 0) const;
|
||||||
void dumpAttribute(raw_ostream &OS, const DWARFUnit *u, uint32_t *offset_ptr,
|
void dumpAttribute(raw_ostream &OS, DWARFUnit *u, uint32_t *offset_ptr,
|
||||||
uint16_t attr, uint16_t form, unsigned indent = 0) const;
|
uint16_t attr, uint16_t form, unsigned indent = 0) const;
|
||||||
|
|
||||||
/// Extracts a debug info entry, which is a child of a given unit,
|
/// Extracts a debug info entry, which is a child of a given unit,
|
||||||
|
@ -40,7 +40,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
|
|||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB")
|
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB")
|
||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_decl_file [DW_FORM_data1] (0x01)
|
; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo/test.c")
|
||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_decl_line [DW_FORM_data1] (1)
|
; CHECK: DW_AT_decl_line [DW_FORM_data1] (1)
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
|
|||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC")
|
; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC")
|
||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_decl_file [DW_FORM_data1] (0x01)
|
; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo/test.c")
|
||||||
; CHECK-NOT: DW_TAG
|
; CHECK-NOT: DW_TAG
|
||||||
; CHECK: DW_AT_decl_line [DW_FORM_data1] (4)
|
; CHECK: DW_AT_decl_line [DW_FORM_data1] (4)
|
||||||
|
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
; CHECK: debug_info contents
|
; CHECK: debug_info contents
|
||||||
; CHECK: [[NS1:0x[0-9a-f]*]]:{{ *}}DW_TAG_namespace
|
; CHECK: [[NS1:0x[0-9a-f]*]]:{{ *}}DW_TAG_namespace
|
||||||
; CHECK-NEXT: DW_AT_name{{.*}} = "A"
|
; CHECK-NEXT: DW_AT_name{{.*}} = "A"
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F1:[0-9]]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F1:".*debug-info-namespace.cpp"]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(3)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(3)
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: [[NS2:0x[0-9a-f]*]]:{{ *}}DW_TAG_namespace
|
; CHECK: [[NS2:0x[0-9a-f]*]]:{{ *}}DW_TAG_namespace
|
||||||
; CHECK-NEXT: DW_AT_name{{.*}} = "B"
|
; CHECK-NEXT: DW_AT_name{{.*}} = "B"
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2:[0-9]]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2:".*foo.cpp"]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(1)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(1)
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
|
; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
|
||||||
@ -39,7 +39,7 @@
|
|||||||
; CHECK: DW_TAG_imported_module
|
; CHECK: DW_TAG_imported_module
|
||||||
; This is a bug, it should be in F2 but it inherits the file from its
|
; This is a bug, it should be in F2 but it inherits the file from its
|
||||||
; enclosing scope
|
; enclosing scope
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F1]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F1]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(8)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(8)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
; CHECK: DW_TAG_imported_module
|
; CHECK: DW_TAG_imported_module
|
||||||
; Same bug as above, this should be F2, not F1
|
; Same bug as above, this should be F2, not F1
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F1]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F1]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(11)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(11)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
@ -59,38 +59,38 @@
|
|||||||
; CHECK: DW_AT_name{{.*}}= "func"
|
; CHECK: DW_AT_name{{.*}}= "func"
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_module
|
; CHECK: DW_TAG_imported_module
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(18)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(18)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_declaration
|
; CHECK: DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(19)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(19)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FOO]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FOO]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_declaration
|
; CHECK: DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(20)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(20)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[BAR]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[BAR]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_declaration
|
; CHECK: DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(21)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(21)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FUNC1]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FUNC1]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_declaration
|
; CHECK: DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(22)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(22)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[I]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[I]]})
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_declaration
|
; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(24)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(24)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
|
||||||
; CHECK-NEXT: DW_AT_name{{.*}}"X"
|
; CHECK-NEXT: DW_AT_name{{.*}}"X"
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_declaration
|
; CHECK: DW_TAG_imported_declaration
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(25)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(25)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[X]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[X]]})
|
||||||
; CHECK-NEXT: DW_AT_name{{.*}}"Y"
|
; CHECK-NEXT: DW_AT_name{{.*}}"Y"
|
||||||
@ -98,16 +98,13 @@
|
|||||||
; CHECK: DW_TAG_lexical_block
|
; CHECK: DW_TAG_lexical_block
|
||||||
; CHECK-NOT: NULL
|
; CHECK-NOT: NULL
|
||||||
; CHECK: DW_TAG_imported_module
|
; CHECK: DW_TAG_imported_module
|
||||||
; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
|
; CHECK-NEXT: DW_AT_decl_file{{.*}}([[F2]])
|
||||||
; CHECK-NEXT: DW_AT_decl_line{{.*}}(15)
|
; CHECK-NEXT: DW_AT_decl_line{{.*}}(15)
|
||||||
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
|
; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
; CHECK: NULL
|
; CHECK: NULL
|
||||||
|
|
||||||
; CHECK: file_names[ [[F1]]]{{.*}}debug-info-namespace.cpp
|
|
||||||
; CHECK: file_names[ [[F2]]]{{.*}}foo.cpp
|
|
||||||
|
|
||||||
; IR generated from clang/test/CodeGenCXX/debug-info-namespace.cpp, file paths
|
; IR generated from clang/test/CodeGenCXX/debug-info-namespace.cpp, file paths
|
||||||
; changed to protect the guilty. The C++ source code is:
|
; changed to protect the guilty. The C++ source code is:
|
||||||
; namespace A {
|
; namespace A {
|
||||||
|
@ -50,7 +50,7 @@ _x: .long 1
|
|||||||
|
|
||||||
// CHECK: DW_TAG_label [2] *
|
// CHECK: DW_TAG_label [2] *
|
||||||
// CHECK: DW_AT_name [DW_FORM_string] ("bar")
|
// CHECK: DW_AT_name [DW_FORM_string] ("bar")
|
||||||
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] ([[FILE:".*gen-dwarf.s"]])
|
||||||
// CHECK: DW_AT_decl_line [DW_FORM_data4] (5)
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (5)
|
||||||
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
||||||
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
||||||
@ -61,7 +61,7 @@ _x: .long 1
|
|||||||
|
|
||||||
// CHECK: DW_TAG_label [2] *
|
// CHECK: DW_TAG_label [2] *
|
||||||
// CHECK: DW_AT_name [DW_FORM_string] ("foo")
|
// CHECK: DW_AT_name [DW_FORM_string] ("foo")
|
||||||
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] ([[FILE]])
|
||||||
// CHECK: DW_AT_decl_line [DW_FORM_data4] (9)
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (9)
|
||||||
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
||||||
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
||||||
@ -72,7 +72,7 @@ _x: .long 1
|
|||||||
|
|
||||||
// CHECK: DW_TAG_label [2] *
|
// CHECK: DW_TAG_label [2] *
|
||||||
// CHECK: DW_AT_name [DW_FORM_string] ("baz")
|
// CHECK: DW_AT_name [DW_FORM_string] ("baz")
|
||||||
// CHECK: DW_AT_decl_file [DW_FORM_data4] (0x00000001)
|
// CHECK: DW_AT_decl_file [DW_FORM_data4] ([[FILE]])
|
||||||
// CHECK: DW_AT_decl_line [DW_FORM_data4] (10)
|
// CHECK: DW_AT_decl_line [DW_FORM_data4] (10)
|
||||||
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
// CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007)
|
||||||
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
// CHECK: DW_AT_prototyped [DW_FORM_flag] (0x00)
|
||||||
|
Loading…
Reference in New Issue
Block a user