+++ /dev/null
-// RUN: %clang_cl /c /Z7 /Fo%t.obj -- %s
-// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s
-// RUN: %clang_cl /c /Z7 /Fo%t.obj -fdebug-compilation-dir . -- %s
-// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix RELATIVE
-
-int main() { return 42; }
-
-// CHECK: Types (.debug$T)
-// CHECK: ============================================================
-// CHECK: 0x[[PWD:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[PWDVAL:.+]]
-// CHECK: 0x[[FILEPATH:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[FILEPATHVAL:.+[\\/]debug-info-codeview-buildinfo.c]]
-// CHECK: 0x[[ZIPDB:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String:
-// CHECK: 0x[[TOOL:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[TOOLVAL:.+[\\/]clang.*]]
-// CHECK: 0x[[CMDLINE:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: "-cc1
-// CHECK: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}]
-// CHECK: 0x[[PWD]]: `[[PWDVAL]]`
-// CHECK: 0x[[TOOL]]: `[[TOOLVAL]]`
-// CHECK: 0x[[FILEPATH]]: `[[FILEPATHVAL]]`
-// CHECK: 0x[[ZIPDB]]: ``
-// CHECK: 0x[[CMDLINE]]: `"-cc1
-
-// RELATIVE: Types (.debug$T)
-// RELATIVE: ============================================================
-// RELATIVE: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}]
-// RELATIVE: 0x{{.+}}: `.`
});
}
-// LF_BUILDINFO records might contain relative paths, and we want to make them
-// absolute. We do this remapping only after the type records were merged,
-// because the full types graph isn't known during merging. In addition, we plan
-// to multi-thread the type merging, and the change below needs to be done
-// atomically, single-threaded.
-
-// A complication could arise when a LF_STRING_ID record already exists with the
-// same content as the new absolutized path. In that case, we simply redirect
-// LF_BUILDINFO's CurrentDirectory index to reference the existing LF_STRING_ID
-// record.
-
-static void remapBuildInfo(TypeCollection &idTable) {
- SimpleTypeSerializer s;
- idTable.ForEachRecord([&](TypeIndex ti, const CVType &type) {
- if (type.kind() != LF_BUILDINFO)
- return;
- BuildInfoRecord bi;
- cantFail(TypeDeserializer::deserializeAs(const_cast<CVType &>(type), bi));
-
- auto makeAbsoluteRecord =
- [&](BuildInfoRecord::BuildInfoArg recordType) -> Optional<TypeIndex> {
- TypeIndex recordTi = bi.getArgs()[recordType];
- if (recordTi.isNoneType())
- return None;
- CVType recordRef = idTable.getType(recordTi);
-
- StringIdRecord record;
- cantFail(TypeDeserializer::deserializeAs(recordRef, record));
-
- SmallString<128> abolutizedPath(record.getString());
- pdbMakeAbsolute(abolutizedPath);
-
- if (abolutizedPath == record.getString())
- return None; // The path is already absolute.
-
- record.String = abolutizedPath;
- ArrayRef<uint8_t> recordData = s.serialize(record);
-
- // Replace the previous LF_STRING_ID record
- if (!idTable.replaceType(recordTi, CVType(recordData),
- /*Stabilize=*/true))
- return recordTi;
- return None;
- };
-
- Optional<TypeIndex> curDirTI =
- makeAbsoluteRecord(BuildInfoRecord::CurrentDirectory);
- Optional<TypeIndex> buildToolTI =
- makeAbsoluteRecord(BuildInfoRecord::BuildTool);
-
- if (curDirTI || buildToolTI) {
- // This new record is already there. We don't want duplicates, so
- // re-serialize the BuildInfoRecord instead.
- if (curDirTI)
- bi.ArgIndices[BuildInfoRecord::CurrentDirectory] = *curDirTI;
- if (buildToolTI)
- bi.ArgIndices[BuildInfoRecord::BuildTool] = *buildToolTI;
-
- ArrayRef<uint8_t> biData = s.serialize(bi);
- bool r = idTable.replaceType(ti, CVType(biData), /*Stabilize=*/true);
- assert(r && "Didn't expect two build records pointing to the same OBJ!");
- (void)r;
- }
- });
-}
-
static bool remapTypeIndex(TypeIndex &ti, ArrayRef<TypeIndex> typeIndexMap) {
if (ti.isSimple())
return true;
builder.getStringTableBuilder().setStrings(pdbStrTab);
t1.stop();
- // Remap the contents of the LF_BUILDINFO record.
- remapBuildInfo(tMerger.getIDTable());
-
// Construct TPI and IPI stream contents.
ScopedTimer t2(tpiStreamLayoutTimer);
addTypeInfo(builder.getTpiBuilder(), tMerger.getTypeTable());
Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
Alignment: 4
SectionData: ''
- SizeOfRawData: 0
- Name: .xdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
Alignment: 4
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
+ SectionData: 04000000F10000002F0000002D003C1100000000D0000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F1000000300000002A0047110000000000000000000000001B000000000000000000000002100000000000000000006D61696E0002004F11F20000003000000000000000000000001B00000000000000030000002400000000000000020000000C000000030000001100000004000000F400000030000000010000001001EA6429BCE282CCF3F0E3CD93B216EB410000110000001001061EB73ABB642532857A4F1D9CBAC3230000F30000001C000000002E5C7064625F6C696E65735F312E63002E5C666F6F2E6800000000
Subsections:
- !Symbols
Records:
Compile3Sym:
Flags: [ ]
Machine: X64
- FrontendMajor: 11
+ FrontendMajor: 7
FrontendMinor: 0
FrontendBuild: 0
FrontendQFE: 0
- BackendMajor: 11000
+ BackendMajor: 7000
BackendMinor: 0
BackendBuild: 0
BackendQFE: 0
- Version: 'clang version 11.0.0 (https://github.com/llvm/llvm-project.git 77dad72eae974338ddc13d74783c012ccbb8c5ac)'
+ Version: 'clang version 7.0.0 '
- !Symbols
Records:
- Kind: S_GPROC32_ID
FunctionType: 4098
Flags: [ ]
DisplayName: main
- - Kind: S_FRAMEPROC
- FrameProcSym:
- TotalFrameBytes: 40
- PaddingFrameBytes: 0
- OffsetToPadding: 0
- BytesOfCalleeSavedRegisters: 0
- OffsetOfExceptionHandler: 0
- SectionIdOfExceptionHandler: 0
- Flags: [ ]
- Kind: S_PROC_ID_END
- ScopeEndSym: {}
+ ScopeEndSym:
- !Lines
CodeSize: 27
Flags: [ ]
LineStart: 4
IsStatement: false
EndDelta: 0
- Columns: []
+ Columns:
- !FileChecksums
Checksums:
- FileName: '.\pdb_lines_1.c'
Kind: MD5
- Checksum: 9A64DD4298487888B1D99F825D520C5E
+ Checksum: EA6429BCE282CCF3F0E3CD93B216EB41
- FileName: '.\foo.h'
Kind: MD5
- Checksum: A9D05E6DC184DE20A57797E24F8B0E97
+ Checksum: 061EB73ABB642532857A4F1D9CBAC323
- !StringTable
Strings:
- '.\pdb_lines_1.c'
- ''
- ''
- ''
- - !Symbols
- Records:
- - Kind: S_BUILDINFO
- BuildInfoSym:
- BuildId: 4105
Relocations:
- - VirtualAddress: 184
+ - VirtualAddress: 100
SymbolName: main
Type: IMAGE_REL_AMD64_SECREL
- - VirtualAddress: 188
+ - VirtualAddress: 104
SymbolName: main
Type: IMAGE_REL_AMD64_SECTION
- - VirtualAddress: 240
+ - VirtualAddress: 124
SymbolName: main
Type: IMAGE_REL_AMD64_SECREL
- - VirtualAddress: 244
+ - VirtualAddress: 128
SymbolName: main
Type: IMAGE_REL_AMD64_SECTION
- Name: '.debug$T'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
+ SectionData: 0400000006000112000000000E0008107400000000000000001000001200011600000000011000006D61696E00F3F2F10E0008100300000000000000001000000E0001160000000003100000666F6F00
Types:
- Kind: LF_ARGLIST
ArgList:
ParentScope: 0
FunctionType: 4099
Name: foo
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: .
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: pdb_lines_1.c
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: 'buildninjaRel\bin\clang-cl.exe'
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: '"-cc1" "-triple" "x86_64-pc-windows-msvc19.26.28806" "-emit-obj" "-mrelax-all" "-mincremental-linker-compatible" "-disable-free" "-main-file-name" "pdb_lines_1.c" "-mrelocation-model" "pic" "-pic-level" "2" "-mthread-model" "posix" "-mframe-pointer=none" "-relaxed-aliasing" "-fmath-errno" "-fno-rounding-math" "-mconstructor-aliases" "-munwind-tables" "-target-cpu" "x86-64" "-mllvm" "-x86-asm-syntax=intel" "-D_MT" "-flto-visibility-public-std" "--dependent-lib=libcmt" "--dependent-lib=oldnames" "-stack-protector" "2" "-fms-volatile" "-fdiagnostics-format" "msvc" "-gcodeview" "-debug-info-kind=limited" "-resource-dir" "D:\\llvm-project\\buildninjaRel\\lib\\clang\\11.0.0" "-internal-isystem" "D:\\llvm-project\\buildninjaRel\\lib\\clang\\11.0.0\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.26.28801\\ATLMFC\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.26.28801\\include" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\ucrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\shared" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\winrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\cppwinrt" "-fdebug-compilation-dir" "." "-ferror-limit" "19" "-fmessage-length=146" "-fno-use-cxa-atexit" "-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.26.28806" "-fdelayed-template-parsing" "-fcolor-diagnostics" "-faddrsig" "-x" "c"'
- - Kind: LF_BUILDINFO
- BuildInfo:
- ArgIndices: [ 4101, 4103, 4102, 0, 4104 ]
- Name: .pdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
Alignment: 4
SymbolName: main
Type: IMAGE_REL_AMD64_ADDR32NB
- VirtualAddress: 8
- SymbolTableIndex: 6
+ SymbolName: .xdata
Type: IMAGE_REL_AMD64_ADDR32NB
- - Name: .llvm_addrsig
- Characteristics: [ IMAGE_SCN_LNK_REMOVE ]
- Alignment: 1
- SectionData: 0A1D
- Name: .xdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
Alignment: 4
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
+ SectionData: 04000000F10000002F000000290047110000000000000000000000000F00000000000000000000000410000000000000000000666F6F0002004F1100F20000003000000000000000000000000F000000180000000300000024000000000000000200000004000000030000000900000004000000
Subsections:
- !Symbols
Records:
FunctionType: 4100
Flags: [ ]
DisplayName: foo
- - Kind: S_FRAMEPROC
- FrameProcSym:
- TotalFrameBytes: 40
- PaddingFrameBytes: 0
- OffsetToPadding: 0
- BytesOfCalleeSavedRegisters: 0
- OffsetOfExceptionHandler: 0
- SectionIdOfExceptionHandler: 0
- Flags: [ ]
- Kind: S_PROC_ID_END
- ScopeEndSym: {}
+ ScopeEndSym:
- !Lines
CodeSize: 15
Flags: [ ]
LineStart: 4
IsStatement: false
EndDelta: 0
- Columns: []
+ Columns:
Relocations:
- VirtualAddress: 44
SymbolName: foo
- VirtualAddress: 48
SymbolName: foo
Type: IMAGE_REL_AMD64_SECTION
- - VirtualAddress: 100
+ - VirtualAddress: 68
SymbolName: foo
Type: IMAGE_REL_AMD64_SECREL
- - VirtualAddress: 104
+ - VirtualAddress: 72
SymbolName: foo
Type: IMAGE_REL_AMD64_SECTION
- Name: .pdata
SymbolName: foo
Type: IMAGE_REL_AMD64_ADDR32NB
- VirtualAddress: 8
- SymbolTableIndex: 11
+ SymbolName: .xdata
Type: IMAGE_REL_AMD64_ADDR32NB
symbols:
- Name: .text
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- Name: .xdata
Value: 0
- SectionNumber: 11
+ SectionNumber: 10
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 396
+ Length: 264
NumberOfRelocations: 4
NumberOfLinenumbers: 0
- CheckSum: 3390249978
+ CheckSum: 2204933783
Number: 7
- Name: '.debug$S'
Value: 0
- SectionNumber: 12
+ SectionNumber: 11
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 148
+ Length: 116
NumberOfRelocations: 4
NumberOfLinenumbers: 0
- CheckSum: 1236081121
+ CheckSum: 2691661839
Number: 5
Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
- Name: '.debug$T'
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 2028
+ Length: 80
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 2043733667
+ CheckSum: 3541780432
Number: 8
- Name: .pdata
Value: 0
Number: 9
- Name: .pdata
Value: 0
- SectionNumber: 13
+ SectionNumber: 12
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
CheckSum: 3642757804
Number: 5
Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
- - Name: .llvm_addrsig
- Value: 0
- SectionNumber: 10
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2582217811
- Number: 10
- - Name: '@feat.00'
- Value: 0
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- Name: main
Value: 0
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .file
- Value: 0
- SectionNumber: -2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_FILE
- File: pdb_lines_1.c
...
Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
Alignment: 4
SectionData: ''
- SizeOfRawData: 0
- Name: .drectve
Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
Alignment: 1
- Name: '.debug$S'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
+ SectionData: 04000000F10000002F0000002D003C1100000000D0000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F10000002F0000002900471100000000000000000000000001000000000000000000000002100000000000000000006261720002004F1100F2000000200000000000000000000000010000000000000001000000140000000000000002000000F400000018000000010000001001DF91CB3A2B8D917486574BB50CAC4CC70000F300000014000000002E5C7064625F6C696E65735F322E6300000000
Subsections:
- !Symbols
Records:
Compile3Sym:
Flags: [ ]
Machine: X64
- FrontendMajor: 11
+ FrontendMajor: 7
FrontendMinor: 0
FrontendBuild: 0
FrontendQFE: 0
- BackendMajor: 11000
+ BackendMajor: 7000
BackendMinor: 0
BackendBuild: 0
BackendQFE: 0
- Version: 'clang version 11.0.0 (https://github.com/llvm/llvm-project.git 77dad72eae974338ddc13d74783c012ccbb8c5ac)'
+ Version: 'clang version 7.0.0 '
- !Symbols
Records:
- Kind: S_GPROC32_ID
FunctionType: 4098
Flags: [ ]
DisplayName: bar
- - Kind: S_FRAMEPROC
- FrameProcSym:
- TotalFrameBytes: 0
- PaddingFrameBytes: 0
- OffsetToPadding: 0
- BytesOfCalleeSavedRegisters: 0
- OffsetOfExceptionHandler: 0
- SectionIdOfExceptionHandler: 0
- Flags: [ ]
- Kind: S_PROC_ID_END
- ScopeEndSym: {}
+ ScopeEndSym:
- !Lines
CodeSize: 1
Flags: [ ]
LineStart: 2
IsStatement: false
EndDelta: 0
- Columns: []
+ Columns:
- !FileChecksums
Checksums:
- FileName: '.\pdb_lines_2.c'
Kind: MD5
- Checksum: 4CC58B73BFD5AB52F87CFB3C604BB288
+ Checksum: DF91CB3A2B8D917486574BB50CAC4CC7
- !StringTable
Strings:
- '.\pdb_lines_2.c'
- ''
- ''
- ''
- - !Symbols
- Records:
- - Kind: S_BUILDINFO
- BuildInfoSym:
- BuildId: 4103
Relocations:
- - VirtualAddress: 184
+ - VirtualAddress: 100
SymbolName: bar
Type: IMAGE_REL_AMD64_SECREL
- - VirtualAddress: 188
+ - VirtualAddress: 104
SymbolName: bar
Type: IMAGE_REL_AMD64_SECTION
- - VirtualAddress: 240
+ - VirtualAddress: 124
SymbolName: bar
Type: IMAGE_REL_AMD64_SECREL
- - VirtualAddress: 244
+ - VirtualAddress: 128
SymbolName: bar
Type: IMAGE_REL_AMD64_SECTION
- Name: '.debug$T'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
Alignment: 4
+ SectionData: 0400000006000112000000000E0008100300000000000000001000000E000116000000000110000062617200
Types:
- Kind: LF_ARGLIST
ArgList:
ParentScope: 0
FunctionType: 4097
Name: bar
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: .
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: pdb_lines_2.c
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: 'buildninjaRel\bin\clang-cl.exe'
- - Kind: LF_STRING_ID
- StringId:
- Id: 0
- String: '"-cc1" "-triple" "x86_64-pc-windows-msvc19.26.28806" "-emit-obj" "-mrelax-all" "-mincremental-linker-compatible" "-disable-free" "-main-file-name" "pdb_lines_2.c" "-mrelocation-model" "pic" "-pic-level" "2" "-mthread-model" "posix" "-mframe-pointer=none" "-relaxed-aliasing" "-fmath-errno" "-fno-rounding-math" "-mconstructor-aliases" "-munwind-tables" "-target-cpu" "x86-64" "-mllvm" "-x86-asm-syntax=intel" "-D_MT" "-flto-visibility-public-std" "--dependent-lib=libcmt" "--dependent-lib=oldnames" "-stack-protector" "2" "-fms-volatile" "-fdiagnostics-format" "msvc" "-gcodeview" "-debug-info-kind=limited" "-resource-dir" "D:\\llvm-project\\buildninjaRel\\lib\\clang\\11.0.0" "-internal-isystem" "D:\\llvm-project\\buildninjaRel\\lib\\clang\\11.0.0\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.26.28801\\ATLMFC\\include" "-internal-isystem" "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.26.28801\\include" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\ucrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\shared" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\winrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.18362.0\\cppwinrt" "-fdebug-compilation-dir" "." "-ferror-limit" "19" "-fmessage-length=146" "-fno-use-cxa-atexit" "-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.26.28806" "-fdelayed-template-parsing" "-fcolor-diagnostics" "-faddrsig" "-x" "c"'
- - Kind: LF_BUILDINFO
- BuildInfo:
- ArgIndices: [ 4099, 4101, 4100, 0, 4102 ]
- - Name: .llvm_addrsig
- Characteristics: [ IMAGE_SCN_LNK_REMOVE ]
- Alignment: 1
- SectionData: ''
symbols:
- Name: .text
Value: 0
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 348
+ Length: 216
NumberOfRelocations: 4
NumberOfLinenumbers: 0
- CheckSum: 2408981505
+ CheckSum: 2383431754
Number: 5
- Name: '.debug$T'
Value: 0
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_STATIC
SectionDefinition:
- Length: 1992
+ Length: 44
NumberOfRelocations: 0
NumberOfLinenumbers: 0
- CheckSum: 1158086003
+ CheckSum: 179171995
Number: 6
- - Name: .llvm_addrsig
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 7
- - Name: '@feat.00'
- Value: 0
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- Name: bar
Value: 0
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .file
- Value: 0
- SectionNumber: -2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_FILE
- File: pdb_lines_2.c
...
void bar(void) {
}
-$ clang-cl -fdebug-compilation-dir . -no-canonical-prefixes -c -Z7 pdb_lines*.c
-$ obj2yaml pdb_lines_1.obj > pdb_lines_1_relative.yaml
-$ obj2yaml pdb_lines_2.obj > pdb_lines_2_relative.yaml
+$ 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:
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 -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck %s
+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 -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=POSIX %s
-
-Also test the convoluted case at the end of remapBuildInfo() in lld/COFF/PDB.cpp
-The only drawback right now is that this edge case will create LF_BUILDINFO
-records with front references in the IPI stream. However the Visual Studio
-debugger takes the .PDB thusly created without any problems.
-Tested on VS2015, 2017 and 2019.
-
-RUN: sed -E -e "s|(String:\s+)\.|\1\'c:\\\\src'|" %S/Inputs/pdb_lines_2_relative.yaml > %t/pdb_lines_2_relative.yaml
-RUN: yaml2obj 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 -ipi-stream -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=EXISTING %s
+RUN: llvm-pdbutil pdb2yaml -modules -module-files -module-syms -subsections=lines,fc %t/out.pdb | FileCheck --check-prefix=POSIX %s
CHECK-LABEL: - Module: 'c:\src\pdb_lines_1_relative.obj'
CHECK-NEXT: ObjFile: 'c:\src\pdb_lines_1_relative.obj'
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'
-CHECK-LABEL: IpiStream:
-
-CHECK: - Kind: LF_STRING_ID
-CHECK-NEXT: StringId:
-CHECK-NEXT: Id: 0
-CHECK-NEXT: String: 'c:\src'
-CHECK-NEXT: - Kind: LF_STRING_ID
-CHECK-NEXT: StringId:
-CHECK-NEXT: Id: 0
-CHECK-NEXT: String: pdb_lines_1.c
-CHECK-NEXT: - Kind: LF_STRING_ID
-CHECK-NEXT: StringId:
-CHECK-NEXT: Id: 0
-CHECK-NEXT: String: 'c:\src\buildninjaRel\bin\clang-cl.exe'
-
-EXISTING-LABEL: IpiStream:
-
-EXISTING: - Kind: LF_STRING_ID
-EXISTING-NEXT: StringId:
-EXISTING-NEXT: Id: 0
-EXISTING-NEXT: String: .
-EXISTING-NEXT: - Kind: LF_STRING_ID
-EXISTING-NEXT: StringId:
-EXISTING-NEXT: Id: 0
-EXISTING-NEXT: String: pdb_lines_1.c
-EXISTING: - Kind: LF_STRING_ID
-EXISTING-NEXT: StringId:
-EXISTING-NEXT: Id: 0
-EXISTING-LABEL: String: 'c:\src'
-EXISTING-NEXT: - Kind: LF_STRING_ID
-EXISTING-NEXT: StringId:
-EXISTING-NEXT: Id: 0
-EXISTING-NEXT: String: pdb_lines_2.c
POSIX-LABEL: - Module: '/usr/src/pdb_lines_1_relative.obj'
POSIX-NEXT: ObjFile: '/usr/src/pdb_lines_1_relative.obj'
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'
-
-POSIX-LABEL: IpiStream:
-POSIX: - Kind: LF_STRING_ID
-POSIX-NEXT: StringId:
-POSIX-NEXT: Id: 0
-POSIX-NEXT: String: '/usr/src'
-POSIX-NEXT: - Kind: LF_STRING_ID
-POSIX-NEXT: StringId:
-POSIX-NEXT: Id: 0
-POSIX-NEXT: String: pdb_lines_1.c
-POSIX-NEXT: - Kind: LF_STRING_ID
-POSIX-NEXT: StringId:
-POSIX-NEXT: Id: 0
-POSIX-NEXT: String: '/usr/src/buildninjaRel/bin/clang-cl.exe'
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/Path.h"
-#include "llvm/Support/Program.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Target/TargetLoweringObjectFile.h"
return TypeTable.writeLeafType(SIR);
}
-static std::string flattenCommandLine(ArrayRef<const char *> Args,
- StringRef MainFilename) {
- std::string FlatCmdLine;
- raw_string_ostream OS(FlatCmdLine);
- StringRef LastArg;
- for (StringRef Arg : Args) {
- if (Arg.empty())
- continue;
- // The command-line shall not contain the file to compile.
- if (Arg == MainFilename && LastArg != "-main-file-name")
- continue;
- // Also remove the output file.
- if (Arg == "-o" || LastArg == "-o") {
- LastArg = Arg;
- continue;
- }
- if (!LastArg.empty())
- OS << " ";
- llvm::sys::printArg(OS, Arg, /*Quote=*/true);
- LastArg = Arg;
- }
- OS.flush();
- return FlatCmdLine;
-}
-
void CodeViewDebug::emitBuildInfo() {
// First, make LF_BUILDINFO. It's a sequence of strings with various bits of
// build info. The known prefix is:
getStringIdTypeIdx(TypeTable, MainSourceFile->getDirectory());
BuildInfoArgs[BuildInfoRecord::SourceFile] =
getStringIdTypeIdx(TypeTable, MainSourceFile->getFilename());
- // FIXME: PDB is intentionally blank unless we implement /Zi type servers.
- BuildInfoArgs[BuildInfoRecord::TypeServerPDB] =
- getStringIdTypeIdx(TypeTable, "");
- if (Asm->TM.Options.MCOptions.Argv0 != nullptr) {
- BuildInfoArgs[BuildInfoRecord::BuildTool] =
- getStringIdTypeIdx(TypeTable, Asm->TM.Options.MCOptions.Argv0);
- BuildInfoArgs[BuildInfoRecord::CommandLine] = getStringIdTypeIdx(
- TypeTable, flattenCommandLine(Asm->TM.Options.MCOptions.CommandLineArgs,
- MainSourceFile->getFilename()));
- }
+ // FIXME: Path to compiler and command line. PDB is intentionally blank unless
+ // we implement /Zi type servers.
BuildInfoRecord BIR(BuildInfoArgs);
TypeIndex BuildInfoIndex = TypeTable.writeLeafType(BIR);
; CHECK-NEXT: 0x{{.*}}: `D:\src\scopes\clang`
; CHECK-NEXT: <no type>: ``
; CHECK-NEXT: 0x{{.*}}: `D:\src\scopes\foo.cpp`
-; CHECK-NEXT: 0x{{.*}}: ``
+; CHECK-NEXT: <no type>: ``
; CHECK-NEXT: <no type>: ``
; CHECK: {{.*}} | S_BUILDINFO [size = 8] BuildId = `[[INFO_IDX]]`
; YAML: - 4470750F2E319329
; YAML: - 0FB556FD1FAB66D7
; YAML: - 5970EFB4874D0F3F
-; YAML: - D8EF11198C33843F
-; YAML: - D81F744D7366282B
+; YAML: - EDB1D74C120CF44A
; ...
; ASM: .asciz "t.cpp" # StringData
; ASM: .byte 242
; ASM: .byte 241
-; ASM: # StringId (0x1015)
-; ASM: .short 0xa # Record length
-; ASM: .short 0x1605 # Record kind: LF_STRING_ID
-; ASM: .long 0x0 # Id
-; ASM: .byte 0 # StringData
-; ASM: .byte 243
-; ASM: .byte 242
-; ASM: .byte 241
-; ASM: # BuildInfo (0x1016)
+; ASM: # BuildInfo (0x1015)
; ASM: .short 0x1a # Record length
; ASM: .short 0x1603 # Record kind: LF_BUILDINFO
; ASM: .short 0x5 # NumArgs
; ASM: .long 0x1013 # Argument: D:\src\llvm\build
; ASM: .long 0x0 # Argument
; ASM: .long 0x1014 # Argument: t.cpp
-; ASM: .long 0x1015 # Argument
+; ASM: .long 0x0 # Argument
; ASM: .long 0x0 # Argument
; ASM: .byte 242
; ASM: .byte 241
; ASM: .asciz "t.cpp" # StringData
; ASM: .byte 242
; ASM: .byte 241
-; ASM: # StringId (0x1022)
-; ASM: .short 0xa # Record length
-; ASM: .short 0x1605 # Record kind: LF_STRING_ID
-; ASM: .long 0x0 # Id
-; ASM: .byte 0 # StringData
-; ASM: .byte 243
-; ASM: .byte 242
-; ASM: .byte 241
-; ASM: # BuildInfo (0x1023)
+; ASM: # BuildInfo (0x1022)
; ASM: .short 0x1a # Record length
; ASM: .short 0x1603 # Record kind: LF_BUILDINFO
; ASM: .short 0x5 # NumArgs
; ASM: .long 0x1020 # Argument: D:\src\llvm\build
; ASM: .long 0x0 # Argument
; ASM: .long 0x1021 # Argument: t.cpp
-; ASM: .long 0x1022 # Argument
+; ASM: .long 0x0 # Argument
; ASM: .long 0x0 # Argument
; ASM: .byte 242
; ASM: .byte 241