[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:
Paul Robinson 2018-02-05 20:43:15 +00:00
parent 3f217475bc
commit f592a825b3
25 changed files with 124 additions and 101 deletions

View File

@ -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.

View File

@ -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);
}
}

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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"

View File

@ -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}

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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: ------------------ ------ ------ ------ --- ------------- -------------

View File

@ -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

View File

@ -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

View File

@ -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