xref: /llvm-project/lld/test/COFF/pdb-relative-source-lines.test (revision df2f9e57f8d1aa858b12aefb89909a7c88c6e0ea)
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$ clang-cl -fdebug-compilation-dir . -no-canonical-prefixes -c -Z7 pdb_lines*.c
19$ obj2yaml pdb_lines_1.obj > pdb_lines_1_relative.yaml
20$ obj2yaml pdb_lines_2.obj > pdb_lines_2_relative.yaml
21
22/pdbsourcepath: only sets the directory that relative paths are considered
23relative to, so this test needs to pass relative paths to lld-link for:
241. The input obj files
252. The /pdb: switch
263. The lld-link invocation itself
27To achieve this, put all inputs of the lld-link invocation (including lld-link
28itself) in a temp directory that's cwd and then make sure to only use relative
29arguments when calling ./lld-link below.
30RUN: rm -rf %t
31RUN: mkdir %t
32RUN: cp lld-link %t/lld-link
33RUN: cd %t
34
35RUN: yaml2obj %S/Inputs/pdb_lines_1_relative.yaml -o %t/pdb_lines_1_relative.obj
36RUN: yaml2obj %S/Inputs/pdb_lines_2_relative.yaml -o %t/pdb_lines_2_relative.obj
37RUN: ./lld-link -debug "-pdbsourcepath:c:\src" -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj
38RUN: llvm-pdbutil pdb2yaml -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck %s
39RUN: ./lld-link -debug "-pdbsourcepath:/usr/src" -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj
40RUN: llvm-pdbutil pdb2yaml -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=POSIX %s
41
42Also check without -pdbsourcepath
43RUN: ./lld-link -debug -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj
44RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=ABSOLUTE %s
45
46Clean up copy of large binary copied into temp directory to avoid bloat.
47RUN: rm -f ./lld-link || true
48
49CHECK-LABEL:  - Module:          'c:\src\pdb_lines_1_relative.obj'
50CHECK-NEXT:     ObjFile:         'c:\src\pdb_lines_1_relative.obj'
51CHECK:          SourceFiles:
52CHECK-NEXT:       - 'c:\src\pdb_lines_1.c'
53CHECK-NEXT:       - 'c:\src\foo.h'
54CHECK:          Subsections:
55CHECK:                - FileName:        'c:\src\pdb_lines_1.c'
56CHECK:                - FileName:        'c:\src\foo.h'
57CHECK:            - !FileChecksums
58CHECK:                - FileName:        'c:\src\pdb_lines_1.c'
59CHECK:                - FileName:        'c:\src\foo.h'
60
61CHECK-LABEL:  - Module:          'c:\src\pdb_lines_2_relative.obj'
62CHECK-NEXT:     ObjFile:         'c:\src\pdb_lines_2_relative.obj'
63CHECK:          SourceFiles:
64CHECK-NEXT:       - 'c:\src\pdb_lines_2.c'
65CHECK:          Subsections:
66CHECK:                - FileName:        'c:\src\pdb_lines_2.c'
67CHECK:            - !FileChecksums
68CHECK:                - FileName:        'c:\src\pdb_lines_2.c'
69
70CHECK-LABEL:  - Kind:            S_ENVBLOCK
71CHECK-NEXT:     EnvBlockSym:
72CHECK-NEXT:       Entries:
73CHECK-NEXT:         - cwd
74CHECK-NEXT:         - 'c:\src'
75CHECK-NEXT:         - exe
76CHECK-NEXT:         - 'c:\src\lld-link'
77CHECK-NEXT:         - pdb
78CHECK-NEXT:         - 'c:\src\out.pdb'
79CHECK-NEXT:         - cmd
80CHECK-NEXT:         - '-debug -pdbsourcepath:c:\src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb'
81
82CHECK-LABEL: IpiStream:
83
84CHECK:    - Kind:            LF_STRING_ID
85CHECK-NEXT:      StringId:
86CHECK-NEXT:        Id:              0
87CHECK-NEXT:        String:          .
88CHECK-NEXT:     - Kind:            LF_STRING_ID
89CHECK-NEXT:       StringId:
90CHECK-NEXT:         Id:              0
91CHECK-NEXT:         String:          pdb_lines_1.c
92CHECK-NEXT:     - Kind:            LF_STRING_ID
93CHECK-NEXT:       StringId:
94CHECK-NEXT:         Id:              0
95CHECK-NEXT:         String:          'buildninjaRel\bin\clang-cl.exe'
96
97POSIX-LABEL:  - Module:          '/usr/src/pdb_lines_1_relative.obj'
98POSIX-NEXT:     ObjFile:         '/usr/src/pdb_lines_1_relative.obj'
99POSIX:          SourceFiles:
100POSIX-NEXT:       - '/usr/src/pdb_lines_1.c'
101POSIX-NEXT:       - '/usr/src/foo.h'
102POSIX:          Subsections:
103POSIX:                - FileName:        '/usr/src/pdb_lines_1.c'
104POSIX:                - FileName:        '/usr/src/foo.h'
105POSIX:            - !FileChecksums
106POSIX:                - FileName:        '/usr/src/pdb_lines_1.c'
107POSIX:                - FileName:        '/usr/src/foo.h'
108
109POSIX-LABEL:  - Module:          '/usr/src/pdb_lines_2_relative.obj'
110POSIX-NEXT:     ObjFile:         '/usr/src/pdb_lines_2_relative.obj'
111POSIX:          SourceFiles:
112POSIX-NEXT:       - '/usr/src/pdb_lines_2.c'
113POSIX:          Subsections:
114POSIX:                - FileName:        '/usr/src/pdb_lines_2.c'
115POSIX:            - !FileChecksums
116POSIX:                - FileName:        '/usr/src/pdb_lines_2.c'
117
118POSIX-LABEL:  - Kind:            S_ENVBLOCK
119POSIX-NEXT:     EnvBlockSym:
120POSIX-NEXT:       Entries:
121POSIX-NEXT:         - cwd
122POSIX-NEXT:         - '/usr/src'
123POSIX-NEXT:         - exe
124POSIX-NEXT:         - '/usr/src/lld-link'
125POSIX-NEXT:         - pdb
126POSIX-NEXT:         - '/usr/src/out.pdb'
127POSIX-NEXT:         - cmd
128POSIX-NEXT:         - '-debug -pdbsourcepath:/usr/src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb'
129
130ABSOLUTE-LABEL: StringTable:
131ABSOLUTE-NOT: {{/|\\}}.{{/|\\}}pdb_lines_1.c
132
133POSIX-LABEL: IpiStream:
134POSIX:    - Kind:            LF_STRING_ID
135POSIX-NEXT:      StringId:
136POSIX-NEXT:        Id:              0
137POSIX-NEXT:        String:          .
138POSIX-NEXT:     - Kind:            LF_STRING_ID
139POSIX-NEXT:       StringId:
140POSIX-NEXT:         Id:              0
141POSIX-NEXT:         String:          pdb_lines_1.c
142POSIX-NEXT:     - Kind:            LF_STRING_ID
143POSIX-NEXT:       StringId:
144POSIX-NEXT:         Id:              0
145POSIX-NEXT:         String:          'buildninjaRel\bin\clang-cl.exe'
146