Author: Alexandre Ganea Date: 2022-01-19T19:44:37-05:00 New Revision: aba5b91b699c556da0ee04418321b581bd33611e
URL: https://github.com/llvm/llvm-project/commit/aba5b91b699c556da0ee04418321b581bd33611e DIFF: https://github.com/llvm/llvm-project/commit/aba5b91b699c556da0ee04418321b581bd33611e.diff LOG: Re-land [CodeView] Add full repro to LF_BUILDINFO record This patch writes the full -cc1 command into the resulting .OBJ, like MSVC does. This allows for external tools (Recode, Live++) to rebuild a source file without any external dependency but the .OBJ itself (other than the compiler) and without knowledge of the build system. The LF_BUILDINFO record stores a full path to the compiler, the PWD (CWD at program startup), a relative or absolute path to the source, and the full CC1 command line. The stored command line is self-standing (does not depend on the environment). In the same way, MSVC doesn't exactly store the provided command-line, but an expanded version (a somehow equivalent of CC1) which is also self-standing. For more information see PR36198 and D43002. Differential Revision: https://reviews.llvm.org/D80833 Added: clang/test/CodeGen/debug-info-codeview-buildinfo.c Modified: clang/cmake/caches/BaremetalARM.cmake clang/cmake/caches/CrossWinToARMLinux.cmake clang/cmake/caches/Fuchsia-stage2.cmake lld/test/COFF/Inputs/pdb_lines_1_relative.yaml lld/test/COFF/Inputs/pdb_lines_2_relative.yaml lld/test/COFF/pdb-relative-source-lines.test llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp llvm/test/DebugInfo/COFF/build-info.ll llvm/test/DebugInfo/COFF/global-type-hashes.ll llvm/test/DebugInfo/COFF/types-basic.ll llvm/test/DebugInfo/COFF/types-data-members.ll Removed: ################################################################################ diff --git a/clang/cmake/caches/BaremetalARM.cmake b/clang/cmake/caches/BaremetalARM.cmake index 85295d9db392a..e44355cfcbd74 100644 --- a/clang/cmake/caches/BaremetalARM.cmake +++ b/clang/cmake/caches/BaremetalARM.cmake @@ -31,6 +31,7 @@ set(LLVM_TOOLCHAIN_TOOLS llvm-dwarfdump llvm-nm llvm-objdump + llvm-pdbutil llvm-ranlib llvm-readobj llvm-size diff --git a/clang/cmake/caches/CrossWinToARMLinux.cmake b/clang/cmake/caches/CrossWinToARMLinux.cmake index f015c67e3b9ce..dd03a37b4b8f9 100644 --- a/clang/cmake/caches/CrossWinToARMLinux.cmake +++ b/clang/cmake/caches/CrossWinToARMLinux.cmake @@ -182,6 +182,7 @@ set(LLVM_TOOLCHAIN_TOOLS llvm-lib llvm-nm llvm-objdump + llvm-pdbutil llvm-profdata llvm-ranlib llvm-readobj diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake index 0d572b670541e..de8ac89fbfaa0 100644 --- a/clang/cmake/caches/Fuchsia-stage2.cmake +++ b/clang/cmake/caches/Fuchsia-stage2.cmake @@ -277,6 +277,7 @@ set(LLVM_TOOLCHAIN_TOOLS llvm-objcopy llvm-objdump llvm-otool + llvm-pdbutil llvm-profdata llvm-rc llvm-ranlib diff --git a/clang/test/CodeGen/debug-info-codeview-buildinfo.c b/clang/test/CodeGen/debug-info-codeview-buildinfo.c new file mode 100644 index 0000000000000..93810e829c6d9 --- /dev/null +++ b/clang/test/CodeGen/debug-info-codeview-buildinfo.c @@ -0,0 +1,26 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cl --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s +// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s +// RUN: %clang_cl --target=i686-windows-msvc /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{{.+}}: `.` diff --git a/lld/test/COFF/Inputs/pdb_lines_1_relative.yaml b/lld/test/COFF/Inputs/pdb_lines_1_relative.yaml index 947de419d6b8b..9a6b192e1d0d2 100644 --- a/lld/test/COFF/Inputs/pdb_lines_1_relative.yaml +++ b/lld/test/COFF/Inputs/pdb_lines_1_relative.yaml @@ -19,6 +19,7 @@ sections: 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 @@ -38,7 +39,6 @@ sections: - Name: '.debug$S' Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] Alignment: 4 - SectionData: 04000000F10000002F0000002D003C1100000000D0000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F1000000300000002A0047110000000000000000000000001B000000000000000000000002100000000000000000006D61696E0002004F11F20000003000000000000000000000001B00000000000000030000002400000000000000020000000C000000030000001100000004000000F400000030000000010000001001EA6429BCE282CCF3F0E3CD93B216EB410000110000001001061EB73ABB642532857A4F1D9CBAC3230000F30000001C000000002E5C7064625F6C696E65735F312E63002E5C666F6F2E6800000000 Subsections: - !Symbols Records: @@ -46,15 +46,15 @@ sections: Compile3Sym: Flags: [ ] Machine: X64 - FrontendMajor: 7 + FrontendMajor: 11 FrontendMinor: 0 FrontendBuild: 0 FrontendQFE: 0 - BackendMajor: 7000 + BackendMajor: 11000 BackendMinor: 0 BackendBuild: 0 BackendQFE: 0 - Version: 'clang version 7.0.0 ' + Version: 'clang version 11.0.0 (https://github.com/llvm/llvm-project.git 77dad72eae974338ddc13d74783c012ccbb8c5ac)' - !Symbols Records: - Kind: S_GPROC32_ID @@ -65,8 +65,17 @@ sections: 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: [ ] @@ -87,15 +96,15 @@ sections: LineStart: 4 IsStatement: false EndDelta: 0 - Columns: + Columns: [] - !FileChecksums Checksums: - FileName: '.\pdb_lines_1.c' Kind: MD5 - Checksum: EA6429BCE282CCF3F0E3CD93B216EB41 + Checksum: 9A64DD4298487888B1D99F825D520C5E - FileName: '.\foo.h' Kind: MD5 - Checksum: 061EB73ABB642532857A4F1D9CBAC323 + Checksum: A9D05E6DC184DE20A57797E24F8B0E97 - !StringTable Strings: - '.\pdb_lines_1.c' @@ -103,23 +112,27 @@ sections: - '' - '' - '' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 4105 Relocations: - - VirtualAddress: 100 + - VirtualAddress: 184 SymbolName: main Type: IMAGE_REL_AMD64_SECREL - - VirtualAddress: 104 + - VirtualAddress: 188 SymbolName: main Type: IMAGE_REL_AMD64_SECTION - - VirtualAddress: 124 + - VirtualAddress: 240 SymbolName: main Type: IMAGE_REL_AMD64_SECREL - - VirtualAddress: 128 + - VirtualAddress: 244 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: @@ -148,6 +161,25 @@ sections: 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 @@ -160,8 +192,12 @@ sections: SymbolName: main Type: IMAGE_REL_AMD64_ADDR32NB - VirtualAddress: 8 - SymbolName: .xdata + SymbolTableIndex: 6 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 @@ -169,7 +205,6 @@ sections: - 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: @@ -181,8 +216,17 @@ sections: 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: [ ] @@ -203,7 +247,7 @@ sections: LineStart: 4 IsStatement: false EndDelta: 0 - Columns: + Columns: [] Relocations: - VirtualAddress: 44 SymbolName: foo @@ -211,10 +255,10 @@ sections: - VirtualAddress: 48 SymbolName: foo Type: IMAGE_REL_AMD64_SECTION - - VirtualAddress: 68 + - VirtualAddress: 100 SymbolName: foo Type: IMAGE_REL_AMD64_SECREL - - VirtualAddress: 72 + - VirtualAddress: 104 SymbolName: foo Type: IMAGE_REL_AMD64_SECTION - Name: .pdata @@ -229,7 +273,7 @@ sections: SymbolName: foo Type: IMAGE_REL_AMD64_ADDR32NB - VirtualAddress: 8 - SymbolName: .xdata + SymbolTableIndex: 11 Type: IMAGE_REL_AMD64_ADDR32NB symbols: - Name: .text @@ -301,7 +345,7 @@ symbols: StorageClass: IMAGE_SYM_CLASS_EXTERNAL - Name: .xdata Value: 0 - SectionNumber: 10 + SectionNumber: 11 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC @@ -331,22 +375,22 @@ symbols: ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: - Length: 264 + Length: 396 NumberOfRelocations: 4 NumberOfLinenumbers: 0 - CheckSum: 2204933783 + CheckSum: 3390249978 Number: 7 - Name: '.debug$S' Value: 0 - SectionNumber: 11 + SectionNumber: 12 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: - Length: 116 + Length: 148 NumberOfRelocations: 4 NumberOfLinenumbers: 0 - CheckSum: 2691661839 + CheckSum: 1236081121 Number: 5 Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE - Name: '.debug$T' @@ -356,10 +400,10 @@ symbols: ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: - Length: 80 + Length: 2028 NumberOfRelocations: 0 NumberOfLinenumbers: 0 - CheckSum: 3541780432 + CheckSum: 2043733667 Number: 8 - Name: .pdata Value: 0 @@ -375,7 +419,7 @@ symbols: Number: 9 - Name: .pdata Value: 0 - SectionNumber: 12 + SectionNumber: 13 SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC @@ -386,6 +430,24 @@ symbols: 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 @@ -398,4 +460,11 @@ symbols: 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 ... diff --git a/lld/test/COFF/Inputs/pdb_lines_2_relative.yaml b/lld/test/COFF/Inputs/pdb_lines_2_relative.yaml index 1b051d82d9a46..71ce5d63f5087 100644 --- a/lld/test/COFF/Inputs/pdb_lines_2_relative.yaml +++ b/lld/test/COFF/Inputs/pdb_lines_2_relative.yaml @@ -15,6 +15,7 @@ sections: 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 @@ -22,7 +23,6 @@ sections: - Name: '.debug$S' Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] Alignment: 4 - SectionData: 04000000F10000002F0000002D003C1100000000D0000700000000000000581B000000000000636C616E672076657273696F6E20372E302E30200000F10000002F0000002900471100000000000000000000000001000000000000000000000002100000000000000000006261720002004F1100F2000000200000000000000000000000010000000000000001000000140000000000000002000000F400000018000000010000001001DF91CB3A2B8D917486574BB50CAC4CC70000F300000014000000002E5C7064625F6C696E65735F322E6300000000 Subsections: - !Symbols Records: @@ -30,15 +30,15 @@ sections: Compile3Sym: Flags: [ ] Machine: X64 - FrontendMajor: 7 + FrontendMajor: 11 FrontendMinor: 0 FrontendBuild: 0 FrontendQFE: 0 - BackendMajor: 7000 + BackendMajor: 11000 BackendMinor: 0 BackendBuild: 0 BackendQFE: 0 - Version: 'clang version 7.0.0 ' + Version: 'clang version 11.0.0 (https://github.com/llvm/llvm-project.git 77dad72eae974338ddc13d74783c012ccbb8c5ac)' - !Symbols Records: - Kind: S_GPROC32_ID @@ -49,8 +49,17 @@ sections: 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: [ ] @@ -63,35 +72,39 @@ sections: LineStart: 2 IsStatement: false EndDelta: 0 - Columns: + Columns: [] - !FileChecksums Checksums: - FileName: '.\pdb_lines_2.c' Kind: MD5 - Checksum: DF91CB3A2B8D917486574BB50CAC4CC7 + Checksum: 4CC58B73BFD5AB52F87CFB3C604BB288 - !StringTable Strings: - '.\pdb_lines_2.c' - '' - '' - '' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 4103 Relocations: - - VirtualAddress: 100 + - VirtualAddress: 184 SymbolName: bar Type: IMAGE_REL_AMD64_SECREL - - VirtualAddress: 104 + - VirtualAddress: 188 SymbolName: bar Type: IMAGE_REL_AMD64_SECTION - - VirtualAddress: 124 + - VirtualAddress: 240 SymbolName: bar Type: IMAGE_REL_AMD64_SECREL - - VirtualAddress: 128 + - VirtualAddress: 244 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: @@ -108,6 +121,29 @@ sections: 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 @@ -164,10 +200,10 @@ symbols: ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: - Length: 216 + Length: 348 NumberOfRelocations: 4 NumberOfLinenumbers: 0 - CheckSum: 2383431754 + CheckSum: 2408981505 Number: 5 - Name: '.debug$T' Value: 0 @@ -176,15 +212,40 @@ symbols: ComplexType: IMAGE_SYM_DTYPE_NULL StorageClass: IMAGE_SYM_CLASS_STATIC SectionDefinition: - Length: 44 + Length: 1992 NumberOfRelocations: 0 NumberOfLinenumbers: 0 - CheckSum: 179171995 + CheckSum: 1158086003 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 ... diff --git a/lld/test/COFF/pdb-relative-source-lines.test b/lld/test/COFF/pdb-relative-source-lines.test index b72c5036a9159..abf86cdf66996 100644 --- a/lld/test/COFF/pdb-relative-source-lines.test +++ b/lld/test/COFF/pdb-relative-source-lines.test @@ -15,7 +15,9 @@ int main(void) { void bar(void) { } -$ clang-cl -Xclang -fdebug-compilation-dir -Xclang . -c -Z7 pdb_lines*.c +$ 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 /pdbsourcepath: only sets the directory that relative paths are considered relative to, so this test needs to pass relative paths to lld-link for: @@ -33,9 +35,9 @@ 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: llvm-pdbutil pdb2yaml -ipi-stream -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 +RUN: llvm-pdbutil pdb2yaml -ipi-stream -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 @@ -77,6 +79,20 @@ 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' +CHECK-LABEL: IpiStream: + +CHECK: - Kind: LF_STRING_ID +CHECK-NEXT: StringId: +CHECK-NEXT: Id: 0 +CHECK-NEXT: String: . +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: 'buildninjaRel\bin\clang-cl.exe' POSIX-LABEL: - Module: '/usr/src/pdb_lines_1_relative.obj' POSIX-NEXT: ObjFile: '/usr/src/pdb_lines_1_relative.obj' @@ -113,3 +129,17 @@ POSIX-NEXT: - '-debug -pdbsourcepath:/usr/src -entry:main -nodefaultlib ABSOLUTE-LABEL: StringTable: ABSOLUTE-NOT: {{/|\\}}.{{/|\\}}pdb_lines_1.c + +POSIX-LABEL: IpiStream: +POSIX: - Kind: LF_STRING_ID +POSIX-NEXT: StringId: +POSIX-NEXT: Id: 0 +POSIX-NEXT: String: . +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: 'buildninjaRel\bin\clang-cl.exe' diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index bb795a87f76ed..9a8188e5cb468 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -68,6 +68,7 @@ #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" @@ -889,6 +890,34 @@ static TypeIndex getStringIdTypeIdx(GlobalTypeTableBuilder &TypeTable, return TypeTable.writeLeafType(SIR); } +static std::string flattenCommandLine(ArrayRef<std::string> Args, + StringRef MainFilename) { + std::string FlatCmdLine; + raw_string_ostream OS(FlatCmdLine); + bool PrintedOneArg = false; + if (!StringRef(Args[0]).contains("-cc1")) { + llvm::sys::printArg(OS, "-cc1", /*Quote=*/true); + PrintedOneArg = true; + } + for (unsigned i = 0; i < Args.size(); i++) { + StringRef Arg = Args[i]; + if (Arg.empty()) + continue; + if (Arg == "-main-file-name" || Arg == "-o") { + i++; // Skip this argument and next one. + continue; + } + if (Arg.startswith("-object-file-name") || Arg == MainFilename) + continue; + if (PrintedOneArg) + OS << " "; + llvm::sys::printArg(OS, Arg, /*Quote=*/true); + PrintedOneArg = true; + } + 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: @@ -909,8 +938,16 @@ void CodeViewDebug::emitBuildInfo() { getStringIdTypeIdx(TypeTable, MainSourceFile->getDirectory()); BuildInfoArgs[BuildInfoRecord::SourceFile] = getStringIdTypeIdx(TypeTable, MainSourceFile->getFilename()); - // FIXME: Path to compiler and command line. PDB is intentionally blank unless - // we implement /Zi type servers. + // 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())); + } BuildInfoRecord BIR(BuildInfoArgs); TypeIndex BuildInfoIndex = TypeTable.writeLeafType(BIR); diff --git a/llvm/test/DebugInfo/COFF/build-info.ll b/llvm/test/DebugInfo/COFF/build-info.ll index 94f006c3b0935..983aa22214bce 100644 --- a/llvm/test/DebugInfo/COFF/build-info.ll +++ b/llvm/test/DebugInfo/COFF/build-info.ll @@ -5,7 +5,7 @@ ; CHECK-NEXT: 0x{{.*}}: `D:\src\scopes\clang` ; CHECK-NEXT: <no type>: `` ; CHECK-NEXT: 0x{{.*}}: `D:\src\scopes\foo.cpp` -; CHECK-NEXT: <no type>: `` +; CHECK-NEXT: 0x{{.*}}: `` ; CHECK-NEXT: <no type>: `` ; CHECK: {{.*}} | S_BUILDINFO [size = 8] BuildId = `[[INFO_IDX]]` diff --git a/llvm/test/DebugInfo/COFF/global-type-hashes.ll b/llvm/test/DebugInfo/COFF/global-type-hashes.ll index 70f9df156a5be..3c6c27301b20a 100644 --- a/llvm/test/DebugInfo/COFF/global-type-hashes.ll +++ b/llvm/test/DebugInfo/COFF/global-type-hashes.ll @@ -295,7 +295,8 @@ attributes #2 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-ma ; YAML: - 4470750F2E319329 ; YAML: - 0FB556FD1FAB66D7 ; YAML: - 5970EFB4874D0F3F -; YAML: - EDB1D74C120CF44A +; YAML: - D8EF11198C33843F +; YAML: - D81F744D7366282B ; ... diff --git a/llvm/test/DebugInfo/COFF/types-basic.ll b/llvm/test/DebugInfo/COFF/types-basic.ll index 65a1b020e65ab..b33e8d338e574 100644 --- a/llvm/test/DebugInfo/COFF/types-basic.ll +++ b/llvm/test/DebugInfo/COFF/types-basic.ll @@ -511,14 +511,22 @@ ; ASM: .asciz "t.cpp" # StringData ; ASM: .byte 242 ; ASM: .byte 241 -; ASM: # BuildInfo (0x1015) +; 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: .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 0x0 # Argument +; ASM: .long 0x1015 # Argument ; ASM: .long 0x0 # Argument ; ASM: .byte 242 ; ASM: .byte 241 diff --git a/llvm/test/DebugInfo/COFF/types-data-members.ll b/llvm/test/DebugInfo/COFF/types-data-members.ll index 87fde74b989c4..1e699efdf8ed3 100644 --- a/llvm/test/DebugInfo/COFF/types-data-members.ll +++ b/llvm/test/DebugInfo/COFF/types-data-members.ll @@ -727,14 +727,22 @@ ; ASM: .asciz "t.cpp" # StringData ; ASM: .byte 242 ; ASM: .byte 241 -; ASM: # BuildInfo (0x1022) +; 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: .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 0x0 # Argument +; ASM: .long 0x1022 # Argument ; ASM: .long 0x0 # Argument ; ASM: .byte 242 ; ASM: .byte 241 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits