| Test the linker line tables on roughly the following example: |
| |
| ==> foo.h <== |
| void bar(void); |
| inline void foo(void) { |
| bar(); |
| } |
| ==> pdb_lines_1.c <== |
| #include "foo.h" |
| int main(void) { |
| foo(); |
| return 42; |
| } |
| ==> pdb_lines_2.c <== |
| void bar(void) { |
| } |
| |
| $ cl -c -Z7 pdb_lines*.c |
| |
| RUN: yaml2obj %S/Inputs/pdb_lines_1.yaml -o %t.pdb_lines_1.obj |
| RUN: yaml2obj %S/Inputs/pdb_lines_2.yaml -o %t.pdb_lines_2.obj |
| RUN: rm -f %t.exe %t.pdb |
| RUN: lld-link -debug -entry:main -nodefaultlib -out:%t.exe -pdb:%t.pdb %t.pdb_lines_1.obj %t.pdb_lines_2.obj |
| RUN: llvm-pdbutil pdb2yaml -modules -module-files -subsections=lines,fc %t.pdb | FileCheck %s |
| |
| CHECK-LABEL: DbiStream: |
| CHECK-NEXT: VerHeader: V70 |
| CHECK-NEXT: Age: 1 |
| CHECK-NEXT: BuildNumber: 36363 |
| CHECK-NEXT: PdbDllVersion: 0 |
| CHECK-NEXT: PdbDllRbld: 0 |
| CHECK-NEXT: Flags: 0 |
| CHECK-NEXT: MachineType: Amd64 |
| CHECK-NEXT: Modules: |
| |
| CHECK-LABEL: - Module: {{.*}}pdb_lines_1.obj |
| CHECK-NEXT: ObjFile: {{.*}}pdb_lines_1.obj |
| CHECK-NEXT: SourceFiles: |
| CHECK-NEXT: - '{{.*}}pdb_lines_1.c' |
| CHECK-NEXT: - '{{.*}}foo.h' |
| CHECK-NEXT: Subsections: |
| CHECK-NEXT: - !Lines |
| CHECK-NEXT: CodeSize: 19 |
| CHECK-NEXT: Flags: [ ] |
| CHECK-NEXT: RelocOffset: 0 |
| CHECK-NEXT: RelocSegment: 1 |
| CHECK-NEXT: Blocks: |
| CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' |
| CHECK-NEXT: Lines: |
| CHECK-NEXT: - Offset: 0 |
| CHECK-NEXT: LineStart: 2 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 4 |
| CHECK-NEXT: LineStart: 3 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 9 |
| CHECK-NEXT: LineStart: 4 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 14 |
| CHECK-NEXT: LineStart: 5 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: Columns: |
| CHECK-NEXT: - !Lines |
| CHECK-NEXT: CodeSize: 14 |
| CHECK-NEXT: Flags: [ ] |
| CHECK-NEXT: RelocOffset: 32 |
| CHECK-NEXT: RelocSegment: 1 |
| CHECK-NEXT: Blocks: |
| CHECK-NEXT: - FileName: '{{.*}}foo.h' |
| CHECK-NEXT: Lines: |
| CHECK-NEXT: - Offset: 0 |
| CHECK-NEXT: LineStart: 2 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 4 |
| CHECK-NEXT: LineStart: 3 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 9 |
| CHECK-NEXT: LineStart: 4 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: Columns: |
| CHECK-NEXT: - !FileChecksums |
| CHECK-NEXT: Checksums: |
| CHECK-NEXT: - FileName: '{{.*}}pdb_lines_1.c' |
| CHECK-NEXT: Kind: MD5 |
| CHECK-NEXT: Checksum: 4EB19DCD86C3BA2238A255C718572E7B |
| CHECK-NEXT: - FileName: '{{.*}}foo.h' |
| CHECK-NEXT: Kind: MD5 |
| CHECK-NEXT: Checksum: 061EB73ABB642532857A4F1D9CBAC323 |
| |
| CHECK-LABEL: - Module: {{.*}}pdb_lines_2.obj |
| CHECK-NEXT: ObjFile: {{.*}}pdb_lines_2.obj |
| CHECK-NEXT: SourceFiles: |
| CHECK-NEXT: - '{{.*}}pdb_lines_2.c' |
| CHECK-NEXT: Subsections: |
| CHECK-NEXT: - !Lines |
| CHECK-NEXT: CodeSize: 1 |
| CHECK-NEXT: Flags: [ ] |
| CHECK-NEXT: RelocOffset: 48 |
| CHECK-NEXT: RelocSegment: 1 |
| CHECK-NEXT: Blocks: |
| CHECK-NEXT: - FileName: '{{.*}}pdb_lines_2.c' |
| CHECK-NEXT: Lines: |
| CHECK-NEXT: - Offset: 0 |
| CHECK-NEXT: LineStart: 1 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: - Offset: 0 |
| CHECK-NEXT: LineStart: 2 |
| CHECK-NEXT: IsStatement: true |
| CHECK-NEXT: EndDelta: 0 |
| CHECK-NEXT: Columns: |
| CHECK-NEXT: - !FileChecksums |
| CHECK-NEXT: Checksums: |
| CHECK-NEXT: - FileName: '{{.*}}pdb_lines_2.c' |
| CHECK-NEXT: Kind: MD5 |
| CHECK-NEXT: Checksum: DF91CB3A2B8D917486574BB50CAC4CC7 |
| CHECK-NEXT: - Module: '* Linker *' |
| CHECK-NEXT: ObjFile: '' |