reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
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:         ''