146 lines · plain
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*.c19$ obj2yaml pdb_lines_1.obj > pdb_lines_1_relative.yaml20$ obj2yaml pdb_lines_2.obj > pdb_lines_2_relative.yaml21 22/pdbsourcepath: only sets the directory that relative paths are considered23relative to, so this test needs to pass relative paths to lld-link for:241. The input obj files252. The /pdb: switch263. The lld-link invocation itself27To achieve this, put all inputs of the lld-link invocation (including lld-link28itself) in a temp directory that's cwd and then make sure to only use relative29arguments when calling ./lld-link below.30RUN: rm -rf %t31RUN: mkdir %t32RUN: cp lld-link %t/lld-link33RUN: cd %t34 35RUN: yaml2obj %S/Inputs/pdb_lines_1_relative.yaml -o %t/pdb_lines_1_relative.obj36RUN: yaml2obj %S/Inputs/pdb_lines_2_relative.yaml -o %t/pdb_lines_2_relative.obj37RUN: ./lld-link -debug "-pdbsourcepath:c:\src" -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj38RUN: llvm-pdbutil pdb2yaml -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck %s39RUN: ./lld-link -debug "-pdbsourcepath:/usr/src" -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj40RUN: llvm-pdbutil pdb2yaml -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=POSIX %s41 42Also check without -pdbsourcepath43RUN: ./lld-link -debug -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb pdb_lines_1_relative.obj pdb_lines_2_relative.obj44RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=ABSOLUTE %s45 46Clean up copy of large binary copied into temp directory to avoid bloat.47RUN: rm -f ./lld-link || true48 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: - !FileChecksums58CHECK: - 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: - !FileChecksums68CHECK: - FileName: 'c:\src\pdb_lines_2.c'69 70CHECK-LABEL: - Kind: S_ENVBLOCK71CHECK-NEXT: EnvBlockSym: 72CHECK-NEXT: Entries: 73CHECK-NEXT: - cwd74CHECK-NEXT: - 'c:\src'75CHECK-NEXT: - exe76CHECK-NEXT: - 'c:\src\lld-link'77CHECK-NEXT: - pdb 78CHECK-NEXT: - 'c:\src\out.pdb'79CHECK-NEXT: - cmd80CHECK-NEXT: - '-debug -pdbsourcepath:c:\src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb'81 82CHECK-LABEL: IpiStream:83 84CHECK: - Kind: LF_STRING_ID85CHECK-NEXT: StringId:86CHECK-NEXT: Id: 087CHECK-NEXT: String: .88CHECK-NEXT: - Kind: LF_STRING_ID89CHECK-NEXT: StringId:90CHECK-NEXT: Id: 091CHECK-NEXT: String: pdb_lines_1.c92CHECK-NEXT: - Kind: LF_STRING_ID93CHECK-NEXT: StringId:94CHECK-NEXT: Id: 095CHECK-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: - !FileChecksums106POSIX: - 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: - !FileChecksums116POSIX: - FileName: '/usr/src/pdb_lines_2.c'117 118POSIX-LABEL: - Kind: S_ENVBLOCK119POSIX-NEXT: EnvBlockSym: 120POSIX-NEXT: Entries: 121POSIX-NEXT: - cwd122POSIX-NEXT: - '/usr/src'123POSIX-NEXT: - exe124POSIX-NEXT: - '/usr/src/lld-link'125POSIX-NEXT: - pdb 126POSIX-NEXT: - '/usr/src/out.pdb'127POSIX-NEXT: - cmd128POSIX-NEXT: - '-debug -pdbsourcepath:/usr/src -entry:main -nodefaultlib -out:out.exe -pdb:out.pdb'129 130ABSOLUTE-LABEL: StringTable:131ABSOLUTE-NOT: {{/|\\}}.{{/|\\}}pdb_lines_1.c132 133POSIX-LABEL: IpiStream:134POSIX: - Kind: LF_STRING_ID135POSIX-NEXT: StringId:136POSIX-NEXT: Id: 0137POSIX-NEXT: String: .138POSIX-NEXT: - Kind: LF_STRING_ID139POSIX-NEXT: StringId:140POSIX-NEXT: Id: 0141POSIX-NEXT: String: pdb_lines_1.c142POSIX-NEXT: - Kind: LF_STRING_ID143POSIX-NEXT: StringId:144POSIX-NEXT: Id: 0145POSIX-NEXT: String: 'buildninjaRel\bin\clang-cl.exe'146