[clang] aba5b91 - Re-land [CodeView] Add full repro to LF_BUILDINFO record
Alexandre Ganea via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 19 16:44:48 PST 2022
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
More information about the cfe-commits
mailing list