mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-09 21:32:49 +00:00
[DWARF] Regularize dumping strings from line tables.
The major visible difference here is that in line-table dumps, directory and file names are wrapped in double-quotes; previously, directory names got single quotes and file names were not quoted at all. The improvement in this patch is that when a DWARF v5 line table header has indirect strings, in a verbose dump these will all have their section[offset] printed as well as the name itself. This matches the format used for dumping strings in the .debug_info section. Differential Revision: https://reviews.llvm.org/D42802 llvm-svn: 324270
This commit is contained in:
parent
3f217475bc
commit
f592a825b3
@ -31,7 +31,7 @@ public:
|
||||
struct FileNameEntry {
|
||||
FileNameEntry() = default;
|
||||
|
||||
StringRef Name;
|
||||
DWARFFormValue Name;
|
||||
uint64_t DirIdx = 0;
|
||||
uint64_t ModTime = 0;
|
||||
uint64_t Length = 0;
|
||||
@ -71,7 +71,7 @@ public:
|
||||
/// For v5, whether filename entries provide an MD5 checksum.
|
||||
bool HasMD5;
|
||||
std::vector<uint8_t> StandardOpcodeLengths;
|
||||
std::vector<StringRef> IncludeDirectories;
|
||||
std::vector<DWARFFormValue> IncludeDirectories;
|
||||
std::vector<FileNameEntry> FileNames;
|
||||
|
||||
const DWARFFormParams getFormParams() const { return FormParams; }
|
||||
@ -99,7 +99,7 @@ public:
|
||||
}
|
||||
|
||||
void clear();
|
||||
void dump(raw_ostream &OS) const;
|
||||
void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
|
||||
bool parse(const DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
|
||||
const DWARFContext &Ctx, const DWARFUnit *U = nullptr);
|
||||
};
|
||||
@ -219,7 +219,7 @@ public:
|
||||
DILineInfoSpecifier::FileLineInfoKind Kind,
|
||||
DILineInfo &Result) const;
|
||||
|
||||
void dump(raw_ostream &OS) const;
|
||||
void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
|
||||
void clear();
|
||||
|
||||
/// Parse prologue and all rows.
|
||||
|
@ -401,7 +401,7 @@ void DWARFContext::dump(
|
||||
LineTable.parse(LineData, &Offset, *this, U, &OS);
|
||||
} else {
|
||||
LineTable.parse(LineData, &Offset, *this, U);
|
||||
LineTable.dump(OS);
|
||||
LineTable.dump(OS, DIDumpOptions());
|
||||
}
|
||||
// Check for unparseable prologue, to avoid infinite loops.
|
||||
if (OldOffset == Offset)
|
||||
@ -426,7 +426,7 @@ void DWARFContext::dump(
|
||||
if (!LineTable.Prologue.parse(LineData, &Offset, *this, U))
|
||||
break;
|
||||
if (!DumpOffset || OldOffset == *DumpOffset)
|
||||
LineTable.dump(OS);
|
||||
LineTable.dump(OS, DumpOpts);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,8 @@ void DWARFDebugLine::Prologue::clear() {
|
||||
FileNames.clear();
|
||||
}
|
||||
|
||||
void DWARFDebugLine::Prologue::dump(raw_ostream &OS) const {
|
||||
void DWARFDebugLine::Prologue::dump(raw_ostream &OS,
|
||||
DIDumpOptions DumpOptions) const {
|
||||
OS << "Line table prologue:\n"
|
||||
<< format(" total_length: 0x%8.8" PRIx64 "\n", TotalLength)
|
||||
<< format(" version: %u\n", getVersion());
|
||||
@ -76,9 +77,11 @@ void DWARFDebugLine::Prologue::dump(raw_ostream &OS) const {
|
||||
if (!IncludeDirectories.empty()) {
|
||||
// DWARF v5 starts directory indexes at 0.
|
||||
uint32_t DirBase = getVersion() >= 5 ? 0 : 1;
|
||||
for (uint32_t I = 0; I != IncludeDirectories.size(); ++I)
|
||||
OS << format("include_directories[%3u] = '", I + DirBase)
|
||||
<< IncludeDirectories[I] << "'\n";
|
||||
for (uint32_t I = 0; I != IncludeDirectories.size(); ++I) {
|
||||
OS << format("include_directories[%3u] = ", I + DirBase);
|
||||
IncludeDirectories[I].dump(OS, DumpOptions);
|
||||
OS << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
if (!FileNames.empty()) {
|
||||
@ -98,7 +101,9 @@ void DWARFDebugLine::Prologue::dump(raw_ostream &OS) const {
|
||||
else
|
||||
OS << format("0x%8.8" PRIx64 " 0x%8.8" PRIx64, FileEntry.ModTime,
|
||||
FileEntry.Length);
|
||||
OS << ' ' << FileEntry.Name << '\n';
|
||||
OS << ' ';
|
||||
FileEntry.Name.dump(OS, DumpOptions);
|
||||
OS << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -107,13 +112,15 @@ void DWARFDebugLine::Prologue::dump(raw_ostream &OS) const {
|
||||
static void
|
||||
parseV2DirFileTables(const DWARFDataExtractor &DebugLineData,
|
||||
uint32_t *OffsetPtr, uint64_t EndPrologueOffset,
|
||||
std::vector<StringRef> &IncludeDirectories,
|
||||
std::vector<DWARFFormValue> &IncludeDirectories,
|
||||
std::vector<DWARFDebugLine::FileNameEntry> &FileNames) {
|
||||
while (*OffsetPtr < EndPrologueOffset) {
|
||||
StringRef S = DebugLineData.getCStrRef(OffsetPtr);
|
||||
if (S.empty())
|
||||
break;
|
||||
IncludeDirectories.push_back(S);
|
||||
DWARFFormValue Dir(dwarf::DW_FORM_string);
|
||||
Dir.setPValue(S.data());
|
||||
IncludeDirectories.push_back(Dir);
|
||||
}
|
||||
|
||||
while (*OffsetPtr < EndPrologueOffset) {
|
||||
@ -121,7 +128,8 @@ parseV2DirFileTables(const DWARFDataExtractor &DebugLineData,
|
||||
if (Name.empty())
|
||||
break;
|
||||
DWARFDebugLine::FileNameEntry FileEntry;
|
||||
FileEntry.Name = Name;
|
||||
FileEntry.Name.setForm(dwarf::DW_FORM_string);
|
||||
FileEntry.Name.setPValue(Name.data());
|
||||
FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr);
|
||||
FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr);
|
||||
FileEntry.Length = DebugLineData.getULEB128(OffsetPtr);
|
||||
@ -159,7 +167,7 @@ parseV5DirFileTables(const DWARFDataExtractor &DebugLineData,
|
||||
uint32_t *OffsetPtr, uint64_t EndPrologueOffset,
|
||||
const DWARFFormParams &FormParams, const DWARFContext &Ctx,
|
||||
const DWARFUnit *U, bool &HasMD5,
|
||||
std::vector<StringRef> &IncludeDirectories,
|
||||
std::vector<DWARFFormValue> &IncludeDirectories,
|
||||
std::vector<DWARFDebugLine::FileNameEntry> &FileNames) {
|
||||
// Get the directory entry description.
|
||||
ContentDescriptors DirDescriptors =
|
||||
@ -178,7 +186,7 @@ parseV5DirFileTables(const DWARFDataExtractor &DebugLineData,
|
||||
case DW_LNCT_path:
|
||||
if (!Value.extractValue(DebugLineData, OffsetPtr, FormParams, &Ctx, U))
|
||||
return false;
|
||||
IncludeDirectories.push_back(Value.getAsCString().getValue());
|
||||
IncludeDirectories.push_back(Value);
|
||||
break;
|
||||
default:
|
||||
if (!Value.skipValue(DebugLineData, OffsetPtr, FormParams))
|
||||
@ -205,7 +213,7 @@ parseV5DirFileTables(const DWARFDataExtractor &DebugLineData,
|
||||
return false;
|
||||
switch (Descriptor.Type) {
|
||||
case DW_LNCT_path:
|
||||
FileEntry.Name = Value.getAsCString().getValue();
|
||||
FileEntry.Name = Value;
|
||||
break;
|
||||
case DW_LNCT_directory_index:
|
||||
FileEntry.DirIdx = Value.getAsUnsignedConstant().getValue();
|
||||
@ -346,8 +354,9 @@ void DWARFDebugLine::Sequence::reset() {
|
||||
|
||||
DWARFDebugLine::LineTable::LineTable() { clear(); }
|
||||
|
||||
void DWARFDebugLine::LineTable::dump(raw_ostream &OS) const {
|
||||
Prologue.dump(OS);
|
||||
void DWARFDebugLine::LineTable::dump(raw_ostream &OS,
|
||||
DIDumpOptions DumpOptions) const {
|
||||
Prologue.dump(OS, DumpOptions);
|
||||
OS << '\n';
|
||||
|
||||
if (!Rows.empty()) {
|
||||
@ -430,8 +439,12 @@ bool DWARFDebugLine::LineTable::parse(DWARFDataExtractor &DebugLineData,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (OS)
|
||||
Prologue.dump(*OS);
|
||||
if (OS) {
|
||||
// The presence of OS signals verbose dumping.
|
||||
DIDumpOptions DumpOptions;
|
||||
DumpOptions.Verbose = true;
|
||||
Prologue.dump(*OS, DumpOptions);
|
||||
}
|
||||
|
||||
const uint32_t EndOffset =
|
||||
DebugLineOffset + Prologue.TotalLength + Prologue.sizeofTotalLength();
|
||||
@ -531,14 +544,15 @@ bool DWARFDebugLine::LineTable::parse(DWARFDataExtractor &DebugLineData,
|
||||
// the file register of the state machine.
|
||||
{
|
||||
FileNameEntry FileEntry;
|
||||
FileEntry.Name = DebugLineData.getCStr(OffsetPtr);
|
||||
const char *Name = DebugLineData.getCStr(OffsetPtr);
|
||||
FileEntry.Name.setForm(dwarf::DW_FORM_string);
|
||||
FileEntry.Name.setPValue(Name);
|
||||
FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr);
|
||||
FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr);
|
||||
FileEntry.Length = DebugLineData.getULEB128(OffsetPtr);
|
||||
Prologue.FileNames.push_back(FileEntry);
|
||||
if (OS)
|
||||
*OS << " (" << FileEntry.Name.str()
|
||||
<< ", dir=" << FileEntry.DirIdx << ", mod_time="
|
||||
*OS << " (" << Name << ", dir=" << FileEntry.DirIdx << ", mod_time="
|
||||
<< format("(0x%16.16" PRIx64 ")", FileEntry.ModTime)
|
||||
<< ", length=" << FileEntry.Length << ")";
|
||||
}
|
||||
@ -902,7 +916,7 @@ bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
|
||||
if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
|
||||
return false;
|
||||
const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];
|
||||
StringRef FileName = Entry.Name;
|
||||
StringRef FileName = Entry.Name.getAsCString().getValue();
|
||||
if (Kind != FileLineInfoKind::AbsoluteFilePath ||
|
||||
sys::path::is_absolute(FileName)) {
|
||||
Result = FileName;
|
||||
@ -915,7 +929,9 @@ bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
|
||||
// Be defensive about the contents of Entry.
|
||||
if (IncludeDirIndex > 0 &&
|
||||
IncludeDirIndex <= Prologue.IncludeDirectories.size())
|
||||
IncludeDir = Prologue.IncludeDirectories[IncludeDirIndex - 1];
|
||||
IncludeDir = Prologue.IncludeDirectories[IncludeDirIndex - 1]
|
||||
.getAsCString()
|
||||
.getValue();
|
||||
|
||||
// We may still need to append compilation directory of compile unit.
|
||||
// We know that FileName is not absolute, the only way to have an
|
||||
|
@ -284,10 +284,10 @@ bool DWARFFormValue::isFormClass(DWARFFormValue::FormClass FC) const {
|
||||
}
|
||||
// In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a section offset.
|
||||
// Don't check for DWARF version here, as some producers may still do this
|
||||
// by mistake. Also accept DW_FORM_strp since this is .debug_str section
|
||||
// offset.
|
||||
// by mistake. Also accept DW_FORM_[line_]strp since these are
|
||||
// .debug_[line_]str section offsets.
|
||||
return (Form == DW_FORM_data4 || Form == DW_FORM_data8 ||
|
||||
Form == DW_FORM_strp) &&
|
||||
Form == DW_FORM_strp || Form == DW_FORM_line_strp) &&
|
||||
FC == FC_SectionOffset;
|
||||
}
|
||||
|
||||
@ -513,6 +513,11 @@ void DWARFFormValue::dump(raw_ostream &OS, DIDumpOptions DumpOpts) const {
|
||||
OS << format(" .debug_str[0x%8.8x] = ", (uint32_t)UValue);
|
||||
dumpString(OS);
|
||||
break;
|
||||
case DW_FORM_line_strp:
|
||||
if (DumpOpts.Verbose)
|
||||
OS << format(" .debug_line_str[0x%8.8x] = ", (uint32_t)UValue);
|
||||
dumpString(OS);
|
||||
break;
|
||||
case DW_FORM_strx:
|
||||
case DW_FORM_strx1:
|
||||
case DW_FORM_strx2:
|
||||
|
@ -59,6 +59,6 @@ attributes #1 = { nounwind readnone }
|
||||
!26 = !DILocation(line: 7, column: 17, scope: !2)
|
||||
!27 = !DILocation(line: 9, column: 9, scope: !2)
|
||||
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 testprog.c
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 "testprog.c"
|
||||
; CHECK: 0x0000000000000000 2
|
||||
; CHECK: 0x0000000000000020 7
|
||||
|
@ -17,12 +17,12 @@
|
||||
; ASM: .file 2 ".{{/|\\\\}}t2.h" md5 "22222222222222222222222222222222"
|
||||
|
||||
; OBJ-4: Dir Mod Time File Len File Name
|
||||
; OBJ-4: file_names[ 1] 1 0x00000000 0x00000000 t1.h
|
||||
; OBJ-4: file_names[ 2] 1 0x00000000 0x00000000 t2.h
|
||||
; OBJ-4: file_names[ 1] 1 0x00000000 0x00000000 "t1.h"
|
||||
; OBJ-4: file_names[ 2] 1 0x00000000 0x00000000 "t2.h"
|
||||
|
||||
; OBJ-5: Dir MD5 Checksum File Name
|
||||
; OBJ-5: file_names[ 1] 1 11111111111111111111111111111111 t1.h
|
||||
; OBJ-5: file_names[ 2] 1 22222222222222222222222222222222 t2.h
|
||||
; OBJ-5: file_names[ 1] 1 11111111111111111111111111111111 "t1.h"
|
||||
; OBJ-5: file_names[ 2] 1 22222222222222222222222222222222 "t2.h"
|
||||
|
||||
; ModuleID = 't.c'
|
||||
source_filename = "t.c"
|
||||
|
@ -17,5 +17,5 @@ target triple = "x86_64-unknown-linux-gnu"
|
||||
; The important part of the following check is that dir = #0.
|
||||
; Dir Mod Time File Len File Name
|
||||
; ---- ---------- ---------- ---------------------------
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 empty.c
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 "empty.c"
|
||||
!5 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
|
@ -13,7 +13,7 @@
|
||||
; }
|
||||
|
||||
; CHECK-NOT: failed to compute relocation
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 dwarfdump-relocs.cl
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 "dwarfdump-relocs.cl"
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
|
||||
|
@ -11,13 +11,13 @@
|
||||
; CHECK-NEXT: debug_line[{{.*}}]
|
||||
; CHECK-NEXT: Line table prologue:
|
||||
; CHECK-NOT: include_directories
|
||||
; CHECK: file_names[ 1] 0 {{.*}} a.cpp
|
||||
; CHECK: file_names[ 1] 0 {{.*}} "a.cpp"
|
||||
; CHECK-NOT: file_names
|
||||
|
||||
; CHECK: debug_line[{{.*}}]
|
||||
; CHECK-NEXT: Line table prologue:
|
||||
; CHECK-NOT: include_directories
|
||||
; CHECK: file_names[ 1] 0 {{.*}} b.cpp
|
||||
; CHECK: file_names[ 1] 0 {{.*}} "b.cpp"
|
||||
; CHECK-NOT: file_names
|
||||
|
||||
; However, if a single line table is emitted and shared between CUs, the
|
||||
|
@ -141,9 +141,9 @@ LH_5_end:
|
||||
# CHECK: seg_select_size: 0
|
||||
# CHECK: prologue_length: 0x00000044
|
||||
# CHECK: max_ops_per_inst: 1
|
||||
# CHECK: include_directories[ 0] = 'Directory5a'
|
||||
# CHECK: include_directories[ 1] = 'Directory5b'
|
||||
# CHECK: include_directories[ 0] = .debug_str[0x00000028] = "Directory5a"
|
||||
# CHECK: include_directories[ 1] = .debug_str[0x00000034] = "Directory5b"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: file_names[ 1] 0 0x00000051 0x00000052 File5a{{$}}
|
||||
# CHECK: file_names[ 2] 1 0x00000053 0x00000054 File5b{{$}}
|
||||
# CHECK: file_names[ 1] 0 0x00000051 0x00000052 "File5a"
|
||||
# CHECK: file_names[ 2] 1 0x00000053 0x00000054 "File5b"
|
||||
# CHECK-NOT: file_names
|
||||
|
@ -255,11 +255,11 @@ LH_4_end:
|
||||
# CHECK-NOT: address_size
|
||||
# CHECK-NOT: seg_select_size
|
||||
# CHECK: max_ops_per_inst: 1
|
||||
# CHECK: include_directories[ 1] = 'Directory4a'
|
||||
# CHECK: include_directories[ 2] = 'Directory4b'
|
||||
# CHECK: include_directories[ 1] = "Directory4a"
|
||||
# CHECK: include_directories[ 2] = "Directory4b"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: file_names[ 1] 1 0x00000041 0x00000042 File4a{{$}}
|
||||
# CHECK: file_names[ 2] 0 0x00000043 0x00000044 File4b{{$}}
|
||||
# CHECK: file_names[ 1] 1 0x00000041 0x00000042 "File4a"
|
||||
# CHECK: file_names[ 2] 0 0x00000043 0x00000044 "File4b"
|
||||
# CHECK-NOT: file_names
|
||||
|
||||
# DWARF v5 line-table header.
|
||||
@ -324,12 +324,14 @@ LH_5_end:
|
||||
# CHECK: address_size: 8
|
||||
# CHECK: seg_select_size: 0
|
||||
# CHECK: max_ops_per_inst: 1
|
||||
# CHECK: include_directories[ 0] = 'Directory5a'
|
||||
# CHECK: include_directories[ 1] = 'Directory5b'
|
||||
# Mixing .debug_str (here) with .debug_line_str (in file_names) is not
|
||||
# something a producer would do, but both are legal and we want to test them.
|
||||
# CHECK: include_directories[ 0] = .debug_str[0x00000045] = "Directory5a"
|
||||
# CHECK: include_directories[ 1] = .debug_str[0x00000051] = "Directory5b"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: MD5 Checksum
|
||||
# CHECK: file_names[ 1] 0 00112233445566778899aabbccddeeff File5a{{$}}
|
||||
# CHECK: file_names[ 2] 1 ffeeddccbbaa99887766554433221100 File5b{{$}}
|
||||
# CHECK: file_names[ 1] 0 00112233445566778899aabbccddeeff .debug_line_str[0x00000000] = "File5a"
|
||||
# CHECK: file_names[ 2] 1 ffeeddccbbaa99887766554433221100 .debug_line_str[0x00000007] = "File5b"
|
||||
# CHECK-NOT: file_names
|
||||
|
||||
.section .debug_line_str,"MS",@progbits,1
|
||||
@ -405,9 +407,9 @@ dwo_LH_5_end:
|
||||
# CHECK: address_size: 8
|
||||
# CHECK: seg_select_size: 0
|
||||
# CHECK: max_ops_per_inst: 1
|
||||
# CHECK: include_directories[ 0] = 'DWODirectory5a'
|
||||
# CHECK: include_directories[ 1] = 'DWODirectory5b'
|
||||
# CHECK: include_directories[ 0] = .debug_str[0x0000003d] = "DWODirectory5a"
|
||||
# CHECK: include_directories[ 1] = .debug_str[0x0000004c] = "DWODirectory5b"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: file_names[ 1] 0 0x00000015 0x00000025 DWOFile5a{{$}}
|
||||
# CHECK: file_names[ 2] 1 0x00000035 0x00000045 DWOFile5b{{$}}
|
||||
# CHECK: file_names[ 1] 0 0x00000015 0x00000025 "DWOFile5a"
|
||||
# CHECK: file_names[ 2] 1 0x00000035 0x00000045 "DWOFile5b"
|
||||
# CHECK-NOT: file_names
|
||||
|
@ -46,8 +46,8 @@ LH_1_end:
|
||||
# PART1-NEXT: total_length: 0x0000002e
|
||||
# PART1-NEXT: version: 4
|
||||
# PART1-NEXT: prologue_length: 0x00000028
|
||||
# PART1: include_directories[ 1] = 'Directory1'
|
||||
# PART1: file_names[ 1] {{.*}} File1
|
||||
# PART1: include_directories[ 1] = "Directory1"
|
||||
# PART1: file_names[ 1] {{.*}} "File1"
|
||||
|
||||
# Second line table.
|
||||
LH_2_start:
|
||||
@ -92,6 +92,6 @@ LH_2_end:
|
||||
# PART2-NEXT: version: 4
|
||||
# PART2-NEXT: prologue_length: 0x00000022
|
||||
# PART2-NOT: prologue:
|
||||
# PART2: include_directories[ 1] = 'Dir2'
|
||||
# PART2: file_names[ 1] {{.*}} File2
|
||||
# PART2: include_directories[ 1] = "Dir2"
|
||||
# PART2: file_names[ 1] {{.*}} "File2"
|
||||
# PART2-NOT: prologue:
|
||||
|
@ -91,10 +91,10 @@ ls_F2: .asciz "File2"
|
||||
# CHECK: address_size: 8
|
||||
# CHECK: seg_select_size: 0
|
||||
# CHECK: max_ops_per_inst: 1
|
||||
# CHECK: include_directories[ 0] = 'Directory1'
|
||||
# CHECK: include_directories[ 1] = 'Directory2'
|
||||
# CHECK: include_directories[ 0] = .debug_str[0x00000000] = "Directory1"
|
||||
# CHECK: include_directories[ 1] = .debug_str[0x0000000b] = "Directory2"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: file_names[ 1] 1 0x00000051 0x00000052 File1{{$}}
|
||||
# CHECK: file_names[ 2] 0 0x00000053 0x00000054 File2{{$}}
|
||||
# CHECK: file_names[ 1] 1 0x00000051 0x00000052 .debug_line_str[0x00000000] = "File1"
|
||||
# CHECK: file_names[ 2] 0 0x00000053 0x00000054 .debug_line_str[0x00000006] = "File2"
|
||||
# CHECK-NOT: file_names
|
||||
# CHECK: 0x0000000000000000 {{.*}} is_stmt end_sequence
|
||||
|
@ -122,8 +122,8 @@
|
||||
; CHECK-LABEL: .debug_line contents:
|
||||
; CHECK: Line table prologue
|
||||
; CHECK-NOT: file_names[
|
||||
; SINGLE: file_names{{.*}} bar.h
|
||||
; CHECK: file_names{{.*}} bar.cpp
|
||||
; SINGLE: file_names{{.*}} "bar.h"
|
||||
; CHECK: file_names{{.*}} "bar.cpp"
|
||||
; CHECK-NOT: file_names[
|
||||
|
||||
; FISSION: .debug_line.dwo contents:
|
||||
@ -133,8 +133,8 @@
|
||||
; FISSION-NOT: standard_opcode_lengths
|
||||
; FISSION-NOT: include_directories
|
||||
; FISSION-NOT: file_names[
|
||||
; FISSION: file_names{{.*}} bar.h
|
||||
; FISSION: file_names{{.*}} bar.cpp
|
||||
; FISSION: file_names{{.*}} "bar.h"
|
||||
; FISSION: file_names{{.*}} "bar.cpp"
|
||||
; FISSION-NOT: file_names[
|
||||
|
||||
; CHECK-LABEL: .debug_str contents:
|
||||
|
@ -27,11 +27,11 @@
|
||||
; CHECK-NEXT: debug_line[{{.*}}]
|
||||
; CHECK-NEXT: Line table prologue:
|
||||
; CHECK-NEXT: total_length: 0x00000038
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 simple.c
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 "simple.c"
|
||||
; CHECK: debug_line[{{.*}}]
|
||||
; CHECK-NEXT: Line table prologue:
|
||||
; CHECK-NEXT: total_length: 0x00000039
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 simple2.c
|
||||
; CHECK: file_names[ 1] 0 0x00000000 0x00000000 "simple2.c"
|
||||
; CHECK-NOT: file_names
|
||||
|
||||
; DWARF3: .debug_info contents:
|
||||
@ -46,11 +46,11 @@
|
||||
; DWARF3-NEXT: debug_line[{{.*}}]
|
||||
; DWARF3-NEXT: Line table prologue:
|
||||
; DWARF3-NEXT: total_length: 0x00000038
|
||||
; DWARF3: file_names[ 1] 0 0x00000000 0x00000000 simple.c
|
||||
; DWARF3: file_names[ 1] 0 0x00000000 0x00000000 "simple.c"
|
||||
; DWARF3: debug_line[{{.*}}]
|
||||
; DWARF3-NEXT: Line table prologue:
|
||||
; DWARF3-NEXT: total_length: 0x00000039
|
||||
; DWARF3: file_names[ 1] 0 0x00000000 0x00000000 simple2.c
|
||||
; DWARF3: file_names[ 1] 0 0x00000000 0x00000000 "simple2.c"
|
||||
; DWARF3-NOT: file_names
|
||||
|
||||
; PR15408
|
||||
|
@ -22,6 +22,6 @@ TEST_MACINFO: DW_MACINFO_define - lineno: 3 macro: M2(x,y) ((x)+(y)* Value2)
|
||||
TEST_MACINFO: DW_MACINFO_end_file
|
||||
|
||||
TEST_LINE: .debug_line contents:
|
||||
TEST_LINE: file_names[ 1] 0 0x00000000 0x00000000 dwarfdump-macro.cc
|
||||
TEST_LINE: file_names[ 2] 1 0x00000000 0x00000000 dwarfdump-macro-cmd.h
|
||||
TEST_LINE: file_names[ 3] 0 0x00000000 0x00000000 dwarfdump-macro.h
|
||||
TEST_LINE: file_names[ 1] 0 0x00000000 0x00000000 "dwarfdump-macro.cc"
|
||||
TEST_LINE: file_names[ 2] 1 0x00000000 0x00000000 "dwarfdump-macro-cmd.h"
|
||||
TEST_LINE: file_names[ 3] 0 0x00000000 0x00000000 "dwarfdump-macro.h"
|
||||
|
@ -147,14 +147,14 @@ entry:
|
||||
; DW-LABEL: .debug_line contents:
|
||||
; Check that we have the right things in the line table as well.
|
||||
|
||||
; DWLW-LABEL: file_names[{{ *}}1]{{.*}} bar.c
|
||||
; DWLW-LABEL: file_names[{{ *}}1]{{.*}} "bar.c"
|
||||
; DWLW: 2 0 1 0 0 is_stmt prologue_end
|
||||
; DWLW-LABEL: file_names[{{ *}}1]{{.*}} foo.c
|
||||
; DWLW-LABEL: file_names[{{ *}}1]{{.*}} "foo.c"
|
||||
; DWLW: 52 0 1 0 0 is_stmt prologue_end
|
||||
; DWLW-NOT: prologue_end
|
||||
|
||||
; DWWL-LABEL: file_names[{{ *}}1]{{.*}} foo.c
|
||||
; DWWL-LABEL: file_names[{{ *}}1]{{.*}} "foo.c"
|
||||
; DWWL: 52 0 1 0 0 is_stmt prologue_end
|
||||
; DWWL-LABEL: file_names[{{ *}}1]{{.*}} bar.c
|
||||
; DWWL-LABEL: file_names[{{ *}}1]{{.*}} "bar.c"
|
||||
; DWWL: 2 0 1 0 0 is_stmt prologue_end
|
||||
; DWWL-NOT: prologue_end
|
||||
|
@ -54,8 +54,8 @@ b:
|
||||
// DWARF-DL: .debug_line contents:
|
||||
// DWARF-DL: version: [[DWVER]]
|
||||
// DWARF-DL-5: address_size: 4
|
||||
// DWARF-DL-5: include_directories[ 0] = ''
|
||||
// DWARF-DL: file_names[ 1] {{.*}} <stdin>
|
||||
// DWARF-DL-5: include_directories[ 0] = ""
|
||||
// DWARF-DL: file_names[ 1] {{.*}} "<stdin>"
|
||||
// DWARF-DL: 0x0000000000000000 17 0 1 0 0 is_stmt
|
||||
// DWARF-DL-NEXT: 0x0000000000000004 17 0 1 0 0 is_stmt end_sequence
|
||||
// DWARF-DL-NEXT: 0x0000000000000000 21 0 1 0 0 is_stmt
|
||||
|
@ -9,10 +9,10 @@
|
||||
|
||||
# CHECK: debug_line[0x00000000]
|
||||
# CHECK: version: 5
|
||||
# CHECK: include_directories[ 0] = ''
|
||||
# CHECK: include_directories[ 1] = 'dir1'
|
||||
# CHECK: include_directories[ 2] = 'dir2'
|
||||
# CHECK: include_directories[ 0] = ""
|
||||
# CHECK: include_directories[ 1] = "dir1"
|
||||
# CHECK: include_directories[ 2] = "dir2"
|
||||
# CHECK-NOT: include_directories
|
||||
# CHECK: Dir MD5 Checksum File Name
|
||||
# CHECK: file_names[ 1] 1 00112233445566778899aabbccddeeff foo
|
||||
# CHECK: file_names[ 2] 2 ffeeddccbbaa99887766554433221100 bar
|
||||
# CHECK: file_names[ 1] 1 00112233445566778899aabbccddeeff "foo"
|
||||
# CHECK: file_names[ 2] 2 ffeeddccbbaa99887766554433221100 "bar"
|
||||
|
@ -14,13 +14,13 @@ L1: leave
|
||||
// rdar://9275556
|
||||
|
||||
// We check that the source name "t.s" is picked up
|
||||
// CHECK: include_directories[ 1] = '{{.*[/\\]}}test{{[/\\]}}MC{{[/\\]}}MachO'
|
||||
// CHECK: include_directories[ 2] = 'inc'
|
||||
// CHECK: include_directories[ 1] = "{{.*[/\\]}}test{{[/\\]}}MC{{[/\\]}}MachO"
|
||||
// CHECK: include_directories[ 2] = "inc"
|
||||
// CHECK: Dir Mod Time File Len File Name
|
||||
// CHECK: ---- ---------- ---------- ---------------------------
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 gen-dwarf-cpp.s
|
||||
// CHECK: file_names[ 2] 0 0x00000000 0x00000000 t.s
|
||||
// CHECK: file_names[ 3] 2 0x00000000 0x00000000 g.s
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 "gen-dwarf-cpp.s"
|
||||
// CHECK: file_names[ 2] 0 0x00000000 0x00000000 "t.s"
|
||||
// CHECK: file_names[ 3] 2 0x00000000 0x00000000 "g.s"
|
||||
// CHECK-NOT: file_names
|
||||
|
||||
// We check that the source line number 100 is picked up before the "movl"
|
||||
|
@ -13,5 +13,5 @@
|
||||
// We check that the source name "foo.S" is picked up
|
||||
// CHECK: Dir Mod Time File Len File Name
|
||||
// CHECK: ---- ---------- ---------- ---------------------------
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 gen-dwarf-macro-cpp.s
|
||||
// CHECK: file_names[ 2] 0 0x00000000 0x00000000 foo.S
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 "gen-dwarf-macro-cpp.s"
|
||||
// CHECK: file_names[ 2] 0 0x00000000 0x00000000 "foo.S"
|
||||
|
@ -111,7 +111,7 @@ _x: .long 1
|
||||
// We don't check include_directories as it has a temp path
|
||||
// CHECK: Dir Mod Time File Len File Name
|
||||
// CHECK: ---- ---------- ---------- ---------------------------
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 gen-dwarf.s
|
||||
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 "gen-dwarf.s"
|
||||
|
||||
// CHECK: Address Line Column File ISA Discriminator Flags
|
||||
// CHECK: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
|
@ -155,7 +155,7 @@ CHECK-NEXT:[0x0000000100000f90, 0x0000000100000fa9)
|
||||
CHECK: .debug_line contents:
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic1.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic1.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000ea0 23 0 1 0 0 is_stmt
|
||||
@ -164,7 +164,7 @@ CHECK-NEXT: 0x0000000100000ec4 24 0 1 0 0 is_stmt e
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic2.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic2.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000ed0 19 0 1 0 0 is_stmt
|
||||
@ -176,7 +176,7 @@ CHECK-NEXT: 0x0000000100000f37 15 0 1 0 0 is_stmt e
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic3.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic3.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000f40 16 0 1 0 0 is_stmt
|
||||
|
@ -140,7 +140,7 @@ CHECK-NEXT: [0x0000000100000f90, 0x0000000100000fb4)
|
||||
CHECK: .debug_line contents:
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic1.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic1.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000f40 26 0 1 0 0 is_stmt
|
||||
@ -150,7 +150,7 @@ CHECK-NEXT: 0x0000000100000f4b 27 3 1 0 0 end_seque
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic2.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic2.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000f50 19 0 1 0 0 is_stmt
|
||||
@ -166,7 +166,7 @@ CHECK-NEXT: 0x0000000100000f87 20 3 1 0 0 end_seque
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic3.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic3.c"
|
||||
CHECK: Address Line Column File ISA Discriminator Flags
|
||||
CHECK-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
|
||||
CHECK-NEXT: 0x0000000100000f90 16 0 1 0 0 is_stmt
|
||||
|
@ -152,14 +152,14 @@ CHECK-NEXT: [0x0000000100000f90, 0x0000000100000fb4)
|
||||
CHECK: .debug_line contents
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic1.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic1.c"
|
||||
CHECK: 0x0000000100000f40 23 0 1 0 0 is_stmt
|
||||
CHECK: 0x0000000100000f44 24 0 1 0 0 is_stmt prologue_end
|
||||
CHECK: 0x0000000100000f4b 24 0 1 0 0 is_stmt end_sequence
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic2.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic2.c"
|
||||
CHECK: 0x0000000100000f50 19 0 1 0 0 is_stmt
|
||||
CHECK: 0x0000000100000f54 20 0 1 0 0 is_stmt prologue_end
|
||||
CHECK: 0x0000000100000f63 15 0 1 0 0 is_stmt
|
||||
@ -168,7 +168,7 @@ CHECK: 0x0000000100000f89 20 0 1 0 0 is_stmt end_se
|
||||
|
||||
CHECK: Dir Mod Time File Len File Name
|
||||
CHECK-NEXT: ---- ---------- ---------- ---------------------------
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 basic3.c
|
||||
CHECK-NEXT: file_names[ 1] 0 0x00000000 0x00000000 "basic3.c"
|
||||
CHECK: 0x0000000100000f90 16 0 1 0 0 is_stmt
|
||||
CHECK: 0x0000000100000f94 12 0 1 0 0 is_stmt prologue_end
|
||||
CHECK: 0x0000000100000f9a 17 0 1 0 0 is_stmt
|
||||
|
Loading…
Reference in New Issue
Block a user