| 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) { |
| } |
| |
| $ clang-cl -Xclang -fdebug-compilation-dir -Xclang . -c -Z7 pdb_lines*.c |
| |
| /pdbsourcepath: only sets the directory that relative paths are considered |
| relative to, so this test needs to pass relative paths to lld-link for: |
| 1. The input obj files |
| 2. The /pdb: switch |
| 3. The lld-link invocation itself |
| To achieve this, put all inputs of the lld-link invocation (including lld-link |
| itself) in a temp directory that's cwd and then make sure to only use relative |
| arguments when calling ./lld-link below. |
| RUN: rm -rf %t |
| RUN: mkdir %t |
| RUN: cp lld-link %t/lld-link |
| RUN: cd %t |
| |
| RUN: yaml2obj %S/Inputs/pdb_lines_1_relative.yaml -o %t/pdb_lines_1_relative.obj |
| RUN: yaml2obj %S/Inputs/pdb_lines_2_relative.yaml -o %t/pdb_lines_2_relative.obj |
| RUN: ./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 |
| RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck %s |
| RUN: ./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 |
| RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=POSIX %s |
| |
| Also check without -pdbsourcepath |
| RUN: ./lld-link -debug -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj |
| RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=ABSOLUTE %s |
| |
| Clean up copy of large binary copied into temp directory to avoid bloat. |
| RUN: rm -f ./lld-link || true |
| |
| CHECK-LABEL: - Module: 'c:\src\pdb_lines_1_relative.obj' |
| CHECK-NEXT: ObjFile: 'c:\src\pdb_lines_1_relative.obj' |
| CHECK: SourceFiles: |
| CHECK-NEXT: - 'c:\src\pdb_lines_1.c' |
| CHECK-NEXT: - 'c:\src\foo.h' |
| CHECK: Subsections: |
| CHECK: - FileName: 'c:\src\pdb_lines_1.c' |
| CHECK: - FileName: 'c:\src\foo.h' |
| CHECK: - !FileChecksums |
| CHECK: - FileName: 'c:\src\pdb_lines_1.c' |
| CHECK: - FileName: 'c:\src\foo.h' |
| |
| CHECK-LABEL: - Module: 'c:\src\pdb_lines_2_relative.obj' |
| CHECK-NEXT: ObjFile: 'c:\src\pdb_lines_2_relative.obj' |
| CHECK: SourceFiles: |
| CHECK-NEXT: - 'c:\src\pdb_lines_2.c' |
| CHECK: Subsections: |
| CHECK: - FileName: 'c:\src\pdb_lines_2.c' |
| CHECK: - !FileChecksums |
| CHECK: - FileName: 'c:\src\pdb_lines_2.c' |
| |
| CHECK-LABEL: - Kind: S_ENVBLOCK |
| CHECK-NEXT: EnvBlockSym: |
| CHECK-NEXT: Entries: |
| CHECK-NEXT: - cwd |
| CHECK-NEXT: - 'c:\src' |
| CHECK-NEXT: - exe |
| CHECK-NEXT: - 'c:\src\lld-link' |
| CHECK-NEXT: - pdb |
| CHECK-NEXT: - 'c:\src\out.pdb' |
| CHECK-NEXT: - cmd |
| CHECK-NEXT: - '-debug -pdbsourcepath:c:\src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj' |
| |
| |
| POSIX-LABEL: - Module: '/usr/src/pdb_lines_1_relative.obj' |
| POSIX-NEXT: ObjFile: '/usr/src/pdb_lines_1_relative.obj' |
| POSIX: SourceFiles: |
| POSIX-NEXT: - '/usr/src/pdb_lines_1.c' |
| POSIX-NEXT: - '/usr/src/foo.h' |
| POSIX: Subsections: |
| POSIX: - FileName: '/usr/src/pdb_lines_1.c' |
| POSIX: - FileName: '/usr/src/foo.h' |
| POSIX: - !FileChecksums |
| POSIX: - FileName: '/usr/src/pdb_lines_1.c' |
| POSIX: - FileName: '/usr/src/foo.h' |
| |
| POSIX-LABEL: - Module: '/usr/src/pdb_lines_2_relative.obj' |
| POSIX-NEXT: ObjFile: '/usr/src/pdb_lines_2_relative.obj' |
| POSIX: SourceFiles: |
| POSIX-NEXT: - '/usr/src/pdb_lines_2.c' |
| POSIX: Subsections: |
| POSIX: - FileName: '/usr/src/pdb_lines_2.c' |
| POSIX: - !FileChecksums |
| POSIX: - FileName: '/usr/src/pdb_lines_2.c' |
| |
| POSIX-LABEL: - Kind: S_ENVBLOCK |
| POSIX-NEXT: EnvBlockSym: |
| POSIX-NEXT: Entries: |
| POSIX-NEXT: - cwd |
| POSIX-NEXT: - '/usr/src' |
| POSIX-NEXT: - exe |
| POSIX-NEXT: - '/usr/src/lld-link' |
| POSIX-NEXT: - pdb |
| POSIX-NEXT: - '/usr/src/out.pdb' |
| POSIX-NEXT: - cmd |
| POSIX-NEXT: - '-debug -pdbsourcepath:/usr/src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj' |
| |
| ABSOLUTE-LABEL: StringTable: |
| ABSOLUTE-NOT: {{/|\\}}.{{/|\\}}pdb_lines_1.c |