1Test the linker line tables on roughly the following example: 2 3==> foo.h <== 4void bar(void); 5inline void foo(void) { 6 bar(); 7} 8==> pdb_lines_1.c <== 9#include "foo.h" 10int main(void) { 11 foo(); 12 return 42; 13} 14==> pdb_lines_2.c <== 15void bar(void) { 16} 17 18$ cl -c -Z7 pdb_lines*.c 19 20RUN: yaml2obj %S/Inputs/pdb_lines_1.yaml -o %t.pdb_lines_1.obj 21RUN: yaml2obj %S/Inputs/pdb_lines_2.yaml -o %t.pdb_lines_2.obj 22RUN: rm -f %t.exe %t.pdb 23RUN: lld-link -debug -entry:main -nodefaultlib -out:%t.exe -pdb:%t.pdb %t.pdb_lines_1.obj %t.pdb_lines_2.obj 24RUN: llvm-pdbutil pdb2yaml -modules -module-files -subsections=lines,fc %t.pdb | FileCheck %s 25 26CHECK-LABEL: DbiStream: 27CHECK-NEXT: VerHeader: V70 28CHECK-NEXT: Age: 1 29CHECK-NEXT: BuildNumber: 36363 30CHECK-NEXT: PdbDllVersion: 0 31CHECK-NEXT: PdbDllRbld: 0 32CHECK-NEXT: Flags: 0 33CHECK-NEXT: MachineType: Amd64 34CHECK-NEXT: Modules: 35 36CHECK-LABEL: - Module: {{.*}}pdb_lines_1.obj 37CHECK-NEXT: ObjFile: {{.*}}pdb_lines_1.obj 38CHECK-NEXT: SourceFiles: 39CHECK-NEXT: - '{{.*}}pdb_lines_1.c' 40CHECK-NEXT: - '{{.*}}foo.h' 41CHECK-NEXT: Subsections: 42CHECK-NEXT: - !Lines 43CHECK-NEXT: CodeSize: 19 44CHECK-NEXT: Flags: [ ] 45CHECK-NEXT: RelocOffset: 0 46CHECK-NEXT: RelocSegment: 1 47CHECK-NEXT: Blocks: 48CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' 49CHECK-NEXT: Lines: 50CHECK-NEXT: - Offset: 0 51CHECK-NEXT: LineStart: 2 52CHECK-NEXT: IsStatement: true 53CHECK-NEXT: EndDelta: 0 54CHECK-NEXT: - Offset: 4 55CHECK-NEXT: LineStart: 3 56CHECK-NEXT: IsStatement: true 57CHECK-NEXT: EndDelta: 0 58CHECK-NEXT: - Offset: 9 59CHECK-NEXT: LineStart: 4 60CHECK-NEXT: IsStatement: true 61CHECK-NEXT: EndDelta: 0 62CHECK-NEXT: - Offset: 14 63CHECK-NEXT: LineStart: 5 64CHECK-NEXT: IsStatement: true 65CHECK-NEXT: EndDelta: 0 66CHECK-NEXT: Columns: 67CHECK-NEXT: - !Lines 68CHECK-NEXT: CodeSize: 14 69CHECK-NEXT: Flags: [ ] 70CHECK-NEXT: RelocOffset: 32 71CHECK-NEXT: RelocSegment: 1 72CHECK-NEXT: Blocks: 73CHECK-NEXT: - FileName: '{{.*}}foo.h' 74CHECK-NEXT: Lines: 75CHECK-NEXT: - Offset: 0 76CHECK-NEXT: LineStart: 2 77CHECK-NEXT: IsStatement: true 78CHECK-NEXT: EndDelta: 0 79CHECK-NEXT: - Offset: 4 80CHECK-NEXT: LineStart: 3 81CHECK-NEXT: IsStatement: true 82CHECK-NEXT: EndDelta: 0 83CHECK-NEXT: - Offset: 9 84CHECK-NEXT: LineStart: 4 85CHECK-NEXT: IsStatement: true 86CHECK-NEXT: EndDelta: 0 87CHECK-NEXT: Columns: 88CHECK-NEXT: - !FileChecksums 89CHECK-NEXT: Checksums: 90CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' 91CHECK-NEXT: Kind: MD5 92CHECK-NEXT: Checksum: 4EB19DCD86C3BA2238A255C718572E7B 93CHECK-NEXT: - FileName: '{{.*}}foo.h' 94CHECK-NEXT: Kind: MD5 95CHECK-NEXT: Checksum: 061EB73ABB642532857A4F1D9CBAC323 96 97CHECK-LABEL: - Module: {{.*}}pdb_lines_2.obj 98CHECK-NEXT: ObjFile: {{.*}}pdb_lines_2.obj 99CHECK-NEXT: SourceFiles: 100CHECK-NEXT: - '{{.*}}pdb_lines_2.c' 101CHECK-NEXT: Subsections: 102CHECK-NEXT: - !Lines 103CHECK-NEXT: CodeSize: 1 104CHECK-NEXT: Flags: [ ] 105CHECK-NEXT: RelocOffset: 48 106CHECK-NEXT: RelocSegment: 1 107CHECK-NEXT: Blocks: 108CHECK-NEXT: - FileName: '{{.*}}pdb_lines_2.c' 109CHECK-NEXT: Lines: 110CHECK-NEXT: - Offset: 0 111CHECK-NEXT: LineStart: 1 112CHECK-NEXT: IsStatement: true 113CHECK-NEXT: EndDelta: 0 114CHECK-NEXT: - Offset: 0 115CHECK-NEXT: LineStart: 2 116CHECK-NEXT: IsStatement: true 117CHECK-NEXT: EndDelta: 0 118CHECK-NEXT: Columns: 119CHECK-NEXT: - !FileChecksums 120CHECK-NEXT: Checksums: 121CHECK-NEXT: - FileName: '{{.*}}pdb_lines_2.c' 122CHECK-NEXT: Kind: MD5 123CHECK-NEXT: Checksum: DF91CB3A2B8D917486574BB50CAC4CC7 124CHECK-NEXT: - Module: '* Linker *' 125CHECK-NEXT: ObjFile: '' 126