From da504b794cf3154ec9b3f0fb728f1b3880a8bb77 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Thu, 15 Jun 2017 20:55:51 +0000 Subject: [PATCH] Revert "[llvm-pdbutil] rewrite the "raw" output style." This reverts commit 83ea17ebf2106859a51fbc2a86031b44d33696ad. This is failing due to some strange template problems, so reverting until it can be straightened out. llvm-svn: 305505 --- lld/test/COFF/pdb-lib.s | 53 +- lld/test/COFF/pdb.test | 411 +- .../llvm/DebugInfo/CodeView/CodeView.h | 5 - .../llvm/DebugInfo/CodeView/Formatters.h | 17 - .../llvm/DebugInfo/CodeView/SymbolRecord.h | 10 +- .../llvm/DebugInfo/CodeView/TypeIndex.h | 2 - .../DebugInfo/PDB/Native/ModuleDebugStream.h | 4 - .../llvm/DebugInfo/PDB/Native/PublicsStream.h | 1 - .../llvm/DebugInfo/PDB/Native/RawConstants.h | 6 +- .../llvm/DebugInfo/PDB/Native/SymbolStream.h | 4 - llvm/include/llvm/Support/BinaryStreamArray.h | 6 - llvm/include/llvm/Support/FormatProviders.h | 14 - llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp | 8 +- .../CodeView/SymbolRecordMapping.cpp | 4 +- llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp | 71 +- llvm/lib/DebugInfo/CodeView/TypeIndex.cpp | 81 +- .../DebugInfo/PDB/Native/PublicsStream.cpp | 9 - llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp | 10 - llvm/test/DebugInfo/PDB/pdb-yaml-types.test | 74 + .../PDB/pdbdump-debug-subsections.test | 146 +- llvm/test/DebugInfo/PDB/pdbdump-headers.test | 3982 ++++++++++++----- .../PDB/pdbdump-merge-ids-and-types.test | 106 +- llvm/test/DebugInfo/PDB/pdbdump-mergeids.test | 43 +- .../DebugInfo/PDB/pdbdump-mergetypes.test | 60 +- .../DebugInfo/PDB/pdbdump-raw-blocks.test | 64 +- .../DebugInfo/PDB/pdbdump-raw-stream.test | 51 +- .../test/DebugInfo/PDB/pdbdump-readwrite.test | 73 +- .../tools/llvm-pdbdump/raw-stream-data.test | 47 + llvm/tools/llvm-pdbutil/CMakeLists.txt | 5 +- llvm/tools/llvm-pdbutil/FormatUtil.cpp | 49 - llvm/tools/llvm-pdbutil/FormatUtil.h | 92 - llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp | 1198 +++++ .../{RawOutputStyle.h => LLVMOutputStyle.h} | 35 +- llvm/tools/llvm-pdbutil/LinePrinter.cpp | 33 +- llvm/tools/llvm-pdbutil/LinePrinter.h | 31 +- .../llvm-pdbutil/MinimalSymbolDumper.cpp | 749 ---- llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h | 47 - llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp | 532 --- llvm/tools/llvm-pdbutil/MinimalTypeDumper.h | 56 - llvm/tools/llvm-pdbutil/RawOutputStyle.cpp | 668 --- llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp | 21 +- llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp | 172 +- llvm/tools/llvm-pdbutil/llvm-pdbutil.h | 45 +- 43 files changed, 5184 insertions(+), 3911 deletions(-) create mode 100644 llvm/test/DebugInfo/PDB/pdb-yaml-types.test create mode 100644 llvm/test/tools/llvm-pdbdump/raw-stream-data.test delete mode 100644 llvm/tools/llvm-pdbutil/FormatUtil.cpp delete mode 100644 llvm/tools/llvm-pdbutil/FormatUtil.h create mode 100644 llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp rename llvm/tools/llvm-pdbutil/{RawOutputStyle.h => LLVMOutputStyle.h} (62%) delete mode 100644 llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp delete mode 100644 llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h delete mode 100644 llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp delete mode 100644 llvm/tools/llvm-pdbutil/MinimalTypeDumper.h delete mode 100644 llvm/tools/llvm-pdbutil/RawOutputStyle.cpp diff --git a/lld/test/COFF/pdb-lib.s b/lld/test/COFF/pdb-lib.s index 073c6f08abf8..42dacddb6361 100644 --- a/lld/test/COFF/pdb-lib.s +++ b/lld/test/COFF/pdb-lib.s @@ -8,17 +8,48 @@ # Make sure that the PDB has module descriptors. foo.obj and bar.lib should be # absolute paths, and bar.obj should be the relative path passed to llvm-lib. -# CHECK: Modules -# CHECK-NEXT: ============================================================ -# CHECK-NEXT: Mod 0000 | Name: `{{.*pdb-lib.s.tmp[/\\]foo.obj}}`: -# CHECK-NEXT: Obj: `{{.*pdb-lib.s.tmp[/\\]foo.obj}}`: -# CHECK-NEXT: debug stream: 9, # files: 0, has ec info: false -# CHECK-NEXT: Mod 0001 | Name: `bar.obj`: -# CHECK-NEXT: Obj: `{{.*pdb-lib.s.tmp[/\\]bar.lib}}`: -# CHECK-NEXT: debug stream: 10, # files: 0, has ec info: false -# CHECK-NEXT: Mod 0002 | Name: `* Linker *`: -# CHECK-NEXT: Obj: ``: -# CHECK-NEXT: debug stream: 11, # files: 0, has ec info: false +# CHECK-LABEL: Modules [ +# CHECK-NEXT: { +# CHECK-NEXT: Name: {{.*pdb-lib.s.tmp[/\\]foo.obj}} +# CHECK-NEXT: Debug Stream Index: +# CHECK-NEXT: Object File Name: {{.*pdb-lib.s.tmp[/\\]foo.obj}} +# CHECK-NEXT: Num Files: 0 +# CHECK-NEXT: Source File Name Idx: 0 +# CHECK-NEXT: Pdb File Name Idx: 0 +# CHECK-NEXT: Line Info Byte Size: 0 +# CHECK-NEXT: C13 Line Info Byte Size: 0 +# CHECK-NEXT: Symbol Byte Size: 4 +# CHECK-NEXT: Type Server Index: 0 +# CHECK-NEXT: Has EC Info: No +# CHECK-NEXT: } +# CHECK-NEXT: { +# CHECK-NEXT: Name: bar.obj +# CHECK-NEXT: Debug Stream Index: +# CHECK-NEXT: Object File Name: {{.*pdb-lib.s.tmp[/\\]bar.lib}} +# CHECK-NEXT: Num Files: 0 +# CHECK-NEXT: Source File Name Idx: 0 +# CHECK-NEXT: Pdb File Name Idx: 0 +# CHECK-NEXT: Line Info Byte Size: 0 +# CHECK-NEXT: C13 Line Info Byte Size: 0 +# CHECK-NEXT: Symbol Byte Size: 4 +# CHECK-NEXT: Type Server Index: 0 +# CHECK-NEXT: Has EC Info: No +# CHECK-NEXT: } +# CHECK-NEXT: { +# CHECK-NEXT: Name: * Linker * +# CHECK-NEXT: Debug Stream Index: +# CHECK-NEXT: Object File Name: +# CHECK-NEXT: Num Files: 0 +# CHECK-NEXT: Source File Name Idx: 0 +# CHECK-NEXT: Pdb File Name Idx: 0 +# CHECK-NEXT: Line Info Byte Size: 0 +# CHECK-NEXT: C13 Line Info Byte Size: 0 +# CHECK-NEXT: Symbol Byte Size: 4 +# CHECK-NEXT: Type Server Index: 0 +# CHECK-NEXT: Has EC Info: No +# CHECK-NEXT: } +# CHECK-NEXT: ] + .def _main; .scl 2; diff --git a/lld/test/COFF/pdb.test b/lld/test/COFF/pdb.test index 31b8cbb00ef1..c5fc1d31f733 100644 --- a/lld/test/COFF/pdb.test +++ b/lld/test/COFF/pdb.test @@ -6,8 +6,8 @@ # RUN: llvm-pdbutil pdb2yaml -stream-metadata -stream-directory -pdb-stream \ # RUN: -dbi-stream -ipi-stream -tpi-stream %t.pdb | FileCheck %s -# RUN: llvm-pdbutil raw -modules -section-map -section-contribs \ -# RUN: -types -ids %t.pdb | FileCheck -check-prefix RAW %s +# RUN: llvm-pdbutil raw -modules -section-map -section-headers -section-contribs \ +# RUN: -tpi-records %t.pdb | FileCheck -check-prefix RAW %s # CHECK: MSF: # CHECK-NEXT: SuperBlock: @@ -19,9 +19,9 @@ # CHECK-NEXT: BlockMapAddr: # CHECK-NEXT: NumDirectoryBlocks: # CHECK-NEXT: DirectoryBlocks: -# CHECK-NEXT: NumStreams: -# CHECK-NEXT: FileSize: -# CHECK-NEXT: StreamSizes: +# CHECK-NEXT: NumStreams: +# CHECK-NEXT: FileSize: +# CHECK-NEXT: StreamSizes: # CHECK-NEXT: StreamMap: # CHECK: PdbStream: # CHECK-NEXT: Age: 1 @@ -115,85 +115,322 @@ # CHECK-NEXT: BuildInfo: # CHECK-NEXT: ArgIndices: [ 4098, 4099, 4106, 4104, 4102 ] -RAW: Modules -RAW-NEXT: ============================================================ -RAW-NEXT: Mod 0000 | Name: `E:\src\llvmbuild\ninja\tools\lld\test\coff\Output\pdb.test.tmp1.obj`: -RAW-NEXT: Obj: `E:\src\llvmbuild\ninja\tools\lld\test\coff\Output\pdb.test.tmp1.obj`: -RAW-NEXT: debug stream: 9, # files: 0, has ec info: false -RAW-NEXT: Mod 0001 | Name: `E:\src\llvmbuild\ninja\tools\lld\test\coff\Output\pdb.test.tmp2.obj`: -RAW-NEXT: Obj: `E:\src\llvmbuild\ninja\tools\lld\test\coff\Output\pdb.test.tmp2.obj`: -RAW-NEXT: debug stream: 10, # files: 0, has ec info: false -RAW-NEXT: Mod 0002 | Name: `* Linker *`: -RAW-NEXT: Obj: ``: -RAW-NEXT: debug stream: 11, # files: 0, has ec info: false -RAW: Types (TPI Stream) -RAW-NEXT: ============================================================ -RAW-NEXT: Showing 5 records -RAW-NEXT: 0x1000 | LF_ARGLIST [size = 8] -RAW-NEXT: 0x1001 | LF_PROCEDURE [size = 16] -RAW-NEXT: return type = 0x0074 (int), # args = 0, param list = 0x1000 -RAW-NEXT: calling conv = cdecl, options = None -RAW-NEXT: 0x1002 | LF_POINTER [size = 12] -RAW-NEXT: referent = 0x1001, mode = pointer, opts = None, kind = ptr64 -RAW-NEXT: 0x1003 | LF_ARGLIST [size = 12] -RAW-NEXT: : `` -RAW-NEXT: 0x1004 | LF_PROCEDURE [size = 16] -RAW-NEXT: return type = 0x0074 (int), # args = 0, param list = 0x1003 -RAW-NEXT: calling conv = cdecl, options = None -RAW: Types (IPI Stream) -RAW-NEXT: ============================================================ -RAW-NEXT: Showing 12 records -RAW-NEXT: 0x1000 | LF_FUNC_ID [size = 20] -RAW-NEXT: name = main, type = 0x1004, parent scope = -RAW-NEXT: 0x1001 | LF_FUNC_ID [size = 16] -RAW-NEXT: name = foo, type = 0x1001, parent scope = -RAW-NEXT: 0x1002 | LF_STRING_ID [size = 16] ID: , String: D:\b -RAW-NEXT: 0x1003 | LF_STRING_ID [size = 36] ID: , String: C:\vs14\VC\BIN\amd64\cl.exe -RAW-NEXT: 0x1004 | LF_STRING_ID [size = 260] ID: , String: -Z7 -c -MT -IC:\vs14\VC\INCLUDE -IC:\vs14\VC\ATLMFC\INCLUDE -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -RAW-NEXT: 0x1005 | LF_SUBSTR_LIST [size = 12] -RAW-NEXT: 0x1004: `-Z7 -c -MT -IC:\vs14\VC\INCLUDE -IC:\vs14\VC\ATLMFC\INCLUDE -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared"` -RAW-NEXT: 0x1006 | LF_STRING_ID [size = 132] ID: 0x1005, String: -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TC -X -RAW-NEXT: 0x1007 | LF_STRING_ID [size = 24] ID: , String: ret42-main.c -RAW-NEXT: 0x1008 | LF_STRING_ID [size = 24] ID: , String: D:\b\vc140.pdb -RAW-NEXT: 0x1009 | LF_BUILDINFO [size = 28] -RAW-NEXT: 0x1002: `D:\b` -RAW-NEXT: 0x1003: `C:\vs14\VC\BIN\amd64\cl.exe` -RAW-NEXT: 0x1007: `ret42-main.c` -RAW-NEXT: 0x1008: `D:\b\vc140.pdb` -RAW-NEXT: 0x1006: ` -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TC -X` -RAW-NEXT: 0x100A | LF_STRING_ID [size = 20] ID: , String: ret42-sub.c -RAW-NEXT: 0x100B | LF_BUILDINFO [size = 28] -RAW-NEXT: 0x1002: `D:\b` -RAW-NEXT: 0x1003: `C:\vs14\VC\BIN\amd64\cl.exe` -RAW-NEXT: 0x100A: `ret42-sub.c` -RAW-NEXT: 0x1008: `D:\b\vc140.pdb` -RAW-NEXT: 0x1006: ` -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TC -X` -RAW: Section Contributions -RAW-NEXT: ============================================================ -RAW-NEXT: SC | mod = 0, 65535:1288, size = 14, data crc = 0, reloc crc = 0 -RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | -RAW-NEXT: IMAGE_SCN_MEM_READ -RAW-NEXT: SC | mod = 0, 65535:1312, size = 8, data crc = 0, reloc crc = 0 -RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -RAW-NEXT: SC | mod = 0, 65535:1320, size = 12, data crc = 0, reloc crc = 0 -RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -RAW-NEXT: SC | mod = 1, 65535:1144, size = 6, data crc = 0, reloc crc = 0 -RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | -RAW-NEXT: IMAGE_SCN_MEM_READ -RAW: Section Map -RAW-NEXT: ============================================================ -RAW-NEXT: Section 0000 | ovl = 0, group = 0, frame = 0, name = 1 -RAW-NEXT: class = 65535, offset = 0, size = 12 -RAW-NEXT: flags = read | 32 bit addr | selector -RAW-NEXT: Section 0001 | ovl = 1, group = 0, frame = 0, name = 2 -RAW-NEXT: class = 65535, offset = 0, size = 22 -RAW-NEXT: flags = read | execute | 32 bit addr | selector -RAW-NEXT: Section 0002 | ovl = 2, group = 0, frame = 0, name = 3 -RAW-NEXT: class = 65535, offset = 0, size = 8 -RAW-NEXT: flags = read | 32 bit addr | selector -RAW-NEXT: Section 0003 | ovl = 3, group = 0, frame = 0, name = 4 -RAW-NEXT: class = 65535, offset = 0, size = 119 -RAW-NEXT: flags = read | 32 bit addr | selector -RAW-NEXT: Section 0004 | ovl = 4, group = 0, frame = 0, name = 5 -RAW-NEXT: class = 65535, offset = 0, size = 4294967295 -RAW-NEXT: flags = 32 bit addr | absolute addr +# RAW: Type Info Stream (TPI) { +# RAW-NEXT: TPI Version: 20040203 +# RAW-NEXT: Record count: 5 +# RAW-NEXT: Records [ +# RAW-NEXT: { +# RAW-NEXT: ArgList (0x1000) { +# RAW-NEXT: TypeLeafKind: LF_ARGLIST (0x1201) +# RAW-NEXT: NumArgs: 0 +# RAW-NEXT: Arguments [ +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Procedure (0x1001) { +# RAW-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +# RAW-NEXT: ReturnType: int (0x74) +# RAW-NEXT: CallingConvention: NearC (0x0) +# RAW-NEXT: FunctionOptions [ (0x0) +# RAW-NEXT: ] +# RAW-NEXT: NumParameters: 0 +# RAW-NEXT: ArgListType: () (0x1000) +# RAW-NEXT: } +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Pointer (0x1002) { +# RAW-NEXT: TypeLeafKind: LF_POINTER (0x1002) +# RAW-NEXT: PointeeType: int () (0x1001) +# RAW-NEXT: PointerAttributes: 0x1000C +# RAW-NEXT: PtrType: Near64 (0xC) +# RAW-NEXT: PtrMode: Pointer (0x0) +# RAW-NEXT: IsFlat: 0 +# RAW-NEXT: IsConst: 0 +# RAW-NEXT: IsVolatile: 0 +# RAW-NEXT: IsUnaligned: 0 +# RAW-NEXT: SizeOf: 8 +# RAW-NEXT: } +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: ArgList (0x1003) { +# RAW-NEXT: TypeLeafKind: LF_ARGLIST (0x1201) +# RAW-NEXT: NumArgs: 1 +# RAW-NEXT: Arguments [ +# RAW-NEXT: ArgType: 0x0 +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Procedure (0x1004) { +# RAW-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +# RAW-NEXT: ReturnType: int (0x74) +# RAW-NEXT: CallingConvention: NearC (0x0) +# RAW-NEXT: FunctionOptions [ (0x0) +# RAW-NEXT: ] +# RAW-NEXT: NumParameters: 0 +# RAW-NEXT: ArgListType: () (0x1003) +# RAW-NEXT: } +# RAW-NEXT: } +# RAW-NEXT: TypeIndexOffsets [ +# RAW-NEXT: Index: 0x1000, Offset: 0 +# RAW-NEXT: ] +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: DBI Stream { +# RAW-NEXT: Dbi Version: 20091201 +# RAW-NEXT: Age: 1 +# RAW-NEXT: Incremental Linking: No +# RAW-NEXT: Has CTypes: No +# RAW-NEXT: Is Stripped: No +# RAW-NEXT: Machine Type: x86 +# RAW-NEXT: Symbol Record Stream Index: 65535 +# RAW-NEXT: Public Symbol Stream Index: 65535 +# RAW-NEXT: Global Symbol Stream Index: 65535 +# RAW-NEXT: Toolchain Version: 0.0 +# RAW-NEXT: mspdb00.dll version: 0.0.0 +# RAW-NEXT: Modules [ +# RAW-NEXT: { +# RAW-NEXT: Name: {{.*}}tmp1.obj +# RAW-NEXT: Debug Stream Index: 9 +# RAW-NEXT: Object File Name: {{.*}}tmp1.obj +# RAW-NEXT: Num Files: 0 +# RAW-NEXT: Source File Name Idx: 0 +# RAW-NEXT: Pdb File Name Idx: 0 +# RAW-NEXT: Line Info Byte Size: 0 +# RAW-NEXT: C13 Line Info Byte Size: 0 +# RAW-NEXT: Symbol Byte Size: 4 +# RAW-NEXT: Type Server Index: 0 +# RAW-NEXT: Has EC Info: No +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Name: {{.*}}tmp2.obj +# RAW-NEXT: Debug Stream Index: 10 +# RAW-NEXT: Object File Name: {{.*}}tmp2.obj +# RAW-NEXT: Num Files: 0 +# RAW-NEXT: Source File Name Idx: 0 +# RAW-NEXT: Pdb File Name Idx: 0 +# RAW-NEXT: Line Info Byte Size: 0 +# RAW-NEXT: C13 Line Info Byte Size: 0 +# RAW-NEXT: Symbol Byte Size: 4 +# RAW-NEXT: Type Server Index: 0 +# RAW-NEXT: Has EC Info: No +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Name: * Linker * +# RAW-NEXT: Debug Stream Index: 11 +# RAW-NEXT: Object File Name: +# RAW-NEXT: Num Files: 0 +# RAW-NEXT: Source File Name Idx: 0 +# RAW-NEXT: Pdb File Name Idx: 0 +# RAW-NEXT: Line Info Byte Size: 0 +# RAW-NEXT: C13 Line Info Byte Size: 0 +# RAW-NEXT: Symbol Byte Size: 4 +# RAW-NEXT: Type Server Index: 0 +# RAW-NEXT: Has EC Info: No +# RAW-NEXT: } +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: Section Contributions [ +# RAW-NEXT: Contribution { +# RAW-NEXT: ISect: 65535 +# RAW-NEXT: Off: 1288 +# RAW-NEXT: Size: 14 +# RAW-NEXT: Characteristics [ (0x60500020) +# RAW-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +# RAW-NEXT: IMAGE_SCN_CNT_CODE (0x20) +# RAW-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: Module { +# RAW-NEXT: Index: 0 +# RAW-NEXT: Name: {{.*}}tmp1.obj +# RAW-NEXT: } +# RAW-NEXT: Data CRC: 0 +# RAW-NEXT: Reloc CRC: 0 +# RAW-NEXT: } +# RAW-NEXT: Contribution { +# RAW-NEXT: ISect: 65535 +# RAW-NEXT: Off: 1312 +# RAW-NEXT: Size: 8 +# RAW-NEXT: Characteristics [ (0x40300040) +# RAW-NEXT: IMAGE_SCN_ALIGN_4BYTES (0x300000) +# RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: Module { +# RAW-NEXT: Index: 0 +# RAW-NEXT: Name: {{.*}}tmp1.obj +# RAW-NEXT: } +# RAW-NEXT: Data CRC: 0 +# RAW-NEXT: Reloc CRC: 0 +# RAW-NEXT: } +# RAW-NEXT: Contribution { +# RAW-NEXT: ISect: 65535 +# RAW-NEXT: Off: 1320 +# RAW-NEXT: Size: 12 +# RAW-NEXT: Characteristics [ (0x40300040) +# RAW-NEXT: IMAGE_SCN_ALIGN_4BYTES (0x300000) +# RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: Module { +# RAW-NEXT: Index: 0 +# RAW-NEXT: Name: {{.*}}tmp1.obj +# RAW-NEXT: } +# RAW-NEXT: Data CRC: 0 +# RAW-NEXT: Reloc CRC: 0 +# RAW-NEXT: } +# RAW-NEXT: Contribution { +# RAW-NEXT: ISect: 65535 +# RAW-NEXT: Off: 1144 +# RAW-NEXT: Size: 6 +# RAW-NEXT: Characteristics [ (0x60500020) +# RAW-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +# RAW-NEXT: IMAGE_SCN_CNT_CODE (0x20) +# RAW-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: Module { +# RAW-NEXT: Index: 1 +# RAW-NEXT: Name: {{.*}}tmp2.obj +# RAW-NEXT: } +# RAW-NEXT: Data CRC: 0 +# RAW-NEXT: Reloc CRC: 0 +# RAW-NEXT: } +# RAW-NEXT: ] +# RAW-NEXT: Section Map [ +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x109) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 1 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 12 +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x10D) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: Execute (0x4) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 2 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 22 +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x109) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 3 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 8 +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x109) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 4 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x208) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsAbsoluteAddress (0x200) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 5 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 4294967295 +# RAW-NEXT: } +# RAW-NEXT: ] +# RAW-NEXT: Section Headers [ +# RAW-NEXT: { +# RAW-NEXT: Name: .pdata +# RAW-NEXT: Virtual Size: 12 +# RAW-NEXT: Virtual Address: 4096 +# RAW-NEXT: Size of Raw Data: 512 +# RAW-NEXT: File Pointer to Raw Data: 1024 +# RAW-NEXT: File Pointer to Relocations: 0 +# RAW-NEXT: File Pointer to Linenumbers: 0 +# RAW-NEXT: Number of Relocations: 0 +# RAW-NEXT: Number of Linenumbers: 0 +# RAW-NEXT: Characteristics [ (0x40000040) +# RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Name: .text +# RAW-NEXT: Virtual Size: 22 +# RAW-NEXT: Virtual Address: 8192 +# RAW-NEXT: Size of Raw Data: 512 +# RAW-NEXT: File Pointer to Raw Data: 1536 +# RAW-NEXT: File Pointer to Relocations: 0 +# RAW-NEXT: File Pointer to Linenumbers: 0 +# RAW-NEXT: Number of Relocations: 0 +# RAW-NEXT: Number of Linenumbers: 0 +# RAW-NEXT: Characteristics [ (0x60000020) +# RAW-NEXT: IMAGE_SCN_CNT_CODE (0x20) +# RAW-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Name: .xdata +# RAW-NEXT: Virtual Size: 8 +# RAW-NEXT: Virtual Address: 12288 +# RAW-NEXT: Size of Raw Data: 512 +# RAW-NEXT: File Pointer to Raw Data: 2048 +# RAW-NEXT: File Pointer to Relocations: 0 +# RAW-NEXT: File Pointer to Linenumbers: 0 +# RAW-NEXT: Number of Relocations: 0 +# RAW-NEXT: Number of Linenumbers: 0 +# RAW-NEXT: Characteristics [ (0x40000040) +# RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: { +# RAW-NEXT: Name: .rdata +# RAW-NEXT: Virtual Size: +# RAW-NEXT: Virtual Address: 16384 +# RAW-NEXT: Size of Raw Data: 512 +# RAW-NEXT: File Pointer to Raw Data: 2560 +# RAW-NEXT: File Pointer to Relocations: 0 +# RAW-NEXT: File Pointer to Linenumbers: 0 +# RAW-NEXT: Number of Relocations: 0 +# RAW-NEXT: Number of Linenumbers: 0 +# RAW-NEXT: Characteristics [ (0x40000040) +# RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +# RAW-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +# RAW-NEXT: ] +# RAW-NEXT: } +# RAW-NEXT: ] diff --git a/llvm/include/llvm/DebugInfo/CodeView/CodeView.h b/llvm/include/llvm/DebugInfo/CodeView/CodeView.h index 6820e26b754c..251c9d1ae62c 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/CodeView.h +++ b/llvm/include/llvm/DebugInfo/CodeView/CodeView.h @@ -418,8 +418,6 @@ CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(ProcSymFlags) /// Corresponds to COMPILESYM2::Flags bitfield. enum class CompileSym2Flags : uint32_t { - None = 0, - SourceLanguageMask = 0xFF, EC = 1 << 8, NoDbgInfo = 1 << 9, LTCG = 1 << 10, @@ -434,8 +432,6 @@ CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(CompileSym2Flags) /// Corresponds to COMPILESYM3::Flags bitfield. enum class CompileSym3Flags : uint32_t { - None = 0, - SourceLanguageMask = 0xFF, EC = 1 << 8, NoDbgInfo = 1 << 9, LTCG = 1 << 10, @@ -452,7 +448,6 @@ enum class CompileSym3Flags : uint32_t { CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(CompileSym3Flags) enum class ExportFlags : uint16_t { - None = 0, IsConstant = 1 << 0, IsData = 1 << 1, IsPrivate = 1 << 2, diff --git a/llvm/include/llvm/DebugInfo/CodeView/Formatters.h b/llvm/include/llvm/DebugInfo/CodeView/Formatters.h index 1fbb0dd6f9b0..37a91098a8b6 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/Formatters.h +++ b/llvm/include/llvm/DebugInfo/CodeView/Formatters.h @@ -12,10 +12,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" -#include "llvm/DebugInfo/CodeView/TypeIndex.h" #include "llvm/Support/FormatAdapters.h" -#include "llvm/Support/FormatProviders.h" -#include "llvm/Support/FormatVariadic.h" namespace llvm { namespace codeview { @@ -38,20 +35,6 @@ inline detail::GuidAdapter fmt_guid(ArrayRef Item) { return detail::GuidAdapter(Item); } } - -template <> struct format_provider { -public: - static void format(const codeview::TypeIndex &V, llvm::raw_ostream &Stream, - StringRef Style) { - if (V.isNoneType()) - Stream << ""; - else { - Stream << formatv("{0:X+4}", V.getIndex()); - if (V.isSimple()) - Stream << " (" << codeview::TypeIndex::simpleTypeName(V) << ")"; - } - } -}; } #endif diff --git a/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h b/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h index 5f85ed28cb3a..a3e4dff647bd 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h +++ b/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h @@ -363,7 +363,7 @@ public: : SymbolRecord(SymbolRecordKind::PublicSym32), RecordOffset(RecordOffset) {} - TypeIndex Index; + uint32_t Index; uint32_t Offset; uint16_t Segment; StringRef Name; @@ -379,7 +379,7 @@ public: : SymbolRecord(SymbolRecordKind::RegisterSym), RecordOffset(RecordOffset) {} - TypeIndex Index; + uint32_t Index; RegisterId Register; StringRef Name; @@ -679,7 +679,7 @@ public: : SymbolRecord(SymbolRecordKind::FileStaticSym), RecordOffset(RecordOffset) {} - TypeIndex Index; + uint32_t Index; uint32_t ModFilenameOffset; LocalSymFlags Flags; StringRef Name; @@ -814,7 +814,7 @@ public: uint32_t CodeOffset; uint16_t Register; - FrameCookieKind CookieKind; + uint8_t CookieKind; uint8_t Flags; uint32_t RecordOffset; @@ -871,7 +871,7 @@ public: uint32_t Offset; TypeIndex Type; - RegisterId Register; + uint16_t Register; StringRef Name; uint32_t RecordOffset; diff --git a/llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h b/llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h index 10d51c2d6244..31eed7d3e877 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h +++ b/llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h @@ -248,8 +248,6 @@ public: return A.toArrayIndex() - B.toArrayIndex(); } - static StringRef simpleTypeName(TypeIndex TI); - private: support::ulittle32_t Index; }; diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h b/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h index 8e2e29ab3bac..a8121978d882 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h @@ -40,10 +40,6 @@ public: iterator_range symbols(bool *HadError) const; - const codeview::CVSymbolArray &getSymbolArray() const { - return SymbolsSubstream; - } - llvm::iterator_range subsections() const; bool hasDebugSubsections() const; diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h b/llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h index 4570c80c76d7..4a541edd6a7b 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h @@ -35,7 +35,6 @@ public: uint32_t getSymHash() const; uint32_t getAddrMap() const; uint32_t getNumBuckets() const { return NumBuckets; } - Expected getSymbolArray() const; iterator_range getSymbols(bool *HadError) const; FixedStreamArray getHashBuckets() const { diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h b/llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h index bb1d097b5123..e1bd86b2870b 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h @@ -98,19 +98,15 @@ enum class DbgHeaderType : uint16_t { }; enum class OMFSegDescFlags : uint16_t { - None = 0, Read = 1 << 0, // Segment is readable. Write = 1 << 1, // Segment is writable. Execute = 1 << 2, // Segment is executable. AddressIs32Bit = 1 << 3, // Descriptor describes a 32-bit linear address. IsSelector = 1 << 8, // Frame represents a selector. IsAbsoluteAddress = 1 << 9, // Frame represents an absolute address. - IsGroup = 1 << 10, // If set, descriptor represents a group. - LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ IsGroup) + IsGroup = 1 << 10 // If set, descriptor represents a group. }; -LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); - } // end namespace pdb } // end namespace llvm diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h b/llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h index 17695f587849..41d5e6ad64a0 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h @@ -27,10 +27,6 @@ public: ~SymbolStream(); Error reload(); - const codeview::CVSymbolArray &getSymbolArray() const { - return SymbolRecords; - } - iterator_range getSymbols(bool *HadError) const; diff --git a/llvm/include/llvm/Support/BinaryStreamArray.h b/llvm/include/llvm/Support/BinaryStreamArray.h index 3f5562ba7519..65ec15f6d9e0 100644 --- a/llvm/include/llvm/Support/BinaryStreamArray.h +++ b/llvm/include/llvm/Support/BinaryStreamArray.h @@ -290,12 +290,6 @@ public: return FixedStreamArrayIterator(*this, size()); } - const T &front() const { return *begin(); } - const T &back() const { - FixedStreamArrayIterator I = end(); - return *(--I); - } - BinaryStreamRef getUnderlyingStream() const { return Stream; } private: diff --git a/llvm/include/llvm/Support/FormatProviders.h b/llvm/include/llvm/Support/FormatProviders.h index e90105c617cb..4e57034ff98e 100644 --- a/llvm/include/llvm/Support/FormatProviders.h +++ b/llvm/include/llvm/Support/FormatProviders.h @@ -19,7 +19,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/Twine.h" -#include "llvm/Support/Endian.h" #include "llvm/Support/FormatVariadicDetails.h" #include "llvm/Support/NativeFormatting.h" @@ -151,19 +150,6 @@ public: } }; -template -struct format_provider< - support::detail::packed_endian_specific_integral> { - using Type = - support::detail::packed_endian_specific_integral; - -public: - static void format(const Type &V, llvm::raw_ostream &Stream, - StringRef Style) { - format_provider::format(static_cast(V), Stream, Style); - } -}; - /// Implementation of format_provider for integral pointer types. /// /// The options string of a pointer type has the grammar: diff --git a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp index 36abafc079ed..66045933ce9b 100644 --- a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp +++ b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp @@ -212,7 +212,7 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FileStatic) { DictScope S(W, "FileStatic"); - printTypeIndex("Index", FileStatic.Index); + W.printNumber("Index", FileStatic.Index); W.printNumber("ModFilenameOffset", FileStatic.ModFilenameOffset); W.printFlags("Flags", uint16_t(FileStatic.Flags), getLocalFlagNames()); W.printString("Name", FileStatic.Name); @@ -516,7 +516,7 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, RegisterSym &Register) { DictScope S(W, "RegisterSym"); - printTypeIndex("Type", Register.Index); + W.printNumber("Type", Register.Index); W.printEnum("Seg", uint16_t(Register.Register), getRegisterNames()); W.printString("Name", Register.Name); return Error::success(); @@ -524,7 +524,7 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, PublicSym32 &Public) { DictScope S(W, "PublicSym"); - printTypeIndex("Type", Public.Index); + W.printNumber("Type", Public.Index); W.printNumber("Seg", Public.Segment); W.printNumber("Off", Public.Offset); W.printString("Name", Public.Name); @@ -631,7 +631,7 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, W.printHex("Offset", RegRel.Offset); printTypeIndex("Type", RegRel.Type); - W.printEnum("Register", uint16_t(RegRel.Register), getRegisterNames()); + W.printHex("Register", RegRel.Register); W.printString("VarName", RegRel.Name); return Error::success(); } diff --git a/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp index d731dc1b0a37..ea46841a70f6 100644 --- a/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp +++ b/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp @@ -307,7 +307,7 @@ Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, error(IO.mapInteger(FrameCookie.CodeOffset)); error(IO.mapInteger(FrameCookie.Register)); - error(IO.mapEnum(FrameCookie.CookieKind)); + error(IO.mapInteger(FrameCookie.CookieKind)); error(IO.mapInteger(FrameCookie.Flags)); return Error::success(); @@ -439,7 +439,7 @@ Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR, error(IO.mapInteger(RegRel.Offset)); error(IO.mapInteger(RegRel.Type)); - error(IO.mapEnum(RegRel.Register)); + error(IO.mapInteger(RegRel.Register)); error(IO.mapStringZ(RegRel.Name)); return Error::success(); diff --git a/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp b/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp index 08f848b36a9d..af05d2dc294b 100644 --- a/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp +++ b/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp @@ -12,6 +12,59 @@ using namespace llvm; using namespace llvm::codeview; +namespace { +struct SimpleTypeEntry { + StringRef Name; + SimpleTypeKind Kind; +}; +} + +/// The names here all end in "*". If the simple type is a pointer type, we +/// return the whole name. Otherwise we lop off the last character in our +/// StringRef. +static const SimpleTypeEntry SimpleTypeNames[] = { + {"void*", SimpleTypeKind::Void}, + {"*", SimpleTypeKind::NotTranslated}, + {"HRESULT*", SimpleTypeKind::HResult}, + {"signed char*", SimpleTypeKind::SignedCharacter}, + {"unsigned char*", SimpleTypeKind::UnsignedCharacter}, + {"char*", SimpleTypeKind::NarrowCharacter}, + {"wchar_t*", SimpleTypeKind::WideCharacter}, + {"char16_t*", SimpleTypeKind::Character16}, + {"char32_t*", SimpleTypeKind::Character32}, + {"__int8*", SimpleTypeKind::SByte}, + {"unsigned __int8*", SimpleTypeKind::Byte}, + {"short*", SimpleTypeKind::Int16Short}, + {"unsigned short*", SimpleTypeKind::UInt16Short}, + {"__int16*", SimpleTypeKind::Int16}, + {"unsigned __int16*", SimpleTypeKind::UInt16}, + {"long*", SimpleTypeKind::Int32Long}, + {"unsigned long*", SimpleTypeKind::UInt32Long}, + {"int*", SimpleTypeKind::Int32}, + {"unsigned*", SimpleTypeKind::UInt32}, + {"__int64*", SimpleTypeKind::Int64Quad}, + {"unsigned __int64*", SimpleTypeKind::UInt64Quad}, + {"__int64*", SimpleTypeKind::Int64}, + {"unsigned __int64*", SimpleTypeKind::UInt64}, + {"__int128*", SimpleTypeKind::Int128}, + {"unsigned __int128*", SimpleTypeKind::UInt128}, + {"__half*", SimpleTypeKind::Float16}, + {"float*", SimpleTypeKind::Float32}, + {"float*", SimpleTypeKind::Float32PartialPrecision}, + {"__float48*", SimpleTypeKind::Float48}, + {"double*", SimpleTypeKind::Float64}, + {"long double*", SimpleTypeKind::Float80}, + {"__float128*", SimpleTypeKind::Float128}, + {"_Complex float*", SimpleTypeKind::Complex32}, + {"_Complex double*", SimpleTypeKind::Complex64}, + {"_Complex long double*", SimpleTypeKind::Complex80}, + {"_Complex __float128*", SimpleTypeKind::Complex128}, + {"bool*", SimpleTypeKind::Boolean8}, + {"__bool16*", SimpleTypeKind::Boolean16}, + {"__bool32*", SimpleTypeKind::Boolean32}, + {"__bool64*", SimpleTypeKind::Boolean64}, +}; + TypeDatabase::TypeDatabase(uint32_t Capacity) : TypeNameStorage(Allocator) { CVUDTNames.resize(Capacity); TypeRecords.resize(Capacity); @@ -50,8 +103,22 @@ StringRef TypeDatabase::saveTypeName(StringRef TypeName) { } StringRef TypeDatabase::getTypeName(TypeIndex Index) const { - if (Index.isNoneType() || Index.isSimple()) - return TypeIndex::simpleTypeName(Index); + if (Index.isNoneType()) + return ""; + + if (Index.isSimple()) { + // This is a simple type. + for (const auto &SimpleTypeName : SimpleTypeNames) { + if (SimpleTypeName.Kind == Index.getSimpleKind()) { + if (Index.getSimpleMode() == SimpleTypeMode::Direct) + return SimpleTypeName.Name.drop_back(1); + // Otherwise, this is a pointer type. We gloss over the distinction + // between near, far, 64, 32, etc, and just give a pointer type. + return SimpleTypeName.Name; + } + } + return ""; + } if (contains(Index)) return CVUDTNames[Index.toArrayIndex()]; diff --git a/llvm/lib/DebugInfo/CodeView/TypeIndex.cpp b/llvm/lib/DebugInfo/CodeView/TypeIndex.cpp index 24fe5fcb28d4..20ba6470cd5b 100644 --- a/llvm/lib/DebugInfo/CodeView/TypeIndex.cpp +++ b/llvm/lib/DebugInfo/CodeView/TypeIndex.cpp @@ -15,88 +15,11 @@ using namespace llvm; using namespace llvm::codeview; -namespace { -struct SimpleTypeEntry { - StringRef Name; - SimpleTypeKind Kind; -}; - -/// The names here all end in "*". If the simple type is a pointer type, we -/// return the whole name. Otherwise we lop off the last character in our -/// StringRef. -static const SimpleTypeEntry SimpleTypeNames[] = { - {"void*", SimpleTypeKind::Void}, - {"*", SimpleTypeKind::NotTranslated}, - {"HRESULT*", SimpleTypeKind::HResult}, - {"signed char*", SimpleTypeKind::SignedCharacter}, - {"unsigned char*", SimpleTypeKind::UnsignedCharacter}, - {"char*", SimpleTypeKind::NarrowCharacter}, - {"wchar_t*", SimpleTypeKind::WideCharacter}, - {"char16_t*", SimpleTypeKind::Character16}, - {"char32_t*", SimpleTypeKind::Character32}, - {"__int8*", SimpleTypeKind::SByte}, - {"unsigned __int8*", SimpleTypeKind::Byte}, - {"short*", SimpleTypeKind::Int16Short}, - {"unsigned short*", SimpleTypeKind::UInt16Short}, - {"__int16*", SimpleTypeKind::Int16}, - {"unsigned __int16*", SimpleTypeKind::UInt16}, - {"long*", SimpleTypeKind::Int32Long}, - {"unsigned long*", SimpleTypeKind::UInt32Long}, - {"int*", SimpleTypeKind::Int32}, - {"unsigned*", SimpleTypeKind::UInt32}, - {"__int64*", SimpleTypeKind::Int64Quad}, - {"unsigned __int64*", SimpleTypeKind::UInt64Quad}, - {"__int64*", SimpleTypeKind::Int64}, - {"unsigned __int64*", SimpleTypeKind::UInt64}, - {"__int128*", SimpleTypeKind::Int128}, - {"unsigned __int128*", SimpleTypeKind::UInt128}, - {"__half*", SimpleTypeKind::Float16}, - {"float*", SimpleTypeKind::Float32}, - {"float*", SimpleTypeKind::Float32PartialPrecision}, - {"__float48*", SimpleTypeKind::Float48}, - {"double*", SimpleTypeKind::Float64}, - {"long double*", SimpleTypeKind::Float80}, - {"__float128*", SimpleTypeKind::Float128}, - {"_Complex float*", SimpleTypeKind::Complex32}, - {"_Complex double*", SimpleTypeKind::Complex64}, - {"_Complex long double*", SimpleTypeKind::Complex80}, - {"_Complex __float128*", SimpleTypeKind::Complex128}, - {"bool*", SimpleTypeKind::Boolean8}, - {"__bool16*", SimpleTypeKind::Boolean16}, - {"__bool32*", SimpleTypeKind::Boolean32}, - {"__bool64*", SimpleTypeKind::Boolean64}, -}; -} // namespace - -StringRef TypeIndex::simpleTypeName(TypeIndex TI) { - assert(TI.isNoneType() || TI.isSimple()); - - if (TI.isNoneType()) - return ""; - - // This is a simple type. - for (const auto &SimpleTypeName : SimpleTypeNames) { - if (SimpleTypeName.Kind == TI.getSimpleKind()) { - if (TI.getSimpleMode() == SimpleTypeMode::Direct) - return SimpleTypeName.Name.drop_back(1); - // Otherwise, this is a pointer type. We gloss over the distinction - // between near, far, 64, 32, etc, and just give a pointer type. - return SimpleTypeName.Name; - } - } - return ""; -} - void llvm::codeview::printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types) { StringRef TypeName; - if (!TI.isNoneType()) { - if (TI.isSimple()) - TypeName = TypeIndex::simpleTypeName(TI); - else - TypeName = Types.getTypeName(TI); - } - + if (!TI.isNoneType()) + TypeName = Types.getTypeName(TI); if (!TypeName.empty()) Printer.printHex(FieldName, TypeName, TI.getIndex()); else diff --git a/llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp b/llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp index 8f3474b9ce19..091ac67035dc 100644 --- a/llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp @@ -130,13 +130,4 @@ PublicsStream::getSymbols(bool *HadError) const { return SS.getSymbols(HadError); } -Expected -PublicsStream::getSymbolArray() const { - auto SymbolS = Pdb.getPDBSymbolStream(); - if (!SymbolS) - return SymbolS.takeError(); - - return SymbolS->getSymbolArray(); -} - Error PublicsStream::commit() { return Error::success(); } diff --git a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp index ba3a2abe2097..21e0229a7f8b 100644 --- a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp +++ b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp @@ -35,7 +35,6 @@ LLVM_YAML_DECLARE_SCALAR_TRAITS(APSInt, false) LLVM_YAML_DECLARE_SCALAR_TRAITS(TypeIndex, false) LLVM_YAML_DECLARE_ENUM_TRAITS(SymbolKind) -LLVM_YAML_DECLARE_ENUM_TRAITS(FrameCookieKind) LLVM_YAML_DECLARE_BITSET_TRAITS(CompileSym2Flags) LLVM_YAML_DECLARE_BITSET_TRAITS(CompileSym3Flags) @@ -150,15 +149,6 @@ void ScalarEnumerationTraits::enumeration(IO &io, } } -void ScalarEnumerationTraits::enumeration( - IO &io, FrameCookieKind &FC) { - auto ThunkNames = getFrameCookieKindNames(); - for (const auto &E : ThunkNames) { - io.enumCase(FC, E.Name.str().c_str(), - static_cast(E.Value)); - } -} - namespace llvm { namespace CodeViewYAML { namespace detail { diff --git a/llvm/test/DebugInfo/PDB/pdb-yaml-types.test b/llvm/test/DebugInfo/PDB/pdb-yaml-types.test new file mode 100644 index 000000000000..f65d9edaa549 --- /dev/null +++ b/llvm/test/DebugInfo/PDB/pdb-yaml-types.test @@ -0,0 +1,74 @@ +RUN: llvm-pdbutil pdb2yaml -tpi-stream %p/Inputs/big-read.pdb > %t.yaml +RUN: FileCheck -check-prefix=YAML %s < %t.yaml +RUN: llvm-pdbutil yaml2pdb %t.yaml -pdb %t.pdb +RUN: llvm-pdbutil raw -tpi-records %t.pdb | FileCheck %s --check-prefix=PDB + +Only verify the beginning of the type stream. + +YAML: TpiStream: +YAML-NEXT: Version: VC80 +YAML-NEXT: Records: +YAML-NEXT: - Kind: LF_ARGLIST +YAML-NEXT: ArgList: +YAML-NEXT: ArgIndices: [ ] +YAML-NEXT: - Kind: LF_PROCEDURE +YAML-NEXT: Procedure: +YAML-NEXT: ReturnType: 3 +YAML-NEXT: CallConv: NearC +YAML-NEXT: Options: [ None ] +YAML-NEXT: ParameterCount: 0 +YAML-NEXT: ArgumentList: 4096 +YAML-NEXT: - Kind: LF_PROCEDURE +YAML-NEXT: Procedure: +YAML-NEXT: ReturnType: 116 +YAML-NEXT: CallConv: NearC +YAML-NEXT: Options: [ None ] +YAML-NEXT: ParameterCount: 0 +YAML-NEXT: ArgumentList: 4096 + +This test is mostly checking to make sure we include the type index offset +table, and eventually hash codes. The type index offsets should be similar to +what are already present in big-read.pdb. + +PDB: Type Info Stream (TPI) { +PDB-NEXT: TPI Version: 20040203 +PDB-NEXT: Record count: 728 +PDB-NEXT: Records [ +PDB-NEXT: { +PDB-NEXT: ArgList (0x1000) { +PDB-NEXT: TypeLeafKind: LF_ARGLIST (0x1201) +PDB-NEXT: NumArgs: 0 +PDB-NEXT: Arguments [ +PDB-NEXT: ] +PDB-NEXT: } +PDB-NEXT: } +PDB-NEXT: { +PDB-NEXT: Procedure (0x1001) { +PDB-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +PDB-NEXT: ReturnType: void (0x3) +PDB-NEXT: CallingConvention: NearC (0x0) +PDB-NEXT: FunctionOptions [ (0x0) +PDB-NEXT: ] +PDB-NEXT: NumParameters: 0 +PDB-NEXT: ArgListType: () (0x1000) +PDB-NEXT: } +PDB-NEXT: } +PDB-NEXT: { +PDB-NEXT: Procedure (0x1002) { +PDB-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +PDB-NEXT: ReturnType: int (0x74) +PDB-NEXT: CallingConvention: NearC (0x0) +PDB-NEXT: FunctionOptions [ (0x0) +PDB-NEXT: ] +PDB-NEXT: NumParameters: 0 +PDB-NEXT: ArgListType: () (0x1000) +PDB-NEXT: } +PDB-NEXT: } +... +PDB: TypeIndexOffsets [ +PDB-NEXT: Index: 0x1000, Offset: 0 +PDB-NEXT: Index: 0x106c, Offset: 8,116 +PDB-NEXT: Index: 0x1118, Offset: 16,372 +PDB-NEXT: Index: 0x11df, Offset: 24,564 +PDB-NEXT: Index: 0x128e, Offset: 32,752 +PDB-NEXT: ] diff --git a/llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test b/llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test index 4338f11587ce..52f7bb52da2a 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test @@ -1,5 +1,6 @@ ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.pdb %p/Inputs/debug-subsections.yaml ; RUN: llvm-pdbutil pdb2yaml -all -no-file-headers %t.pdb | FileCheck --check-prefix=YAML %s +; RUN: llvm-pdbutil raw -subsections=all %t.pdb | FileCheck --check-prefix=RAW %s YAML: Modules: YAML-NEXT: - Module: Foo.obj @@ -60,7 +61,150 @@ YAML-NEXT: EndDelta: 0 YAML-NEXT: Columns: YAML-NEXT: - !InlineeLines YAML-NEXT: HasExtraFiles: false -YAML-NEXT: Sites: +YAML-NEXT: Sites: YAML-NEXT: - FileName: 'f:\dd\externalapis\windows\10\sdk\inc\winerror.h' YAML-NEXT: LineNum: 26950 YAML-NEXT: Inlinee: 22767 + + +RAW: DBI Stream { +RAW: Modules [ +RAW-NEXT: { +RAW-NEXT: Name: Foo.obj +RAW: Subsections [ +RAW-NEXT: CrossModuleExports [ +RAW-NEXT: Export { +RAW-NEXT: Local: 0x12F4 +RAW-NEXT: Global: 0x2443 +RAW-NEXT: } +RAW-NEXT: Export { +RAW-NEXT: Local: 0x80001083 +RAW-NEXT: Global: 0x23A3 +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: ] +RAW-NEXT: } +RAW-NEXT: { +RAW-NEXT: Name: Bar.obj +RAW: Subsections [ +RAW-NEXT: CrossModuleExports [ +RAW-NEXT: Export { +RAW-NEXT: Local: 0x10A9 +RAW-NEXT: Global: 0x17D1 +RAW-NEXT: } +RAW-NEXT: Export { +RAW-NEXT: Local: 0x10C9 +RAW-NEXT: Global: 0x1245 +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: CrossModuleImports [ +RAW-NEXT: ModuleImport { +RAW-NEXT: Module: Foo.obj +RAW-NEXT: Imports: [0x12F4, 0x80001083] +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: ] +RAW-NEXT: } +RAW-NEXT: { +RAW-NEXT: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +RAW: Subsections [ +RAW-NEXT: FileChecksums { +RAW-NEXT: Checksum { +RAW-NEXT: FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +RAW-NEXT: Kind: MD5 (0x1) +RAW-NEXT: Checksum ( +RAW-NEXT: 0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC |....>...)...&...| +RAW-NEXT: ) +RAW-NEXT: } +RAW-NEXT: Checksum { +RAW-NEXT: FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h +RAW-NEXT: Kind: MD5 (0x1) +RAW-NEXT: Checksum ( +RAW-NEXT: 0000: 1154D69F 5B265019 6E1FC34F 4134E56B |.T..[&P.n..OA4.k| +RAW-NEXT: ) +RAW-NEXT: } +RAW-NEXT: } +RAW-NEXT: Lines { +RAW-NEXT: RelocSegment: 1 +RAW-NEXT: RelocOffset: 100016 +RAW-NEXT: CodeSize: 10 +RAW-NEXT: HasColumns: No +RAW-NEXT: FileEntry { +RAW-NEXT: FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +RAW-NEXT: Line { +RAW-NEXT: Offset: 0 +RAW-NEXT: LineNumberStart: 5 +RAW-NEXT: EndDelta: 0 +RAW-NEXT: IsStatement: Yes +RAW-NEXT: } +RAW-NEXT: Line { +RAW-NEXT: Offset: 3 +RAW-NEXT: LineNumberStart: 6 +RAW-NEXT: EndDelta: 0 +RAW-NEXT: IsStatement: Yes +RAW-NEXT: } +RAW-NEXT: Line { +RAW-NEXT: Offset: 8 +RAW-NEXT: LineNumberStart: 7 +RAW-NEXT: EndDelta: 0 +RAW-NEXT: IsStatement: Yes +RAW-NEXT: } +RAW-NEXT: } +RAW-NEXT: } +RAW-NEXT: InlineeLines { +RAW-NEXT: HasExtraFiles: No +RAW-NEXT: Lines [ +RAW-NEXT: Inlinee { +RAW-NEXT: FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h +RAW-NEXT: Function { +RAW-NEXT: Index: 0x58ef (unknown function) +RAW-NEXT: } +RAW-NEXT: SourceLine: 26950 +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: } +RAW-NEXT: { +RAW-NEXT: Name: ObjFileSubsections +RAW-NEXT: Debug Stream Index: 11 +RAW-NEXT: Object File Name: ObjFileSubsections +RAW-NEXT: Num Files: 0 +RAW-NEXT: Source File Name Idx: 0 +RAW-NEXT: Pdb File Name Idx: 0 +RAW-NEXT: Line Info Byte Size: 0 +RAW-NEXT: C13 Line Info Byte Size: 116 +RAW-NEXT: Symbol Byte Size: 4 +RAW-NEXT: Type Server Index: 0 +RAW-NEXT: Has EC Info: No +RAW-NEXT: Subsections [ +RAW-NEXT: String Table [ +RAW-NEXT: String1 +RAW-NEXT: String2 +RAW-NEXT: String3 +RAW-NEXT: ] +RAW-NEXT: Symbols [ +RAW-NEXT: { +RAW-NEXT: ObjectName { +RAW-NEXT: Signature: 0x0 +RAW-NEXT: ObjectName: ObjFileSubsections +RAW-NEXT: } +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: FrameData [ +RAW-NEXT: Frame { +RAW-NEXT: Rva: 6 +RAW-NEXT: CodeSize: 1 +RAW-NEXT: LocalSize: 2 +RAW-NEXT: ParamsSize: 4 +RAW-NEXT: MaxStackSize: 3 +RAW-NEXT: FrameFunc: MyFunc +RAW-NEXT: PrologSize: 5 +RAW-NEXT: SavedRegsSize: 7 +RAW-NEXT: Flags: 0 +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: ] +RAW-NEXT: } +RAW-NEXT: ] +RAW-NEXT: } diff --git a/llvm/test/DebugInfo/PDB/pdbdump-headers.test b/llvm/test/DebugInfo/PDB/pdbdump-headers.test index 7343dc48ef4e..82fe91dd20aa 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-headers.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-headers.test @@ -1,1093 +1,2901 @@ +; RUN: llvm-pdbutil raw -headers -string-table -tpi-records -tpi-record-bytes -module-syms \ +; RUN: -sym-record-bytes -globals -publics -module-files \ +; RUN: -stream-summary -stream-blocks -ipi-records -ipi-record-bytes \ +; RUN: -section-contribs -section-map -section-headers -subsections=all \ +; RUN: -tpi-hash -fpo -page-stats %p/Inputs/empty.pdb | FileCheck -check-prefix=EMPTY %s ; RUN: llvm-pdbutil raw -all %p/Inputs/empty.pdb | FileCheck -check-prefix=ALL %s -; RUN: llvm-pdbutil raw -summary -modules -files \ +; RUN: llvm-pdbutil raw -headers -modules -module-files \ ; RUN: %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %s -; RUN: not llvm-pdbutil raw -summary %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %s - -ALL: Summary -ALL-NEXT: ============================================================ -ALL-NEXT: Block Size: 4096 -ALL-NEXT: Number of blocks: 25 -ALL-NEXT: Number of streams: 17 -ALL-NEXT: Signature: 1424295906 -ALL-NEXT: Age: 1 -ALL-NEXT: GUID: {0B355641-86A0-A249-896F-9988FAE52FF0} -ALL-NEXT: Features: 0x1 -ALL-NEXT: Has Debug Info: true -ALL-NEXT: Has Types: true -ALL-NEXT: Has IDs: true -ALL-NEXT: Has Globals: true -ALL-NEXT: Has Publics: true -ALL-NEXT: Is incrementally linked: true -ALL-NEXT: Has conflicting types: false -ALL-NEXT: Is stripped: false -ALL: Streams -ALL-NEXT: ============================================================ -ALL-NEXT: Stream 0: [Old MSF Directory] (40 bytes) -ALL-NEXT: Stream 1: [PDB Stream] (118 bytes) -ALL-NEXT: Stream 2: [TPI Stream] (5392 bytes) -ALL-NEXT: Stream 3: [DBI Stream] (739 bytes) -ALL-NEXT: Stream 4: [IPI Stream] (784 bytes) -ALL-NEXT: Stream 5: [Named Stream "/LinkInfo"] (0 bytes) -ALL-NEXT: Stream 6: [Global Symbol Hash] (556 bytes) -ALL-NEXT: Stream 7: [Public Symbol Hash] (604 bytes) -ALL-NEXT: Stream 8: [Public Symbol Records] (104 bytes) -ALL-NEXT: Stream 9: [Named Stream "/src/headerblock"] (0 bytes) -ALL-NEXT: Stream 10: [Section Header Data] (160 bytes) -ALL-NEXT: Stream 11: [New FPO Data] (32 bytes) -ALL-NEXT: Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes) -ALL-NEXT: Stream 13: [Named Stream "/names"] (239 bytes) -ALL-NEXT: Stream 14: [Module "* Linker *"] (520 bytes) -ALL-NEXT: Stream 15: [TPI Hash] (308 bytes) -ALL-NEXT: Stream 16: [IPI Hash] (68 bytes) -ALL: String Table -ALL-NEXT: ============================================================ -ALL-NEXT: ID | String -ALL-NEXT: 1 | 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)' -ALL-NEXT: 86 | 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp' -ALL-NEXT: 134 | '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = ' -ALL: Modules -ALL-NEXT: ============================================================ -ALL-NEXT: Mod 0000 | Name: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: -ALL-NEXT: Obj: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: -ALL-NEXT: debug stream: 12, # files: 1, has ec info: false -ALL-NEXT: contributing source files: -ALL-NEXT: - d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp -ALL-NEXT: Mod 0001 | Name: `* Linker *`: -ALL-NEXT: Obj: ``: -ALL-NEXT: debug stream: 14, # files: 0, has ec info: false -ALL-NEXT: contributing source files: -ALL: Types (TPI Stream) -ALL-NEXT: ============================================================ -ALL-NEXT: Showing 75 records -ALL-NEXT: 0x1000 | LF_ARGLIST [size = 8] -ALL-NEXT: 0x1001 | LF_PROCEDURE [size = 16] -ALL-NEXT: return type = 0x0074 (int), # args = 0, param list = 0x1000 -ALL-NEXT: calling conv = cdecl, options = None -ALL-NEXT: 0x1002 | LF_FIELDLIST [size = 76] -ALL-NEXT: - LF_ENUMERATE [apartment = 1] -ALL-NEXT: - LF_ENUMERATE [single = 2] -ALL-NEXT: - LF_ENUMERATE [free = 3] -ALL-NEXT: - LF_ENUMERATE [neutral = 4] -ALL-NEXT: - LF_ENUMERATE [both = 5] -ALL-NEXT: 0x1003 | LF_ENUM [size = 120] -ALL-NEXT: name: `__vc_attributes::threadingAttribute::threading_e` -ALL-NEXT: unique name: `.?AW4threading_e@threadingAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x1002, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1004 | LF_STRUCTURE [size = 100] -ALL-NEXT: class name: `__vc_attributes::threadingAttribute` -ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x1005 | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x1004, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x1006 | LF_ARGLIST [size = 12] -ALL-NEXT: 0x1003: `__vc_attributes::threadingAttribute::threading_e` -ALL-NEXT: 0x1007 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x1006, param list = 0x0003 (void) -ALL-NEXT: class type = 0x1004, this type = 0x1005, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1008 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 0, # args = 0x1000, param list = 0x0003 (void) -ALL-NEXT: class type = 0x1004, this type = 0x1005, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1009 | LF_METHODLIST [size = 20] -ALL-NEXT: - Method [type = 0x1007, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1008, vftable offset = -1, attrs = public] -ALL-NEXT: 0x100A | LF_FIELDLIST [size = 68] -ALL-NEXT: - LF_NESTTYPE [name = `threading_e`, parent = 0x1003] -ALL-NEXT: - LF_METHOD [name = `threadingAttribute`, # overloads = 2, overload list = 0x1009] -ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x1003, offset = 0, attrs = public] -ALL-NEXT: 0x100B | LF_STRUCTURE [size = 100] -ALL-NEXT: class name: `__vc_attributes::threadingAttribute` -ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x100A -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x100C | LF_FIELDLIST [size = 48] -ALL-NEXT: - LF_ENUMERATE [native = 0] -ALL-NEXT: - LF_ENUMERATE [com = 1] -ALL-NEXT: - LF_ENUMERATE [managed = 2] -ALL-NEXT: 0x100D | LF_ENUM [size = 120] -ALL-NEXT: name: `__vc_attributes::event_receiverAttribute::type_e` -ALL-NEXT: unique name: `.?AW4type_e@event_receiverAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x100E | LF_STRUCTURE [size = 112] -ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute` -ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x100F | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x100E, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x1010 | LF_ARGLIST [size = 16] -ALL-NEXT: 0x100D: `__vc_attributes::event_receiverAttribute::type_e` -ALL-NEXT: 0x0030 (bool): `bool` -ALL-NEXT: 0x1011 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 2, # args = 0x1010, param list = 0x0003 (void) -ALL-NEXT: class type = 0x100E, this type = 0x100F, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1012 | LF_ARGLIST [size = 12] -ALL-NEXT: 0x100D: `__vc_attributes::event_receiverAttribute::type_e` -ALL-NEXT: 0x1013 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x1012, param list = 0x0003 (void) -ALL-NEXT: class type = 0x100E, this type = 0x100F, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1014 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 0, # args = 0x1000, param list = 0x0003 (void) -ALL-NEXT: class type = 0x100E, this type = 0x100F, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1015 | LF_METHODLIST [size = 28] -ALL-NEXT: - Method [type = 0x1011, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1013, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1014, vftable offset = -1, attrs = public] -ALL-NEXT: 0x1016 | LF_FIELDLIST [size = 96] -ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x100D] -ALL-NEXT: - LF_METHOD [name = `event_receiverAttribute`, # overloads = 3, overload list = 0x1015] -ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x100D, offset = 0, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `layout_dependent`, Type = 0x0030 (bool), offset = 4, attrs = public] -ALL-NEXT: 0x1017 | LF_STRUCTURE [size = 112] -ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute` -ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x1016 -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x1018 | LF_FIELDLIST [size = 48] -ALL-NEXT: - LF_ENUMERATE [never = 0] -ALL-NEXT: - LF_ENUMERATE [allowed = 1] -ALL-NEXT: - LF_ENUMERATE [always = 2] -ALL-NEXT: 0x1019 | LF_ENUM [size = 116] -ALL-NEXT: name: `__vc_attributes::aggregatableAttribute::type_e` -ALL-NEXT: unique name: `.?AW4type_e@aggregatableAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x1018, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x101A | LF_STRUCTURE [size = 108] -ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute` -ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x101B | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x101A, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x101C | LF_ARGLIST [size = 12] -ALL-NEXT: 0x1019: `__vc_attributes::aggregatableAttribute::type_e` -ALL-NEXT: 0x101D | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x101C, param list = 0x0003 (void) -ALL-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x101E | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 0, # args = 0x1000, param list = 0x0003 (void) -ALL-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x101F | LF_METHODLIST [size = 20] -ALL-NEXT: - Method [type = 0x101D, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x101E, vftable offset = -1, attrs = public] -ALL-NEXT: 0x1020 | LF_FIELDLIST [size = 68] -ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1019] -ALL-NEXT: - LF_METHOD [name = `aggregatableAttribute`, # overloads = 2, overload list = 0x101F] -ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1019, offset = 0, attrs = public] -ALL-NEXT: 0x1021 | LF_STRUCTURE [size = 108] -ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute` -ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x1020 -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x1022 | LF_ENUM [size = 116] -ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::type_e` -ALL-NEXT: unique name: `.?AW4type_e@event_sourceAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1023 | LF_FIELDLIST [size = 28] -ALL-NEXT: - LF_ENUMERATE [speed = 0] -ALL-NEXT: - LF_ENUMERATE [size = 1] -ALL-NEXT: 0x1024 | LF_ENUM [size = 124] -ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::optimize_e` -ALL-NEXT: unique name: `.?AW4optimize_e@event_sourceAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x1023, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1025 | LF_STRUCTURE [size = 108] -ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute` -ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x1026 | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x1025, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x1027 | LF_ARGLIST [size = 12] -ALL-NEXT: 0x1022: `__vc_attributes::event_sourceAttribute::type_e` -ALL-NEXT: 0x1028 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x1027, param list = 0x0003 (void) -ALL-NEXT: class type = 0x1025, this type = 0x1026, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1029 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 0, # args = 0x1000, param list = 0x0003 (void) -ALL-NEXT: class type = 0x1025, this type = 0x1026, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x102A | LF_METHODLIST [size = 20] -ALL-NEXT: - Method [type = 0x1028, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1029, vftable offset = -1, attrs = public] -ALL-NEXT: 0x102B | LF_FIELDLIST [size = 128] -ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1022] -ALL-NEXT: - LF_NESTTYPE [name = `optimize_e`, parent = 0x1024] -ALL-NEXT: - LF_METHOD [name = `event_sourceAttribute`, # overloads = 2, overload list = 0x102A] -ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1022, offset = 0, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `optimize`, Type = 0x1024, offset = 4, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `decorate`, Type = 0x0030 (bool), offset = 8, attrs = public] -ALL-NEXT: 0x102C | LF_STRUCTURE [size = 108] -ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute` -ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x102B -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x102D | LF_FIELDLIST [size = 92] -ALL-NEXT: - LF_ENUMERATE [dll = 1] -ALL-NEXT: - LF_ENUMERATE [exe = 2] -ALL-NEXT: - LF_ENUMERATE [service = 3] -ALL-NEXT: - LF_ENUMERATE [unspecified = 4] -ALL-NEXT: - LF_ENUMERATE [EXE = 2] -ALL-NEXT: - LF_ENUMERATE [SERVICE = 3] -ALL-NEXT: 0x102E | LF_ENUM [size = 104] -ALL-NEXT: name: `__vc_attributes::moduleAttribute::type_e` -ALL-NEXT: unique name: `.?AW4type_e@moduleAttribute@__vc_attributes@@` -ALL-NEXT: field list: 0x102D, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x102F | LF_STRUCTURE [size = 96] -ALL-NEXT: class name: `__vc_attributes::moduleAttribute` -ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x1030 | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x102F, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x1031 | LF_MODIFIER [size = 12] -ALL-NEXT: referent = 0x0070 (char), modifiers = const -ALL-NEXT: 0x1032 | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x1031, mode = pointer, opts = None, kind = ptr32 -ALL-NEXT: 0x1033 | LF_ARGLIST [size = 68] -ALL-NEXT: 0x102E: `__vc_attributes::moduleAttribute::type_e` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x0074 (int): `int` -ALL-NEXT: 0x0030 (bool): `bool` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x0074 (int): `int` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x0074 (int): `int` -ALL-NEXT: 0x0030 (bool): `bool` -ALL-NEXT: 0x0030 (bool): `bool` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x1032: `const char*` -ALL-NEXT: 0x1034 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 15, # args = 0x1033, param list = 0x0003 (void) -ALL-NEXT: class type = 0x102F, this type = 0x1030, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1035 | LF_ARGLIST [size = 12] -ALL-NEXT: 0x102E: `__vc_attributes::moduleAttribute::type_e` -ALL-NEXT: 0x1036 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x1035, param list = 0x0003 (void) -ALL-NEXT: class type = 0x102F, this type = 0x1030, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1037 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 0, # args = 0x1000, param list = 0x0003 (void) -ALL-NEXT: class type = 0x102F, this type = 0x1030, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1038 | LF_METHODLIST [size = 28] -ALL-NEXT: - Method [type = 0x1034, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1036, vftable offset = -1, attrs = public] -ALL-NEXT: - Method [type = 0x1037, vftable offset = -1, attrs = public] -ALL-NEXT: 0x1039 | LF_FIELDLIST [size = 356] -ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x102E] -ALL-NEXT: - LF_METHOD [name = `moduleAttribute`, # overloads = 3, overload list = 0x1038] -ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x102E, offset = 0, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `name`, Type = 0x1032, offset = 4, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `version`, Type = 0x1032, offset = 8, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `uuid`, Type = 0x1032, offset = 12, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `lcid`, Type = 0x0074 (int), offset = 16, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `control`, Type = 0x0030 (bool), offset = 20, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `helpstring`, Type = 0x1032, offset = 24, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `helpstringcontext`, Type = 0x0074 (int), offset = 28, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `helpstringdll`, Type = 0x1032, offset = 32, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `helpfile`, Type = 0x1032, offset = 36, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `helpcontext`, Type = 0x0074 (int), offset = 40, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `hidden`, Type = 0x0030 (bool), offset = 44, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `restricted`, Type = 0x0030 (bool), offset = 45, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `custom`, Type = 0x1032, offset = 48, attrs = public] -ALL-NEXT: - LF_MEMBER [name = `resource_name`, Type = 0x1032, offset = 52, attrs = public] -ALL-NEXT: 0x103A | LF_STRUCTURE [size = 96] -ALL-NEXT: class name: `__vc_attributes::moduleAttribute` -ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x1039 -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x103B | LF_FIELDLIST [size = 756] -ALL-NEXT: - LF_ENUMERATE [eAnyUsage = 0] -ALL-NEXT: - LF_ENUMERATE [eCoClassUsage = 1] -ALL-NEXT: - LF_ENUMERATE [eCOMInterfaceUsage = 2] -ALL-NEXT: - LF_ENUMERATE [eInterfaceUsage = 6] -ALL-NEXT: - LF_ENUMERATE [eMemberUsage = 8] -ALL-NEXT: - LF_ENUMERATE [eMethodUsage = 16] -ALL-NEXT: - LF_ENUMERATE [eInterfaceMethodUsage = 32] -ALL-NEXT: - LF_ENUMERATE [eInterfaceMemberUsage = 64] -ALL-NEXT: - LF_ENUMERATE [eCoClassMemberUsage = 128] -ALL-NEXT: - LF_ENUMERATE [eCoClassMethodUsage = 256] -ALL-NEXT: - LF_ENUMERATE [eGlobalMethodUsage = 768] -ALL-NEXT: - LF_ENUMERATE [eGlobalDataUsage = 1024] -ALL-NEXT: - LF_ENUMERATE [eClassUsage = 2048] -ALL-NEXT: - LF_ENUMERATE [eInterfaceParameterUsage = 4096] -ALL-NEXT: - LF_ENUMERATE [eMethodParameterUsage = 12288] -ALL-NEXT: - LF_ENUMERATE [eIDLModuleUsage = 16384] -ALL-NEXT: - LF_ENUMERATE [eAnonymousUsage = 32768] -ALL-NEXT: - LF_ENUMERATE [eTypedefUsage = 65536] -ALL-NEXT: - LF_ENUMERATE [eUnionUsage = 131072] -ALL-NEXT: - LF_ENUMERATE [eEnumUsage = 262144] -ALL-NEXT: - LF_ENUMERATE [eDefineTagUsage = 524288] -ALL-NEXT: - LF_ENUMERATE [eStructUsage = 1048576] -ALL-NEXT: - LF_ENUMERATE [eLocalUsage = 2097152] -ALL-NEXT: - LF_ENUMERATE [ePropertyUsage = 4194304] -ALL-NEXT: - LF_ENUMERATE [eEventUsage = 8388608] -ALL-NEXT: - LF_ENUMERATE [eTemplateUsage = 16777216] -ALL-NEXT: - LF_ENUMERATE [eModuleUsage = 16777216] -ALL-NEXT: - LF_ENUMERATE [eIllegalUsage = 33554432] -ALL-NEXT: - LF_ENUMERATE [eAsynchronousUsage = 67108864] -ALL-NEXT: - LF_ENUMERATE [eAnyIDLUsage = 4161535] -ALL-NEXT: 0x103C | LF_ENUM [size = 140] -ALL-NEXT: name: `__vc_attributes::helper_attributes::usageAttribute::usage_e` -ALL-NEXT: unique name: `.?AW4usage_e@usageAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: field list: 0x103B, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x103D | LF_STRUCTURE [size = 128] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute` -ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x103E | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x103D, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x103F | LF_ARGLIST [size = 12] -ALL-NEXT: 0x0075 (unsigned): `unsigned` -ALL-NEXT: 0x1040 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x103F, param list = 0x0003 (void) -ALL-NEXT: class type = 0x103D, this type = 0x103E, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1041 | LF_FIELDLIST [size = 60] -ALL-NEXT: - LF_NESTTYPE [name = `usage_e`, parent = 0x103C] -ALL-NEXT: - LF_ONEMETHOD [name = `usageAttribute`] -ALL-NEXT: type = 0x1040, vftable offset = -1, attrs = public -ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x0075 (unsigned), offset = 0, attrs = public] -ALL-NEXT: 0x1042 | LF_STRUCTURE [size = 128] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute` -ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x1041 -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x1043 | LF_FIELDLIST [size = 68] -ALL-NEXT: - LF_ENUMERATE [eBoolean = 0] -ALL-NEXT: - LF_ENUMERATE [eInteger = 1] -ALL-NEXT: - LF_ENUMERATE [eFloat = 2] -ALL-NEXT: - LF_ENUMERATE [eDouble = 3] -ALL-NEXT: 0x1044 | LF_ENUM [size = 148] -ALL-NEXT: name: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e` -ALL-NEXT: unique name: `.?AW4type_e@v1_alttypeAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: field list: 0x1043, underlying type: 0x0074 (int) -ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1045 | LF_STRUCTURE [size = 140] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute` -ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: -ALL-NEXT: options: forward ref | has unique name -ALL-NEXT: 0x1046 | LF_POINTER [size = 12] -ALL-NEXT: referent = 0x1045, mode = pointer, opts = const, kind = ptr32 -ALL-NEXT: 0x1047 | LF_ARGLIST [size = 12] -ALL-NEXT: 0x1044: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e` -ALL-NEXT: 0x1048 | LF_MFUNCTION [size = 28] -ALL-NEXT: return type = 1, # args = 0x1047, param list = 0x0003 (void) -ALL-NEXT: class type = 0x1045, this type = 0x1046, this adjust = 0 -ALL-NEXT: calling conv = thiscall, options = constructor -ALL-NEXT: 0x1049 | LF_FIELDLIST [size = 64] -ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1044] -ALL-NEXT: - LF_ONEMETHOD [name = `v1_alttypeAttribute`] -ALL-NEXT: type = 0x1048, vftable offset = -1, attrs = public -ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1044, offset = 0, attrs = public] -ALL-NEXT: 0x104A | LF_STRUCTURE [size = 140] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute` -ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@` -ALL-NEXT: vtable: , base list: , field list: 0x1049 -ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL: Types (IPI Stream) -ALL-NEXT: ============================================================ -ALL-NEXT: Showing 15 records -ALL-NEXT: 0x1000 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x100B, mod = 1, file = 1, line = 481 -ALL-NEXT: 0x1001 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x1017, mod = 1, file = 1, line = 194 -ALL-NEXT: 0x1002 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x1021, mod = 1, file = 1, line = 603 -ALL-NEXT: 0x1003 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x102C, mod = 1, file = 1, line = 1200 -ALL-NEXT: 0x1004 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x103A, mod = 1, file = 1, line = 540 -ALL-NEXT: 0x1005 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x1042, mod = 1, file = 1, line = 108 -ALL-NEXT: 0x1006 | LF_UDT_MOD_SRC_LINE [size = 20] -ALL-NEXT: udt = 0x104A, mod = 1, file = 1, line = 96 -ALL-NEXT: 0x1007 | LF_STRING_ID [size = 48] ID: , String: d:\src\llvm\test\DebugInfo\PDB\Inputs -ALL-NEXT: 0x1008 | LF_STRING_ID [size = 76] ID: , String: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe -ALL-NEXT: 0x1009 | LF_STRING_ID [size = 20] ID: , String: empty.cpp -ALL-NEXT: 0x100A | LF_STRING_ID [size = 56] ID: , String: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb -ALL-NEXT: 0x100B | LF_STRING_ID [size = 252] ID: , String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows -ALL-NEXT: 0x100C | LF_SUBSTR_LIST [size = 12] -ALL-NEXT: 0x100B: `-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows` -ALL-NEXT: 0x100D | LF_STRING_ID [size = 96] ID: 0x100C, String: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X -ALL-NEXT: 0x100E | LF_BUILDINFO [size = 28] -ALL-NEXT: 0x1007: `d:\src\llvm\test\DebugInfo\PDB\Inputs` -ALL-NEXT: 0x1008: `C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe` -ALL-NEXT: 0x1009: `empty.cpp` -ALL-NEXT: 0x100A: `d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb` -ALL-NEXT: 0x100D: ` Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X` -ALL: Public Symbols -ALL-NEXT: ============================================================ -ALL-NEXT: - S_PUB32 [size = 36] `?__purecall@@3PAXA` -ALL-NEXT: type = , addr = 0003:0000 -ALL-NEXT: - S_PUB32 [size = 20] `_main` -ALL-NEXT: type = 0x0002 (), addr = 0001:0016 -ALL-NEXT: - S_PROCREF [size = 20] `main` -ALL-NEXT: module = 1, sum name = 0, offset = 120 -ALL-NEXT: - S_GDATA32 [size = 28] `__purecall` -ALL-NEXT: type = 0x0403 (void*), addr = 0003:0000 -ALL: Symbols -ALL-NEXT: ============================================================ -ALL-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: -ALL-NEXT: - S_OBJNAME [size = 56] sig=0, `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj` -ALL-NEXT: - S_COMPILE3 [size = 60] -ALL-NEXT: machine = intel pentium 3, Ver = Microsoft (R) Optimizing Compiler, language = c++ -ALL-NEXT: frontend = 18.0.31101.0, backend = 18.0.31101.0 -ALL-NEXT: flags = security checks -ALL-NEXT: - S_GPROC32 [size = 44] `main` -ALL-NEXT: parent = 0, addr = 0001:0016, code size = 10, end = 196 -ALL-NEXT: debug start = 3, debug end = 8, flags = has fp -ALL-NEXT: - S_FRAMEPROC [size = 32] -ALL-NEXT: size = 0, padding size = 0, offset to padding = 0 -ALL-NEXT: bytes of callee saved registers = 0, exception handler addr = 0000:0000 -ALL-NEXT: flags = has async eh | opt speed -ALL-NEXT: - S_END [size = 4] -ALL-NEXT: - S_BUILDINFO [size = 8] BuildId = `4110` -ALL-NEXT: Mod 0001 | `* Linker *`: -ALL-NEXT: - S_OBJNAME [size = 20] sig=0, `* Linker *` -ALL-NEXT: - S_COMPILE3 [size = 48] -ALL-NEXT: machine = intel 80386, Ver = Microsoft (R) LINK, language = link -ALL-NEXT: frontend = 0.0.0.0, backend = 12.0.31101.0 -ALL-NEXT: flags = none -ALL-NEXT: - S_ENVBLOCK [size = 172] -ALL-NEXT: - cwd -ALL-NEXT: - d:\src\llvm\test\DebugInfo\PDB\Inputs -ALL-NEXT: - exe -ALL-NEXT: - C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe -ALL-NEXT: - pdb -ALL-NEXT: - d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb -ALL-NEXT: - S_TRAMPOLINE [size = 20] -ALL-NEXT: type = tramp incremental, size = 5, source = 0001:0005, target = 0001:0005 -ALL-NEXT: - S_SECTION [size = 28] `.text` -ALL-NEXT: length = 4122, alignment = 12, rva = 4096, section # = 1, characteristics = 1610612768 -ALL-NEXT: - S_COFFGROUP [size = 28] `.text$mn` -ALL-NEXT: length = 4122, addr = 0001:0000, characteristics = 1610612768 -ALL-NEXT: - S_SECTION [size = 28] `.rdata` -ALL-NEXT: length = 690, alignment = 12, rva = 12288, section # = 2, characteristics = 1073741888 -ALL-NEXT: - S_COFFGROUP [size = 28] `.rdata` -ALL-NEXT: length = 323, addr = 0002:0000, characteristics = 1073741888 -ALL-NEXT: - S_COFFGROUP [size = 28] `.edata` -ALL-NEXT: length = 0, addr = 0002:0323, characteristics = 1073741888 -ALL-NEXT: - S_COFFGROUP [size = 32] `.rdata$debug` -ALL-NEXT: length = 366, addr = 0002:0324, characteristics = 1073741888 -ALL-NEXT: - S_SECTION [size = 28] `.data` -ALL-NEXT: length = 4, alignment = 12, rva = 16384, section # = 3, characteristics = 3221225536 -ALL-NEXT: - S_COFFGROUP [size = 24] `.bss` -ALL-NEXT: length = 4, addr = 0003:0000, characteristics = 3221225600 -ALL-NEXT: - S_SECTION [size = 28] `.reloc` -ALL-NEXT: length = 8, alignment = 12, rva = 20480, section # = 4, characteristics = 1107296320 -ALL: Section Contributions -ALL-NEXT: ============================================================ -ALL-NEXT: SC | mod = 1, 0001:0000, size = 10, data crc = 0, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ -ALL-NEXT: SC | mod = 0, 0001:0016, size = 10, data crc = 3617027124, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | -ALL-NEXT: IMAGE_SCN_MEM_READ -ALL-NEXT: SC | mod = 1, 0002:0000, size = 56, data crc = 0, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ -ALL-NEXT: SC | mod = 1, 0002:0324, size = 72, data crc = 0, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -ALL-NEXT: SC | mod = 1, 0002:0396, size = 20, data crc = 0, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -ALL-NEXT: SC | mod = 0, 0003:0000, size = 4, data crc = 0, reloc crc = 0 -ALL-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ | -ALL-NEXT: IMAGE_SCN_MEM_WRITE -ALL: Section Map -ALL-NEXT: ============================================================ -ALL-NEXT: Section 0000 | ovl = 0, group = 0, frame = 0, name = 1 -ALL-NEXT: class = 65535, offset = 0, size = 4122 -ALL-NEXT: flags = read | execute | 32 bit addr | selector -ALL-NEXT: Section 0001 | ovl = 1, group = 0, frame = 0, name = 2 -ALL-NEXT: class = 65535, offset = 0, size = 690 -ALL-NEXT: flags = read | 32 bit addr | selector -ALL-NEXT: Section 0002 | ovl = 2, group = 0, frame = 0, name = 3 -ALL-NEXT: class = 65535, offset = 0, size = 4 -ALL-NEXT: flags = read | write | 32 bit addr | selector -ALL-NEXT: Section 0003 | ovl = 3, group = 0, frame = 0, name = 4 -ALL-NEXT: class = 65535, offset = 0, size = 8 -ALL-NEXT: flags = read | 32 bit addr | selector -ALL-NEXT: Section 0004 | ovl = 4, group = 0, frame = 0, name = 0 -ALL-NEXT: class = 65535, offset = 0, size = 4294967295 -ALL-NEXT: flags = 32 bit addr | absolute addr - - - -BIG: Summary -BIG-NEXT: ============================================================ -BIG-NEXT: Block Size: 4096 -BIG-NEXT: Number of blocks: 99 -BIG-NEXT: Number of streams: 64 -BIG-NEXT: Signature: 1461714535 -BIG-NEXT: Age: 1 -BIG-NEXT: GUID: {880ECC89-DF81-0B4F-839C-58CBD052E937} -BIG-NEXT: Features: 0x1 -BIG-NEXT: Has Debug Info: true -BIG-NEXT: Has Types: true -BIG-NEXT: Has IDs: true -BIG-NEXT: Has Globals: true -BIG-NEXT: Has Publics: true -BIG-NEXT: Is incrementally linked: true -BIG-NEXT: Has conflicting types: false -BIG-NEXT: Is stripped: false -BIG: Modules -BIG-NEXT: ============================================================ -BIG-NEXT: Mod 0000 | Name: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: -BIG-NEXT: Obj: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: -BIG-NEXT: debug stream: 12, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - d:\src\llvm\test\tools\llvm-symbolizer\pdb\inputs\test.cpp -BIG-NEXT: Mod 0001 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 14, # files: 14, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\misc\i386\cpu_disp.c -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0002 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 15, # files: 19, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\rtc\initsect.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: Mod 0003 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 16, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm -BIG-NEXT: Mod 0004 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 17, # files: 14, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\eh\i386\chandler4gs.c -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0005 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 18, # files: 14, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\eh\i386\secchk.c -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0006 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 19, # files: 9, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0007 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 20, # files: 14, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0008 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 21, # files: 10, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\gs\gs_support.c -BIG-NEXT: Mod 0009 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 22, # files: 14, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\misc\checkcfg.c -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0010 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 23, # files: 10, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\misc\guard_support.c -BIG-NEXT: Mod 0011 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 24, # files: 9, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: Mod 0012 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 25, # files: 11, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_dtor.c -BIG-NEXT: Mod 0013 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 26, # files: 10, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_init.c -BIG-NEXT: Mod 0014 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 27, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\matherr_detection.c -BIG-NEXT: Mod 0015 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 28, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\ucrt_detection.c -BIG-NEXT: Mod 0016 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 29, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\argv_mode.cpp -BIG-NEXT: Mod 0017 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 30, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\commit_mode.cpp -BIG-NEXT: Mod 0018 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 31, # files: 24, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\default_local_stdio_options.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdio.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vadefs.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: Mod 0019 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 32, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\denormal_control.cpp -BIG-NEXT: Mod 0020 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 33, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\env_mode.cpp -BIG-NEXT: Mod 0021 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 34, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\file_mode.cpp -BIG-NEXT: Mod 0022 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 35, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\invalid_parameter_handler.cpp -BIG-NEXT: Mod 0023 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 36, # files: 2, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\matherr.cpp -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: Mod 0024 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 37, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\new_mode.cpp -BIG-NEXT: Mod 0025 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 38, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\thread_locale.cpp -BIG-NEXT: Mod 0026 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 39, # files: 21, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\eh\tncleanup.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_typeinfo.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_exception.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: Mod 0027 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 40, # files: 26, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdio.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vadefs.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: Mod 0028 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 41, # files: 20, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: Mod 0029 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 42, # files: 20, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\utility.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: Mod 0030 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 43, # files: 1, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\ucrt_stubs.cpp -BIG-NEXT: Mod 0031 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 44, # files: 20, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\utility\utility_desktop.cpp -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: Mod 0032 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: -BIG-NEXT: debug stream: 45, # files: 20, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\string.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\src\defaults\default_precision.cpp -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\malloc.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h -BIG-NEXT: - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h -BIG-NEXT: - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\math.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\stdlib.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\ctype.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h -BIG-NEXT: - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h -BIG-NEXT: - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h -BIG-NEXT: Mod 0033 | Name: `Import:KERNEL32.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: -BIG-NEXT: debug stream: 47, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0034 | Name: `KERNEL32.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: -BIG-NEXT: debug stream: 46, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0035 | Name: `Import:VCRUNTIME140.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: -BIG-NEXT: debug stream: 49, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0036 | Name: `VCRUNTIME140.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: -BIG-NEXT: debug stream: 48, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0037 | Name: `Import:api-ms-win-crt-stdio-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 59, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0038 | Name: `api-ms-win-crt-stdio-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 58, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0039 | Name: `Import:api-ms-win-crt-runtime-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 57, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0040 | Name: `api-ms-win-crt-runtime-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 56, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0041 | Name: `Import:api-ms-win-crt-math-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 55, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0042 | Name: `api-ms-win-crt-math-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 54, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0043 | Name: `Import:api-ms-win-crt-locale-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 53, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0044 | Name: `api-ms-win-crt-locale-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 52, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0045 | Name: `Import:api-ms-win-crt-heap-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 51, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0046 | Name: `api-ms-win-crt-heap-l1-1-0.dll`: -BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: -BIG-NEXT: debug stream: 50, # files: 0, has ec info: false -BIG-NEXT: contributing source files: -BIG-NEXT: Mod 0047 | Name: `* Linker *`: -BIG-NEXT: Obj: ``: -BIG-NEXT: debug stream: 60, # files: 0, has ec info: false -BIG-NEXT: contributing source files: - - -BAD-BLOCK-SIZE: Native PDB Error: The PDB file is corrupt. Does not contain superblock - - - - - - - - - - - - - - - - - - - - - - - - - - - +; RUN: not llvm-pdbutil raw -headers %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %s +; EMPTY: FileHeaders { +; EMPTY-NEXT: BlockSize: 4096 +; EMPTY-NEXT: FreeBlockMap: 2 +; EMPTY-NEXT: NumBlocks: 25 +; EMPTY-NEXT: NumDirectoryBytes: 136 +; EMPTY-NEXT: Unknown1: 0 +; EMPTY-NEXT: BlockMapAddr: 24 +; EMPTY-NEXT: NumDirectoryBlocks: 1 +; EMPTY-NEXT: DirectoryBlocks: [23] +; EMPTY-NEXT: NumStreams: 17 +; EMPTY-NEXT: } +; EMPTY-NEXT: Streams [ +; EMPTY-NEXT: Stream 0: [Old MSF Directory] (40 bytes) +; EMPTY-NEXT: Stream 1: [PDB Stream] (118 bytes) +; EMPTY-NEXT: Stream 2: [TPI Stream] (5392 bytes) +; EMPTY-NEXT: Stream 3: [DBI Stream] (739 bytes) +; EMPTY-NEXT: Stream 4: [IPI Stream] (784 bytes) +; EMPTY-NEXT: Stream 5: [Named Stream "/LinkInfo"] (0 bytes) +; EMPTY-NEXT: Stream 6: [Global Symbol Hash] (556 bytes) +; EMPTY-NEXT: Stream 7: [Public Symbol Hash] (604 bytes) +; EMPTY-NEXT: Stream 8: [Public Symbol Records] (104 bytes) +; EMPTY-NEXT: Stream 9: [Named Stream "/src/headerblock"] (0 bytes) +; EMPTY-NEXT: Stream 10: [Section Header Data] (160 bytes) +; EMPTY-NEXT: Stream 11: [New FPO Data] (32 bytes) +; EMPTY-NEXT: Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes) +; EMPTY-NEXT: Stream 13: [Named Stream "/names"] (239 bytes) +; EMPTY-NEXT: Stream 14: [Module "* Linker *"] (520 bytes) +; EMPTY-NEXT: Stream 15: [TPI Hash] (308 bytes) +; EMPTY-NEXT: Stream 16: [IPI Hash] (68 bytes) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Msf Free Pages: [3, 4, 5, 8, 9] +; EMPTY-NEXT: Orphaned Pages: [] +; EMPTY-NEXT: Multiply Used Pages: [] +; EMPTY-NEXT: Use After Free Pages: [] +; EMPTY-NEXT: StreamBlocks [ +; EMPTY-NEXT: Stream 0: [8] +; EMPTY-NEXT: Stream 1: [19] +; EMPTY-NEXT: Stream 2: [18, 17] +; EMPTY-NEXT: Stream 3: [14] +; EMPTY-NEXT: Stream 4: [20] +; EMPTY-NEXT: Stream 5: [] +; EMPTY-NEXT: Stream 6: [11] +; EMPTY-NEXT: Stream 7: [13] +; EMPTY-NEXT: Stream 8: [12] +; EMPTY-NEXT: Stream 9: [] +; EMPTY-NEXT: Stream 10: [10] +; EMPTY-NEXT: Stream 11: [15] +; EMPTY-NEXT: Stream 12: [6] +; EMPTY-NEXT: Stream 13: [16] +; EMPTY-NEXT: Stream 14: [7] +; EMPTY-NEXT: Stream 15: [21] +; EMPTY-NEXT: Stream 16: [22] +; EMPTY-NEXT: ] +; EMPTY-NEXT: String Table { +; EMPTY-NEXT: 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)' +; EMPTY-NEXT: 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp' +; EMPTY-NEXT: '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = ' +; EMPTY-NEXT: } +; EMPTY-NEXT: PDB Stream { +; EMPTY-NEXT: Version: 20000404 +; EMPTY-NEXT: Signature: 0x54E507E2 +; EMPTY-NEXT: Age: 1 +; EMPTY-NEXT: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; EMPTY-NEXT: Features: 0x1 +; EMPTY-NEXT: Named Streams { +; EMPTY-NEXT: /names: 13 +; EMPTY-NEXT: /LinkInfo: 5 +; EMPTY-NEXT: /src/headerblock: 9 +; EMPTY-NEXT: } +; EMPTY-NEXT: } +; EMPTY-NEXT: Type Info Stream (TPI) { +; EMPTY-NEXT: TPI Version: 20040203 +; EMPTY-NEXT: Record count: 75 +; EMPTY-NEXT: Records [ +; EMPTY-NEXT: { +; EMPTY-NEXT: ArgList (0x1000) { +; EMPTY-NEXT: TypeLeafKind: LF_ARGLIST (0x1201) +; EMPTY-NEXT: NumArgs: 0 +; EMPTY-NEXT: Arguments [ +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 |....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Procedure (0x1001) { +; EMPTY-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +; EMPTY-NEXT: ReturnType: int (0x74) +; EMPTY-NEXT: CallingConvention: NearC (0x0) +; EMPTY-NEXT: FunctionOptions [ (0x0) +; EMPTY-NEXT: ] +; EMPTY-NEXT: NumParameters: 0 +; EMPTY-NEXT: ArgListType: () (0x1000) +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 74000000 00000000 00100000 |t...........| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: FieldList (0x1002) { +; EMPTY-NEXT: TypeLeafKind: LF_FIELDLIST (0x1203) +; EMPTY-NEXT: Enumerator { +; EMPTY-NEXT: TypeLeafKind: LF_ENUMERATE (0x1502) +; EMPTY-NEXT: AccessSpecifier: Public (0x3) +; EMPTY-NEXT: EnumValue: 1 +; EMPTY-NEXT: Name: apartment +; EMPTY-NEXT: } +; EMPTY-NEXT: Enumerator { +; EMPTY-NEXT: TypeLeafKind: LF_ENUMERATE (0x1502) +; EMPTY-NEXT: AccessSpecifier: Public (0x3) +; EMPTY-NEXT: EnumValue: 2 +; EMPTY-NEXT: Name: single +; EMPTY-NEXT: } +; EMPTY-NEXT: Enumerator { +; EMPTY-NEXT: TypeLeafKind: LF_ENUMERATE (0x1502) +; EMPTY-NEXT: AccessSpecifier: Public (0x3) +; EMPTY-NEXT: EnumValue: 3 +; EMPTY-NEXT: Name: free +; EMPTY-NEXT: } +; EMPTY-NEXT: Enumerator { +; EMPTY-NEXT: TypeLeafKind: LF_ENUMERATE (0x1502) +; EMPTY-NEXT: AccessSpecifier: Public (0x3) +; EMPTY-NEXT: EnumValue: 4 +; EMPTY-NEXT: Name: neutral +; EMPTY-NEXT: } +; EMPTY-NEXT: Enumerator { +; EMPTY-NEXT: TypeLeafKind: LF_ENUMERATE (0x1502) +; EMPTY-NEXT: AccessSpecifier: Public (0x3) +; EMPTY-NEXT: EnumValue: 5 +; EMPTY-NEXT: Name: both +; EMPTY-NEXT: } +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 02150300 01006170 6172746D 656E7400 |......apartment.| +; EMPTY-NEXT: 0010: 02150300 02007369 6E676C65 00F3F2F1 |......single....| +; EMPTY-NEXT: 0020: 02150300 03006672 656500F1 02150300 |......free......| +; EMPTY-NEXT: 0030: 04006E65 75747261 6C00F2F1 02150300 |..neutral.......| +; EMPTY-NEXT: 0040: 0500626F 746800F1 |..both..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY: Hash { +; EMPTY-NEXT: Number of Hash Buckets: 262143 +; EMPTY-NEXT: Hash Key Size: 4 +; EMPTY-NEXT: Values: [205956, 163561, 59811, 208239, 16377, 247078, 194342, 254156, 194536, 167492, 185421, 119540, 261871, 198119, 48056, 251486, 134580, 148190, 113636, 53336, 55779, 220695, 198114, 148734, 81128, 60158, 217249, 174209, 159978, 249504, 141941, 238785, 6214, 94935, 151449, 135589, 73373, 96512, 254299, 17744, 239514, 173189, 130544, 204437, 238560, 144673, 115151, 197306, 256035, 101096, 231280, 52156, 48854, 170035, 177041, 102745, 16947, 183703, 98548, 35693, 171328, 203640, 139292, 49018, 43821, 202555, 165040, 215835, 142625, 52534, 44186, 103930, 110942, 17991, 213215] +; EMPTY-NEXT: Adjusters [ +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: TypeIndexOffsets [ +; EMPTY-NEXT: Index: 0x1000, Offset: 0 +; EMPTY-NEXT: ] +; EMPTY: Type Info Stream (IPI) { +; EMPTY-NEXT: IPI Version: 20040203 +; EMPTY-NEXT: Record count: 15 +; EMPTY-NEXT: Records [ +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1000) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::threadingAttribute (0x100B) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 481 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 0B100000 01000000 E1010000 0100F2F1 |................| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1001) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::event_receiverAttribute (0x1017) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 194 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 17100000 01000000 C2000000 0100F2F1 |................| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1002) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::aggregatableAttribute (0x1021) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 603 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 21100000 01000000 5B020000 0100F2F1 |!.......[.......| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1003) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::event_sourceAttribute (0x102C) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 1200 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 2C100000 01000000 B0040000 0100F2F1 |,...............| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1004) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::moduleAttribute (0x103A) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 540 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 3A100000 01000000 1C020000 0100F2F1 |:...............| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1005) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 108 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 42100000 01000000 6C000000 0100F2F1 |B.......l.......| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: UdtModSourceLine (0x1006) { +; EMPTY-NEXT: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; EMPTY-NEXT: UDT: __vc_attributes::helper_attributes::v1_alttypeAttribute (0x104A) +; EMPTY-NEXT: SourceFile: (0x1) +; EMPTY-NEXT: LineNumber: 96 +; EMPTY-NEXT: Module: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 4A100000 01000000 60000000 0100F2F1 |J.......`.......| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x1007) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: 0x0 +; EMPTY-NEXT: StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 643A5C73 72635C6C 6C766D5C |....d:\src\llvm\| +; EMPTY-NEXT: 0010: 74657374 5C446562 7567496E 666F5C50 |test\DebugInfo\P| +; EMPTY-NEXT: 0020: 44425C49 6E707574 7300F2F1 |DB\Inputs...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x1008) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: 0x0 +; EMPTY-NEXT: StringData: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 433A5C50 726F6772 616D2046 |....C:\Program F| +; EMPTY-NEXT: 0010: 696C6573 20287838 36295C4D 6963726F |iles (x86)\Micro| +; EMPTY-NEXT: 0020: 736F6674 20566973 75616C20 53747564 |soft Visual Stud| +; EMPTY-NEXT: 0030: 696F2031 322E305C 56435C42 494E5C63 |io 12.0\VC\BIN\c| +; EMPTY-NEXT: 0040: 6C2E6578 6500F2F1 |l.exe...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x1009) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: 0x0 +; EMPTY-NEXT: StringData: empty.cpp +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 656D7074 792E6370 7000F2F1 |....empty.cpp...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x100A) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: 0x0 +; EMPTY-NEXT: StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 643A5C73 72635C6C 6C766D5C |....d:\src\llvm\| +; EMPTY-NEXT: 0010: 74657374 5C446562 7567496E 666F5C50 |test\DebugInfo\P| +; EMPTY-NEXT: 0020: 44425C49 6E707574 735C7663 3132302E |DB\Inputs\vc120.| +; EMPTY-NEXT: 0030: 70646200 |pdb.| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x100B) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: 0x0 +; EMPTY-NEXT: StringData: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 2D5A6920 2D4D5420 2D492243 |....-Zi -MT -I"C| +; EMPTY-NEXT: 0010: 3A5C5072 6F677261 6D204669 6C657320 |:\Program Files | +; EMPTY-NEXT: 0020: 28783836 295C4D69 63726F73 6F667420 |(x86)\Microsoft | +; EMPTY-NEXT: 0030: 56697375 616C2053 74756469 6F203132 |Visual Studio 12| +; EMPTY-NEXT: 0040: 2E305C56 435C494E 434C5544 4522202D |.0\VC\INCLUDE" -| +; EMPTY-NEXT: 0050: 4922433A 5C50726F 6772616D 2046696C |I"C:\Program Fil| +; EMPTY-NEXT: 0060: 65732028 78383629 5C4D6963 726F736F |es (x86)\Microso| +; EMPTY-NEXT: 0070: 66742056 69737561 6C205374 7564696F |ft Visual Studio| +; EMPTY-NEXT: 0080: 2031322E 305C5643 5C41544C 4D46435C | 12.0\VC\ATLMFC\| +; EMPTY-NEXT: 0090: 494E434C 55444522 202D4922 433A5C50 |INCLUDE" -I"C:\P| +; EMPTY-NEXT: 00A0: 726F6772 616D2046 696C6573 20287838 |rogram Files (x8| +; EMPTY-NEXT: 00B0: 36295C57 696E646F 7773204B 6974735C |6)\Windows Kits\| +; EMPTY-NEXT: 00C0: 382E315C 696E636C 7564655C 73686172 |8.1\include\shar| +; EMPTY-NEXT: 00D0: 65642220 2D492243 3A5C5072 6F677261 |ed" -I"C:\Progra| +; EMPTY-NEXT: 00E0: 6D204669 6C657320 28783836 295C5769 |m Files (x86)\Wi| +; EMPTY-NEXT: 00F0: 6E646F77 7300F2F1 |ndows...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringList (0x100C) { +; EMPTY-NEXT: TypeLeafKind: LF_SUBSTR_LIST (0x1604) +; EMPTY-NEXT: NumStrings: 1 +; EMPTY-NEXT: Strings [ +; EMPTY-NEXT: String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 01000000 0B100000 |........| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: StringId (0x100D) { +; EMPTY-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +; EMPTY-NEXT: Id: "-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows" (0x100C) +; EMPTY-NEXT: StringData: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 0C100000 204B6974 735C382E 315C696E |.... Kits\8.1\in| +; EMPTY-NEXT: 0010: 636C7564 655C756D 22202D49 22433A5C |clude\um" -I"C:\| +; EMPTY-NEXT: 0020: 50726F67 72616D20 46696C65 73202878 |Program Files (x| +; EMPTY-NEXT: 0030: 3836295C 57696E64 6F777320 4B697473 |86)\Windows Kits| +; EMPTY-NEXT: 0040: 5C382E31 5C696E63 6C756465 5C77696E |\8.1\include\win| +; EMPTY-NEXT: 0050: 72742220 2D545020 2D5800F1 |rt" -TP -X..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: BuildInfo (0x100E) { +; EMPTY-NEXT: TypeLeafKind: LF_BUILDINFO (0x1603) +; EMPTY-NEXT: NumArgs: 5 +; EMPTY-NEXT: Arguments [ +; EMPTY-NEXT: ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs (0x1007) +; EMPTY-NEXT: ArgType: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe (0x1008) +; EMPTY-NEXT: ArgType: empty.cpp (0x1009) +; EMPTY-NEXT: ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb (0x100A) +; EMPTY-NEXT: ArgType: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X (0x100D) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 05000710 00000810 00000910 00000A10 |................| +; EMPTY-NEXT: 0010: 00000D10 0000F2F1 |........| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: TypeIndexOffsets [ +; EMPTY-NEXT: Index: 0x1000, Offset: 0 +; EMPTY-NEXT: ] +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY: DBI Stream { +; EMPTY-NEXT: Dbi Version: 19990903 +; EMPTY-NEXT: Age: 1 +; EMPTY-NEXT: Incremental Linking: Yes +; EMPTY-NEXT: Has CTypes: No +; EMPTY-NEXT: Is Stripped: No +; EMPTY-NEXT: Machine Type: x86 +; EMPTY-NEXT: Symbol Record Stream Index: 8 +; EMPTY-NEXT: Public Symbol Stream Index: 7 +; EMPTY-NEXT: Global Symbol Stream Index: 6 +; EMPTY-NEXT: Toolchain Version: 12.0 +; EMPTY-NEXT: mspdb120.dll version: 12.0.31101 +; EMPTY-NEXT: Modules [ +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; EMPTY-NEXT: Debug Stream Index: 12 +; EMPTY-NEXT: Object File Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; EMPTY-NEXT: Num Files: 1 +; EMPTY-NEXT: Source File Name Idx: 0 +; EMPTY-NEXT: Pdb File Name Idx: 0 +; EMPTY-NEXT: Line Info Byte Size: 0 +; EMPTY-NEXT: C13 Line Info Byte Size: 88 +; EMPTY-NEXT: Symbol Byte Size: 208 +; EMPTY-NEXT: Type Server Index: 0 +; EMPTY-NEXT: Has EC Info: No +; EMPTY-NEXT: 1 Contributing Source Files [ +; EMPTY-NEXT: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +; EMPTY-NEXT: ] +; EMPTY-NEXT: Symbols [ +; EMPTY-NEXT: { +; EMPTY-NEXT: ObjectName { +; EMPTY-NEXT: Signature: 0x0 +; EMPTY-NEXT: ObjectName: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 643A5C73 72635C6C 6C766D5C |....d:\src\llvm\| +; EMPTY-NEXT: 0010: 74657374 5C446562 7567496E 666F5C50 |test\DebugInfo\P| +; EMPTY-NEXT: 0020: 44425C49 6E707574 735C656D 7074792E |DB\Inputs\empty.| +; EMPTY-NEXT: 0030: 6F626A00 |obj.| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: CompilerFlags3 { +; EMPTY-NEXT: Language: Cpp (0x1) +; EMPTY-NEXT: Flags [ (0x2000) +; EMPTY-NEXT: SecurityChecks (0x2000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Machine: Pentium3 (0x7) +; EMPTY-NEXT: FrontendVersion: 18.0.31101.0 +; EMPTY-NEXT: BackendVersion: 18.0.31101.0 +; EMPTY-NEXT: VersionName: Microsoft (R) Optimizing Compiler +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 01200000 07001200 00007D79 00001200 |. ........}y....| +; EMPTY-NEXT: 0010: 00007D79 00004D69 63726F73 6F667420 |..}y..Microsoft | +; EMPTY-NEXT: 0020: 28522920 4F707469 6D697A69 6E672043 |(R) Optimizing C| +; EMPTY-NEXT: 0030: 6F6D7069 6C657200 |ompiler.| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: ProcStart { +; EMPTY-NEXT: Kind: S_GPROC32 (0x1110) +; EMPTY-NEXT: PtrParent: 0x0 +; EMPTY-NEXT: PtrEnd: 0xC4 +; EMPTY-NEXT: PtrNext: 0x0 +; EMPTY-NEXT: CodeSize: 0xA +; EMPTY-NEXT: DbgStart: 0x3 +; EMPTY-NEXT: DbgEnd: 0x8 +; EMPTY-NEXT: FunctionType: int () (0x1001) +; EMPTY-NEXT: Segment: 0x1 +; EMPTY-NEXT: Flags [ (0x1) +; EMPTY-NEXT: HasFP (0x1) +; EMPTY-NEXT: ] +; EMPTY-NEXT: DisplayName: main +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 C4000000 00000000 0A000000 |................| +; EMPTY-NEXT: 0010: 03000000 08000000 01100000 10000000 |................| +; EMPTY-NEXT: 0020: 0100016D 61696E00 |...main.| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: FrameProc { +; EMPTY-NEXT: TotalFrameBytes: 0x0 +; EMPTY-NEXT: PaddingFrameBytes: 0x0 +; EMPTY-NEXT: OffsetToPadding: 0x0 +; EMPTY-NEXT: BytesOfCalleeSavedRegisters: 0x0 +; EMPTY-NEXT: OffsetOfExceptionHandler: 0x0 +; EMPTY-NEXT: SectionIdOfExceptionHandler: 0x0 +; EMPTY-NEXT: Flags [ (0x128200) +; EMPTY-NEXT: AsynchronousExceptionHandling (0x200) +; EMPTY-NEXT: OptimizedForSpeed (0x100000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 00000000 00000000 00000000 |................| +; EMPTY-NEXT: 0010: 00000000 00000082 12000000 |............| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: BlockEnd { +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: BuildInfo { +; EMPTY-NEXT: BuildId: 4110 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 0E100000 |....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: Subsections [ +; EMPTY-NEXT: Lines { +; EMPTY-NEXT: RelocSegment: 1 +; EMPTY-NEXT: RelocOffset: 16 +; EMPTY-NEXT: CodeSize: 10 +; EMPTY-NEXT: HasColumns: No +; EMPTY-NEXT: FileEntry { +; EMPTY-NEXT: FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +; EMPTY-NEXT: Line { +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: LineNumberStart: 5 +; EMPTY-NEXT: EndDelta: 0 +; EMPTY-NEXT: IsStatement: Yes +; EMPTY-NEXT: } +; EMPTY-NEXT: Line { +; EMPTY-NEXT: Offset: 3 +; EMPTY-NEXT: LineNumberStart: 6 +; EMPTY-NEXT: EndDelta: 0 +; EMPTY-NEXT: IsStatement: Yes +; EMPTY-NEXT: } +; EMPTY-NEXT: Line { +; EMPTY-NEXT: Offset: 8 +; EMPTY-NEXT: LineNumberStart: 7 +; EMPTY-NEXT: EndDelta: 0 +; EMPTY-NEXT: IsStatement: Yes +; EMPTY-NEXT: } +; EMPTY-NEXT: } +; EMPTY-NEXT: } +; EMPTY-NEXT: FileChecksums { +; EMPTY-NEXT: Checksum { +; EMPTY-NEXT: FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +; EMPTY-NEXT: Kind: MD5 (0x1) +; EMPTY-NEXT: Checksum ( +; EMPTY-NEXT: 0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC |....>...)...&...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: * Linker * +; EMPTY-NEXT: Debug Stream Index: 14 +; EMPTY-NEXT: Object File Name: +; EMPTY-NEXT: Num Files: 0 +; EMPTY-NEXT: Source File Name Idx: 0 +; EMPTY-NEXT: Pdb File Name Idx: 1 +; EMPTY-NEXT: Line Info Byte Size: 0 +; EMPTY-NEXT: C13 Line Info Byte Size: 0 +; EMPTY-NEXT: Symbol Byte Size: 516 +; EMPTY-NEXT: Type Server Index: 0 +; EMPTY-NEXT: Has EC Info: No +; EMPTY-NEXT: 0 Contributing Source Files [ +; EMPTY-NEXT: ] +; EMPTY-NEXT: Symbols [ +; EMPTY-NEXT: { +; EMPTY-NEXT: ObjectName { +; EMPTY-NEXT: Signature: 0x0 +; EMPTY-NEXT: ObjectName: * Linker * +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 2A204C69 6E6B6572 202A0000 |....* Linker *..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: CompilerFlags3 { +; EMPTY-NEXT: Language: Link (0x7) +; EMPTY-NEXT: Flags [ (0x0) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Machine: Intel80386 (0x3) +; EMPTY-NEXT: FrontendVersion: 0.0.0.0 +; EMPTY-NEXT: BackendVersion: 12.0.31101.0 +; EMPTY-NEXT: VersionName: Microsoft (R) LINK +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 07000000 03000000 00000000 00000C00 |................| +; EMPTY-NEXT: 0010: 00007D79 00004D69 63726F73 6F667420 |..}y..Microsoft | +; EMPTY-NEXT: 0020: 28522920 4C494E4B 00000000 |(R) LINK....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: EnvBlock { +; EMPTY-NEXT: Entries [ +; EMPTY-NEXT: cwd +; EMPTY-NEXT: d:\src\llvm\test\DebugInfo\PDB\Inputs +; EMPTY-NEXT: exe +; EMPTY-NEXT: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe +; EMPTY-NEXT: pdb +; EMPTY-NEXT: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00637764 00643A5C 7372635C 6C6C766D |.cwd.d:\src\llvm| +; EMPTY-NEXT: 0010: 5C746573 745C4465 62756749 6E666F5C |\test\DebugInfo\| +; EMPTY-NEXT: 0020: 5044425C 496E7075 74730065 78650043 |PDB\Inputs.exe.C| +; EMPTY-NEXT: 0030: 3A5C5072 6F677261 6D204669 6C657320 |:\Program Files | +; EMPTY-NEXT: 0040: 28783836 295C4D69 63726F73 6F667420 |(x86)\Microsoft | +; EMPTY-NEXT: 0050: 56697375 616C2053 74756469 6F203132 |Visual Studio 12| +; EMPTY-NEXT: 0060: 2E305C56 435C4249 4E5C6C69 6E6B2E65 |.0\VC\BIN\link.e| +; EMPTY-NEXT: 0070: 78650070 64620064 3A5C7372 635C6C6C |xe.pdb.d:\src\ll| +; EMPTY-NEXT: 0080: 766D5C74 6573745C 44656275 67496E66 |vm\test\DebugInf| +; EMPTY-NEXT: 0090: 6F5C5044 425C496E 70757473 5C656D70 |o\PDB\Inputs\emp| +; EMPTY-NEXT: 00A0: 74792E70 64620000 |ty.pdb..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Trampoline { +; EMPTY-NEXT: Type: TrampIncremental (0x0) +; EMPTY-NEXT: Size: 5 +; EMPTY-NEXT: ThunkOff: 5 +; EMPTY-NEXT: TargetOff: 16 +; EMPTY-NEXT: ThunkSection: 1 +; EMPTY-NEXT: TargetSection: 1 +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000500 05000000 10000000 01000100 |................| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Section { +; EMPTY-NEXT: SectionNumber: 1 +; EMPTY-NEXT: Alignment: 12 +; EMPTY-NEXT: Rva: 4096 +; EMPTY-NEXT: Length: 4122 +; EMPTY-NEXT: Characteristics [ (0x60000020) +; EMPTY-NEXT: IMAGE_SCN_CNT_CODE (0x20) +; EMPTY-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Name: .text +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 01000C00 00100000 1A100000 20000060 |............ ..`| +; EMPTY-NEXT: 0010: 2E746578 74000000 |.text...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: COFF Group { +; EMPTY-NEXT: Size: 4122 +; EMPTY-NEXT: Characteristics [ (0x60000020) +; EMPTY-NEXT: IMAGE_SCN_CNT_CODE (0x20) +; EMPTY-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: Segment: 1 +; EMPTY-NEXT: Name: .text$mn +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 1A100000 20000060 00000000 01002E74 |.... ..`.......t| +; EMPTY-NEXT: 0010: 65787424 6D6E0000 |ext$mn..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Section { +; EMPTY-NEXT: SectionNumber: 2 +; EMPTY-NEXT: Alignment: 12 +; EMPTY-NEXT: Rva: 12288 +; EMPTY-NEXT: Length: 690 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Name: .rdata +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 02000C00 00300000 B2020000 40000040 |.....0......@..@| +; EMPTY-NEXT: 0010: 2E726461 74610000 |.rdata..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: COFF Group { +; EMPTY-NEXT: Size: 323 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: Segment: 2 +; EMPTY-NEXT: Name: .rdata +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 43010000 40000040 00000000 02002E72 |C...@..@.......r| +; EMPTY-NEXT: 0010: 64617461 00000000 |data....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: COFF Group { +; EMPTY-NEXT: Size: 0 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Offset: 323 +; EMPTY-NEXT: Segment: 2 +; EMPTY-NEXT: Name: .edata +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 40000040 43010000 02002E65 |....@..@C......e| +; EMPTY-NEXT: 0010: 64617461 00000000 |data....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: COFF Group { +; EMPTY-NEXT: Size: 366 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Offset: 324 +; EMPTY-NEXT: Segment: 2 +; EMPTY-NEXT: Name: .rdata$debug +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 6E010000 40000040 44010000 02002E72 |n...@..@D......r| +; EMPTY-NEXT: 0010: 64617461 24646562 75670000 |data$debug..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Section { +; EMPTY-NEXT: SectionNumber: 3 +; EMPTY-NEXT: Alignment: 12 +; EMPTY-NEXT: Rva: 16384 +; EMPTY-NEXT: Length: 4 +; EMPTY-NEXT: Characteristics [ (0xC0000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Name: .data +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 03000C00 00400000 04000000 400000C0 |.....@......@...| +; EMPTY-NEXT: 0010: 2E646174 61000000 |.data...| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: COFF Group { +; EMPTY-NEXT: Size: 4 +; EMPTY-NEXT: Characteristics [ (0xC0000080) +; EMPTY-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: Segment: 3 +; EMPTY-NEXT: Name: .bss +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 04000000 800000C0 00000000 03002E62 |...............b| +; EMPTY-NEXT: 0010: 73730000 |ss..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Section { +; EMPTY-NEXT: SectionNumber: 4 +; EMPTY-NEXT: Alignment: 12 +; EMPTY-NEXT: Rva: 20480 +; EMPTY-NEXT: Length: 8 +; EMPTY-NEXT: Characteristics [ (0x42000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Name: .reloc +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 04000C00 00500000 08000000 40000042 |.....P......@..B| +; EMPTY-NEXT: 0010: 2E72656C 6F630000 |.reloc..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: Subsections [ +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Section Contributions [ +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 1 +; EMPTY-NEXT: Off: 0 +; EMPTY-NEXT: Size: 10 +; EMPTY-NEXT: Characteristics [ (0x60000020) +; EMPTY-NEXT: IMAGE_SCN_CNT_CODE (0x20) +; EMPTY-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 1 +; EMPTY-NEXT: Name: * Linker * +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 0 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 1 +; EMPTY-NEXT: Off: 16 +; EMPTY-NEXT: Size: 10 +; EMPTY-NEXT: Characteristics [ (0x60500020) +; EMPTY-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +; EMPTY-NEXT: IMAGE_SCN_CNT_CODE (0x20) +; EMPTY-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 0 +; EMPTY-NEXT: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 3617027124 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 2 +; EMPTY-NEXT: Off: 0 +; EMPTY-NEXT: Size: 56 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 1 +; EMPTY-NEXT: Name: * Linker * +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 0 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 2 +; EMPTY-NEXT: Off: 324 +; EMPTY-NEXT: Size: 72 +; EMPTY-NEXT: Characteristics [ (0x40300040) +; EMPTY-NEXT: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 1 +; EMPTY-NEXT: Name: * Linker * +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 0 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 2 +; EMPTY-NEXT: Off: 396 +; EMPTY-NEXT: Size: 20 +; EMPTY-NEXT: Characteristics [ (0x40300040) +; EMPTY-NEXT: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 1 +; EMPTY-NEXT: Name: * Linker * +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 0 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: Contribution { +; EMPTY-NEXT: ISect: 3 +; EMPTY-NEXT: Off: 0 +; EMPTY-NEXT: Size: 4 +; EMPTY-NEXT: Characteristics [ (0xC0300080) +; EMPTY-NEXT: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; EMPTY-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Module { +; EMPTY-NEXT: Index: 0 +; EMPTY-NEXT: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; EMPTY-NEXT: } +; EMPTY-NEXT: Data CRC: 0 +; EMPTY-NEXT: Reloc CRC: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: Section Map [ +; EMPTY-NEXT: Entry { +; EMPTY-NEXT: Flags [ (0x10D) +; EMPTY-NEXT: AddressIs32Bit (0x8) +; EMPTY-NEXT: Execute (0x4) +; EMPTY-NEXT: IsSelector (0x100) +; EMPTY-NEXT: Read (0x1) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Ovl: 0 +; EMPTY-NEXT: Group: 0 +; EMPTY-NEXT: Frame: 1 +; EMPTY-NEXT: SecName: 65535 +; EMPTY-NEXT: ClassName: 65535 +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: SecByteLength: 4122 +; EMPTY-NEXT: } +; EMPTY-NEXT: Entry { +; EMPTY-NEXT: Flags [ (0x109) +; EMPTY-NEXT: AddressIs32Bit (0x8) +; EMPTY-NEXT: IsSelector (0x100) +; EMPTY-NEXT: Read (0x1) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Ovl: 0 +; EMPTY-NEXT: Group: 0 +; EMPTY-NEXT: Frame: 2 +; EMPTY-NEXT: SecName: 65535 +; EMPTY-NEXT: ClassName: 65535 +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: SecByteLength: 690 +; EMPTY-NEXT: } +; EMPTY-NEXT: Entry { +; EMPTY-NEXT: Flags [ (0x10B) +; EMPTY-NEXT: AddressIs32Bit (0x8) +; EMPTY-NEXT: IsSelector (0x100) +; EMPTY-NEXT: Read (0x1) +; EMPTY-NEXT: Write (0x2) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Ovl: 0 +; EMPTY-NEXT: Group: 0 +; EMPTY-NEXT: Frame: 3 +; EMPTY-NEXT: SecName: 65535 +; EMPTY-NEXT: ClassName: 65535 +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: SecByteLength: 4 +; EMPTY-NEXT: } +; EMPTY-NEXT: Entry { +; EMPTY-NEXT: Flags [ (0x109) +; EMPTY-NEXT: AddressIs32Bit (0x8) +; EMPTY-NEXT: IsSelector (0x100) +; EMPTY-NEXT: Read (0x1) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Ovl: 0 +; EMPTY-NEXT: Group: 0 +; EMPTY-NEXT: Frame: 4 +; EMPTY-NEXT: SecName: 65535 +; EMPTY-NEXT: ClassName: 65535 +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: SecByteLength: 8 +; EMPTY-NEXT: } +; EMPTY-NEXT: Entry { +; EMPTY-NEXT: Flags [ (0x208) +; EMPTY-NEXT: AddressIs32Bit (0x8) +; EMPTY-NEXT: IsAbsoluteAddress (0x200) +; EMPTY-NEXT: ] +; EMPTY-NEXT: Ovl: 0 +; EMPTY-NEXT: Group: 0 +; EMPTY-NEXT: Frame: 0 +; EMPTY-NEXT: SecName: 65535 +; EMPTY-NEXT: ClassName: 65535 +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: SecByteLength: 4294967295 +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: Globals Stream { +; EMPTY-NEXT: Stream number: 6 +; EMPTY-NEXT: Number of buckets: 2 +; EMPTY-NEXT: Hash Buckets: [0, 12] +; EMPTY-NEXT: } +; EMPTY-NEXT: Publics Stream { +; EMPTY-NEXT: Stream number: 7 +; EMPTY-NEXT: SymHash: 556 +; EMPTY-NEXT: AddrMap: 8 +; EMPTY-NEXT: Number of buckets: 2 +; EMPTY-NEXT: Hash Buckets: [0, 12] +; EMPTY-NEXT: Address Map: [36, 0] +; EMPTY-NEXT: Thunk Map: [4112] +; EMPTY-NEXT: Section Offsets: [4096, 1] +; EMPTY-NEXT: Symbols [ +; EMPTY-NEXT: { +; EMPTY-NEXT: PublicSym { +; EMPTY-NEXT: Type: 0 +; EMPTY-NEXT: Seg: 3 +; EMPTY-NEXT: Off: 0 +; EMPTY-NEXT: Name: ?__purecall@@3PAXA +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 00000000 03003F5F 5F707572 |..........?__pur| +; EMPTY-NEXT: 0010: 6563616C 6C404033 50415841 00000000 |ecall@@3PAXA....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: PublicSym { +; EMPTY-NEXT: Type: 2 +; EMPTY-NEXT: Seg: 1 +; EMPTY-NEXT: Off: 16 +; EMPTY-NEXT: Name: _main +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 02000000 10000000 01005F6D 61696E00 |.........._main.| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: ProcRef { +; EMPTY-NEXT: SumName: 0 +; EMPTY-NEXT: SymOffset: 120 +; EMPTY-NEXT: Mod: 1 +; EMPTY-NEXT: Name: main +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 00000000 78000000 01006D61 696E0000 |....x.....main..| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: DataSym { +; EMPTY-NEXT: Kind: S_GDATA32 (0x110D) +; EMPTY-NEXT: Type: void* (0x403) +; EMPTY-NEXT: DisplayName: __purecall +; EMPTY-NEXT: } +; EMPTY-NEXT: Bytes ( +; EMPTY-NEXT: 0000: 03040000 00000000 03005F5F 70757265 |..........__pure| +; EMPTY-NEXT: 0010: 63616C6C 00000000 |call....| +; EMPTY-NEXT: ) +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: Section Headers [ +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: .text +; EMPTY-NEXT: Virtual Size: 4122 +; EMPTY-NEXT: Virtual Address: 4096 +; EMPTY-NEXT: Size of Raw Data: 4608 +; EMPTY-NEXT: File Pointer to Raw Data: 1024 +; EMPTY-NEXT: File Pointer to Relocations: 0 +; EMPTY-NEXT: File Pointer to Linenumbers: 0 +; EMPTY-NEXT: Number of Relocations: 0 +; EMPTY-NEXT: Number of Linenumbers: 0 +; EMPTY-NEXT: Characteristics [ (0x60000020) +; EMPTY-NEXT: IMAGE_SCN_CNT_CODE (0x20) +; EMPTY-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: .rdata +; EMPTY-NEXT: Virtual Size: 690 +; EMPTY-NEXT: Virtual Address: 12288 +; EMPTY-NEXT: Size of Raw Data: 1024 +; EMPTY-NEXT: File Pointer to Raw Data: 5632 +; EMPTY-NEXT: File Pointer to Relocations: 0 +; EMPTY-NEXT: File Pointer to Linenumbers: 0 +; EMPTY-NEXT: Number of Relocations: 0 +; EMPTY-NEXT: Number of Linenumbers: 0 +; EMPTY-NEXT: Characteristics [ (0x40000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: .data +; EMPTY-NEXT: Virtual Size: 4 +; EMPTY-NEXT: Virtual Address: 16384 +; EMPTY-NEXT: Size of Raw Data: 0 +; EMPTY-NEXT: File Pointer to Raw Data: 0 +; EMPTY-NEXT: File Pointer to Relocations: 0 +; EMPTY-NEXT: File Pointer to Linenumbers: 0 +; EMPTY-NEXT: Number of Relocations: 0 +; EMPTY-NEXT: Number of Linenumbers: 0 +; EMPTY-NEXT: Characteristics [ (0xC0000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Name: .reloc +; EMPTY-NEXT: Virtual Size: 8 +; EMPTY-NEXT: Virtual Address: 20480 +; EMPTY-NEXT: Size of Raw Data: 512 +; EMPTY-NEXT: File Pointer to Raw Data: 6656 +; EMPTY-NEXT: File Pointer to Relocations: 0 +; EMPTY-NEXT: File Pointer to Linenumbers: 0 +; EMPTY-NEXT: Number of Relocations: 0 +; EMPTY-NEXT: Number of Linenumbers: 0 +; EMPTY-NEXT: Characteristics [ (0x42000040) +; EMPTY-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; EMPTY-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000) +; EMPTY-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +; EMPTY-NEXT: ] +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; EMPTY: New FPO [ +; EMPTY-NEXT: { +; EMPTY-NEXT: Offset: 4112 +; EMPTY-NEXT: Size: 10 +; EMPTY-NEXT: Number of locals: 0 +; EMPTY-NEXT: Number of params: 0 +; EMPTY-NEXT: Size of Prolog: 0 +; EMPTY-NEXT: Number of Saved Registers: 0 +; EMPTY-NEXT: Has SEH: No +; EMPTY-NEXT: Use BP: No +; EMPTY-NEXT: Frame Pointer: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: { +; EMPTY-NEXT: Offset: 0 +; EMPTY-NEXT: Size: 134 +; EMPTY-NEXT: Number of locals: 3 +; EMPTY-NEXT: Number of params: 4 +; EMPTY-NEXT: Size of Prolog: 0 +; EMPTY-NEXT: Number of Saved Registers: 0 +; EMPTY-NEXT: Has SEH: No +; EMPTY-NEXT: Use BP: No +; EMPTY-NEXT: Frame Pointer: 0 +; EMPTY-NEXT: } +; EMPTY-NEXT: ] +; ALL: FileHeaders { +; ALL: BlockSize: 4096 +; ALL: FreeBlockMap: 2 +; ALL: NumBlocks: 25 +; ALL: NumDirectoryBytes: 136 +; ALL: Unknown1: 0 +; ALL: BlockMapAddr: 24 +; ALL: NumDirectoryBlocks: 1 +; ALL: DirectoryBlocks: [23] +; ALL: NumStreams: 17 +; ALL: } +; ALL: Streams [ +; ALL: Stream 0: [Old MSF Directory] (40 bytes) +; ALL: Stream 1: [PDB Stream] (118 bytes) +; ALL: Stream 2: [TPI Stream] (5392 bytes) +; ALL: Stream 3: [DBI Stream] (739 bytes) +; ALL: Stream 4: [IPI Stream] (784 bytes) +; ALL: Stream 5: [Named Stream "/LinkInfo"] (0 bytes) +; ALL: Stream 6: [Global Symbol Hash] (556 bytes) +; ALL: Stream 7: [Public Symbol Hash] (604 bytes) +; ALL: Stream 8: [Public Symbol Records] (104 bytes) +; ALL: Stream 9: [Named Stream "/src/headerblock"] (0 bytes) +; ALL: Stream 10: [Section Header Data] (160 bytes) +; ALL: Stream 11: [New FPO Data] (32 bytes) +; ALL: Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes) +; ALL: Stream 13: [Named Stream "/names"] (239 bytes) +; ALL: Stream 14: [Module "* Linker *"] (520 bytes) +; ALL: Stream 15: [TPI Hash] (308 bytes) +; ALL: Stream 16: [IPI Hash] (68 bytes) +; ALL: ] +; ALL: Msf Free Pages: [3, 4, 5, 8, 9] +; ALL: Orphaned Pages: [] +; ALL: Multiply Used Pages: [] +; ALL: Use After Free Pages: [] +; ALL: StreamBlocks [ +; ALL: Stream 0: [8] +; ALL: Stream 1: [19] +; ALL: Stream 2: [18, 17] +; ALL: Stream 3: [14] +; ALL: Stream 4: [20] +; ALL: Stream 5: [] +; ALL: Stream 6: [11] +; ALL: Stream 7: [13] +; ALL: Stream 8: [12] +; ALL: Stream 9: [] +; ALL: Stream 10: [10] +; ALL: Stream 11: [15] +; ALL: Stream 12: [6] +; ALL: Stream 13: [16] +; ALL: Stream 14: [7] +; ALL: Stream 15: [21] +; ALL: Stream 16: [22] +; ALL: ] +; ALL: PDB Stream { +; ALL: Version: 20000404 +; ALL: Signature: 0x54E507E2 +; ALL: Age: 1 +; ALL: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; ALL: Features: 0x1 +; ALL: } +; ALL: Type Info Stream (IPI) { +; ALL: IPI Version: 20040203 +; ALL: Record count: 15 +; ALL: Records [ +; ALL: { +; ALL: UdtModSourceLine (0x1000) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::threadingAttribute (0x100B) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 481 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1001) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::event_receiverAttribute (0x1017) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 194 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1002) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::aggregatableAttribute (0x1021) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 603 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1003) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::event_sourceAttribute (0x102C) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 1200 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1004) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::moduleAttribute (0x103A) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 540 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1005) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 108 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: UdtModSourceLine (0x1006) { +; ALL: TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607) +; ALL: UDT: __vc_attributes::helper_attributes::v1_alttypeAttribute (0x104A) +; ALL: SourceFile: (0x1) +; ALL: LineNumber: 96 +; ALL: Module: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x1007) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: 0x0 +; ALL: StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x1008) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: 0x0 +; ALL: StringData: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x1009) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: 0x0 +; ALL: StringData: empty.cpp +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x100A) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: 0x0 +; ALL: StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x100B) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: 0x0 +; ALL: StringData: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows +; ALL: } +; ALL: } +; ALL: { +; ALL: StringList (0x100C) { +; ALL: TypeLeafKind: LF_SUBSTR_LIST (0x1604) +; ALL: NumStrings: 1 +; ALL: Strings [ +; ALL: String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows (0x100B) +; ALL: ] +; ALL: } +; ALL: } +; ALL: { +; ALL: StringId (0x100D) { +; ALL: TypeLeafKind: LF_STRING_ID (0x1605) +; ALL: Id: "-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows" (0x100C) +; ALL: StringData: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X +; ALL: } +; ALL: } +; ALL: { +; ALL: BuildInfo (0x100E) { +; ALL: TypeLeafKind: LF_BUILDINFO (0x1603) +; ALL: NumArgs: 5 +; ALL: Arguments [ +; ALL: ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs (0x1007) +; ALL: ArgType: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe (0x1008) +; ALL: ArgType: empty.cpp (0x1009) +; ALL: ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb (0x100A) +; ALL: ArgType: Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X (0x100D) +; ALL: ] +; ALL: } +; ALL: } +; ALL: ] +; ALL: } +; ALL: DBI Stream { +; ALL: Dbi Version: 19990903 +; ALL: Age: 1 +; ALL: Incremental Linking: Yes +; ALL: Has CTypes: No +; ALL: Is Stripped: No +; ALL: Machine Type: x86 +; ALL: Symbol Record Stream Index: 8 +; ALL: Public Symbol Stream Index: 7 +; ALL: Global Symbol Stream Index: 6 +; ALL: Toolchain Version: 12.0 +; ALL: mspdb120.dll version: 12.0.31101 +; ALL: Modules [ +; ALL: { +; ALL: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; ALL: Debug Stream Index: 12 +; ALL: Object File Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; ALL: Num Files: 1 +; ALL: Source File Name Idx: 0 +; ALL: Pdb File Name Idx: 0 +; ALL: Line Info Byte Size: 0 +; ALL: C13 Line Info Byte Size: 88 +; ALL: Symbol Byte Size: 208 +; ALL: Type Server Index: 0 +; ALL: Has EC Info: No +; ALL: 1 Contributing Source Files [ +; ALL: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp +; ALL: ] +; ALL: Symbols [ +; ALL: { +; ALL: ObjectName { +; ALL: Signature: 0x0 +; ALL: ObjectName: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; ALL: } +; ALL: } +; ALL: { +; ALL: CompilerFlags3 { +; ALL: Language: Cpp (0x1) +; ALL: Flags [ (0x2000) +; ALL: SecurityChecks (0x2000) +; ALL: ] +; ALL: Machine: Pentium3 (0x7) +; ALL: FrontendVersion: 18.0.31101.0 +; ALL: BackendVersion: 18.0.31101.0 +; ALL: VersionName: Microsoft (R) Optimizing Compiler +; ALL: } +; ALL: } +; ALL: { +; ALL: ProcStart { +; ALL: PtrParent: 0x0 +; ALL: PtrEnd: 0xC4 +; ALL: PtrNext: 0x0 +; ALL: CodeSize: 0xA +; ALL: DbgStart: 0x3 +; ALL: DbgEnd: 0x8 +; ALL: FunctionType: int () (0x1001) +; ALL: Segment: 0x1 +; ALL: Flags [ (0x1) +; ALL: HasFP (0x1) +; ALL: ] +; ALL: DisplayName: main +; ALL: } +; ALL: } +; ALL: { +; ALL: FrameProc { +; ALL: TotalFrameBytes: 0x0 +; ALL: PaddingFrameBytes: 0x0 +; ALL: OffsetToPadding: 0x0 +; ALL: BytesOfCalleeSavedRegisters: 0x0 +; ALL: OffsetOfExceptionHandler: 0x0 +; ALL: SectionIdOfExceptionHandler: 0x0 +; ALL: Flags [ (0x128200) +; ALL: AsynchronousExceptionHandling (0x200) +; ALL: OptimizedForSpeed (0x100000) +; ALL: ] +; ALL: } +; ALL: } +; ALL: { +; ALL: BlockEnd { +; ALL: } +; ALL: } +; ALL: { +; ALL: BuildInfo { +; ALL: BuildId: 4110 +; ALL: } +; ALL: } +; ALL: ] +; ALL: } +; ALL: { +; ALL: Name: * Linker * +; ALL: Debug Stream Index: 14 +; ALL: Object File Name: +; ALL: Num Files: 0 +; ALL: Source File Name Idx: 0 +; ALL: Pdb File Name Idx: 1 +; ALL: Line Info Byte Size: 0 +; ALL: C13 Line Info Byte Size: 0 +; ALL: Symbol Byte Size: 516 +; ALL: Type Server Index: 0 +; ALL: Has EC Info: No +; ALL: 0 Contributing Source Files [ +; ALL: ] +; ALL: Symbols [ +; ALL: { +; ALL: ObjectName { +; ALL: Signature: 0x0 +; ALL: ObjectName: * Linker * +; ALL: } +; ALL: } +; ALL: { +; ALL: CompilerFlags3 { +; ALL: Language: Link (0x7) +; ALL: Flags [ (0x0) +; ALL: ] +; ALL: Machine: Intel80386 (0x3) +; ALL: FrontendVersion: 0.0.0.0 +; ALL: BackendVersion: 12.0.31101.0 +; ALL: VersionName: Microsoft (R) LINK +; ALL: } +; ALL: } +; ALL: { +; ALL: EnvBlock { +; ALL: Entries [ +; ALL: cwd +; ALL: d:\src\llvm\test\DebugInfo\PDB\Inputs +; ALL: exe +; ALL: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe +; ALL: pdb +; ALL: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb +; ALL: ] +; ALL: } +; ALL: } +; ALL: { +; ALL: Trampoline { +; ALL: Type: TrampIncremental (0x0) +; ALL: Size: 5 +; ALL: ThunkOff: 5 +; ALL: TargetOff: 16 +; ALL: ThunkSection: 1 +; ALL: TargetSection: 1 +; ALL: } +; ALL: } +; ALL: { +; ALL: Section { +; ALL: SectionNumber: 1 +; ALL: Alignment: 12 +; ALL: Rva: 4096 +; ALL: Length: 4122 +; ALL: Characteristics [ (0x60000020) +; ALL: IMAGE_SCN_CNT_CODE (0x20) +; ALL: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Name: .text +; ALL: } +; ALL: } +; ALL: { +; ALL: COFF Group { +; ALL: Size: 4122 +; ALL: Characteristics [ (0x60000020) +; ALL: IMAGE_SCN_CNT_CODE (0x20) +; ALL: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Offset: 0 +; ALL: Segment: 1 +; ALL: Name: .text$mn +; ALL: } +; ALL: } +; ALL: { +; ALL: Section { +; ALL: SectionNumber: 2 +; ALL: Alignment: 12 +; ALL: Rva: 12288 +; ALL: Length: 690 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Name: .rdata +; ALL: } +; ALL: } +; ALL: { +; ALL: COFF Group { +; ALL: Size: 323 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Offset: 0 +; ALL: Segment: 2 +; ALL: Name: .rdata +; ALL: } +; ALL: } +; ALL: { +; ALL: COFF Group { +; ALL: Size: 0 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Offset: 323 +; ALL: Segment: 2 +; ALL: Name: .edata +; ALL: } +; ALL: } +; ALL: { +; ALL: COFF Group { +; ALL: Size: 366 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Offset: 324 +; ALL: Segment: 2 +; ALL: Name: .rdata$debug +; ALL: } +; ALL: } +; ALL: { +; ALL: Section { +; ALL: SectionNumber: 3 +; ALL: Alignment: 12 +; ALL: Rva: 16384 +; ALL: Length: 4 +; ALL: Characteristics [ (0xC0000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: IMAGE_SCN_MEM_WRITE (0x80000000) +; ALL: ] +; ALL: Name: .data +; ALL: } +; ALL: } +; ALL: { +; ALL: COFF Group { +; ALL: Size: 4 +; ALL: Characteristics [ (0xC0000080) +; ALL: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: IMAGE_SCN_MEM_WRITE (0x80000000) +; ALL: ] +; ALL: Offset: 0 +; ALL: Segment: 3 +; ALL: Name: .bss +; ALL: } +; ALL: } +; ALL: { +; ALL: Section { +; ALL: SectionNumber: 4 +; ALL: Alignment: 12 +; ALL: Rva: 20480 +; ALL: Length: 8 +; ALL: Characteristics [ (0x42000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_DISCARDABLE (0x2000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Name: .reloc +; ALL: } +; ALL: } +; ALL: ] +; ALL: } +; ALL: ] +; ALL: } +; ALL: Section Contributions [ +; ALL: Contribution { +; ALL: ISect: 1 +; ALL: Off: 0 +; ALL: Size: 10 +; ALL: Characteristics [ (0x60000020) +; ALL: IMAGE_SCN_CNT_CODE (0x20) +; ALL: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 1 +; ALL: Name: * Linker * +; ALL: } +; ALL: Data CRC: 0 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: Contribution { +; ALL: ISect: 1 +; ALL: Off: 16 +; ALL: Size: 10 +; ALL: Characteristics [ (0x60500020) +; ALL: IMAGE_SCN_ALIGN_16BYTES (0x500000) +; ALL: IMAGE_SCN_CNT_CODE (0x20) +; ALL: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 0 +; ALL: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; ALL: } +; ALL: Data CRC: 3617027124 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: Contribution { +; ALL: ISect: 2 +; ALL: Off: 0 +; ALL: Size: 56 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 1 +; ALL: Name: * Linker * +; ALL: } +; ALL: Data CRC: 0 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: Contribution { +; ALL: ISect: 2 +; ALL: Off: 324 +; ALL: Size: 72 +; ALL: Characteristics [ (0x40300040) +; ALL: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 1 +; ALL: Name: * Linker * +; ALL: } +; ALL: Data CRC: 0 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: Contribution { +; ALL: ISect: 2 +; ALL: Off: 396 +; ALL: Size: 20 +; ALL: Characteristics [ (0x40300040) +; ALL: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 1 +; ALL: Name: * Linker * +; ALL: } +; ALL: Data CRC: 0 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: Contribution { +; ALL: ISect: 3 +; ALL: Off: 0 +; ALL: Size: 4 +; ALL: Characteristics [ (0xC0300080) +; ALL: IMAGE_SCN_ALIGN_4BYTES (0x300000) +; ALL: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: IMAGE_SCN_MEM_WRITE (0x80000000) +; ALL: ] +; ALL: Module { +; ALL: Index: 0 +; ALL: Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj +; ALL: } +; ALL: Data CRC: 0 +; ALL: Reloc CRC: 0 +; ALL: } +; ALL: ] +; ALL: Section Map [ +; ALL: Entry { +; ALL: Flags [ (0x10D) +; ALL: AddressIs32Bit (0x8) +; ALL: Execute (0x4) +; ALL: IsSelector (0x100) +; ALL: Read (0x1) +; ALL: ] +; ALL: Ovl: 0 +; ALL: Group: 0 +; ALL: Frame: 1 +; ALL: SecName: 65535 +; ALL: ClassName: 65535 +; ALL: Offset: 0 +; ALL: SecByteLength: 4122 +; ALL: } +; ALL: Entry { +; ALL: Flags [ (0x109) +; ALL: AddressIs32Bit (0x8) +; ALL: IsSelector (0x100) +; ALL: Read (0x1) +; ALL: ] +; ALL: Ovl: 0 +; ALL: Group: 0 +; ALL: Frame: 2 +; ALL: SecName: 65535 +; ALL: ClassName: 65535 +; ALL: Offset: 0 +; ALL: SecByteLength: 690 +; ALL: } +; ALL: Entry { +; ALL: Flags [ (0x10B) +; ALL: AddressIs32Bit (0x8) +; ALL: IsSelector (0x100) +; ALL: Read (0x1) +; ALL: Write (0x2) +; ALL: ] +; ALL: Ovl: 0 +; ALL: Group: 0 +; ALL: Frame: 3 +; ALL: SecName: 65535 +; ALL: ClassName: 65535 +; ALL: Offset: 0 +; ALL: SecByteLength: 4 +; ALL: } +; ALL: Entry { +; ALL: Flags [ (0x109) +; ALL: AddressIs32Bit (0x8) +; ALL: IsSelector (0x100) +; ALL: Read (0x1) +; ALL: ] +; ALL: Ovl: 0 +; ALL: Group: 0 +; ALL: Frame: 4 +; ALL: SecName: 65535 +; ALL: ClassName: 65535 +; ALL: Offset: 0 +; ALL: SecByteLength: 8 +; ALL: } +; ALL: Entry { +; ALL: Flags [ (0x208) +; ALL: AddressIs32Bit (0x8) +; ALL: IsAbsoluteAddress (0x200) +; ALL: ] +; ALL: Ovl: 0 +; ALL: Group: 0 +; ALL: Frame: 0 +; ALL: SecName: 65535 +; ALL: ClassName: 65535 +; ALL: Offset: 0 +; ALL: SecByteLength: 4294967295 +; ALL: } +; ALL: ] +; ALL: Globals Stream { +; ALL: Stream number: 6 +; ALL: Number of buckets: 2 +; ALL: Hash Buckets: [0, 12] +; ALL: } +; ALL: Publics Stream { +; ALL: Stream number: 7 +; ALL: SymHash: 556 +; ALL: AddrMap: 8 +; ALL: Number of buckets: 2 +; ALL: Hash Buckets: [0, 12] +; ALL: Address Map: [36, 0] +; ALL: Thunk Map: [4112] +; ALL: Section Offsets: [4096, 1] +; ALL: Symbols [ +; ALL: { +; ALL: PublicSym { +; ALL: Type: 0 +; ALL: Seg: 3 +; ALL: Off: 0 +; ALL: Name: ?__purecall@@3PAXA +; ALL: } +; ALL: } +; ALL: { +; ALL: PublicSym { +; ALL: Type: 2 +; ALL: Seg: 1 +; ALL: Off: 16 +; ALL: Name: _main +; ALL: } +; ALL: } +; ALL: { +; ALL: ProcRef { +; ALL: SumName: 0 +; ALL: SymOffset: 120 +; ALL: Mod: 1 +; ALL: Name: main +; ALL: } +; ALL: } +; ALL: { +; ALL: DataSym { +; ALL: Type: void* (0x403) +; ALL: DisplayName: __purecall +; ALL: } +; ALL: } +; ALL: ] +; ALL: } +; ALL: Section Headers [ +; ALL: { +; ALL: Name: .text +; ALL: Virtual Size: 4122 +; ALL: Virtual Address: 4096 +; ALL: Size of Raw Data: 4608 +; ALL: File Pointer to Raw Data: 1024 +; ALL: File Pointer to Relocations: 0 +; ALL: File Pointer to Linenumbers: 0 +; ALL: Number of Relocations: 0 +; ALL: Number of Linenumbers: 0 +; ALL: Characteristics [ (0x60000020) +; ALL: IMAGE_SCN_CNT_CODE (0x20) +; ALL: IMAGE_SCN_MEM_EXECUTE (0x20000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: } +; ALL: { +; ALL: Name: .rdata +; ALL: Virtual Size: 690 +; ALL: Virtual Address: 12288 +; ALL: Size of Raw Data: 1024 +; ALL: File Pointer to Raw Data: 5632 +; ALL: File Pointer to Relocations: 0 +; ALL: File Pointer to Linenumbers: 0 +; ALL: Number of Relocations: 0 +; ALL: Number of Linenumbers: 0 +; ALL: Characteristics [ (0x40000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: } +; ALL: { +; ALL: Name: .data +; ALL: Virtual Size: 4 +; ALL: Virtual Address: 16384 +; ALL: Size of Raw Data: 0 +; ALL: File Pointer to Raw Data: 0 +; ALL: File Pointer to Relocations: 0 +; ALL: File Pointer to Linenumbers: 0 +; ALL: Number of Relocations: 0 +; ALL: Number of Linenumbers: 0 +; ALL: Characteristics [ (0xC0000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: IMAGE_SCN_MEM_WRITE (0x80000000) +; ALL: ] +; ALL: } +; ALL: { +; ALL: Name: .reloc +; ALL: Virtual Size: 8 +; ALL: Virtual Address: 20480 +; ALL: Size of Raw Data: 512 +; ALL: File Pointer to Raw Data: 6656 +; ALL: File Pointer to Relocations: 0 +; ALL: File Pointer to Linenumbers: 0 +; ALL: Number of Relocations: 0 +; ALL: Number of Linenumbers: 0 +; ALL: Characteristics [ (0x42000040) +; ALL: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +; ALL: IMAGE_SCN_MEM_DISCARDABLE (0x2000000) +; ALL: IMAGE_SCN_MEM_READ (0x40000000) +; ALL: ] +; ALL: } +; ALL: ] +; BIG: FileHeaders { +; BIG-NEXT: BlockSize: 4096 +; BIG-NEXT: FreeBlockMap: 2 +; BIG-NEXT: NumBlocks: 99 +; BIG-NEXT: NumDirectoryBytes: 616 +; BIG-NEXT: Unknown1: 0 +; BIG-NEXT: BlockMapAddr: 97 +; BIG-NEXT: NumDirectoryBlocks: 1 +; BIG-NEXT: DirectoryBlocks: [96] +; BIG-NEXT: NumStreams: 64 +; BIG-NEXT: } +; BIG-NEXT: PDB Stream { +; BIG-NEXT: Version: 20000404 +; BIG-NEXT: Signature: 0x571FFE67 +; BIG-NEXT: Age: 1 +; BIG-NEXT: Guid: {880ECC89-DF81-0B4F-839C-58CBD052E937} +; BIG-NEXT: Features: 0x1 +; BIG-NEXT: Named Streams { +; BIG-NEXT: /names: 13 +; BIG-NEXT: /LinkInfo: 5 +; BIG-NEXT: /src/headerblock: 61 +; BIG-NEXT: } +; BIG-NEXT: } +; BIG-NEXT: DBI Stream { +; BIG-NEXT: Dbi Version: 19990903 +; BIG-NEXT: Age: 1 +; BIG-NEXT: Incremental Linking: Yes +; BIG-NEXT: Has CTypes: No +; BIG-NEXT: Is Stripped: No +; BIG-NEXT: Machine Type: x86 +; BIG-NEXT: Symbol Record Stream Index: 9 +; BIG-NEXT: Public Symbol Stream Index: 8 +; BIG-NEXT: Global Symbol Stream Index: 7 +; BIG-NEXT: Toolchain Version: 14.0 +; BIG-NEXT: mspdb140.dll version: 14.0.23918 +; BIG-NEXT: Modules [ +; BIG-NEXT: { +; BIG-NEXT: Name: D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj +; BIG-NEXT: Debug Stream Index: 12 +; BIG-NEXT: Object File Name: D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 400 +; BIG-NEXT: Symbol Byte Size: 872 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: d:\src\llvm\test\tools\llvm-symbolizer\pdb\inputs\test.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj +; BIG-NEXT: Debug Stream Index: 14 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 14 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 344 +; BIG-NEXT: Symbol Byte Size: 720 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 14 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\misc\i386\cpu_disp.c +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj +; BIG-NEXT: Debug Stream Index: 15 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 19 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 464 +; BIG-NEXT: Symbol Byte Size: 464 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 19 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\rtc\initsect.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj +; BIG-NEXT: Debug Stream Index: 16 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 1 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 32 +; BIG-NEXT: Symbol Byte Size: 444 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj +; BIG-NEXT: Debug Stream Index: 17 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 14 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 344 +; BIG-NEXT: Symbol Byte Size: 604 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 14 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\eh\i386\chandler4gs.c +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj +; BIG-NEXT: Debug Stream Index: 18 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 14 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 344 +; BIG-NEXT: Symbol Byte Size: 344 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 14 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\eh\i386\secchk.c +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj +; BIG-NEXT: Debug Stream Index: 19 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 9 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 224 +; BIG-NEXT: Symbol Byte Size: 160 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 9 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj +; BIG-NEXT: Debug Stream Index: 20 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 14 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 1392 +; BIG-NEXT: Symbol Byte Size: 1144 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 14 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj +; BIG-NEXT: Debug Stream Index: 21 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 10 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 432 +; BIG-NEXT: Symbol Byte Size: 552 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 10 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\gs\gs_support.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj +; BIG-NEXT: Debug Stream Index: 22 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 14 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 392 +; BIG-NEXT: Symbol Byte Size: 328 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 14 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\misc\checkcfg.c +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj +; BIG-NEXT: Debug Stream Index: 23 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 10 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 352 +; BIG-NEXT: Symbol Byte Size: 424 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 10 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\misc\guard_support.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj +; BIG-NEXT: Debug Stream Index: 24 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 9 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 224 +; BIG-NEXT: Symbol Byte Size: 156 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 9 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj +; BIG-NEXT: Debug Stream Index: 25 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 11 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 328 +; BIG-NEXT: Symbol Byte Size: 272 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 11 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_dtor.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj +; BIG-NEXT: Debug Stream Index: 26 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 10 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 304 +; BIG-NEXT: Symbol Byte Size: 272 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 10 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_init.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj +; BIG-NEXT: Debug Stream Index: 27 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 276 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\matherr_detection.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj +; BIG-NEXT: Debug Stream Index: 28 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 268 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\ucrt_detection.c +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj +; BIG-NEXT: Debug Stream Index: 29 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 260 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\argv_mode.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj +; BIG-NEXT: Debug Stream Index: 30 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 260 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\commit_mode.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj +; BIG-NEXT: Debug Stream Index: 31 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 24 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 760 +; BIG-NEXT: Symbol Byte Size: 620 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 24 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\default_local_stdio_options.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdio.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vadefs.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj +; BIG-NEXT: Debug Stream Index: 32 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 80 +; BIG-NEXT: Symbol Byte Size: 272 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\denormal_control.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj +; BIG-NEXT: Debug Stream Index: 33 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 268 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\env_mode.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj +; BIG-NEXT: Debug Stream Index: 34 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 260 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\file_mode.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj +; BIG-NEXT: Debug Stream Index: 35 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 80 +; BIG-NEXT: Symbol Byte Size: 292 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\invalid_parameter_handler.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj +; BIG-NEXT: Debug Stream Index: 36 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 2 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 112 +; BIG-NEXT: Symbol Byte Size: 312 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 2 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\matherr.cpp +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj +; BIG-NEXT: Debug Stream Index: 37 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 260 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\new_mode.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj +; BIG-NEXT: Debug Stream Index: 38 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 88 +; BIG-NEXT: Symbol Byte Size: 272 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\thread_locale.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj +; BIG-NEXT: Debug Stream Index: 39 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 21 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 624 +; BIG-NEXT: Symbol Byte Size: 432 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 21 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\eh\tncleanup.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_typeinfo.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_exception.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj +; BIG-NEXT: Debug Stream Index: 40 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 26 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 1668 +; BIG-NEXT: Symbol Byte Size: 2364 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 26 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdio.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vadefs.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj +; BIG-NEXT: Debug Stream Index: 41 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 20 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 488 +; BIG-NEXT: Symbol Byte Size: 196 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 20 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj +; BIG-NEXT: Debug Stream Index: 42 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 20 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 2500 +; BIG-NEXT: Symbol Byte Size: 6020 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 20 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\utility.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj +; BIG-NEXT: Debug Stream Index: 43 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 1 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 368 +; BIG-NEXT: Symbol Byte Size: 988 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 1 Contributing Source Files [ +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\ucrt_stubs.cpp +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj +; BIG-NEXT: Debug Stream Index: 44 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 20 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 1240 +; BIG-NEXT: Symbol Byte Size: 1844 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 20 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\utility\utility_desktop.cpp +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj +; BIG-NEXT: Debug Stream Index: 45 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib +; BIG-NEXT: Num Files: 20 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 552 +; BIG-NEXT: Symbol Byte Size: 356 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 20 Contributing Source Files [ +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\string.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\src\defaults\default_precision.cpp +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\internal_shared.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\malloc.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h +; BIG-NEXT: f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h +; BIG-NEXT: f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\math.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\stdlib.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\ctype.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h +; BIG-NEXT: f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h +; BIG-NEXT: f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:KERNEL32.dll +; BIG-NEXT: Debug Stream Index: 47 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 1616 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: KERNEL32.dll +; BIG-NEXT: Debug Stream Index: 46 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 208 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:VCRUNTIME140.dll +; BIG-NEXT: Debug Stream Index: 49 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 664 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: VCRUNTIME140.dll +; BIG-NEXT: Debug Stream Index: 48 +; BIG-NEXT: Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 148 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:api-ms-win-crt-stdio-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 59 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 264 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: api-ms-win-crt-stdio-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 58 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 180 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:api-ms-win-crt-runtime-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 57 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 3068 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: api-ms-win-crt-runtime-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 56 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 188 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:api-ms-win-crt-math-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 55 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 140 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: api-ms-win-crt-math-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 54 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 180 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:api-ms-win-crt-locale-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 53 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 148 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: api-ms-win-crt-locale-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 52 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 188 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: Import:api-ms-win-crt-heap-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 51 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 136 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: api-ms-win-crt-heap-l1-1-0.dll +; BIG-NEXT: Debug Stream Index: 50 +; BIG-NEXT: Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 0 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 180 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: { +; BIG-NEXT: Name: * Linker * +; BIG-NEXT: Debug Stream Index: 60 +; BIG-NEXT: Object File Name: +; BIG-NEXT: Num Files: 0 +; BIG-NEXT: Source File Name Idx: 0 +; BIG-NEXT: Pdb File Name Idx: 55 +; BIG-NEXT: Line Info Byte Size: 0 +; BIG-NEXT: C13 Line Info Byte Size: 0 +; BIG-NEXT: Symbol Byte Size: 3080 +; BIG-NEXT: Type Server Index: 0 +; BIG-NEXT: Has EC Info: No +; BIG-NEXT: 0 Contributing Source Files [ +; BIG-NEXT: ] +; BIG-NEXT: } +; BIG-NEXT: ] +; BIG-NEXT: } +; BAD-BLOCK-SIZE: Native PDB Error: The PDB file is corrupt. Does not contain superblock diff --git a/llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test b/llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test index f25e9024453b..2639490f542a 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test @@ -1,51 +1,65 @@ ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-ids-and-types-1.yaml ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-ids-and-types-2.yaml ; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb -; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=TPI-TYPES %s -; RUN: llvm-pdbutil raw -ids %t.3.pdb | FileCheck -check-prefix=IPI-TYPES %s +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=TPI-TYPES %s +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=INTMAIN %s +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=VOIDMAIN %s +; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-TYPES %s +; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-NAMES %s +; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-UDT %s -TPI-TYPES: Types (TPI Stream) -TPI-TYPES-NEXT: ============================================================ -TPI-TYPES-NEXT: Showing 9 records -TPI-TYPES-NEXT: 0x1000 | LF_POINTER [size = 12] -TPI-TYPES-NEXT: referent = 0x0470 (char*), mode = pointer, opts = None, kind = ptr32 -TPI-TYPES-NEXT: 0x1001 | LF_FIELDLIST [size = 24] -TPI-TYPES-NEXT: - LF_MEMBER [name = `FooMember`, Type = 0x0403 (void*), offset = 0, attrs = public] -TPI-TYPES-NEXT: 0x1002 | LF_ARGLIST [size = 16] -TPI-TYPES-NEXT: 0x0074 (int): `int` -TPI-TYPES-NEXT: 0x1000: `char**` -TPI-TYPES-NEXT: 0x1003 | LF_STRUCTURE [size = 36] -TPI-TYPES-NEXT: class name: `FooBar` -TPI-TYPES-NEXT: unique name: `FooBar` -TPI-TYPES-NEXT: vtable: , base list: , field list: 0x1001 -TPI-TYPES-NEXT: options: has unique name -TPI-TYPES-NEXT: 0x1004 | LF_POINTER [size = 12] -TPI-TYPES-NEXT: referent = 0x1003, mode = pointer, opts = None, kind = ptr32 -TPI-TYPES-NEXT: 0x1005 | LF_ARGLIST [size = 12] -TPI-TYPES-NEXT: 0x0074 (int): `int` -TPI-TYPES-NEXT: 0x1006 | LF_MFUNCTION [size = 28] -TPI-TYPES-NEXT: return type = 1, # args = 0x1005, param list = 0x0003 (void) -TPI-TYPES-NEXT: class type = 0x1003, this type = 0x1004, this adjust = 0 -TPI-TYPES-NEXT: calling conv = thiscall, options = constructor -TPI-TYPES-NEXT: 0x1007 | LF_PROCEDURE [size = 16] -TPI-TYPES-NEXT: return type = 0x0074 (int), # args = 2, param list = 0x1002 -TPI-TYPES-NEXT: calling conv = cdecl, options = None -TPI-TYPES-NEXT: 0x1008 | LF_PROCEDURE [size = 16] -TPI-TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x1002 -TPI-TYPES-NEXT: calling conv = cdecl, options = None +TPI-TYPES: Type Info Stream (TPI) +TPI-TYPES: Record count: 9 +TPI-TYPES-DAG: TypeLeafKind: LF_POINTER +TPI-TYPES-DAG: TypeLeafKind: LF_FIELDLIST +TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST +TPI-TYPES-DAG: TypeLeafKind: LF_STRUCTURE +TPI-TYPES-DAG: TypeLeafKind: LF_MEMBER +TPI-TYPES-DAG: TypeLeafKind: LF_POINTER +TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST +TPI-TYPES-DAG: TypeLeafKind: LF_MFUNCTION +TPI-TYPES-DAG: TypeLeafKind: LF_PROCEDURE +TPI-TYPES-DAG: TypeLeafKind: LF_PROCEDURE +TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST -IPI-TYPES: Types (IPI Stream) -IPI-TYPES-NEXT: ============================================================ -IPI-TYPES-NEXT: Showing 6 records -IPI-TYPES-NEXT: 0x1000 | LF_FUNC_ID [size = 20] -IPI-TYPES-NEXT: name = main, type = 0x1007, parent scope = -IPI-TYPES-NEXT: 0x1001 | LF_MFUNC_ID [size = 24] -IPI-TYPES-NEXT: name = FooMethod, type = 0x1006, class type = 0x1003 -IPI-TYPES-NEXT: 0x1002 | LF_UDT_MOD_SRC_LINE [size = 20] -IPI-TYPES-NEXT: udt = 0x1003, mod = 0, file = 0, line = 0 -IPI-TYPES-NEXT: 0x1003 | LF_FUNC_ID [size = 20] -IPI-TYPES-NEXT: name = main2, type = 0x1007, parent scope = -IPI-TYPES-NEXT: 0x1004 | LF_FUNC_ID [size = 16] -IPI-TYPES-NEXT: name = foo, type = 0x1008, parent scope = -IPI-TYPES-NEXT: 0x1005 | LF_MFUNC_ID [size = 24] -IPI-TYPES-NEXT: name = FooMethod2, type = 0x1006, class type = 0x1003 +; Both procedures should use the same arglist even though they have a different +; return type. +INTMAIN: ArgList ([[ID:.*]]) +INTMAIN-NEXT: TypeLeafKind: LF_ARGLIST +INTMAIN-NEXT: NumArgs: 2 +INTMAIN-NEXT: Arguments [ +INTMAIN-NEXT: ArgType: int +INTMAIN-NEXT: ArgType: char** +INTMAIN: TypeLeafKind: LF_PROCEDURE +INTMAIN: ReturnType: int +INTMAIN: NumParameters: 2 +INTMAIN-NEXT: ArgListType: (int, char**) ([[ID]]) + +VOIDMAIN: ArgList ([[ID:.*]]) +VOIDMAIN-NEXT: TypeLeafKind: LF_ARGLIST +VOIDMAIN-NEXT: NumArgs: 2 +VOIDMAIN-NEXT: Arguments [ +VOIDMAIN-NEXT: ArgType: int +VOIDMAIN-NEXT: ArgType: char** +VOIDMAIN: TypeLeafKind: LF_PROCEDURE +VOIDMAIN: ReturnType: void +VOIDMAIN: NumParameters: 2 +VOIDMAIN-NEXT: ArgListType: (int, char**) ([[ID]]) + +IPI-TYPES: Type Info Stream (IPI) +IPI-TYPES: Record count: 6 +IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID +IPI-TYPES-DAG: TypeLeafKind: LF_MFUNC_ID +IPI-TYPES-DAG: TypeLeafKind: LF_UDT_MOD_SRC_LINE +IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID +IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID +IPI-TYPES-DAG: TypeLeafKind: LF_MFUNC_ID + +IPI-NAMES-DAG: Name: main +IPI-NAMES-DAG: Name: FooMethod +IPI-NAMES-DAG: Name: main2 +IPI-NAMES-DAG: Name: foo +IPI-NAMES-DAG: Name: FooMethod2 + +IPI-UDT: TypeLeafKind: LF_UDT_MOD_SRC_LINE +IPI-UDT-NEXT: UDT: FooBar diff --git a/llvm/test/DebugInfo/PDB/pdbdump-mergeids.test b/llvm/test/DebugInfo/PDB/pdbdump-mergeids.test index 441ce4d8dbc8..1c0a8704af2a 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-mergeids.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-mergeids.test @@ -1,24 +1,31 @@ ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-ids-1.yaml ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-ids-2.yaml ; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb -; RUN: llvm-pdbutil raw -ids %t.3.pdb | FileCheck -check-prefix=MERGED %s -; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=TPI-EMPTY %s +; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=MERGED %s +; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=SUBSTRS %s +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=TPI-EMPTY %s -MERGED: Types (IPI Stream) -MERGED-NEXT: ============================================================ -MERGED-NEXT: Showing 8 records -MERGED-NEXT: 0x1000 | LF_STRING_ID [size = 12] ID: , String: One -MERGED-NEXT: 0x1001 | LF_STRING_ID [size = 12] ID: , String: Two -MERGED-NEXT: 0x1002 | LF_STRING_ID [size = 20] ID: , String: OnlyInFirst -MERGED-NEXT: 0x1003 | LF_STRING_ID [size = 16] ID: , String: SubOne -MERGED-NEXT: 0x1004 | LF_STRING_ID [size = 16] ID: , String: SubTwo -MERGED-NEXT: 0x1005 | LF_SUBSTR_LIST [size = 16] -MERGED-NEXT: 0x1003: `SubOne` -MERGED-NEXT: 0x1004: `SubTwo` -MERGED-NEXT: 0x1006 | LF_STRING_ID [size = 16] ID: 0x1005, String: Main -MERGED-NEXT: 0x1007 | LF_STRING_ID [size = 24] ID: , String: OnlyInSecond +MERGED: Type Info Stream (IPI) +MERGED: Record count: 8 +MERGED-DAG: StringData: One +MERGED-DAG: StringData: Two +MERGED-DAG: StringData: SubOne +MERGED-DAG: StringData: SubTwo +MERGED-DAG: StringData: Main +MERGED-DAG: TypeLeafKind: LF_SUBSTR_LIST +MERGED-DAG: StringData: OnlyInFirst +MERGED-DAG: StringData: OnlyInSecond -TPI-EMPTY: Types (TPI Stream) -TPI-EMPTY-NEXT: ============================================================ -TPI-EMPTY-NEXT: Showing 0 records +SUBSTRS: StringList +SUBSTRS: TypeLeafKind: LF_SUBSTR_LIST +SUBSTRS-NEXT: NumStrings: 2 +SUBSTRS-NEXT: Strings [ +SUBSTRS-NEXT: SubOne +SUBSTRS-NEXT: SubTwo +SUBSTRS: StringId +SUBSTRS-NEXT: TypeLeafKind: LF_STRING_ID +SUBSTRS-NEXT: Id: "SubOne" "SubTwo" +SUBSTRS-NEXT: StringData: Main + +TPI-EMPTY: Record count: 0 diff --git a/llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test b/llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test index 9aae40543697..8d32b4d176f2 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test @@ -1,36 +1,24 @@ -+; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-types-1.yaml -; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-types-2.yaml -; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb -; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=MERGED %s - - -MERGED: Types (TPI Stream) -MERGED-NEXT: ============================================================ -MERGED-NEXT: Showing 9 records -MERGED-NEXT: 0x1000 | LF_POINTER [size = 12] -MERGED-NEXT: referent = 0x0075 (unsigned), mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1001 | LF_POINTER [size = 12] -MERGED-NEXT: referent = 0x0076 (__int64), mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1002 | LF_STRUCTURE [size = 48] -MERGED-NEXT: class name: `OnlyInMerge1` -MERGED-NEXT: unique name: `OnlyInMerge1` -MERGED-NEXT: vtable: , base list: , field list: -MERGED-NEXT: options: forward ref | has unique name -MERGED-NEXT: 0x1003 | LF_POINTER [size = 12] -MERGED-NEXT: referent = 0x1000, mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1004 | LF_POINTER [size = 12] -MERGED-NEXT: referent = 0x1003, mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1005 | LF_POINTER [size = 12] -MERGED-NEXT: referent = 0x1001, mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1006 | LF_ARGLIST [size = 20] -MERGED-NEXT: 0x0075 (unsigned): `unsigned` -MERGED-NEXT: 0x1000: `unsigned*` -MERGED-NEXT: 0x1003: `unsigned**` -MERGED-NEXT: 0x1007 | LF_PROCEDURE [size = 16] -MERGED-NEXT: return type = 0x0075 (unsigned), # args = 0, param list = 0x1006 -MERGED-NEXT: calling conv = cdecl, options = None -MERGED-NEXT: 0x1008 | LF_STRUCTURE [size = 48] -MERGED-NEXT: class name: `OnlyInMerge2` -MERGED-NEXT: unique name: `OnlyInMerge2` -MERGED-NEXT: vtable: , base list: , field list: -MERGED-NEXT: options: forward ref | has unique name +; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-types-1.yaml +; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-types-2.yaml +; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=MERGED %s +; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=ARGLIST %s + + +MERGED: Type Info Stream (TPI) +MERGED: Record count: 9 +MERGED-DAG: PointeeType: unsigned +MERGED-DAG: PointeeType: unsigned* +MERGED-DAG: PointeeType: unsigned** +MERGED-DAG: PointeeType: __int64 +MERGED-DAG: PointeeType: __int64* +MERGED-DAG: Name: OnlyInMerge1 +MERGED-DAG: Name: OnlyInMerge2 +MERGED-DAG: TypeLeafKind: LF_ARGLIST + +ARGLIST: TypeLeafKind: LF_ARGLIST +ARGLIST-NEXT: NumArgs: 3 +ARGLIST-NEXT: Arguments [ +ARGLIST-NEXT: ArgType: unsigned +ARGLIST-NEXT: ArgType: unsigned* +ARGLIST-NEXT: ArgType: unsigned** diff --git a/llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test b/llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test index b695d5a1c4cd..14e1f86fc029 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test @@ -1,29 +1,35 @@ -; RUN: llvm-pdbutil raw -block-data=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK0 %s -; RUN: llvm-pdbutil raw -block-data=0-1 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK01 %s -; RUN: not llvm-pdbutil raw -block-data=0,1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s -; RUN: not llvm-pdbutil raw -block-data=0a1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s -; RUN: not llvm-pdbutil raw -block-data=0- %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s - -BLOCK0: MSF Blocks -BLOCK0-NEXT: ============================================================ -BLOCK0-NEXT: Block 0 ( -BLOCK0-NEXT: 0000: 4D696372 6F736F66 7420432F 432B2B20 4D534620 372E3030 0D0A1A44 53000000 |Microsoft C/C++ MSF 7.00...DS...| -BLOCK0-NEXT: 0020: 00100000 02000000 19000000 88000000 00000000 18000000 00000000 00000000 |................................| -BLOCK0-NEXT: 0040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| -BLOCK0-NEXT: 0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| -BLOCK0-NOT: Block 1 ( - -BLOCK01: MSF Blocks -BLOCK01-NEXT: ============================================================ -BLOCK01-NEXT: Block 0 ( -BLOCK01-NEXT: 0000: 4D696372 6F736F66 7420432F 432B2B20 4D534620 372E3030 0D0A1A44 53000000 |Microsoft C/C++ MSF 7.00...DS...| -BLOCK01-NEXT: 0020: 00100000 02000000 19000000 88000000 00000000 18000000 00000000 00000000 |................................| -BLOCK01-NEXT: 0040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| -BLOCK01-NEXT: 0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| -BLOCK01: Block 1 ( -BLOCK01-NEXT: 0000: C0FCFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................................| -BLOCK01-NEXT: 0020: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................................| -BLOCK01-NEXT: 0040: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................................| -BLOCK01-NOT: Block 2 ( - -BADSYNTAX: Argument '{{.*}}' invalid format. +; RUN: llvm-pdbutil raw -block-data=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK0 %s +; RUN: llvm-pdbutil raw -block-data=0-1 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK01 %s +; RUN: not llvm-pdbutil raw -block-data=0,1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s +; RUN: not llvm-pdbutil raw -block-data=0a1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s +; RUN: not llvm-pdbutil raw -block-data=0- %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s + +BLOCK0: Block Data { +BLOCK0-NEXT: Block 0 ( +BLOCK0-NEXT: 0000: 4D696372 6F736F66 7420432F 432B2B20 |Microsoft C/C++ | +BLOCK0-NEXT: 0010: 4D534620 372E3030 0D0A1A44 53000000 |MSF 7.00...DS...| +BLOCK0-NEXT: 0020: 00100000 02000000 19000000 88000000 |................| +BLOCK0-NEXT: 0030: 00000000 18000000 00000000 00000000 |................| +BLOCK0: 0FE0: 00000000 00000000 00000000 00000000 |................| +BLOCK0-NEXT: 0FF0: 00000000 00000000 00000000 00000000 |................| +BLOCK0-NEXT: ) +BLOCK0-NEXT: } + +BLOCK01: Block Data { +BLOCK01-NEXT: Block 0 ( +BLOCK01-NEXT: 0000: 4D696372 6F736F66 7420432F 432B2B20 |Microsoft C/C++ | +BLOCK01-NEXT: 0010: 4D534620 372E3030 0D0A1A44 53000000 |MSF 7.00...DS...| +BLOCK01-NEXT: 0020: 00100000 02000000 19000000 88000000 |................| +BLOCK01-NEXT: 0030: 00000000 18000000 00000000 00000000 |................| +BLOCK01: 0FE0: 00000000 00000000 00000000 00000000 |................| +BLOCK01-NEXT: 0FF0: 00000000 00000000 00000000 00000000 |................| +BLOCK01-NEXT: ) +BLOCK01-NEXT: Block 1 ( +BLOCK01-NEXT: 0000: C0FCFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +BLOCK01-NEXT: 0010: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +BLOCK01: 0FE0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +BLOCK01-NEXT: 0FF0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +BLOCK01-NEXT: ) +BLOCK01-NEXT: } + +BADSYNTAX: Argument '{{.*}}' invalid format. diff --git a/llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test b/llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test index 2f8e05ad0583..846960a0964a 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test @@ -1,28 +1,23 @@ -; RUN: llvm-pdbutil raw -stream-data=1 %p/Inputs/empty.pdb | FileCheck --check-prefix=STREAM %s -; RUN: llvm-pdbutil raw -stream-data=100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=INVALIDSTREAM %s -; RUN: llvm-pdbutil raw -stream-data=1,100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BOTH %s - -STREAM: Stream Data -STREAM-NEXT: ============================================================ -STREAM-NEXT: Stream 1 (118 bytes): PDB Stream -STREAM-NEXT: Data ( -STREAM-NEXT: 0000: 942E3101 E207E554 01000000 0B355641 86A0A249 896F9988 FAE52FF0 22000000 |..1....T.....5VA...I.o..../."...| -STREAM-NEXT: 0020: 2F4C696E 6B496E66 6F002F6E 616D6573 002F7372 632F6865 61646572 626C6F63 |/LinkInfo./names./src/headerbloc| -STREAM-NEXT: 0040: 6B000300 00000600 00000100 00001A00 00000000 00001100 00000900 00000A00 |k...............................| -STREAM-NEXT: 0060: 00000D00 00000000 00000500 00000000 00004191 3201 |..................A.2.| -STREAM-NEXT: ) - -INVALIDSTREAM: Stream Data -INVALIDSTREAM-NEXT: ============================================================ -INVALIDSTREAM-NEXT: Stream 100: Not present - -BOTH: Stream Data -BOTH-NEXT: ============================================================ -BOTH-NEXT: Stream 1 (118 bytes): PDB Stream -BOTH-NEXT: Data ( -BOTH-NEXT: 0000: 942E3101 E207E554 01000000 0B355641 86A0A249 896F9988 FAE52FF0 22000000 |..1....T.....5VA...I.o..../."...| -BOTH-NEXT: 0020: 2F4C696E 6B496E66 6F002F6E 616D6573 002F7372 632F6865 61646572 626C6F63 |/LinkInfo./names./src/headerbloc| -BOTH-NEXT: 0040: 6B000300 00000600 00000100 00001A00 00000000 00001100 00000900 00000A00 |k...............................| -BOTH-NEXT: 0060: 00000D00 00000000 00000500 00000000 00004191 3201 |..................A.2.| -BOTH-NEXT: ) -BOTH-NEXT: Stream 100: Not present +; RUN: llvm-pdbutil raw -stream-data=1 %p/Inputs/empty.pdb | FileCheck --check-prefix=STREAM1 %s +; RUN: not llvm-pdbutil raw -stream-data=100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=INVALIDSTREAM %s + +STREAM1: Stream Data { +STREAM1-NEXT: Stream { +STREAM1-NEXT: Index: 1 +STREAM1-NEXT: Type: PDB Stream +STREAM1-NEXT: Size: 118 +STREAM1-NEXT: Blocks: [19] +STREAM1-NEXT: Data ( +STREAM1-NEXT: 0000: 942E3101 E207E554 01000000 0B355641 |..1....T.....5VA| +STREAM1-NEXT: 0010: 86A0A249 896F9988 FAE52FF0 22000000 |...I.o..../."...| +STREAM1-NEXT: 0020: 2F4C696E 6B496E66 6F002F6E 616D6573 |/LinkInfo./names| +STREAM1-NEXT: 0030: 002F7372 632F6865 61646572 626C6F63 |./src/headerbloc| +STREAM1-NEXT: 0040: 6B000300 00000600 00000100 00001A00 |k...............| +STREAM1-NEXT: 0050: 00000000 00001100 00000900 00000A00 |................| +STREAM1-NEXT: 0060: 00000D00 00000000 00000500 00000000 |................| +STREAM1-NEXT: 0070: 00004191 3201 |..A.2.| +STREAM1-NEXT: ) +STREAM1-NEXT: } +STREAM1-NEXT: } + +INVALIDSTREAM: Native PDB Error: The specified stream could not be loaded. diff --git a/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test b/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test index 51ebd754545f..ee53f3b4cd2a 100644 --- a/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test +++ b/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test @@ -3,33 +3,48 @@ RUN: -pdb-stream -string-table -tpi-stream -stream-directory \ RUN: -stream-metadata %p/Inputs/empty.pdb > %t.1 RUN: llvm-pdbutil yaml2pdb -pdb=%t.2 %t.1 -RUN: llvm-pdbutil raw -summary -string-table -types %p/Inputs/empty.pdb | FileCheck %s -RUN: llvm-pdbutil raw -summary -string-table -types %t.2 | FileCheck %s +RUN: llvm-pdbutil raw -headers -string-table -tpi-records %p/Inputs/empty.pdb | FileCheck %s +RUN: llvm-pdbutil raw -headers -string-table -tpi-records %t.2 | FileCheck %s - -CHECK: Summary -CHECK-NEXT: ============================================================ -CHECK-NEXT: Block Size: 4096 -CHECK-NEXT: Number of blocks: -CHECK-NEXT: Number of streams: -CHECK-NEXT: Signature: 1424295906 -CHECK-NEXT: Age: 1 -CHECK-NEXT: GUID: {0B355641-86A0-A249-896F-9988FAE52FF0} -CHECK-NEXT: Features: 0x1 -CHECK-NEXT: Has Debug Info: true -CHECK-NEXT: Has Types: true -CHECK-NEXT: Has IDs: true -CHECK-NEXT: Has Globals: -CHECK-NEXT: Has Publics: -CHECK-NEXT: Is incrementally linked: true -CHECK-NEXT: Has conflicting types: false -CHECK-NEXT: Is stripped: false -CHECK: String Table -CHECK-NEXT: ============================================================ -CHECK-NEXT: ID | String -CHECK-NEXT: {{.*}} | 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)' -CHECK-NEXT: {{.*}} | 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp' -CHECK-NEXT: {{.*}} | '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = ' -CHECK: Types (TPI Stream) -CHECK-NEXT: ============================================================ -CHECK-NEXT: Showing 75 records +CHECK: FileHeaders { +CHECK-NEXT: BlockSize: 4096 +CHECK-NEXT: FreeBlockMap: +CHECK-NEXT: NumBlocks: +CHECK-NEXT: NumDirectoryBytes: +CHECK-NEXT: Unknown1: 0 +CHECK-NEXT: BlockMapAddr: +CHECK-NEXT: NumDirectoryBlocks: 1 +CHECK-NEXT: DirectoryBlocks: +CHECK-NEXT: NumStreams: +CHECK-NEXT: } +CHECK: String Table { +CHECK-DAG: 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)' +CHECK-DAG: 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp' +CHECK-DAG: '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = ' +CHECK-NEXT: } +CHECK: PDB Stream { +CHECK-NEXT: Version: 20000404 +CHECK-NEXT: Signature: 0x54E507E2 +CHECK-NEXT: Age: 1 +CHECK-NEXT: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +CHECK-NEXT: Features: 0x1 +CHECK-NEXT: Named Streams { +CHECK: /names: +CHECK: } +CHECK-NEXT: } +CHECK: Type Info Stream (TPI) { +CHECK-NEXT: TPI Version: 20040203 +CHECK-NEXT: Record count: 75 +CHECK: DBI Stream { +CHECK-NEXT: Dbi Version: 19990903 +CHECK-NEXT: Age: 1 +CHECK-NEXT: Incremental Linking: Yes +CHECK-NEXT: Has CTypes: No +CHECK-NEXT: Is Stripped: No +CHECK-NEXT: Machine Type: x86 +CHECK-NEXT: Symbol Record Stream Index: +CHECK-NEXT: Public Symbol Stream Index: +CHECK-NEXT: Global Symbol Stream Index: +CHECK-NEXT: Toolchain Version: 12.0 +CHECK-NEXT: mspdb120.dll version: 12.0.31101 +CHECK-NEXT: } diff --git a/llvm/test/tools/llvm-pdbdump/raw-stream-data.test b/llvm/test/tools/llvm-pdbdump/raw-stream-data.test new file mode 100644 index 000000000000..1d7c23fe3672 --- /dev/null +++ b/llvm/test/tools/llvm-pdbdump/raw-stream-data.test @@ -0,0 +1,47 @@ +; RUN: llvm-pdbutil raw -stream-data=8 %p/Inputs/LoadAddressTest.pdb \ +; RUN: | FileCheck %s -check-prefix=FULL_STREAM +; RUN: llvm-pdbutil raw -stream-data=8:4 %p/Inputs/LoadAddressTest.pdb \ +; RUN: | FileCheck %s -check-prefix=OFFSET_STREAM +; RUN: llvm-pdbutil raw -stream-data=8:4@24 %p/Inputs/LoadAddressTest.pdb \ +; RUN: | FileCheck %s -check-prefix=OFFSET_AND_LENGTH + +FULL_STREAM: Stream Data { +FULL_STREAM-NEXT: Stream { +FULL_STREAM-NEXT: Index: 8 +FULL_STREAM-NEXT: Type: Public Symbol Records +FULL_STREAM-NEXT: Size: 40 +FULL_STREAM-NEXT: Blocks: +FULL_STREAM-NEXT: Data ( +FULL_STREAM-NEXT: 0000: 12000E11 02000000 10000000 01005F6D |.............._m| +FULL_STREAM-NEXT: 0010: 61696E00 12002511 00000000 88000000 |ain...%.........| +FULL_STREAM-NEXT: 0020: 01006D61 696E0000 |..main..| +FULL_STREAM-NEXT: ) +FULL_STREAM-NEXT: } +FULL_STREAM-NEXT: } + +OFFSET_STREAM: Stream Data { +OFFSET_STREAM-NEXT: Stream { +OFFSET_STREAM-NEXT: Index: 8 +OFFSET_STREAM-NEXT: Type: Public Symbol Records +OFFSET_STREAM-NEXT: Size: 40 +OFFSET_STREAM-NEXT: Blocks: +OFFSET_STREAM-NEXT: Data ( +OFFSET_STREAM-NEXT: 0004: 02000000 10000000 01005F6D 61696E00 |.........._main.| +OFFSET_STREAM-NEXT: 0014: 12002511 00000000 88000000 01006D61 |..%...........ma| +OFFSET_STREAM-NEXT: 0024: 696E0000 |in..| +OFFSET_STREAM-NEXT: ) +OFFSET_STREAM-NEXT: } +OFFSET_STREAM-NEXT:} + +OFFSET_AND_LENGTH: Stream Data { +OFFSET_AND_LENGTH-NEXT: Stream { +OFFSET_AND_LENGTH-NEXT: Index: 8 +OFFSET_AND_LENGTH-NEXT: Type: Public Symbol Records +OFFSET_AND_LENGTH-NEXT: Size: 40 +OFFSET_AND_LENGTH-NEXT: Blocks: +OFFSET_AND_LENGTH-NEXT: Data ( +OFFSET_AND_LENGTH-NEXT: 0004: 02000000 10000000 01005F6D 61696E00 |.........._main.| +OFFSET_AND_LENGTH-NEXT: 0014: 12002511 00000000 |..%.....| +OFFSET_AND_LENGTH-NEXT: ) +OFFSET_AND_LENGTH-NEXT: } +OFFSET_AND_LENGTH-NEXT:} \ No newline at end of file diff --git a/llvm/tools/llvm-pdbutil/CMakeLists.txt b/llvm/tools/llvm-pdbutil/CMakeLists.txt index d09fa31d8b6a..9875dfb5a257 100644 --- a/llvm/tools/llvm-pdbutil/CMakeLists.txt +++ b/llvm/tools/llvm-pdbutil/CMakeLists.txt @@ -12,10 +12,8 @@ add_llvm_tool(llvm-pdbutil CompactTypeDumpVisitor.cpp Diff.cpp llvm-pdbutil.cpp - FormatUtil.cpp LinePrinter.cpp - MinimalSymbolDumper.cpp - MinimalTypeDumper.cpp + LLVMOutputStyle.cpp PdbYaml.cpp PrettyBuiltinDumper.cpp PrettyClassDefinitionDumper.cpp @@ -27,7 +25,6 @@ add_llvm_tool(llvm-pdbutil PrettyTypeDumper.cpp PrettyTypedefDumper.cpp PrettyVariableDumper.cpp - RawOutputStyle.cpp StreamUtil.cpp YAMLOutputStyle.cpp ) diff --git a/llvm/tools/llvm-pdbutil/FormatUtil.cpp b/llvm/tools/llvm-pdbutil/FormatUtil.cpp deleted file mode 100644 index 007db9ee9f99..000000000000 --- a/llvm/tools/llvm-pdbutil/FormatUtil.cpp +++ /dev/null @@ -1,49 +0,0 @@ -//===- FormatUtil.cpp ----------------------------------------- *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "FormatUtil.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/StringExtras.h" -#include "llvm/Support/FormatAdapters.h" -#include "llvm/Support/FormatVariadic.h" - -using namespace llvm; -using namespace llvm::pdb; - -std::string llvm::pdb::typesetItemList(ArrayRef Opts, - uint32_t GroupSize, uint32_t IndentLevel, - StringRef Sep) { - std::string Result; - while (!Opts.empty()) { - ArrayRef ThisGroup; - ThisGroup = Opts.take_front(GroupSize); - Opts = Opts.drop_front(ThisGroup.size()); - Result += join(ThisGroup, Sep); - if (!Opts.empty()) { - Result += Sep; - Result += "\n"; - Result += formatv("{0}", fmt_repeat(' ', IndentLevel)); - } - } - return Result; -} - -std::string llvm::pdb::typesetStringList(uint32_t IndentLevel, - ArrayRef Strings) { - std::string Result = "["; - for (const auto &S : Strings) { - Result += formatv("\n{0}{1}", fmt_repeat(' ', IndentLevel), S); - } - Result += "]"; - return Result; -} - -std::string llvm::pdb::formatSegmentOffset(uint16_t Segment, uint32_t Offset) { - return formatv("{0:4}:{1:4}", Segment, Offset); -} diff --git a/llvm/tools/llvm-pdbutil/FormatUtil.h b/llvm/tools/llvm-pdbutil/FormatUtil.h deleted file mode 100644 index 2345bce0f8fe..000000000000 --- a/llvm/tools/llvm-pdbutil/FormatUtil.h +++ /dev/null @@ -1,92 +0,0 @@ -//===- FormatUtil.h ------------------------------------------- *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLVMPDBUTIL_FORMAT_UTIL_H -#define LLVM_TOOLS_LLVMPDBUTIL_FORMAT_UTIL_H - -#include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Support/FormatVariadic.h" - -#include -#include - -namespace llvm { -namespace pdb { - -#define PUSH_MASKED_FLAG(Enum, Mask, TheOpt, Value, Text) \ - if (Enum::TheOpt == (Value & Mask)) \ - Opts.push_back(Text); - -#define PUSH_FLAG(Enum, TheOpt, Value, Text) \ - PUSH_MASKED_FLAG(Enum, Enum::TheOpt, TheOpt, Value, Text) - -#define RETURN_CASE(Enum, X, Ret) \ - case Enum::X: \ - return Ret; - -template static std::string formatUnknownEnum(T Value) { - return formatv("unknown ({0})", - static_cast::type>(Value)) - .str(); -} - -std::string formatSegmentOffset(uint16_t Segment, uint32_t Offset); - -std::string typesetItemList(ArrayRef Opts, uint32_t IndentLevel, - uint32_t GroupSize, StringRef Sep); - -std::string typesetStringList(uint32_t IndentLevel, - ArrayRef Strings); - -/// Returns the number of digits in the given integer. -inline int NumDigits(uint64_t N) { - if (N < 10ULL) - return 1; - if (N < 100ULL) - return 2; - if (N < 1000ULL) - return 3; - if (N < 10000ULL) - return 4; - if (N < 100000ULL) - return 5; - if (N < 1000000ULL) - return 6; - if (N < 10000000ULL) - return 7; - if (N < 100000000ULL) - return 8; - if (N < 1000000000ULL) - return 9; - if (N < 10000000000ULL) - return 10; - if (N < 100000000000ULL) - return 11; - if (N < 1000000000000ULL) - return 12; - if (N < 10000000000000ULL) - return 13; - if (N < 100000000000000ULL) - return 14; - if (N < 1000000000000000ULL) - return 15; - if (N < 10000000000000000ULL) - return 16; - if (N < 100000000000000000ULL) - return 17; - if (N < 1000000000000000000ULL) - return 18; - if (N < 10000000000000000000ULL) - return 19; - return 20; -} -} -} // namespace llvm -#endif diff --git a/llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp b/llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp new file mode 100644 index 000000000000..c4af4583a102 --- /dev/null +++ b/llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp @@ -0,0 +1,1198 @@ +//===- LLVMOutputStyle.cpp ------------------------------------ *- C++ --*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "LLVMOutputStyle.h" + +#include "CompactTypeDumpVisitor.h" +#include "StreamUtil.h" +#include "llvm-pdbutil.h" + +#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h" +#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h" +#include "llvm/DebugInfo/CodeView/DebugSymbolRVASubsection.h" +#include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h" +#include "llvm/DebugInfo/CodeView/EnumTables.h" +#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" +#include "llvm/DebugInfo/CodeView/Line.h" +#include "llvm/DebugInfo/CodeView/StringsAndChecksums.h" +#include "llvm/DebugInfo/CodeView/SymbolDumper.h" +#include "llvm/DebugInfo/CodeView/TypeDatabaseVisitor.h" +#include "llvm/DebugInfo/CodeView/TypeDumpVisitor.h" +#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h" +#include "llvm/DebugInfo/MSF/MappedBlockStream.h" +#include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" +#include "llvm/DebugInfo/PDB/Native/DbiStream.h" +#include "llvm/DebugInfo/PDB/Native/EnumTables.h" +#include "llvm/DebugInfo/PDB/Native/GlobalsStream.h" +#include "llvm/DebugInfo/PDB/Native/ISectionContribVisitor.h" +#include "llvm/DebugInfo/PDB/Native/InfoStream.h" +#include "llvm/DebugInfo/PDB/Native/ModuleDebugStream.h" +#include "llvm/DebugInfo/PDB/Native/PDBFile.h" +#include "llvm/DebugInfo/PDB/Native/PublicsStream.h" +#include "llvm/DebugInfo/PDB/Native/RawError.h" +#include "llvm/DebugInfo/PDB/Native/TpiHashing.h" +#include "llvm/DebugInfo/PDB/Native/TpiStream.h" +#include "llvm/DebugInfo/PDB/PDBExtras.h" +#include "llvm/Object/COFF.h" +#include "llvm/Support/BinaryStreamReader.h" +#include "llvm/Support/FormatVariadic.h" + +#include + +using namespace llvm; +using namespace llvm::codeview; +using namespace llvm::msf; +using namespace llvm::pdb; + +namespace { +struct PageStats { + explicit PageStats(const BitVector &FreePages) + : Upm(FreePages), ActualUsedPages(FreePages.size()), + MultiUsePages(FreePages.size()), UseAfterFreePages(FreePages.size()) { + const_cast(Upm).flip(); + // To calculate orphaned pages, we start with the set of pages that the + // MSF thinks are used. Each time we find one that actually *is* used, + // we unset it. Whichever bits remain set at the end are orphaned. + OrphanedPages = Upm; + } + + // The inverse of the MSF File's copy of the Fpm. The basis for which we + // determine the allocation status of each page. + const BitVector Upm; + + // Pages which are marked as used in the FPM and are used at least once. + BitVector ActualUsedPages; + + // Pages which are marked as used in the FPM but are used more than once. + BitVector MultiUsePages; + + // Pages which are marked as used in the FPM but are not used at all. + BitVector OrphanedPages; + + // Pages which are marked free in the FPM but are used. + BitVector UseAfterFreePages; +}; + +class C13RawVisitor : public DebugSubsectionVisitor { +public: + C13RawVisitor(ScopedPrinter &P, LazyRandomTypeCollection &TPI, + LazyRandomTypeCollection *IPI) + : P(P), TPI(TPI), IPI(IPI) {} + + Error visitUnknown(DebugUnknownSubsectionRef &Unknown) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::Unknown)) + return Error::success(); + DictScope DD(P, "Unknown"); + P.printHex("Kind", static_cast(Unknown.kind())); + ArrayRef Data; + BinaryStreamReader Reader(Unknown.getData()); + consumeError(Reader.readBytes(Data, Reader.bytesRemaining())); + P.printBinaryBlock("Data", Data); + return Error::success(); + } + + Error visitLines(DebugLinesSubsectionRef &Lines, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::Lines)) + return Error::success(); + + DictScope DD(P, "Lines"); + + P.printNumber("RelocSegment", Lines.header()->RelocSegment); + P.printNumber("RelocOffset", Lines.header()->RelocOffset); + P.printNumber("CodeSize", Lines.header()->CodeSize); + P.printBoolean("HasColumns", Lines.hasColumnInfo()); + + for (const auto &L : Lines) { + DictScope DDDD(P, "FileEntry"); + + if (auto EC = printFileName("FileName", L.NameIndex, State)) + return EC; + + for (const auto &N : L.LineNumbers) { + DictScope DDD(P, "Line"); + LineInfo LI(N.Flags); + P.printNumber("Offset", N.Offset); + if (LI.isAlwaysStepInto()) + P.printString("StepInto", StringRef("Always")); + else if (LI.isNeverStepInto()) + P.printString("StepInto", StringRef("Never")); + else + P.printNumber("LineNumberStart", LI.getStartLine()); + P.printNumber("EndDelta", LI.getLineDelta()); + P.printBoolean("IsStatement", LI.isStatement()); + } + for (const auto &C : L.Columns) { + DictScope DDD(P, "Column"); + P.printNumber("Start", C.StartColumn); + P.printNumber("End", C.EndColumn); + } + } + + return Error::success(); + } + + Error visitFileChecksums(DebugChecksumsSubsectionRef &Checksums, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::FileChecksums)) + return Error::success(); + + DictScope DD(P, "FileChecksums"); + for (const auto &CS : Checksums) { + DictScope DDD(P, "Checksum"); + if (auto Result = getNameFromStringTable(CS.FileNameOffset, State)) + P.printString("FileName", *Result); + else + return Result.takeError(); + P.printEnum("Kind", uint8_t(CS.Kind), getFileChecksumNames()); + P.printBinaryBlock("Checksum", CS.Checksum); + } + return Error::success(); + } + + Error visitInlineeLines(DebugInlineeLinesSubsectionRef &Inlinees, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::InlineeLines)) + return Error::success(); + + DictScope D(P, "InlineeLines"); + P.printBoolean("HasExtraFiles", Inlinees.hasExtraFiles()); + ListScope LS(P, "Lines"); + for (const auto &L : Inlinees) { + DictScope DDD(P, "Inlinee"); + if (auto EC = printFileName("FileName", L.Header->FileID, State)) + return EC; + + if (auto EC = dumpTypeRecord("Function", L.Header->Inlinee)) + return EC; + P.printNumber("SourceLine", L.Header->SourceLineNum); + if (Inlinees.hasExtraFiles()) { + ListScope DDDD(P, "ExtraFiles"); + for (const auto &EF : L.ExtraFiles) { + if (auto EC = printFileName("File", EF, State)) + return EC; + } + } + } + return Error::success(); + } + + Error visitCrossModuleExports(DebugCrossModuleExportsSubsectionRef &CSE, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeExports)) + return Error::success(); + + ListScope D(P, "CrossModuleExports"); + for (const auto &M : CSE) { + DictScope D(P, "Export"); + P.printHex("Local", M.Local); + P.printHex("Global", M.Global); + } + return Error::success(); + } + + Error visitCrossModuleImports(DebugCrossModuleImportsSubsectionRef &CSI, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeImports)) + return Error::success(); + + ListScope L(P, "CrossModuleImports"); + for (const auto &M : CSI) { + DictScope D(P, "ModuleImport"); + auto Name = getNameFromStringTable(M.Header->ModuleNameOffset, State); + if (!Name) + return Name.takeError(); + P.printString("Module", *Name); + P.printHexList("Imports", M.Imports); + } + return Error::success(); + } + + Error visitFrameData(DebugFrameDataSubsectionRef &FD, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::FrameData)) + return Error::success(); + + ListScope L(P, "FrameData"); + for (const auto &Frame : FD) { + DictScope D(P, "Frame"); + auto Name = getNameFromStringTable(Frame.FrameFunc, State); + if (!Name) + return joinErrors(make_error(raw_error_code::invalid_format, + "Invalid Frame.FrameFunc index"), + Name.takeError()); + P.printNumber("Rva", Frame.RvaStart); + P.printNumber("CodeSize", Frame.CodeSize); + P.printNumber("LocalSize", Frame.LocalSize); + P.printNumber("ParamsSize", Frame.ParamsSize); + P.printNumber("MaxStackSize", Frame.MaxStackSize); + P.printString("FrameFunc", *Name); + P.printNumber("PrologSize", Frame.PrologSize); + P.printNumber("SavedRegsSize", Frame.SavedRegsSize); + P.printNumber("Flags", Frame.Flags); + } + return Error::success(); + } + + Error visitSymbols(DebugSymbolsSubsectionRef &Symbols, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::Symbols)) + return Error::success(); + ListScope L(P, "Symbols"); + + // This section should not actually appear in a PDB file, it really only + // appears in object files. But we support it here for testing. So we + // specify the Object File container type. + codeview::CVSymbolDumper SD(P, TPI, CodeViewContainer::ObjectFile, nullptr, + false); + for (auto S : Symbols) { + DictScope LL(P, ""); + if (auto EC = SD.dump(S)) { + return make_error( + raw_error_code::corrupt_file, + "DEBUG_S_SYMBOLS subsection contained corrupt symbol record"); + } + } + return Error::success(); + } + + Error visitStringTable(DebugStringTableSubsectionRef &Strings, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::StringTable)) + return Error::success(); + + ListScope D(P, "String Table"); + BinaryStreamReader Reader(Strings.getBuffer()); + StringRef S; + consumeError(Reader.readCString(S)); + while (Reader.bytesRemaining() > 0) { + consumeError(Reader.readCString(S)); + if (S.empty() && Reader.bytesRemaining() < 4) + break; + P.printString(S); + } + return Error::success(); + } + + Error visitCOFFSymbolRVAs(DebugSymbolRVASubsectionRef &RVAs, + const StringsAndChecksumsRef &State) override { + if (!opts::checkModuleSubsection(opts::ModuleSubsection::CoffSymbolRVAs)) + return Error::success(); + + ListScope D(P, "COFF Symbol RVAs"); + P.printHexList("RVAs", RVAs); + return Error::success(); + } + +private: + Error dumpTypeRecord(StringRef Label, TypeIndex Index) { + bool Success = false; + DictScope D(P, Label); + if (IPI) { + CompactTypeDumpVisitor CTDV(*IPI, Index, &P); + if (IPI->contains(Index)) { + CVType Type = IPI->getType(Index); + if (auto EC = codeview::visitTypeRecord(Type, CTDV)) + return EC; + } + } + + if (!Success) { + P.printString( + llvm::formatv("Index: {0:x} (unknown function)", Index.getIndex()) + .str()); + } + return Error::success(); + } + Error printFileName(StringRef Label, uint32_t Offset, + const StringsAndChecksumsRef &State) { + if (auto Result = getNameFromChecksumsBuffer(Offset, State)) { + P.printString(Label, *Result); + return Error::success(); + } else + return Result.takeError(); + } + + Expected + getNameFromStringTable(uint32_t Offset, const StringsAndChecksumsRef &State) { + return State.strings().getString(Offset); + } + + Expected + getNameFromChecksumsBuffer(uint32_t Offset, + const StringsAndChecksumsRef &State) { + auto Array = State.checksums().getArray(); + auto ChecksumIter = Array.at(Offset); + if (ChecksumIter == Array.end()) + return make_error(raw_error_code::invalid_format); + const auto &Entry = *ChecksumIter; + return getNameFromStringTable(Entry.FileNameOffset, State); + } + + ScopedPrinter &P; + LazyRandomTypeCollection &TPI; + LazyRandomTypeCollection *IPI; +}; +} + +static void recordKnownUsedPage(PageStats &Stats, uint32_t UsedIndex) { + if (Stats.Upm.test(UsedIndex)) { + if (Stats.ActualUsedPages.test(UsedIndex)) + Stats.MultiUsePages.set(UsedIndex); + Stats.ActualUsedPages.set(UsedIndex); + Stats.OrphanedPages.reset(UsedIndex); + } else { + // The MSF doesn't think this page is used, but it is. + Stats.UseAfterFreePages.set(UsedIndex); + } +} + +static void printSectionOffset(llvm::raw_ostream &OS, + const SectionOffset &Off) { + OS << Off.Off << ", " << Off.Isect; +} + +LLVMOutputStyle::LLVMOutputStyle(PDBFile &File) : File(File), P(outs()) {} + +Error LLVMOutputStyle::dump() { + if (auto EC = dumpFileHeaders()) + return EC; + + if (auto EC = dumpStreamSummary()) + return EC; + + if (auto EC = dumpFreePageMap()) + return EC; + + if (auto EC = dumpStreamBlocks()) + return EC; + + if (auto EC = dumpBlockRanges()) + return EC; + + if (auto EC = dumpStreamBytes()) + return EC; + + if (auto EC = dumpStringTable()) + return EC; + + if (auto EC = dumpInfoStream()) + return EC; + + if (auto EC = dumpTpiStream(StreamTPI)) + return EC; + + if (auto EC = dumpTpiStream(StreamIPI)) + return EC; + + if (auto EC = dumpDbiStream()) + return EC; + + if (auto EC = dumpSectionContribs()) + return EC; + + if (auto EC = dumpSectionMap()) + return EC; + + if (auto EC = dumpGlobalsStream()) + return EC; + + if (auto EC = dumpPublicsStream()) + return EC; + + if (auto EC = dumpSectionHeaders()) + return EC; + + if (auto EC = dumpFpoStream()) + return EC; + + flush(); + + return Error::success(); +} + +Error LLVMOutputStyle::dumpFileHeaders() { + if (!opts::raw::DumpHeaders) + return Error::success(); + + DictScope D(P, "FileHeaders"); + P.printNumber("BlockSize", File.getBlockSize()); + P.printNumber("FreeBlockMap", File.getFreeBlockMapBlock()); + P.printNumber("NumBlocks", File.getBlockCount()); + P.printNumber("NumDirectoryBytes", File.getNumDirectoryBytes()); + P.printNumber("Unknown1", File.getUnknown1()); + P.printNumber("BlockMapAddr", File.getBlockMapIndex()); + P.printNumber("NumDirectoryBlocks", File.getNumDirectoryBlocks()); + + // The directory is not contiguous. Instead, the block map contains a + // contiguous list of block numbers whose contents, when concatenated in + // order, make up the directory. + P.printList("DirectoryBlocks", File.getDirectoryBlockArray()); + P.printNumber("NumStreams", File.getNumStreams()); + return Error::success(); +} + +Error LLVMOutputStyle::dumpStreamSummary() { + if (!opts::raw::DumpStreamSummary) + return Error::success(); + + if (StreamPurposes.empty()) + discoverStreamPurposes(File, StreamPurposes); + + uint32_t StreamCount = File.getNumStreams(); + + ListScope L(P, "Streams"); + for (uint16_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) { + std::string Label("Stream "); + Label += to_string(StreamIdx); + + std::string Value = "[" + StreamPurposes[StreamIdx] + "] ("; + Value += to_string(File.getStreamByteSize(StreamIdx)); + Value += " bytes)"; + + P.printString(Label, Value); + } + + P.flush(); + return Error::success(); +} + +Error LLVMOutputStyle::dumpFreePageMap() { + if (!opts::raw::DumpPageStats) + return Error::success(); + + // Start with used pages instead of free pages because + // the number of free pages is far larger than used pages. + BitVector FPM = File.getMsfLayout().FreePageMap; + + PageStats PS(FPM); + + recordKnownUsedPage(PS, 0); // MSF Super Block + + uint32_t BlocksPerSection = msf::getFpmIntervalLength(File.getMsfLayout()); + uint32_t NumSections = msf::getNumFpmIntervals(File.getMsfLayout()); + for (uint32_t I = 0; I < NumSections; ++I) { + uint32_t Fpm0 = 1 + BlocksPerSection * I; + // 2 Fpm blocks spaced at `getBlockSize()` block intervals + recordKnownUsedPage(PS, Fpm0); + recordKnownUsedPage(PS, Fpm0 + 1); + } + + recordKnownUsedPage(PS, File.getBlockMapIndex()); // Stream Table + + for (auto DB : File.getDirectoryBlockArray()) + recordKnownUsedPage(PS, DB); + + // Record pages used by streams. Note that pages for stream 0 + // are considered being unused because that's what MSVC tools do. + // Stream 0 doesn't contain actual data, so it makes some sense, + // though it's a bit confusing to us. + for (auto &SE : File.getStreamMap().drop_front(1)) + for (auto &S : SE) + recordKnownUsedPage(PS, S); + + dumpBitVector("Msf Free Pages", FPM); + dumpBitVector("Orphaned Pages", PS.OrphanedPages); + dumpBitVector("Multiply Used Pages", PS.MultiUsePages); + dumpBitVector("Use After Free Pages", PS.UseAfterFreePages); + return Error::success(); +} + +void LLVMOutputStyle::dumpBitVector(StringRef Name, const BitVector &V) { + std::vector Vec; + for (uint32_t I = 0, E = V.size(); I != E; ++I) + if (V[I]) + Vec.push_back(I); + P.printList(Name, Vec); +} + +Error LLVMOutputStyle::dumpGlobalsStream() { + if (!opts::raw::DumpGlobals) + return Error::success(); + if (!File.hasPDBGlobalsStream()) { + P.printString("Globals Stream not present"); + return Error::success(); + } + + auto Globals = File.getPDBGlobalsStream(); + if (!Globals) + return Globals.takeError(); + DictScope D(P, "Globals Stream"); + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + P.printNumber("Stream number", Dbi->getGlobalSymbolStreamIndex()); + P.printNumber("Number of buckets", Globals->getNumBuckets()); + P.printList("Hash Buckets", Globals->getHashBuckets()); + + return Error::success(); +} + +Error LLVMOutputStyle::dumpStreamBlocks() { + if (!opts::raw::DumpStreamBlocks) + return Error::success(); + + ListScope L(P, "StreamBlocks"); + uint32_t StreamCount = File.getNumStreams(); + for (uint32_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) { + std::string Name("Stream "); + Name += to_string(StreamIdx); + auto StreamBlocks = File.getStreamBlockList(StreamIdx); + P.printList(Name, StreamBlocks); + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpBlockRanges() { + if (!opts::raw::DumpBlockRange.hasValue()) + return Error::success(); + auto &R = *opts::raw::DumpBlockRange; + uint32_t Max = R.Max.getValueOr(R.Min); + + if (Max < R.Min) + return make_error( + "Invalid block range specified. Max < Min", + std::make_error_code(std::errc::bad_address)); + if (Max >= File.getBlockCount()) + return make_error( + "Invalid block range specified. Requested block out of bounds", + std::make_error_code(std::errc::bad_address)); + + DictScope D(P, "Block Data"); + for (uint32_t I = R.Min; I <= Max; ++I) { + auto ExpectedData = File.getBlockData(I, File.getBlockSize()); + if (!ExpectedData) + return ExpectedData.takeError(); + std::string Label; + llvm::raw_string_ostream S(Label); + S << "Block " << I; + S.flush(); + P.printBinaryBlock(Label, *ExpectedData); + } + + return Error::success(); +} + +static Error parseStreamSpec(StringRef Str, uint32_t &SI, uint32_t &Offset, + uint32_t &Size) { + if (Str.consumeInteger(0, SI)) + return make_error(raw_error_code::invalid_format, + "Invalid Stream Specification"); + if (Str.consume_front(":")) { + if (Str.consumeInteger(0, Offset)) + return make_error(raw_error_code::invalid_format, + "Invalid Stream Specification"); + } + if (Str.consume_front("@")) { + if (Str.consumeInteger(0, Size)) + return make_error(raw_error_code::invalid_format, + "Invalid Stream Specification"); + } + if (!Str.empty()) + return make_error(raw_error_code::invalid_format, + "Invalid Stream Specification"); + return Error::success(); +} + +Error LLVMOutputStyle::dumpStreamBytes() { + if (opts::raw::DumpStreamData.empty()) + return Error::success(); + + if (StreamPurposes.empty()) + discoverStreamPurposes(File, StreamPurposes); + + DictScope D(P, "Stream Data"); + for (auto &Str : opts::raw::DumpStreamData) { + uint32_t SI = 0; + uint32_t Begin = 0; + uint32_t Size = 0; + uint32_t End = 0; + + if (auto EC = parseStreamSpec(Str, SI, Begin, Size)) + return EC; + + if (SI >= File.getNumStreams()) + return make_error(raw_error_code::no_stream); + + auto S = MappedBlockStream::createIndexedStream( + File.getMsfLayout(), File.getMsfBuffer(), SI, File.getAllocator()); + if (!S) + continue; + DictScope DD(P, "Stream"); + if (Size == 0) + End = S->getLength(); + else { + End = Begin + Size; + if (End >= S->getLength()) + return make_error(raw_error_code::index_out_of_bounds, + "Stream is not long enough!"); + } + + P.printNumber("Index", SI); + P.printString("Type", StreamPurposes[SI]); + P.printNumber("Size", S->getLength()); + auto Blocks = File.getMsfLayout().StreamMap[SI]; + P.printList("Blocks", Blocks); + + BinaryStreamReader R(*S); + ArrayRef StreamData; + if (auto EC = R.readBytes(StreamData, S->getLength())) + return EC; + Size = End - Begin; + StreamData = StreamData.slice(Begin, Size); + P.printBinaryBlock("Data", StreamData, Begin); + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpStringTable() { + if (!opts::raw::DumpStringTable) + return Error::success(); + + auto IS = File.getStringTable(); + if (!IS) + return IS.takeError(); + + DictScope D(P, "String Table"); + for (uint32_t I : IS->name_ids()) { + auto ES = IS->getStringForID(I); + if (!ES) + return ES.takeError(); + + if (ES->empty()) + continue; + llvm::SmallString<32> Str; + Str.append("'"); + Str.append(*ES); + Str.append("'"); + P.printString(Str); + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpInfoStream() { + if (!opts::raw::DumpHeaders) + return Error::success(); + if (!File.hasPDBInfoStream()) { + P.printString("PDB Stream not present"); + return Error::success(); + } + auto IS = File.getPDBInfoStream(); + if (!IS) + return IS.takeError(); + + DictScope D(P, "PDB Stream"); + P.printNumber("Version", IS->getVersion()); + P.printHex("Signature", IS->getSignature()); + P.printNumber("Age", IS->getAge()); + P.printObject("Guid", IS->getGuid()); + P.printHex("Features", IS->getFeatures()); + { + DictScope DD(P, "Named Streams"); + for (const auto &S : IS->getNamedStreams().entries()) + P.printObject(S.getKey(), S.getValue()); + } + return Error::success(); +} + +namespace { +class RecordBytesVisitor : public TypeVisitorCallbacks { +public: + explicit RecordBytesVisitor(ScopedPrinter &P) : P(P) {} + + Error visitTypeEnd(CVType &Record) override { + P.printBinaryBlock("Bytes", Record.content()); + return Error::success(); + } + +private: + ScopedPrinter &P; +}; +} + +Error LLVMOutputStyle::dumpTpiStream(uint32_t StreamIdx) { + assert(StreamIdx == StreamTPI || StreamIdx == StreamIPI); + + bool DumpRecordBytes = false; + bool DumpRecords = false; + bool DumpTpiHash = false; + StringRef Label; + StringRef VerLabel; + if (StreamIdx == StreamTPI) { + if (!File.hasPDBTpiStream()) { + P.printString("Type Info Stream (TPI) not present"); + return Error::success(); + } + DumpRecordBytes = opts::raw::DumpTpiRecordBytes; + DumpRecords = opts::raw::DumpTpiRecords; + DumpTpiHash = opts::raw::DumpTpiHash; + Label = "Type Info Stream (TPI)"; + VerLabel = "TPI Version"; + } else if (StreamIdx == StreamIPI) { + auto InfoS = File.getPDBInfoStream(); + if (!InfoS) + return InfoS.takeError(); + + if (!File.hasPDBIpiStream() || !InfoS->containsIdStream()) + return Error::success(); + DumpRecordBytes = opts::raw::DumpIpiRecordBytes; + DumpRecords = opts::raw::DumpIpiRecords; + Label = "Type Info Stream (IPI)"; + VerLabel = "IPI Version"; + } + + auto Tpi = (StreamIdx == StreamTPI) ? File.getPDBTpiStream() + : File.getPDBIpiStream(); + if (!Tpi) + return Tpi.takeError(); + + auto ExpectedTypes = initializeTypeDatabase(StreamIdx); + if (!ExpectedTypes) + return ExpectedTypes.takeError(); + auto &Types = *ExpectedTypes; + + if (!DumpRecordBytes && !DumpRecords && !DumpTpiHash) + return Error::success(); + + std::unique_ptr StreamScope; + std::unique_ptr RecordScope; + + StreamScope = llvm::make_unique(P, Label); + P.printNumber(VerLabel, Tpi->getTpiVersion()); + P.printNumber("Record count", Tpi->getNumTypeRecords()); + + std::vector> Visitors; + + // If we're in dump mode, add a dumper with the appropriate detail level. + if (DumpRecords) { + std::unique_ptr Dumper; + if (opts::raw::CompactRecords) + Dumper = make_unique(Types, &P); + else { + assert(TpiTypes); + + auto X = make_unique(*TpiTypes, &P, false); + if (StreamIdx == StreamIPI) + X->setIpiTypes(*IpiTypes); + Dumper = std::move(X); + } + Visitors.push_back(std::move(Dumper)); + } + if (DumpRecordBytes) + Visitors.push_back(make_unique(P)); + + // We always need to deserialize and add it to the type database. This is + // true if even if we're not dumping anything, because we could need the + // type database for the purposes of dumping symbols. + TypeVisitorCallbackPipeline Pipeline; + for (const auto &V : Visitors) + Pipeline.addCallbackToPipeline(*V); + + if (DumpRecords || DumpRecordBytes) + RecordScope = llvm::make_unique(P, "Records"); + + Optional I = Types.getFirst(); + while (I) { + std::unique_ptr OneRecordScope; + + if ((DumpRecords || DumpRecordBytes) && !opts::raw::CompactRecords) + OneRecordScope = llvm::make_unique(P, ""); + + auto T = Types.getType(*I); + if (auto EC = codeview::visitTypeRecord(T, *I, Pipeline)) + return EC; + I = Types.getNext(*I); + } + + if (DumpTpiHash) { + DictScope DD(P, "Hash"); + P.printNumber("Number of Hash Buckets", Tpi->getNumHashBuckets()); + P.printNumber("Hash Key Size", Tpi->getHashKeySize()); + P.printList("Values", Tpi->getHashValues()); + + ListScope LHA(P, "Adjusters"); + auto ExpectedST = File.getStringTable(); + if (!ExpectedST) + return ExpectedST.takeError(); + const auto &ST = *ExpectedST; + for (const auto &E : Tpi->getHashAdjusters()) { + DictScope DHA(P); + auto Name = ST.getStringForID(E.first); + if (!Name) + return Name.takeError(); + + P.printString("Type", *Name); + P.printHex("TI", E.second); + } + } + + ListScope L(P, "TypeIndexOffsets"); + for (const auto &IO : Tpi->getTypeIndexOffsets()) { + P.printString(formatv("Index: {0:x}, Offset: {1:N}", IO.Type.getIndex(), + (uint32_t)IO.Offset) + .str()); + } + + P.flush(); + return Error::success(); +} + +Expected +LLVMOutputStyle::initializeTypeDatabase(uint32_t SN) { + auto &TypeCollection = (SN == StreamTPI) ? TpiTypes : IpiTypes; + auto Tpi = + (SN == StreamTPI) ? File.getPDBTpiStream() : File.getPDBIpiStream(); + if (!Tpi) + return Tpi.takeError(); + + if (!TypeCollection) { + // Initialize the type collection, even if we're not going to dump it. This + // way if some other part of the dumper decides it wants to use some or all + // of the records for whatever purposes, it can still access them lazily. + auto &Types = Tpi->typeArray(); + uint32_t Count = Tpi->getNumTypeRecords(); + auto Offsets = Tpi->getTypeIndexOffsets(); + TypeCollection = + llvm::make_unique(Types, Count, Offsets); + } + + return *TypeCollection; +} + +Error LLVMOutputStyle::dumpDbiStream() { + bool DumpModules = opts::shared::DumpModules || + opts::shared::DumpModuleSyms || + opts::shared::DumpModuleFiles || + !opts::shared::DumpModuleSubsections.empty(); + if (!opts::raw::DumpHeaders && !DumpModules) + return Error::success(); + if (!File.hasPDBDbiStream()) { + P.printString("DBI Stream not present"); + return Error::success(); + } + + ExitOnError Err("Error while processing DBI Stream"); + + auto DS = File.getPDBDbiStream(); + if (!DS) + return DS.takeError(); + + DictScope D(P, "DBI Stream"); + P.printNumber("Dbi Version", DS->getDbiVersion()); + P.printNumber("Age", DS->getAge()); + P.printBoolean("Incremental Linking", DS->isIncrementallyLinked()); + P.printBoolean("Has CTypes", DS->hasCTypes()); + P.printBoolean("Is Stripped", DS->isStripped()); + P.printObject("Machine Type", DS->getMachineType()); + P.printNumber("Symbol Record Stream Index", DS->getSymRecordStreamIndex()); + P.printNumber("Public Symbol Stream Index", DS->getPublicSymbolStreamIndex()); + P.printNumber("Global Symbol Stream Index", DS->getGlobalSymbolStreamIndex()); + + uint16_t Major = DS->getBuildMajorVersion(); + uint16_t Minor = DS->getBuildMinorVersion(); + P.printVersion("Toolchain Version", Major, Minor); + + std::string DllName; + raw_string_ostream DllStream(DllName); + DllStream << "mspdb" << Major << Minor << ".dll version"; + DllStream.flush(); + P.printVersion(DllName, Major, Minor, DS->getPdbDllVersion()); + + if (DumpModules) { + ListScope L(P, "Modules"); + const DbiModuleList &Modules = DS->modules(); + for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) { + const DbiModuleDescriptor &Modi = Modules.getModuleDescriptor(I); + DictScope DD(P); + P.printString("Name", Modi.getModuleName().str()); + P.printNumber("Debug Stream Index", Modi.getModuleStreamIndex()); + P.printString("Object File Name", Modi.getObjFileName().str()); + P.printNumber("Num Files", Modi.getNumberOfFiles()); + P.printNumber("Source File Name Idx", Modi.getSourceFileNameIndex()); + P.printNumber("Pdb File Name Idx", Modi.getPdbFilePathNameIndex()); + P.printNumber("Line Info Byte Size", Modi.getC11LineInfoByteSize()); + P.printNumber("C13 Line Info Byte Size", Modi.getC13LineInfoByteSize()); + P.printNumber("Symbol Byte Size", Modi.getSymbolDebugInfoByteSize()); + P.printNumber("Type Server Index", Modi.getTypeServerIndex()); + P.printBoolean("Has EC Info", Modi.hasECInfo()); + if (opts::shared::DumpModuleFiles) { + std::string FileListName = to_string(Modules.getSourceFileCount(I)) + + " Contributing Source Files"; + ListScope LL(P, FileListName); + for (auto File : Modules.source_files(I)) + P.printString(File); + } + bool HasModuleDI = (Modi.getModuleStreamIndex() < File.getNumStreams()); + bool ShouldDumpSymbols = + (opts::shared::DumpModuleSyms || opts::raw::DumpSymRecordBytes); + if (HasModuleDI && + (ShouldDumpSymbols || !opts::shared::DumpModuleSubsections.empty())) { + auto ModStreamData = MappedBlockStream::createIndexedStream( + File.getMsfLayout(), File.getMsfBuffer(), + Modi.getModuleStreamIndex(), File.getAllocator()); + + ModuleDebugStreamRef ModS(Modi, std::move(ModStreamData)); + if (auto EC = ModS.reload()) + return EC; + + auto ExpectedTpi = initializeTypeDatabase(StreamTPI); + if (!ExpectedTpi) + return ExpectedTpi.takeError(); + auto &Tpi = *ExpectedTpi; + if (ShouldDumpSymbols) { + + ListScope SS(P, "Symbols"); + codeview::CVSymbolDumper SD(P, Tpi, CodeViewContainer::Pdb, nullptr, + false); + bool HadError = false; + for (auto S : ModS.symbols(&HadError)) { + DictScope LL(P, ""); + if (opts::shared::DumpModuleSyms) { + if (auto EC = SD.dump(S)) { + llvm::consumeError(std::move(EC)); + HadError = true; + break; + } + } + if (opts::raw::DumpSymRecordBytes) + P.printBinaryBlock("Bytes", S.content()); + } + if (HadError) + return make_error( + raw_error_code::corrupt_file, + "DBI stream contained corrupt symbol record"); + } + if (!opts::shared::DumpModuleSubsections.empty()) { + ListScope SS(P, "Subsections"); + auto &InfoS = Err(File.getPDBInfoStream()); + LazyRandomTypeCollection *Ipi = nullptr; + if (InfoS.containsIdStream()) + Ipi = &Err(initializeTypeDatabase(StreamIPI)); + auto ExpectedStrings = File.getStringTable(); + if (!ExpectedStrings) + return joinErrors( + make_error(raw_error_code::no_stream, + "Could not get string table!"), + ExpectedStrings.takeError()); + + C13RawVisitor V(P, Tpi, Ipi); + if (auto EC = codeview::visitDebugSubsections( + ModS.subsections(), V, ExpectedStrings->getStringTable())) + return EC; + } + } + } + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpSectionContribs() { + if (!opts::raw::DumpSectionContribs) + return Error::success(); + if (!File.hasPDBDbiStream()) { + P.printString("DBI Stream not present"); + return Error::success(); + } + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + ListScope L(P, "Section Contributions"); + class Visitor : public ISectionContribVisitor { + public: + Visitor(ScopedPrinter &P, DbiStream &DS) : P(P), DS(DS) {} + void visit(const SectionContrib &SC) override { + DictScope D(P, "Contribution"); + P.printNumber("ISect", SC.ISect); + P.printNumber("Off", SC.Off); + P.printNumber("Size", SC.Size); + P.printFlags("Characteristics", SC.Characteristics, + codeview::getImageSectionCharacteristicNames(), + COFF::SectionCharacteristics(0x00F00000)); + { + DictScope DD(P, "Module"); + P.printNumber("Index", SC.Imod); + const DbiModuleList &Modules = DS.modules(); + if (Modules.getModuleCount() > SC.Imod) { + P.printString("Name", + Modules.getModuleDescriptor(SC.Imod).getModuleName()); + } + } + P.printNumber("Data CRC", SC.DataCrc); + P.printNumber("Reloc CRC", SC.RelocCrc); + P.flush(); + } + void visit(const SectionContrib2 &SC) override { + visit(SC.Base); + P.printNumber("ISect Coff", SC.ISectCoff); + P.flush(); + } + + private: + ScopedPrinter &P; + DbiStream &DS; + }; + Visitor V(P, *Dbi); + Dbi->visitSectionContributions(V); + return Error::success(); +} + +Error LLVMOutputStyle::dumpSectionMap() { + if (!opts::raw::DumpSectionMap) + return Error::success(); + if (!File.hasPDBDbiStream()) { + P.printString("DBI Stream not present"); + return Error::success(); + } + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + ListScope L(P, "Section Map"); + for (auto &M : Dbi->getSectionMap()) { + DictScope D(P, "Entry"); + P.printFlags("Flags", M.Flags, getOMFSegMapDescFlagNames()); + P.printNumber("Ovl", M.Ovl); + P.printNumber("Group", M.Group); + P.printNumber("Frame", M.Frame); + P.printNumber("SecName", M.SecName); + P.printNumber("ClassName", M.ClassName); + P.printNumber("Offset", M.Offset); + P.printNumber("SecByteLength", M.SecByteLength); + P.flush(); + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpPublicsStream() { + if (!opts::raw::DumpPublics) + return Error::success(); + if (!File.hasPDBPublicsStream()) { + P.printString("Publics Stream not present"); + return Error::success(); + } + + auto Publics = File.getPDBPublicsStream(); + if (!Publics) + return Publics.takeError(); + DictScope D(P, "Publics Stream"); + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + P.printNumber("Stream number", Dbi->getPublicSymbolStreamIndex()); + P.printNumber("SymHash", Publics->getSymHash()); + P.printNumber("AddrMap", Publics->getAddrMap()); + P.printNumber("Number of buckets", Publics->getNumBuckets()); + P.printList("Hash Buckets", Publics->getHashBuckets()); + P.printList("Address Map", Publics->getAddressMap()); + P.printList("Thunk Map", Publics->getThunkMap()); + P.printList("Section Offsets", Publics->getSectionOffsets(), + printSectionOffset); + ListScope L(P, "Symbols"); + auto ExpectedTypes = initializeTypeDatabase(StreamTPI); + if (!ExpectedTypes) + return ExpectedTypes.takeError(); + auto &Tpi = *ExpectedTypes; + + codeview::CVSymbolDumper SD(P, Tpi, CodeViewContainer::Pdb, nullptr, false); + bool HadError = false; + for (auto S : Publics->getSymbols(&HadError)) { + DictScope DD(P, ""); + + if (auto EC = SD.dump(S)) { + HadError = true; + break; + } + if (opts::raw::DumpSymRecordBytes) + P.printBinaryBlock("Bytes", S.content()); + } + if (HadError) + return make_error( + raw_error_code::corrupt_file, + "Public symbol stream contained corrupt record"); + + return Error::success(); +} + +Error LLVMOutputStyle::dumpSectionHeaders() { + if (!opts::raw::DumpSectionHeaders) + return Error::success(); + if (!File.hasPDBDbiStream()) { + P.printString("DBI Stream not present"); + return Error::success(); + } + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + ListScope D(P, "Section Headers"); + for (const object::coff_section &Section : Dbi->getSectionHeaders()) { + DictScope DD(P, ""); + + // If a name is 8 characters long, there is no NUL character at end. + StringRef Name(Section.Name, strnlen(Section.Name, sizeof(Section.Name))); + P.printString("Name", Name); + P.printNumber("Virtual Size", Section.VirtualSize); + P.printNumber("Virtual Address", Section.VirtualAddress); + P.printNumber("Size of Raw Data", Section.SizeOfRawData); + P.printNumber("File Pointer to Raw Data", Section.PointerToRawData); + P.printNumber("File Pointer to Relocations", Section.PointerToRelocations); + P.printNumber("File Pointer to Linenumbers", Section.PointerToLinenumbers); + P.printNumber("Number of Relocations", Section.NumberOfRelocations); + P.printNumber("Number of Linenumbers", Section.NumberOfLinenumbers); + P.printFlags("Characteristics", Section.Characteristics, + getImageSectionCharacteristicNames()); + } + return Error::success(); +} + +Error LLVMOutputStyle::dumpFpoStream() { + if (!opts::raw::DumpFpo) + return Error::success(); + if (!File.hasPDBDbiStream()) { + P.printString("DBI Stream not present"); + return Error::success(); + } + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + ListScope D(P, "New FPO"); + for (const object::FpoData &Fpo : Dbi->getFpoRecords()) { + DictScope DD(P, ""); + P.printNumber("Offset", Fpo.Offset); + P.printNumber("Size", Fpo.Size); + P.printNumber("Number of locals", Fpo.NumLocals); + P.printNumber("Number of params", Fpo.NumParams); + P.printNumber("Size of Prolog", Fpo.getPrologSize()); + P.printNumber("Number of Saved Registers", Fpo.getNumSavedRegs()); + P.printBoolean("Has SEH", Fpo.hasSEH()); + P.printBoolean("Use BP", Fpo.useBP()); + P.printNumber("Frame Pointer", Fpo.getFP()); + } + return Error::success(); +} + +void LLVMOutputStyle::flush() { P.flush(); } diff --git a/llvm/tools/llvm-pdbutil/RawOutputStyle.h b/llvm/tools/llvm-pdbutil/LLVMOutputStyle.h similarity index 62% rename from llvm/tools/llvm-pdbutil/RawOutputStyle.h rename to llvm/tools/llvm-pdbutil/LLVMOutputStyle.h index 4c381c2a80b8..184dc4e1f44d 100644 --- a/llvm/tools/llvm-pdbutil/RawOutputStyle.h +++ b/llvm/tools/llvm-pdbutil/LLVMOutputStyle.h @@ -1,4 +1,4 @@ -//===- RawOutputStyle.h -------------------------------------- *- C++ --*-===// +//===- LLVMOutputStyle.h -------------------------------------- *- C++ --*-===// // // The LLVM Compiler Infrastructure // @@ -7,15 +7,15 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_H -#define LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_H +#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H +#define LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H -#include "LinePrinter.h" #include "OutputStyle.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallVector.h" #include "llvm/DebugInfo/CodeView/TypeDatabase.h" +#include "llvm/Support/ScopedPrinter.h" #include @@ -27,9 +27,9 @@ class LazyRandomTypeCollection; } namespace pdb { -class RawOutputStyle : public OutputStyle { +class LLVMOutputStyle : public OutputStyle { public: - RawOutputStyle(PDBFile &File); + LLVMOutputStyle(PDBFile &File); Error dump() override; @@ -37,25 +37,34 @@ private: Expected initializeTypeDatabase(uint32_t SN); - Error dumpFileSummary(); + Error dumpFileHeaders(); Error dumpStreamSummary(); + Error dumpFreePageMap(); Error dumpBlockRanges(); + Error dumpGlobalsStream(); Error dumpStreamBytes(); + Error dumpStreamBlocks(); Error dumpStringTable(); + Error dumpInfoStream(); Error dumpTpiStream(uint32_t StreamIdx); - Error dumpModules(); - Error dumpModuleSyms(); - Error dumpPublics(); + Error dumpDbiStream(); Error dumpSectionContribs(); Error dumpSectionMap(); + Error dumpPublicsStream(); + Error dumpSectionHeaders(); + Error dumpFpoStream(); + + void dumpBitVector(StringRef Name, const BitVector &V); + + void flush(); PDBFile &File; - LinePrinter P; + ScopedPrinter P; std::unique_ptr TpiTypes; std::unique_ptr IpiTypes; SmallVector StreamPurposes; }; -} // namespace pdb -} // namespace llvm +} +} #endif diff --git a/llvm/tools/llvm-pdbutil/LinePrinter.cpp b/llvm/tools/llvm-pdbutil/LinePrinter.cpp index 718d3394e211..ef56b5fe8e6a 100644 --- a/llvm/tools/llvm-pdbutil/LinePrinter.cpp +++ b/llvm/tools/llvm-pdbutil/LinePrinter.cpp @@ -13,7 +13,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/DebugInfo/PDB/UDTLayout.h" -#include "llvm/Support/Format.h" #include "llvm/Support/Regex.h" #include @@ -61,16 +60,10 @@ LinePrinter::LinePrinter(int Indent, bool UseColor, llvm::raw_ostream &Stream) opts::pretty::IncludeCompilands.end()); } -void LinePrinter::Indent(uint32_t Amount) { - if (Amount == 0) - Amount = IndentSpaces; - CurrentIndent += Amount; -} +void LinePrinter::Indent() { CurrentIndent += IndentSpaces; } -void LinePrinter::Unindent(uint32_t Amount) { - if (Amount == 0) - Amount = IndentSpaces; - CurrentIndent = std::max(0, CurrentIndent - Amount); +void LinePrinter::Unindent() { + CurrentIndent = std::max(0, CurrentIndent - IndentSpaces); } void LinePrinter::NewLine() { @@ -78,13 +71,6 @@ void LinePrinter::NewLine() { OS.indent(CurrentIndent); } -void LinePrinter::print(const Twine &T) { OS << T; } - -void LinePrinter::printLine(const Twine &T) { - NewLine(); - OS << T; -} - bool LinePrinter::IsClassExcluded(const ClassLayout &Class) { if (IsTypeExcluded(Class.getName(), Class.getSize())) return true; @@ -93,19 +79,6 @@ bool LinePrinter::IsClassExcluded(const ClassLayout &Class) { return false; } -void LinePrinter::formatBinary(StringRef Label, ArrayRef Data, - uint32_t StartOffset) { - NewLine(); - OS << Label << " ("; - if (!Data.empty()) { - OS << "\n"; - OS << format_bytes_with_ascii(Data, StartOffset, 32, 4, - CurrentIndent + IndentSpaces, true); - NewLine(); - } - OS << ")"; -} - bool LinePrinter::IsTypeExcluded(llvm::StringRef TypeName, uint32_t Size) { if (IsItemExcluded(TypeName, IncludeTypeFilters, ExcludeTypeFilters)) return true; diff --git a/llvm/tools/llvm-pdbutil/LinePrinter.h b/llvm/tools/llvm-pdbutil/LinePrinter.h index f4fd22bcb6f4..1a922feb1e62 100644 --- a/llvm/tools/llvm-pdbutil/LinePrinter.h +++ b/llvm/tools/llvm-pdbutil/LinePrinter.h @@ -10,12 +10,10 @@ #ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H #define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H -#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" -#include "llvm/Support/FormatVariadic.h" -#include "llvm/Support/Regex.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Regex.h" #include @@ -30,22 +28,10 @@ class LinePrinter { public: LinePrinter(int Indent, bool UseColor, raw_ostream &Stream); - void Indent(uint32_t Amount = 0); - void Unindent(uint32_t Amount = 0); + void Indent(); + void Unindent(); void NewLine(); - void printLine(const Twine &T); - void print(const Twine &T); - template void formatLine(const char *Fmt, Ts &&... Items) { - printLine(formatv(Fmt, std::forward(Items)...)); - } - template void format(const char *Fmt, Ts &&... Items) { - print(formatv(Fmt, std::forward(Items)...)); - } - - void formatBinary(StringRef Label, ArrayRef Data, - uint32_t StartOffset); - bool hasColor() const { return UseColor; } raw_ostream &getStream() { return OS; } int getIndentLevel() const { return CurrentIndent; } @@ -77,17 +63,6 @@ private: std::list IncludeSymbolFilters; }; -struct AutoIndent { - explicit AutoIndent(LinePrinter &L, uint32_t Amount = 0) - : L(L), Amount(Amount) { - L.Indent(Amount); - } - ~AutoIndent() { L.Unindent(Amount); } - - LinePrinter &L; - uint32_t Amount = 0; -}; - template inline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) { Printer.getStream() << Item; diff --git a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp deleted file mode 100644 index 8b36de0b7157..000000000000 --- a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp +++ /dev/null @@ -1,749 +0,0 @@ -//===- MinimalSymbolDumper.cpp -------------------------------- *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "MinimalSymbolDumper.h" - -#include "FormatUtil.h" -#include "LinePrinter.h" - -#include "llvm/DebugInfo/CodeView/CVRecord.h" -#include "llvm/DebugInfo/CodeView/CodeView.h" -#include "llvm/DebugInfo/CodeView/Formatters.h" -#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" -#include "llvm/DebugInfo/CodeView/SymbolRecord.h" -#include "llvm/DebugInfo/CodeView/TypeRecord.h" -#include "llvm/Support/FormatVariadic.h" - -using namespace llvm; -using namespace llvm::codeview; -using namespace llvm::pdb; - -static StringRef getSymbolKindName(SymbolKind K) { - switch (K) { -#define SYMBOL_RECORD(EnumName, value, name) \ - case EnumName: \ - return #EnumName; -#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" - default: - llvm_unreachable("Unknown symbol kind!"); - } - return ""; -} - -static std::string formatLocalSymFlags(uint32_t IndentLevel, - LocalSymFlags Flags) { - std::vector Opts; - if (Flags == LocalSymFlags::None) - return "none"; - - PUSH_FLAG(LocalSymFlags, IsParameter, Flags, "param"); - PUSH_FLAG(LocalSymFlags, IsAddressTaken, Flags, "address is taken"); - PUSH_FLAG(LocalSymFlags, IsCompilerGenerated, Flags, "compiler generated"); - PUSH_FLAG(LocalSymFlags, IsAggregate, Flags, "aggregate"); - PUSH_FLAG(LocalSymFlags, IsAggregated, Flags, "aggregated"); - PUSH_FLAG(LocalSymFlags, IsAliased, Flags, "aliased"); - PUSH_FLAG(LocalSymFlags, IsAlias, Flags, "alias"); - PUSH_FLAG(LocalSymFlags, IsReturnValue, Flags, "return val"); - PUSH_FLAG(LocalSymFlags, IsOptimizedOut, Flags, "optimized away"); - PUSH_FLAG(LocalSymFlags, IsEnregisteredGlobal, Flags, "enreg global"); - PUSH_FLAG(LocalSymFlags, IsEnregisteredStatic, Flags, "enreg static"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatExportFlags(uint32_t IndentLevel, ExportFlags Flags) { - std::vector Opts; - if (Flags == ExportFlags::None) - return "none"; - - PUSH_FLAG(ExportFlags, IsConstant, Flags, "constant"); - PUSH_FLAG(ExportFlags, IsData, Flags, "data"); - PUSH_FLAG(ExportFlags, IsPrivate, Flags, "private"); - PUSH_FLAG(ExportFlags, HasNoName, Flags, "no name"); - PUSH_FLAG(ExportFlags, HasExplicitOrdinal, Flags, "explicit ord"); - PUSH_FLAG(ExportFlags, IsForwarder, Flags, "forwarder"); - - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatCompileSym2Flags(uint32_t IndentLevel, - CompileSym2Flags Flags) { - std::vector Opts; - Flags &= ~CompileSym2Flags::SourceLanguageMask; - if (Flags == CompileSym2Flags::None) - return "none"; - - PUSH_FLAG(CompileSym2Flags, EC, Flags, "edit and continue"); - PUSH_FLAG(CompileSym2Flags, NoDbgInfo, Flags, "no dbg info"); - PUSH_FLAG(CompileSym2Flags, LTCG, Flags, "ltcg"); - PUSH_FLAG(CompileSym2Flags, NoDataAlign, Flags, "no data align"); - PUSH_FLAG(CompileSym2Flags, ManagedPresent, Flags, "has managed code"); - PUSH_FLAG(CompileSym2Flags, SecurityChecks, Flags, "security checks"); - PUSH_FLAG(CompileSym2Flags, HotPatch, Flags, "hot patchable"); - PUSH_FLAG(CompileSym2Flags, CVTCIL, Flags, "cvtcil"); - PUSH_FLAG(CompileSym2Flags, MSILModule, Flags, "msil module"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatCompileSym3Flags(uint32_t IndentLevel, - CompileSym3Flags Flags) { - std::vector Opts; - Flags &= ~CompileSym3Flags::SourceLanguageMask; - - if (Flags == CompileSym3Flags::None) - return "none"; - - PUSH_FLAG(CompileSym3Flags, EC, Flags, "edit and continue"); - PUSH_FLAG(CompileSym3Flags, NoDbgInfo, Flags, "no dbg info"); - PUSH_FLAG(CompileSym3Flags, LTCG, Flags, "ltcg"); - PUSH_FLAG(CompileSym3Flags, NoDataAlign, Flags, "no data align"); - PUSH_FLAG(CompileSym3Flags, ManagedPresent, Flags, "has managed code"); - PUSH_FLAG(CompileSym3Flags, SecurityChecks, Flags, "security checks"); - PUSH_FLAG(CompileSym3Flags, HotPatch, Flags, "hot patchable"); - PUSH_FLAG(CompileSym3Flags, CVTCIL, Flags, "cvtcil"); - PUSH_FLAG(CompileSym3Flags, MSILModule, Flags, "msil module"); - PUSH_FLAG(CompileSym3Flags, Sdl, Flags, "sdl"); - PUSH_FLAG(CompileSym3Flags, PGO, Flags, "pgo"); - PUSH_FLAG(CompileSym3Flags, Exp, Flags, "exp"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatFrameProcedureOptions(uint32_t IndentLevel, - FrameProcedureOptions FPO) { - std::vector Opts; - if (FPO == FrameProcedureOptions::None) - return "none"; - - PUSH_FLAG(FrameProcedureOptions, HasAlloca, FPO, "has alloca"); - PUSH_FLAG(FrameProcedureOptions, HasSetJmp, FPO, "has setjmp"); - PUSH_FLAG(FrameProcedureOptions, HasLongJmp, FPO, "has longjmp"); - PUSH_FLAG(FrameProcedureOptions, HasInlineAssembly, FPO, "has inline asm"); - PUSH_FLAG(FrameProcedureOptions, HasExceptionHandling, FPO, "has eh"); - PUSH_FLAG(FrameProcedureOptions, MarkedInline, FPO, "marked inline"); - PUSH_FLAG(FrameProcedureOptions, HasStructuredExceptionHandling, FPO, - "has seh"); - PUSH_FLAG(FrameProcedureOptions, Naked, FPO, "naked"); - PUSH_FLAG(FrameProcedureOptions, SecurityChecks, FPO, "secure checks"); - PUSH_FLAG(FrameProcedureOptions, AsynchronousExceptionHandling, FPO, - "has async eh"); - PUSH_FLAG(FrameProcedureOptions, NoStackOrderingForSecurityChecks, FPO, - "no stack order"); - PUSH_FLAG(FrameProcedureOptions, Inlined, FPO, "inlined"); - PUSH_FLAG(FrameProcedureOptions, StrictSecurityChecks, FPO, - "strict secure checks"); - PUSH_FLAG(FrameProcedureOptions, SafeBuffers, FPO, "safe buffers"); - PUSH_FLAG(FrameProcedureOptions, ProfileGuidedOptimization, FPO, "pgo"); - PUSH_FLAG(FrameProcedureOptions, ValidProfileCounts, FPO, - "has profile counts"); - PUSH_FLAG(FrameProcedureOptions, OptimizedForSpeed, FPO, "opt speed"); - PUSH_FLAG(FrameProcedureOptions, GuardCfg, FPO, "guard cfg"); - PUSH_FLAG(FrameProcedureOptions, GuardCfw, FPO, "guard cfw"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatProcSymFlags(uint32_t IndentLevel, - ProcSymFlags Flags) { - std::vector Opts; - if (Flags == ProcSymFlags::None) - return "none"; - - PUSH_FLAG(ProcSymFlags, HasFP, Flags, "has fp"); - PUSH_FLAG(ProcSymFlags, HasIRET, Flags, "has iret"); - PUSH_FLAG(ProcSymFlags, HasFRET, Flags, "has fret"); - PUSH_FLAG(ProcSymFlags, IsNoReturn, Flags, "noreturn"); - PUSH_FLAG(ProcSymFlags, IsUnreachable, Flags, "unreachable"); - PUSH_FLAG(ProcSymFlags, HasCustomCallingConv, Flags, "custom calling conv"); - PUSH_FLAG(ProcSymFlags, IsNoInline, Flags, "noinline"); - PUSH_FLAG(ProcSymFlags, HasOptimizedDebugInfo, Flags, "opt debuginfo"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string formatThunkOrdinal(ThunkOrdinal Ordinal) { - switch (Ordinal) { - RETURN_CASE(ThunkOrdinal, Standard, "thunk"); - RETURN_CASE(ThunkOrdinal, ThisAdjustor, "this adjustor"); - RETURN_CASE(ThunkOrdinal, Vcall, "vcall"); - RETURN_CASE(ThunkOrdinal, Pcode, "pcode"); - RETURN_CASE(ThunkOrdinal, UnknownLoad, "unknown load"); - RETURN_CASE(ThunkOrdinal, TrampIncremental, "tramp incremental"); - RETURN_CASE(ThunkOrdinal, BranchIsland, "branch island"); - } - return formatUnknownEnum(Ordinal); -} - -static std::string formatTrampolineType(TrampolineType Tramp) { - switch (Tramp) { - RETURN_CASE(TrampolineType, TrampIncremental, "tramp incremental"); - RETURN_CASE(TrampolineType, BranchIsland, "branch island"); - } - return formatUnknownEnum(Tramp); -} - -static std::string formatSourceLanguage(SourceLanguage Lang) { - switch (Lang) { - RETURN_CASE(SourceLanguage, C, "c"); - RETURN_CASE(SourceLanguage, Cpp, "c++"); - RETURN_CASE(SourceLanguage, Fortran, "fortran"); - RETURN_CASE(SourceLanguage, Masm, "masm"); - RETURN_CASE(SourceLanguage, Pascal, "pascal"); - RETURN_CASE(SourceLanguage, Basic, "basic"); - RETURN_CASE(SourceLanguage, Cobol, "cobol"); - RETURN_CASE(SourceLanguage, Link, "link"); - RETURN_CASE(SourceLanguage, VB, "vb"); - RETURN_CASE(SourceLanguage, Cvtres, "cvtres"); - RETURN_CASE(SourceLanguage, Cvtpgd, "cvtpgd"); - RETURN_CASE(SourceLanguage, CSharp, "c#"); - RETURN_CASE(SourceLanguage, ILAsm, "il asm"); - RETURN_CASE(SourceLanguage, Java, "java"); - RETURN_CASE(SourceLanguage, JScript, "javascript"); - RETURN_CASE(SourceLanguage, MSIL, "msil"); - RETURN_CASE(SourceLanguage, HLSL, "hlsl"); - } - return formatUnknownEnum(Lang); -} - -static std::string formatMachineType(CPUType Cpu) { - switch (Cpu) { - RETURN_CASE(CPUType, Intel8080, "intel 8080"); - RETURN_CASE(CPUType, Intel8086, "intel 8086"); - RETURN_CASE(CPUType, Intel80286, "intel 80286"); - RETURN_CASE(CPUType, Intel80386, "intel 80386"); - RETURN_CASE(CPUType, Intel80486, "intel 80486"); - RETURN_CASE(CPUType, Pentium, "intel pentium"); - RETURN_CASE(CPUType, PentiumPro, "intel pentium pro"); - RETURN_CASE(CPUType, Pentium3, "intel pentium 3"); - RETURN_CASE(CPUType, MIPS, "mips"); - RETURN_CASE(CPUType, MIPS16, "mips-16"); - RETURN_CASE(CPUType, MIPS32, "mips-32"); - RETURN_CASE(CPUType, MIPS64, "mips-64"); - RETURN_CASE(CPUType, MIPSI, "mips i"); - RETURN_CASE(CPUType, MIPSII, "mips ii"); - RETURN_CASE(CPUType, MIPSIII, "mips iii"); - RETURN_CASE(CPUType, MIPSIV, "mips iv"); - RETURN_CASE(CPUType, MIPSV, "mips v"); - RETURN_CASE(CPUType, M68000, "motorola 68000"); - RETURN_CASE(CPUType, M68010, "motorola 68010"); - RETURN_CASE(CPUType, M68020, "motorola 68020"); - RETURN_CASE(CPUType, M68030, "motorola 68030"); - RETURN_CASE(CPUType, M68040, "motorola 68040"); - RETURN_CASE(CPUType, Alpha, "alpha"); - RETURN_CASE(CPUType, Alpha21164, "alpha 21164"); - RETURN_CASE(CPUType, Alpha21164A, "alpha 21164a"); - RETURN_CASE(CPUType, Alpha21264, "alpha 21264"); - RETURN_CASE(CPUType, Alpha21364, "alpha 21364"); - RETURN_CASE(CPUType, PPC601, "powerpc 601"); - RETURN_CASE(CPUType, PPC603, "powerpc 603"); - RETURN_CASE(CPUType, PPC604, "powerpc 604"); - RETURN_CASE(CPUType, PPC620, "powerpc 620"); - RETURN_CASE(CPUType, PPCFP, "powerpc fp"); - RETURN_CASE(CPUType, PPCBE, "powerpc be"); - RETURN_CASE(CPUType, SH3, "sh3"); - RETURN_CASE(CPUType, SH3E, "sh3e"); - RETURN_CASE(CPUType, SH3DSP, "sh3 dsp"); - RETURN_CASE(CPUType, SH4, "sh4"); - RETURN_CASE(CPUType, SHMedia, "shmedia"); - RETURN_CASE(CPUType, ARM3, "arm 3"); - RETURN_CASE(CPUType, ARM4, "arm 4"); - RETURN_CASE(CPUType, ARM4T, "arm 4t"); - RETURN_CASE(CPUType, ARM5, "arm 5"); - RETURN_CASE(CPUType, ARM5T, "arm 5t"); - RETURN_CASE(CPUType, ARM6, "arm 6"); - RETURN_CASE(CPUType, ARM_XMAC, "arm xmac"); - RETURN_CASE(CPUType, ARM_WMMX, "arm wmmx"); - RETURN_CASE(CPUType, ARM7, "arm 7"); - RETURN_CASE(CPUType, Omni, "omni"); - RETURN_CASE(CPUType, Ia64, "intel itanium ia64"); - RETURN_CASE(CPUType, Ia64_2, "intel itanium ia64 2"); - RETURN_CASE(CPUType, CEE, "cee"); - RETURN_CASE(CPUType, AM33, "am33"); - RETURN_CASE(CPUType, M32R, "m32r"); - RETURN_CASE(CPUType, TriCore, "tri-core"); - RETURN_CASE(CPUType, X64, "intel x86-x64"); - RETURN_CASE(CPUType, EBC, "ebc"); - RETURN_CASE(CPUType, Thumb, "thumb"); - RETURN_CASE(CPUType, ARMNT, "arm nt"); - RETURN_CASE(CPUType, D3D11_Shader, "d3d11 shader"); - } - return formatUnknownEnum(Cpu); -} - -static std::string formatCookieKind(FrameCookieKind Kind) { - switch (Kind) { - RETURN_CASE(FrameCookieKind, Copy, "copy"); - RETURN_CASE(FrameCookieKind, XorStackPointer, "xor stack ptr"); - RETURN_CASE(FrameCookieKind, XorFramePointer, "xor frame ptr"); - RETURN_CASE(FrameCookieKind, XorR13, "xor rot13"); - } - return formatUnknownEnum(Kind); -} - -static std::string formatRegisterId(RegisterId Id) { - switch (Id) { - RETURN_CASE(RegisterId, VFrame, "vframe"); - RETURN_CASE(RegisterId, AL, "al"); - RETURN_CASE(RegisterId, CL, "cl"); - RETURN_CASE(RegisterId, DL, "dl"); - RETURN_CASE(RegisterId, BL, "bl"); - RETURN_CASE(RegisterId, AH, "ah"); - RETURN_CASE(RegisterId, CH, "ch"); - RETURN_CASE(RegisterId, DH, "dh"); - RETURN_CASE(RegisterId, BH, "bh"); - RETURN_CASE(RegisterId, AX, "ax"); - RETURN_CASE(RegisterId, CX, "cx"); - RETURN_CASE(RegisterId, DX, "dx"); - RETURN_CASE(RegisterId, BX, "bx"); - RETURN_CASE(RegisterId, SP, "sp"); - RETURN_CASE(RegisterId, BP, "bp"); - RETURN_CASE(RegisterId, SI, "si"); - RETURN_CASE(RegisterId, DI, "di"); - RETURN_CASE(RegisterId, EAX, "eax"); - RETURN_CASE(RegisterId, ECX, "ecx"); - RETURN_CASE(RegisterId, EDX, "edx"); - RETURN_CASE(RegisterId, EBX, "ebx"); - RETURN_CASE(RegisterId, ESP, "esp"); - RETURN_CASE(RegisterId, EBP, "ebp"); - RETURN_CASE(RegisterId, ESI, "esi"); - RETURN_CASE(RegisterId, EDI, "edi"); - RETURN_CASE(RegisterId, ES, "es"); - RETURN_CASE(RegisterId, CS, "cs"); - RETURN_CASE(RegisterId, SS, "ss"); - RETURN_CASE(RegisterId, DS, "ds"); - RETURN_CASE(RegisterId, FS, "fs"); - RETURN_CASE(RegisterId, GS, "gs"); - RETURN_CASE(RegisterId, IP, "ip"); - RETURN_CASE(RegisterId, RAX, "rax"); - RETURN_CASE(RegisterId, RBX, "rbx"); - RETURN_CASE(RegisterId, RCX, "rcx"); - RETURN_CASE(RegisterId, RDX, "rdx"); - RETURN_CASE(RegisterId, RSI, "rsi"); - RETURN_CASE(RegisterId, RDI, "rdi"); - RETURN_CASE(RegisterId, RBP, "rbp"); - RETURN_CASE(RegisterId, RSP, "rsp"); - RETURN_CASE(RegisterId, R8, "r8"); - RETURN_CASE(RegisterId, R9, "r9"); - RETURN_CASE(RegisterId, R10, "r10"); - RETURN_CASE(RegisterId, R11, "r11"); - RETURN_CASE(RegisterId, R12, "r12"); - RETURN_CASE(RegisterId, R13, "r13"); - RETURN_CASE(RegisterId, R14, "r14"); - RETURN_CASE(RegisterId, R15, "r15"); - default: - return formatUnknownEnum(Id); - } -} - -static std::string formatRange(LocalVariableAddrRange Range) { - return formatv("[{0},+{1})", - formatSegmentOffset(Range.ISectStart, Range.OffsetStart), - Range.Range) - .str(); -} - -static std::string formatGaps(uint32_t IndentLevel, - ArrayRef Gaps) { - std::vector GapStrs; - for (const auto &G : Gaps) { - GapStrs.push_back(formatv("({0},{1})", G.GapStartOffset, G.Range).str()); - } - return typesetItemList(GapStrs, 7, IndentLevel, ", "); -} - -Error MinimalSymbolDumper::visitSymbolBegin(codeview::CVSymbol &Record) { - // formatLine puts the newline at the beginning, so we use formatLine here - // to start a new line, and then individual visit methods use format to - // append to the existing line. - P.formatLine("- {0} [size = {1}]", getSymbolKindName(Record.Type), - Record.length()); - P.Indent(); - return Error::success(); -} - -Error MinimalSymbolDumper::visitSymbolEnd(CVSymbol &Record) { - P.Unindent(); - return Error::success(); -} - -std::string MinimalSymbolDumper::typeIndex(TypeIndex TI) const { - if (TI.isSimple()) - return formatv("{0}", TI).str(); - StringRef Name = Types.getTypeName(TI); - if (Name.size() > 32) { - Name = Name.take_front(32); - return formatv("{0} ({1}...)", TI, Name); - } else - return formatv("{0} ({1})", TI, Name); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) { - P.format(" `{0}`", Block.Name); - AutoIndent Indent(P); - P.formatLine("parent = {0}, addr = {1}", Block.Parent, - formatSegmentOffset(Block.Segment, Block.CodeOffset)); - P.formatLine("code size = {0}, end = {1}", Block.CodeSize, Block.End); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) { - P.format(" `{0}`", Thunk.Name); - AutoIndent Indent(P); - P.formatLine("parent = {0}, addr = {1}", Thunk.Parent, - formatSegmentOffset(Thunk.Segment, Thunk.Offset)); - P.formatLine("kind = {0}, size = {1}, end = {2}, next = {3}", - formatThunkOrdinal(Thunk.Thunk), Thunk.Length, Thunk.End, - Thunk.Next); - - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - TrampolineSym &Tramp) { - AutoIndent Indent(P); - P.formatLine("type = {0}, size = {1}, source = {2}, target = {3}", - formatTrampolineType(Tramp.Type), Tramp.Size, - formatSegmentOffset(Tramp.ThunkSection, Tramp.ThunkOffset), - formatSegmentOffset(Tramp.TargetSection, Tramp.ThunkOffset)); - - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - SectionSym &Section) { - P.format(" `{0}`", Section.Name); - AutoIndent Indent(P); - P.formatLine("length = {0}, alignment = {1}, rva = {2}, section # = {3}, " - "characteristics = {4}", - Section.Length, Section.Alignment, Section.Rva, - Section.SectionNumber, Section.Characteristics); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, CoffGroupSym &CG) { - P.format(" `{0}`", CG.Name); - AutoIndent Indent(P); - P.formatLine("length = {0}, addr = {1}, characteristics = {2}", CG.Size, - formatSegmentOffset(CG.Segment, CG.Offset), CG.Characteristics); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - BPRelativeSym &BPRel) { - P.format(" `{0}`", BPRel.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, offset = {1}", typeIndex(BPRel.Type), BPRel.Offset); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - BuildInfoSym &BuildInfo) { - P.format(" BuildId = `{0}`", BuildInfo.BuildId); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - CallSiteInfoSym &CSI) { - AutoIndent Indent(P); - P.formatLine("type = {0}, addr = {1}", typeIndex(CSI.Type), - formatSegmentOffset(CSI.Segment, CSI.CodeOffset)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - EnvBlockSym &EnvBlock) { - for (const auto &Entry : EnvBlock.Fields) { - P.formatLine("- {0}", Entry); - } - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FS) { - P.format(" `{0}`", FS.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, file name offset = {1}, flags = {2}", - typeIndex(FS.Index), FS.ModFilenameOffset, - formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) { - P.format(" `{0}`", Export.Name); - AutoIndent Indent(P); - P.formatLine("ordinal = {0}, flags = {1}", Export.Ordinal, - formatExportFlags(P.getIndentLevel() + 9, Export.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - Compile2Sym &Compile2) { - AutoIndent Indent(P); - SourceLanguage Lang = static_cast( - Compile2.Flags & CompileSym2Flags::SourceLanguageMask); - P.formatLine("machine = {0}, ver = {1}, language = {2}", - formatMachineType(Compile2.Machine), Compile2.Version, - formatSourceLanguage(Lang)); - P.formatLine("frontend = {0}.{1}.{2}, backend = {3}.{4}.{5}", - Compile2.VersionFrontendMajor, Compile2.VersionFrontendMinor, - Compile2.VersionFrontendBuild, Compile2.VersionBackendMajor, - Compile2.VersionBackendMinor, Compile2.VersionBackendBuild); - P.formatLine("flags = {0}", - formatCompileSym2Flags(P.getIndentLevel() + 9, Compile2.Flags)); - P.formatLine( - "extra strings = {0}", - typesetStringList(P.getIndentLevel() + 9 + 2, Compile2.ExtraStrings)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - Compile3Sym &Compile3) { - AutoIndent Indent(P); - SourceLanguage Lang = static_cast( - Compile3.Flags & CompileSym3Flags::SourceLanguageMask); - P.formatLine("machine = {0}, Ver = {1}, language = {2}", - formatMachineType(Compile3.Machine), Compile3.Version, - formatSourceLanguage(Lang)); - P.formatLine("frontend = {0}.{1}.{2}.{3}, backend = {4}.{5}.{6}.{7}", - Compile3.VersionFrontendMajor, Compile3.VersionFrontendMinor, - Compile3.VersionFrontendBuild, Compile3.VersionFrontendQFE, - Compile3.VersionBackendMajor, Compile3.VersionBackendMinor, - Compile3.VersionBackendBuild, Compile3.VersionBackendQFE); - P.formatLine("flags = {0}", - formatCompileSym3Flags(P.getIndentLevel() + 9, Compile3.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - ConstantSym &Constant) { - P.format(" `{0}`", Constant.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, value = {1}", typeIndex(Constant.Type), - Constant.Value.toString(10)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, DataSym &Data) { - P.format(" `{0}`", Data.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, addr = {1}", typeIndex(Data.Type), - formatSegmentOffset(Data.Segment, Data.DataOffset)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord( - CVSymbol &CVR, DefRangeFramePointerRelFullScopeSym &Def) { - P.format(" offset = {0}", Def.Offset); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - DefRangeFramePointerRelSym &Def) { - AutoIndent Indent(P); - P.formatLine("offset = {0}, range = {1}", Def.Offset, formatRange(Def.Range)); - P.formatLine("gaps = {2}", Def.Offset, - formatGaps(P.getIndentLevel() + 9, Def.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - DefRangeRegisterRelSym &Def) { - AutoIndent Indent(P); - P.formatLine("register = {0}, base ptr = {1}, offset in parent = {2}, has " - "spilled udt = {3}", - uint16_t(Def.Hdr.Register), int32_t(Def.Hdr.BasePointerOffset), - Def.offsetInParent(), Def.hasSpilledUDTMember()); - P.formatLine("range = {0}, gaps = {1}", formatRange(Def.Range), - formatGaps(P.getIndentLevel() + 9, Def.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord( - CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) { - AutoIndent Indent(P); - P.formatLine("register = {0}, may have no name = {1}, range start = " - "{2}, length = {3}", - uint16_t(DefRangeRegister.Hdr.Register), - uint16_t(DefRangeRegister.Hdr.MayHaveNoName), - formatSegmentOffset(DefRangeRegister.Range.ISectStart, - DefRangeRegister.Range.OffsetStart), - DefRangeRegister.Range.Range); - P.formatLine("gaps = [{0}]", - formatGaps(P.getIndentLevel() + 9, DefRangeRegister.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - DefRangeSubfieldRegisterSym &Def) { - AutoIndent Indent(P); - bool NoName = !!(Def.Hdr.MayHaveNoName == 0); - P.formatLine("register = {0}, may have no name = {1}, offset in parent = {2}", - uint16_t(Def.Hdr.Register), NoName, - uint32_t(Def.Hdr.OffsetInParent)); - P.formatLine("range = {0}, gaps = {1}", formatRange(Def.Range), - formatGaps(P.getIndentLevel() + 9, Def.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - DefRangeSubfieldSym &Def) { - AutoIndent Indent(P); - P.formatLine("program = {0}, offset in parent = {1}, range = {2}", - Def.Program, Def.OffsetInParent, formatRange(Def.Range)); - P.formatLine("gaps = {0}", formatGaps(P.getIndentLevel() + 9, Def.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, DefRangeSym &Def) { - AutoIndent Indent(P); - P.formatLine("program = {0}, range = {1}", Def.Program, - formatRange(Def.Range)); - P.formatLine("gaps = {0}", formatGaps(P.getIndentLevel() + 9, Def.Gaps)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FrameCookieSym &FC) { - AutoIndent Indent(P); - P.formatLine("code offset = {0}, Register = {1}, kind = {2}, flags = {3}", - FC.CodeOffset, FC.Register, formatCookieKind(FC.CookieKind), - FC.Flags); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FrameProcSym &FP) { - AutoIndent Indent(P); - P.formatLine("size = {0}, padding size = {1}, offset to padding = {2}", - FP.TotalFrameBytes, FP.PaddingFrameBytes, FP.OffsetToPadding); - P.formatLine("bytes of callee saved registers = {0}, exception handler addr " - "= {1}", - FP.BytesOfCalleeSavedRegisters, - formatSegmentOffset(FP.SectionIdOfExceptionHandler, - FP.OffsetOfExceptionHandler)); - P.formatLine("flags = {0}", - formatFrameProcedureOptions(P.getIndentLevel() + 9, FP.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - HeapAllocationSiteSym &HAS) { - AutoIndent Indent(P); - P.formatLine("type = {0}, addr = {1} call size = {2}", typeIndex(HAS.Type), - formatSegmentOffset(HAS.Segment, HAS.CodeOffset), - HAS.CallInstructionSize); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, InlineSiteSym &IS) { - AutoIndent Indent(P); - auto Bytes = makeArrayRef(IS.AnnotationData); - StringRef Annotations(reinterpret_cast(Bytes.begin()), - Bytes.size()); - - P.formatLine("inlinee = {0}, parent = {1}, end = {2}", typeIndex(IS.Inlinee), - IS.Parent, IS.End); - P.formatLine("annotations = {0}", toHex(Annotations)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - RegisterSym &Register) { - P.format(" `{0}`", Register.Name); - AutoIndent Indent(P); - P.formatLine("register = {0}, type = {1}", - formatRegisterId(Register.Register), typeIndex(Register.Index)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - PublicSym32 &Public) { - P.format(" `{0}`", Public.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, addr = {1}", typeIndex(Public.Index), - formatSegmentOffset(Public.Segment, Public.Offset)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ProcRefSym &PR) { - P.format(" `{0}`", PR.Name); - AutoIndent Indent(P); - P.formatLine("module = {0}, sum name = {1}, offset = {2}", PR.Module, - PR.SumName, PR.SymOffset); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) { - P.format(" `{0}` (addr = {1})", Label.Name, - formatSegmentOffset(Label.Segment, Label.CodeOffset)); - AutoIndent Indent(P); - P.formatLine("flags = {0}", - formatProcSymFlags(P.getIndentLevel() + 9, Label.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) { - P.format(" `{0}`", Local.Name); - AutoIndent Indent(P); - - std::string FlagStr = - formatLocalSymFlags(P.getIndentLevel() + 9, Local.Flags); - P.formatLine("type={0}, flags = {1}", typeIndex(Local.Type), FlagStr); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - ObjNameSym &ObjName) { - P.format(" sig={0}, `{1}`", ObjName.Signature, ObjName.Name); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) { - P.format(" `{0}`", Proc.Name); - AutoIndent Indent(P); - P.formatLine("parent = {0}, addr = {1}, code size = {2}, end = {3}", - Proc.Parent, formatSegmentOffset(Proc.Segment, Proc.CodeOffset), - Proc.CodeSize, Proc.End); - P.formatLine("debug start = {0}, debug end = {1}, flags = {2}", Proc.DbgStart, - Proc.DbgEnd, - formatProcSymFlags(P.getIndentLevel() + 9, Proc.Flags)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - ScopeEndSym &ScopeEnd) { - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) { - AutoIndent Indent(P); - for (const auto &I : Caller.Indices) { - P.formatLine("callee: {0}", typeIndex(I)); - } - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - RegRelativeSym &RegRel) { - P.format(" `{0}`", RegRel.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, register = {1}, offset = {2}", - typeIndex(RegRel.Type), formatRegisterId(RegRel.Register), - RegRel.Offset); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, - ThreadLocalDataSym &Data) { - P.format(" `{0}`", Data.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, addr = {1}", typeIndex(Data.Type), - formatSegmentOffset(Data.Segment, Data.DataOffset)); - return Error::success(); -} - -Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) { - P.format(" `{0}`", UDT.Name); - AutoIndent Indent(P); - P.formatLine("original type = {0}", UDT.Type); - return Error::success(); -} diff --git a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h deleted file mode 100644 index 451f2da6fd1d..000000000000 --- a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h +++ /dev/null @@ -1,47 +0,0 @@ -//===- MinimalSymbolDumper.h ---------------------------------- *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H -#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H - -#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h" - -namespace llvm { -namespace codeview { -class LazyRandomTypeCollection; -} - -namespace pdb { -class LinePrinter; - -class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks { -public: - MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, - codeview::LazyRandomTypeCollection &Types) - : P(P), Types(Types) {} - - Error visitSymbolBegin(codeview::CVSymbol &Record) override; - Error visitSymbolEnd(codeview::CVSymbol &Record) override; - -#define SYMBOL_RECORD(EnumName, EnumVal, Name) \ - virtual Error visitKnownRecord(codeview::CVSymbol &CVR, \ - codeview::Name &Record) override; -#define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) -#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" - -private: - std::string typeIndex(codeview::TypeIndex TI) const; - - LinePrinter &P; - codeview::LazyRandomTypeCollection &Types; -}; -} // namespace pdb -} // namespace llvm - -#endif \ No newline at end of file diff --git a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp b/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp deleted file mode 100644 index 98813e03c380..000000000000 --- a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp +++ /dev/null @@ -1,532 +0,0 @@ -//===- MinimalTypeDumper.cpp ---------------------------------- *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "MinimalTypeDumper.h" - -#include "FormatUtil.h" -#include "LinePrinter.h" - -#include "llvm/DebugInfo/CodeView/CVRecord.h" -#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h" -#include "llvm/DebugInfo/CodeView/CodeView.h" -#include "llvm/DebugInfo/CodeView/Formatters.h" -#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" -#include "llvm/DebugInfo/CodeView/TypeRecord.h" -#include "llvm/Support/FormatVariadic.h" -#include "llvm/Support/MathExtras.h" - -using namespace llvm; -using namespace llvm::codeview; -using namespace llvm::pdb; - -static StringRef getLeafTypeName(TypeLeafKind K) { - switch (K) { -#define TYPE_RECORD(EnumName, value, name) \ - case EnumName: \ - return #EnumName; -#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" - default: - llvm_unreachable("Unknown type leaf kind!"); - } - return ""; -} - -static std::string formatClassOptions(uint32_t IndentLevel, - ClassOptions Options) { - std::vector Opts; - PUSH_FLAG(ClassOptions, HasConstructorOrDestructor, Options, - "has ctor / dtor"); - PUSH_FLAG(ClassOptions, ContainsNestedClass, Options, - "contains nested class"); - PUSH_FLAG(ClassOptions, HasConversionOperator, Options, - "conversion operator"); - PUSH_FLAG(ClassOptions, ForwardReference, Options, "forward ref"); - PUSH_FLAG(ClassOptions, HasUniqueName, Options, "has unique name"); - PUSH_FLAG(ClassOptions, Intrinsic, Options, "intrin"); - PUSH_FLAG(ClassOptions, Nested, Options, "is nested"); - PUSH_FLAG(ClassOptions, HasOverloadedOperator, Options, - "overloaded operator"); - PUSH_FLAG(ClassOptions, HasOverloadedAssignmentOperator, Options, - "overloaded operator="); - PUSH_FLAG(ClassOptions, Packed, Options, "packed"); - PUSH_FLAG(ClassOptions, Scoped, Options, "scoped"); - PUSH_FLAG(ClassOptions, Sealed, Options, "sealed"); - - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -static std::string pointerOptions(PointerOptions Options) { - std::vector Opts; - PUSH_FLAG(PointerOptions, Flat32, Options, "flat32"); - PUSH_FLAG(PointerOptions, Volatile, Options, "volatile"); - PUSH_FLAG(PointerOptions, Const, Options, "const"); - PUSH_FLAG(PointerOptions, Unaligned, Options, "unaligned"); - PUSH_FLAG(PointerOptions, Restrict, Options, "restrict"); - PUSH_FLAG(PointerOptions, WinRTSmartPointer, Options, "winrt"); - if (Opts.empty()) - return "None"; - return join(Opts, " | "); -} - -static std::string modifierOptions(ModifierOptions Options) { - std::vector Opts; - PUSH_FLAG(ModifierOptions, Const, Options, "const"); - PUSH_FLAG(ModifierOptions, Volatile, Options, "volatile"); - PUSH_FLAG(ModifierOptions, Unaligned, Options, "unaligned"); - if (Opts.empty()) - return "None"; - return join(Opts, " | "); -} - -static std::string formatCallingConvention(CallingConvention Convention) { - switch (Convention) { - RETURN_CASE(CallingConvention, AlphaCall, "alphacall"); - RETURN_CASE(CallingConvention, AM33Call, "am33call"); - RETURN_CASE(CallingConvention, ArmCall, "armcall"); - RETURN_CASE(CallingConvention, ClrCall, "clrcall"); - RETURN_CASE(CallingConvention, FarC, "far cdecl"); - RETURN_CASE(CallingConvention, FarFast, "far fastcall"); - RETURN_CASE(CallingConvention, FarPascal, "far pascal"); - RETURN_CASE(CallingConvention, FarStdCall, "far stdcall"); - RETURN_CASE(CallingConvention, FarSysCall, "far syscall"); - RETURN_CASE(CallingConvention, Generic, "generic"); - RETURN_CASE(CallingConvention, Inline, "inline"); - RETURN_CASE(CallingConvention, M32RCall, "m32rcall"); - RETURN_CASE(CallingConvention, MipsCall, "mipscall"); - RETURN_CASE(CallingConvention, NearC, "cdecl"); - RETURN_CASE(CallingConvention, NearFast, "fastcall"); - RETURN_CASE(CallingConvention, NearPascal, "pascal"); - RETURN_CASE(CallingConvention, NearStdCall, "stdcall"); - RETURN_CASE(CallingConvention, NearSysCall, "near syscall"); - RETURN_CASE(CallingConvention, NearVector, "vectorcall"); - RETURN_CASE(CallingConvention, PpcCall, "ppccall"); - RETURN_CASE(CallingConvention, SHCall, "shcall"); - RETURN_CASE(CallingConvention, SH5Call, "sh5call"); - RETURN_CASE(CallingConvention, ThisCall, "thiscall"); - RETURN_CASE(CallingConvention, TriCall, "tricall"); - } - return formatUnknownEnum(Convention); -} - -static std::string formatPointerMode(PointerMode Mode) { - switch (Mode) { - RETURN_CASE(PointerMode, LValueReference, "ref"); - RETURN_CASE(PointerMode, Pointer, "pointer"); - RETURN_CASE(PointerMode, PointerToDataMember, "data member pointer"); - RETURN_CASE(PointerMode, PointerToMemberFunction, "member fn pointer"); - RETURN_CASE(PointerMode, RValueReference, "rvalue ref"); - } - return formatUnknownEnum(Mode); -} - -static std::string memberAccess(MemberAccess Access) { - switch (Access) { - RETURN_CASE(MemberAccess, None, ""); - RETURN_CASE(MemberAccess, Private, "private"); - RETURN_CASE(MemberAccess, Protected, "protected"); - RETURN_CASE(MemberAccess, Public, "public"); - } - return formatUnknownEnum(Access); -} - -static std::string methodKind(MethodKind Kind) { - switch (Kind) { - RETURN_CASE(MethodKind, Vanilla, ""); - RETURN_CASE(MethodKind, Virtual, "virtual"); - RETURN_CASE(MethodKind, Static, "static"); - RETURN_CASE(MethodKind, Friend, "friend"); - RETURN_CASE(MethodKind, IntroducingVirtual, "intro virtual"); - RETURN_CASE(MethodKind, PureVirtual, "pure virtual"); - RETURN_CASE(MethodKind, PureIntroducingVirtual, "pure intro virtual"); - } - return formatUnknownEnum(Kind); -} - -static std::string pointerKind(PointerKind Kind) { - switch (Kind) { - RETURN_CASE(PointerKind, Near16, "ptr16"); - RETURN_CASE(PointerKind, Far16, "far ptr16"); - RETURN_CASE(PointerKind, Huge16, "huge ptr16"); - RETURN_CASE(PointerKind, BasedOnSegment, "segment based"); - RETURN_CASE(PointerKind, BasedOnValue, "value based"); - RETURN_CASE(PointerKind, BasedOnSegmentValue, "segment value based"); - RETURN_CASE(PointerKind, BasedOnAddress, "address based"); - RETURN_CASE(PointerKind, BasedOnSegmentAddress, "segment address based"); - RETURN_CASE(PointerKind, BasedOnType, "type based"); - RETURN_CASE(PointerKind, BasedOnSelf, "self based"); - RETURN_CASE(PointerKind, Near32, "ptr32"); - RETURN_CASE(PointerKind, Far32, "far ptr32"); - RETURN_CASE(PointerKind, Near64, "ptr64"); - } - return formatUnknownEnum(Kind); -} - -static std::string memberAttributes(const MemberAttributes &Attrs) { - std::vector Opts; - std::string Access = memberAccess(Attrs.getAccess()); - std::string Kind = methodKind(Attrs.getMethodKind()); - if (!Access.empty()) - Opts.push_back(Access); - if (!Kind.empty()) - Opts.push_back(Kind); - MethodOptions Flags = Attrs.getFlags(); - PUSH_FLAG(MethodOptions, Pseudo, Flags, "pseudo"); - PUSH_FLAG(MethodOptions, NoInherit, Flags, "noinherit"); - PUSH_FLAG(MethodOptions, NoConstruct, Flags, "noconstruct"); - PUSH_FLAG(MethodOptions, CompilerGenerated, Flags, "compiler-generated"); - PUSH_FLAG(MethodOptions, Sealed, Flags, "sealed"); - return join(Opts, " "); -} - -static std::string formatPointerAttrs(const PointerRecord &Record) { - PointerMode Mode = Record.getMode(); - PointerOptions Opts = Record.getOptions(); - PointerKind Kind = Record.getPointerKind(); - return formatv("mode = {0}, opts = {1}, kind = {2}", formatPointerMode(Mode), - pointerOptions(Opts), pointerKind(Kind)); -} - -static std::string formatFunctionOptions(FunctionOptions Options) { - std::vector Opts; - - PUSH_FLAG(FunctionOptions, CxxReturnUdt, Options, "returns cxx udt"); - PUSH_FLAG(FunctionOptions, ConstructorWithVirtualBases, Options, - "constructor with virtual bases"); - PUSH_FLAG(FunctionOptions, Constructor, Options, "constructor"); - if (Opts.empty()) - return "None"; - return join(Opts, " | "); -} - -Error MinimalTypeDumpVisitor::visitTypeBegin(CVType &Record, TypeIndex Index) { - // formatLine puts the newline at the beginning, so we use formatLine here - // to start a new line, and then individual visit methods use format to - // append to the existing line. - P.formatLine("{0} | {1} [size = {2}]", - fmt_align(Index, AlignStyle::Right, Width), - getLeafTypeName(Record.Type), Record.length()); - P.Indent(Width + 3); - return Error::success(); -} -Error MinimalTypeDumpVisitor::visitTypeEnd(CVType &Record) { - P.Unindent(Width + 3); - if (RecordBytes) { - AutoIndent Indent(P, 9); - P.formatBinary("Bytes", Record.RecordData, 0); - } - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitMemberBegin(CVMemberRecord &Record) { - P.formatLine("- {0}", getLeafTypeName(Record.Kind)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitMemberEnd(CVMemberRecord &Record) { - if (RecordBytes) { - AutoIndent Indent(P, 2); - P.formatBinary("Bytes", Record.Data, 0); - } - return Error::success(); -} - -StringRef MinimalTypeDumpVisitor::getTypeName(TypeIndex TI) const { - if (TI.isNoneType()) - return ""; - return Types.getTypeName(TI); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - FieldListRecord &FieldList) { - if (auto EC = codeview::visitMemberRecordStream(FieldList.Data, *this)) - return EC; - - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - StringIdRecord &String) { - P.format(" ID: {0}, String: {1}", String.getId(), String.getString()); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - ArgListRecord &Args) { - auto Indices = Args.getIndices(); - if (Indices.empty()) - return Error::success(); - - auto Max = std::max_element(Indices.begin(), Indices.end()); - uint32_t W = NumDigits(Max->getIndex()) + 2; - - for (auto I : Indices) - P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W), - getTypeName(I)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - StringListRecord &Strings) { - auto Indices = Strings.getIndices(); - if (Indices.empty()) - return Error::success(); - - auto Max = std::max_element(Indices.begin(), Indices.end()); - uint32_t W = NumDigits(Max->getIndex()) + 2; - - for (auto I : Indices) - P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W), - getTypeName(I)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - ClassRecord &Class) { - P.formatLine("class name: `{0}`", Class.Name); - if (Class.hasUniqueName()) - P.formatLine("unique name: `{0}`", Class.UniqueName); - P.formatLine("vtable: {0}, base list: {1}, field list: {2}", - Class.VTableShape, Class.DerivationList, Class.FieldList); - P.formatLine("options: {0}", - formatClassOptions(P.getIndentLevel(), Class.Options)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - UnionRecord &Union) { - P.formatLine("class name: `{0}`", Union.Name); - if (Union.hasUniqueName()) - P.formatLine("unique name: `{0}`", Union.UniqueName); - P.formatLine("field list: {0}", Union.FieldList); - P.formatLine("options: {0}", - formatClassOptions(P.getIndentLevel(), Union.Options)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, EnumRecord &Enum) { - P.formatLine("name: `{0}`", Enum.Name); - if (Enum.hasUniqueName()) - P.formatLine("unique name: `{0}`", Enum.UniqueName); - P.formatLine("field list: {0}, underlying type: {1}", Enum.FieldList, - Enum.UnderlyingType); - P.formatLine("options: {0}", - formatClassOptions(P.getIndentLevel(), Enum.Options)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, ArrayRecord &AT) { - if (AT.Name.empty()) { - P.formatLine("size: {0}, index type: {1}, element type: {2}", AT.Size, - AT.IndexType, AT.ElementType); - } else { - P.formatLine("name: {0}, size: {1}, index type: {2}, element type: {3}", - AT.Name, AT.Size, AT.IndexType, AT.ElementType); - } - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - VFTableRecord &VFT) { - P.formatLine("offset: {0}, complete class: {1}, overridden vftable: {2}", - VFT.VFPtrOffset, VFT.CompleteClass, VFT.OverriddenVFTable); - P.formatLine("method names: "); - if (!VFT.MethodNames.empty()) { - std::string Sep = - formatv("\n{0}", - fmt_repeat(' ', P.getIndentLevel() + strlen("method names: "))) - .str(); - P.print(join(VFT.MethodNames, Sep)); - } - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - MemberFuncIdRecord &Id) { - P.formatLine("name = {0}, type = {1}, class type = {2}", Id.Name, - Id.FunctionType, Id.ClassType); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - ProcedureRecord &Proc) { - P.formatLine("return type = {0}, # args = {1}, param list = {2}", - Proc.ReturnType, Proc.ParameterCount, Proc.ArgumentList); - P.formatLine("calling conv = {0}, options = {1}", - formatCallingConvention(Proc.CallConv), - formatFunctionOptions(Proc.Options)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - MemberFunctionRecord &MF) { - P.formatLine("return type = {0}, # args = {1}, param list = {2}", - MF.ParameterCount, MF.ArgumentList, MF.ReturnType); - P.formatLine("class type = {0}, this type = {1}, this adjust = {2}", - MF.ClassType, MF.ThisType, MF.ThisPointerAdjustment); - P.formatLine("calling conv = {0}, options = {1}", - formatCallingConvention(MF.CallConv), - formatFunctionOptions(MF.Options)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - FuncIdRecord &Func) { - P.formatLine("name = {0}, type = {1}, parent scope = {2}", Func.Name, - Func.FunctionType, Func.ParentScope); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - TypeServer2Record &TS) { - P.formatLine("name = {0}, age = {1}, guid = {2}", TS.Name, TS.Age, - fmt_guid(TS.Guid)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - PointerRecord &Ptr) { - P.formatLine("referent = {0}, {1}", Ptr.ReferentType, - formatPointerAttrs(Ptr)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - ModifierRecord &Mod) { - P.formatLine("referent = {0}, modifiers = {1}", Mod.ModifiedType, - modifierOptions(Mod.Modifiers)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - VFTableShapeRecord &Shape) { - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - UdtModSourceLineRecord &U) { - P.formatLine("udt = {0}, mod = {1}, file = {2}, line = {3}", U.UDT, U.Module, - U.SourceFile.getIndex(), U.LineNumber); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - UdtSourceLineRecord &U) { - P.formatLine("udt = {0}, file = {1}, line = {2}", U.UDT, - U.SourceFile.getIndex(), U.LineNumber); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - BitFieldRecord &BF) { - P.formatLine("type = {0}, bit offset = {1}, # bits = {2}", BF.Type, - BF.BitOffset, BF.BitSize); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord( - CVType &CVR, MethodOverloadListRecord &Overloads) { - for (auto &M : Overloads.Methods) - P.formatLine("- Method [type = {0}, vftable offset = {1}, attrs = {2}]", - M.Type, M.VFTableOffset, memberAttributes(M.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, - BuildInfoRecord &BI) { - auto Indices = BI.ArgIndices; - if (Indices.empty()) - return Error::success(); - - auto Max = std::max_element(Indices.begin(), Indices.end()); - uint32_t W = NumDigits(Max->getIndex()) + 2; - - for (auto I : Indices) - P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W), - getTypeName(I)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, LabelRecord &R) { - std::string Type = (R.Mode == LabelType::Far) ? "far" : "near"; - P.format(" type = {0}", Type); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - NestedTypeRecord &Nested) { - P.format(" [name = `{0}`, parent = {1}]", Nested.Name, Nested.Type); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - OneMethodRecord &Method) { - P.format(" [name = `{0}`]", Method.Name); - AutoIndent Indent(P); - P.formatLine("type = {0}, vftable offset = {1}, attrs = {2}", Method.Type, - Method.VFTableOffset, memberAttributes(Method.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - OverloadedMethodRecord &Method) { - P.format(" [name = `{0}`, # overloads = {1}, overload list = {2}]", - Method.Name, Method.NumOverloads, Method.MethodList); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - DataMemberRecord &Field) { - P.format(" [name = `{0}`, Type = {1}, offset = {2}, attrs = {3}]", Field.Name, - Field.Type, Field.FieldOffset, memberAttributes(Field.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - StaticDataMemberRecord &Field) { - P.format(" [name = `{0}`, type = {1}, attrs = {2}]", Field.Name, Field.Type, - memberAttributes(Field.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - EnumeratorRecord &Enum) { - P.format(" [{0} = {1}]", Enum.Name, - Enum.Value.toString(10, Enum.Value.isSigned())); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - BaseClassRecord &Base) { - AutoIndent Indent(P); - P.formatLine("type = {0}, offset = {1}, attrs = {2}", Base.Type, Base.Offset, - memberAttributes(Base.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - VirtualBaseClassRecord &Base) { - AutoIndent Indent(P); - P.formatLine( - "base = {0}, vbptr = {1}, vbptr offset = {2}, vtable index = {3}", - Base.BaseType, Base.VBPtrType, Base.VBPtrOffset, Base.VTableIndex); - P.formatLine("attrs = {0}", memberAttributes(Base.Attrs)); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - ListContinuationRecord &Cont) { - P.format(" continuation = {0}", Cont.ContinuationIndex); - return Error::success(); -} - -Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, - VFPtrRecord &VFP) { - P.format(" type = {0}", VFP.Type); - return Error::success(); -} diff --git a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.h b/llvm/tools/llvm-pdbutil/MinimalTypeDumper.h deleted file mode 100644 index 47f6781e3cab..000000000000 --- a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.h +++ /dev/null @@ -1,56 +0,0 @@ -//===- MinimalTypeDumper.h ------------------------------------ *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H -#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H - -#include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h" - -namespace llvm { -namespace codeview { -class LazyRandomTypeCollection; -} - -namespace pdb { -class LinePrinter; - -class MinimalTypeDumpVisitor : public codeview::TypeVisitorCallbacks { -public: - MinimalTypeDumpVisitor(LinePrinter &P, uint32_t Width, bool RecordBytes, - codeview::LazyRandomTypeCollection &Types) - : P(P), Width(Width), RecordBytes(RecordBytes), Types(Types) {} - - Error visitTypeBegin(codeview::CVType &Record, - codeview::TypeIndex Index) override; - Error visitTypeEnd(codeview::CVType &Record) override; - Error visitMemberBegin(codeview::CVMemberRecord &Record) override; - Error visitMemberEnd(codeview::CVMemberRecord &Record) override; - -#define TYPE_RECORD(EnumName, EnumVal, Name) \ - Error visitKnownRecord(codeview::CVType &CVR, \ - codeview::Name##Record &Record) override; -#define MEMBER_RECORD(EnumName, EnumVal, Name) \ - Error visitKnownMember(codeview::CVMemberRecord &CVR, \ - codeview::Name##Record &Record) override; -#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) -#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) -#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" - -private: - StringRef getTypeName(codeview::TypeIndex TI) const; - - LinePrinter &P; - uint32_t Width; - bool RecordBytes = false; - codeview::LazyRandomTypeCollection &Types; -}; -} // namespace pdb -} // namespace llvm - -#endif diff --git a/llvm/tools/llvm-pdbutil/RawOutputStyle.cpp b/llvm/tools/llvm-pdbutil/RawOutputStyle.cpp deleted file mode 100644 index 8afd727f032c..000000000000 --- a/llvm/tools/llvm-pdbutil/RawOutputStyle.cpp +++ /dev/null @@ -1,668 +0,0 @@ -//===- RawOutputStyle.cpp ------------------------------------ *- C++ --*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "RawOutputStyle.h" - -#include "CompactTypeDumpVisitor.h" -#include "FormatUtil.h" -#include "MinimalSymbolDumper.h" -#include "MinimalTypeDumper.h" -#include "StreamUtil.h" -#include "llvm-pdbutil.h" - -#include "llvm/DebugInfo/CodeView/CVSymbolVisitor.h" -#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h" -#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h" -#include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h" -#include "llvm/DebugInfo/CodeView/EnumTables.h" -#include "llvm/DebugInfo/CodeView/Formatters.h" -#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" -#include "llvm/DebugInfo/CodeView/Line.h" -#include "llvm/DebugInfo/CodeView/SymbolDeserializer.h" -#include "llvm/DebugInfo/CodeView/SymbolDumper.h" -#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbackPipeline.h" -#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h" -#include "llvm/DebugInfo/CodeView/TypeDumpVisitor.h" -#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h" -#include "llvm/DebugInfo/MSF/MappedBlockStream.h" -#include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" -#include "llvm/DebugInfo/PDB/Native/DbiStream.h" -#include "llvm/DebugInfo/PDB/Native/EnumTables.h" -#include "llvm/DebugInfo/PDB/Native/GlobalsStream.h" -#include "llvm/DebugInfo/PDB/Native/ISectionContribVisitor.h" -#include "llvm/DebugInfo/PDB/Native/InfoStream.h" -#include "llvm/DebugInfo/PDB/Native/ModuleDebugStream.h" -#include "llvm/DebugInfo/PDB/Native/PDBFile.h" -#include "llvm/DebugInfo/PDB/Native/PublicsStream.h" -#include "llvm/DebugInfo/PDB/Native/RawError.h" -#include "llvm/DebugInfo/PDB/Native/TpiHashing.h" -#include "llvm/DebugInfo/PDB/Native/TpiStream.h" -#include "llvm/DebugInfo/PDB/PDBExtras.h" -#include "llvm/Object/COFF.h" -#include "llvm/Support/BinaryStreamReader.h" -#include "llvm/Support/FormatAdapters.h" -#include "llvm/Support/FormatVariadic.h" - -#include - -using namespace llvm; -using namespace llvm::codeview; -using namespace llvm::msf; -using namespace llvm::pdb; - -RawOutputStyle::RawOutputStyle(PDBFile &File) - : File(File), P(2, false, outs()) {} - -Error RawOutputStyle::dump() { - if (opts::raw::DumpSummary) { - if (auto EC = dumpFileSummary()) - return EC; - P.NewLine(); - } - - if (opts::raw::DumpStreams) { - if (auto EC = dumpStreamSummary()) - return EC; - P.NewLine(); - } - - if (opts::raw::DumpBlockRange.hasValue()) { - if (auto EC = dumpBlockRanges()) - return EC; - P.NewLine(); - } - - if (!opts::raw::DumpStreamData.empty()) { - if (auto EC = dumpStreamBytes()) - return EC; - P.NewLine(); - } - - if (opts::raw::DumpStringTable) { - if (auto EC = dumpStringTable()) - return EC; - P.NewLine(); - } - - if (opts::raw::DumpModules) { - if (auto EC = dumpModules()) - return EC; - } - - if (opts::raw::DumpTypes) { - if (auto EC = dumpTpiStream(StreamTPI)) - return EC; - } - - if (opts::raw::DumpIds) { - if (auto EC = dumpTpiStream(StreamIPI)) - return EC; - } - - if (opts::raw::DumpPublics) { - if (auto EC = dumpPublics()) - return EC; - } - - if (opts::raw::DumpSymbols) { - if (auto EC = dumpModuleSyms()) - return EC; - } - - if (opts::raw::DumpSectionContribs) { - if (auto EC = dumpSectionContribs()) - return EC; - } - - if (opts::raw::DumpSectionMap) { - if (auto EC = dumpSectionMap()) - return EC; - } - - return Error::success(); -} - -static void printHeader(LinePrinter &P, const Twine &S) { - P.NewLine(); - P.formatLine("{0,=60}", S); - P.formatLine("{0}", fmt_repeat('=', 60)); -} - -Error RawOutputStyle::dumpFileSummary() { - printHeader(P, "Summary"); - - ExitOnError Err("Invalid PDB Format"); - - AutoIndent Indent(P); - P.formatLine("Block Size: {0}", File.getBlockSize()); - P.formatLine("Number of blocks: {0}", File.getBlockCount()); - P.formatLine("Number of streams: {0}", File.getNumStreams()); - - auto &PS = Err(File.getPDBInfoStream()); - P.formatLine("Signature: {0}", PS.getSignature()); - P.formatLine("Age: {0}", PS.getAge()); - P.formatLine("GUID: {0}", fmt_guid(PS.getGuid().Guid)); - P.formatLine("Features: {0:x+}", static_cast(PS.getFeatures())); - P.formatLine("Has Debug Info: {0}", File.hasPDBDbiStream()); - P.formatLine("Has Types: {0}", File.hasPDBTpiStream()); - P.formatLine("Has IDs: {0}", File.hasPDBIpiStream()); - P.formatLine("Has Globals: {0}", File.hasPDBGlobalsStream()); - P.formatLine("Has Publics: {0}", File.hasPDBPublicsStream()); - if (File.hasPDBDbiStream()) { - auto &DBI = Err(File.getPDBDbiStream()); - P.formatLine("Is incrementally linked: {0}", DBI.isIncrementallyLinked()); - P.formatLine("Has conflicting types: {0}", DBI.hasCTypes()); - P.formatLine("Is stripped: {0}", DBI.isStripped()); - } - - return Error::success(); -} - -Error RawOutputStyle::dumpStreamSummary() { - printHeader(P, "Streams"); - - if (StreamPurposes.empty()) - discoverStreamPurposes(File, StreamPurposes); - - AutoIndent Indent(P); - uint32_t StreamCount = File.getNumStreams(); - - for (uint16_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) { - P.formatLine( - "Stream {0}: [{1}] ({2} bytes)", - fmt_align(StreamIdx, AlignStyle::Right, NumDigits(StreamCount)), - StreamPurposes[StreamIdx], File.getStreamByteSize(StreamIdx)); - } - - return Error::success(); -} - -Error RawOutputStyle::dumpBlockRanges() { - printHeader(P, "MSF Blocks"); - - auto &R = *opts::raw::DumpBlockRange; - uint32_t Max = R.Max.getValueOr(R.Min); - - AutoIndent Indent(P); - if (Max < R.Min) - return make_error( - "Invalid block range specified. Max < Min", - std::make_error_code(std::errc::bad_address)); - if (Max >= File.getBlockCount()) - return make_error( - "Invalid block range specified. Requested block out of bounds", - std::make_error_code(std::errc::bad_address)); - - for (uint32_t I = R.Min; I <= Max; ++I) { - auto ExpectedData = File.getBlockData(I, File.getBlockSize()); - if (!ExpectedData) - return ExpectedData.takeError(); - std::string Label = formatv("Block {0}", I).str(); - P.formatBinary(Label, *ExpectedData, 0); - } - - return Error::success(); -} - -static Error parseStreamSpec(StringRef Str, uint32_t &SI, uint32_t &Offset, - uint32_t &Size) { - if (Str.consumeInteger(0, SI)) - return make_error(raw_error_code::invalid_format, - "Invalid Stream Specification"); - if (Str.consume_front(":")) { - if (Str.consumeInteger(0, Offset)) - return make_error(raw_error_code::invalid_format, - "Invalid Stream Specification"); - } - if (Str.consume_front("@")) { - if (Str.consumeInteger(0, Size)) - return make_error(raw_error_code::invalid_format, - "Invalid Stream Specification"); - } - if (!Str.empty()) - return make_error(raw_error_code::invalid_format, - "Invalid Stream Specification"); - return Error::success(); -} - -Error RawOutputStyle::dumpStreamBytes() { - if (StreamPurposes.empty()) - discoverStreamPurposes(File, StreamPurposes); - - printHeader(P, "Stream Data"); - ExitOnError Err("Unexpected error reading stream data"); - - for (auto &Str : opts::raw::DumpStreamData) { - uint32_t SI = 0; - uint32_t Begin = 0; - uint32_t Size = 0; - uint32_t End = 0; - - if (auto EC = parseStreamSpec(Str, SI, Begin, Size)) - return EC; - - AutoIndent Indent(P); - if (SI >= File.getNumStreams()) { - P.formatLine("Stream {0}: Not present", SI); - continue; - } - - auto S = MappedBlockStream::createIndexedStream( - File.getMsfLayout(), File.getMsfBuffer(), SI, File.getAllocator()); - if (!S) { - P.NewLine(); - P.formatLine("Stream {0}: Not present", SI); - continue; - } - - if (Size == 0) - End = S->getLength(); - else - End = std::min(Begin + Size, S->getLength()); - - P.formatLine("Stream {0} ({1:N} bytes): {2}", SI, S->getLength(), - StreamPurposes[SI]); - AutoIndent Indent2(P); - - BinaryStreamReader R(*S); - ArrayRef StreamData; - Err(R.readBytes(StreamData, S->getLength())); - Size = End - Begin; - StreamData = StreamData.slice(Begin, Size); - P.formatBinary("Data", StreamData, Begin); - } - return Error::success(); -} - -Error RawOutputStyle::dumpModules() { - printHeader(P, "Modules"); - - AutoIndent Indent(P); - if (!File.hasPDBDbiStream()) { - P.formatLine("DBI Stream not present"); - return Error::success(); - } - - ExitOnError Err("Unexpected error processing symbols"); - - auto &Stream = Err(File.getPDBDbiStream()); - - const DbiModuleList &Modules = Stream.modules(); - uint32_t Count = Modules.getModuleCount(); - uint32_t Digits = NumDigits(Count); - for (uint32_t I = 0; I < Count; ++I) { - auto Modi = Modules.getModuleDescriptor(I); - P.formatLine("Mod {0:4} | Name: `{1}`: ", - fmt_align(I, AlignStyle::Right, Digits), Modi.getModuleName()); - P.formatLine(" Obj: `{0}`: ", Modi.getObjFileName()); - P.formatLine(" debug stream: {0}, # files: {1}, has ec info: {2}", - Modi.getModuleStreamIndex(), Modi.getNumberOfFiles(), - Modi.hasECInfo()); - if (opts::raw::DumpModuleFiles) { - P.formatLine(" contributing source files:"); - for (const auto &F : Modules.source_files(I)) { - P.formatLine(" - {0}", F); - } - } - } - return Error::success(); -} -Error RawOutputStyle::dumpStringTable() { - printHeader(P, "String Table"); - - AutoIndent Indent(P); - auto IS = File.getStringTable(); - if (!IS) { - P.formatLine("Not present in file"); - consumeError(IS.takeError()); - return Error::success(); - } - - if (IS->name_ids().empty()) { - P.formatLine("Empty"); - return Error::success(); - } - - auto MaxID = std::max_element(IS->name_ids().begin(), IS->name_ids().end()); - uint32_t Digits = NumDigits(*MaxID); - - P.formatLine("{0} | {1}", fmt_align("ID", AlignStyle::Right, Digits), - "String"); - - std::vector SortedIDs(IS->name_ids().begin(), IS->name_ids().end()); - std::sort(SortedIDs.begin(), SortedIDs.end()); - for (uint32_t I : SortedIDs) { - auto ES = IS->getStringForID(I); - llvm::SmallString<32> Str; - if (!ES) { - consumeError(ES.takeError()); - Str = "Error reading string"; - } else if (!ES->empty()) { - Str.append("'"); - Str.append(*ES); - Str.append("'"); - } - - if (!Str.empty()) - P.formatLine("{0} | {1}", fmt_align(I, AlignStyle::Right, Digits), Str); - } - return Error::success(); -} - -Error RawOutputStyle::dumpTpiStream(uint32_t StreamIdx) { - assert(StreamIdx == StreamTPI || StreamIdx == StreamIPI); - - bool Present = false; - bool DumpBytes = false; - if (StreamIdx == StreamTPI) { - printHeader(P, "Types (TPI Stream)"); - Present = File.hasPDBTpiStream(); - DumpBytes = opts::raw::DumpTypeData; - } else if (StreamIdx == StreamIPI) { - printHeader(P, "Types (IPI Stream)"); - Present = File.hasPDBIpiStream(); - DumpBytes = opts::raw::DumpIdData; - } - - AutoIndent Indent(P); - if (!Present) { - P.formatLine("Stream not present"); - return Error::success(); - } - - ExitOnError Err("Unexpected error processing types"); - - auto &Stream = Err((StreamIdx == StreamTPI) ? File.getPDBTpiStream() - : File.getPDBIpiStream()); - - auto &Types = Err(initializeTypeDatabase(StreamIdx)); - - P.formatLine("Showing {0:N} records", Stream.getNumTypeRecords()); - uint32_t Width = - NumDigits(TypeIndex::FirstNonSimpleIndex + Stream.getNumTypeRecords()); - - MinimalTypeDumpVisitor V(P, Width + 2, DumpBytes, Types); - - Optional I = Types.getFirst(); - if (auto EC = codeview::visitTypeStream(Types, V)) { - P.formatLine("An error occurred dumping type records: {0}", - toString(std::move(EC))); - } - return Error::success(); -} - -Expected -RawOutputStyle::initializeTypeDatabase(uint32_t SN) { - auto &TypeCollection = (SN == StreamTPI) ? TpiTypes : IpiTypes; - auto Tpi = - (SN == StreamTPI) ? File.getPDBTpiStream() : File.getPDBIpiStream(); - if (!Tpi) - return Tpi.takeError(); - - if (!TypeCollection) { - auto &Types = Tpi->typeArray(); - uint32_t Count = Tpi->getNumTypeRecords(); - auto Offsets = Tpi->getTypeIndexOffsets(); - TypeCollection = - llvm::make_unique(Types, Count, Offsets); - } - - return *TypeCollection; -} - -Error RawOutputStyle::dumpModuleSyms() { - printHeader(P, "Symbols"); - - AutoIndent Indent(P); - if (!File.hasPDBDbiStream()) { - P.formatLine("DBI Stream not present"); - return Error::success(); - } - - ExitOnError Err("Unexpected error processing symbols"); - - auto &Stream = Err(File.getPDBDbiStream()); - - auto &Types = Err(initializeTypeDatabase(StreamTPI)); - - const DbiModuleList &Modules = Stream.modules(); - uint32_t Count = Modules.getModuleCount(); - uint32_t Digits = NumDigits(Count); - for (uint32_t I = 0; I < Count; ++I) { - auto Modi = Modules.getModuleDescriptor(I); - P.formatLine("Mod {0:4} | `{1}`: ", fmt_align(I, AlignStyle::Right, Digits), - Modi.getModuleName()); - uint16_t ModiStream = Modi.getModuleStreamIndex(); - if (ModiStream == kInvalidStreamIndex) { - P.formatLine(" "); - continue; - } - auto ModStreamData = MappedBlockStream::createIndexedStream( - File.getMsfLayout(), File.getMsfBuffer(), ModiStream, - File.getAllocator()); - - ModuleDebugStreamRef ModS(Modi, std::move(ModStreamData)); - if (auto EC = ModS.reload()) { - P.formatLine("Error loading module stream {0}. {1}", I, - toString(std::move(EC))); - continue; - } - - SymbolVisitorCallbackPipeline Pipeline; - SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb); - MinimalSymbolDumper Dumper(P, opts::raw::DumpSymRecordBytes, Types); - - Pipeline.addCallbackToPipeline(Deserializer); - Pipeline.addCallbackToPipeline(Dumper); - CVSymbolVisitor Visitor(Pipeline); - if (auto EC = Visitor.visitSymbolStream(ModS.getSymbolArray())) { - P.formatLine("Error while processing symbol records. {0}", - toString(std::move(EC))); - continue; - } - } - return Error::success(); -} - -Error RawOutputStyle::dumpPublics() { - printHeader(P, "Public Symbols"); - - AutoIndent Indent(P); - if (!File.hasPDBPublicsStream()) { - P.formatLine("Publics stream not present"); - return Error::success(); - } - - ExitOnError Err("Error dumping publics stream"); - - auto &Types = Err(initializeTypeDatabase(StreamTPI)); - auto &Publics = Err(File.getPDBPublicsStream()); - SymbolVisitorCallbackPipeline Pipeline; - SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb); - MinimalSymbolDumper Dumper(P, opts::raw::DumpSymRecordBytes, Types); - - Pipeline.addCallbackToPipeline(Deserializer); - Pipeline.addCallbackToPipeline(Dumper); - CVSymbolVisitor Visitor(Pipeline); - auto ExpectedSymbols = Publics.getSymbolArray(); - if (!ExpectedSymbols) { - P.formatLine("Could not read public symbol record stream"); - return Error::success(); - } - - if (auto EC = Visitor.visitSymbolStream(*ExpectedSymbols)) - P.formatLine("Error while processing public symbol records. {0}", - toString(std::move(EC))); - - return Error::success(); -} - -static std::string formatSectionCharacteristics(uint32_t IndentLevel, - uint32_t C) { - using SC = COFF::SectionCharacteristics; - std::vector Opts; - if (C == COFF::SC_Invalid) - return "invalid"; - if (C == 0) - return "none"; - - PUSH_FLAG(SC, IMAGE_SCN_TYPE_NOLOAD, C, "IMAGE_SCN_TYPE_NOLOAD"); - PUSH_FLAG(SC, IMAGE_SCN_TYPE_NO_PAD, C, "IMAGE_SCN_TYPE_NO_PAD"); - PUSH_FLAG(SC, IMAGE_SCN_CNT_CODE, C, "IMAGE_SCN_CNT_CODE"); - PUSH_FLAG(SC, IMAGE_SCN_CNT_INITIALIZED_DATA, C, - "IMAGE_SCN_CNT_INITIALIZED_DATA"); - PUSH_FLAG(SC, IMAGE_SCN_CNT_UNINITIALIZED_DATA, C, - "IMAGE_SCN_CNT_UNINITIALIZED_DATA"); - PUSH_FLAG(SC, IMAGE_SCN_LNK_OTHER, C, "IMAGE_SCN_LNK_OTHER"); - PUSH_FLAG(SC, IMAGE_SCN_LNK_INFO, C, "IMAGE_SCN_LNK_INFO"); - PUSH_FLAG(SC, IMAGE_SCN_LNK_REMOVE, C, "IMAGE_SCN_LNK_REMOVE"); - PUSH_FLAG(SC, IMAGE_SCN_LNK_COMDAT, C, "IMAGE_SCN_LNK_COMDAT"); - PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_PURGEABLE, C, "IMAGE_SCN_MEM_PURGEABLE"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_16BIT, C, "IMAGE_SCN_MEM_16BIT"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_LOCKED, C, "IMAGE_SCN_MEM_LOCKED"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_PRELOAD, C, "IMAGE_SCN_MEM_PRELOAD"); - PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL"); - PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_1BYTES, C, - "IMAGE_SCN_ALIGN_1BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_2BYTES, C, - "IMAGE_SCN_ALIGN_2BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_4BYTES, C, - "IMAGE_SCN_ALIGN_4BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_8BYTES, C, - "IMAGE_SCN_ALIGN_8BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_16BYTES, C, - "IMAGE_SCN_ALIGN_16BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_32BYTES, C, - "IMAGE_SCN_ALIGN_32BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_64BYTES, C, - "IMAGE_SCN_ALIGN_64BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_128BYTES, C, - "IMAGE_SCN_ALIGN_128BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_256BYTES, C, - "IMAGE_SCN_ALIGN_256BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_512BYTES, C, - "IMAGE_SCN_ALIGN_512BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_1024BYTES, C, - "IMAGE_SCN_ALIGN_1024BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_2048BYTES, C, - "IMAGE_SCN_ALIGN_2048BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_4096BYTES, C, - "IMAGE_SCN_ALIGN_4096BYTES"); - PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_8192BYTES, C, - "IMAGE_SCN_ALIGN_8192BYTES"); - PUSH_FLAG(SC, IMAGE_SCN_LNK_NRELOC_OVFL, C, "IMAGE_SCN_LNK_NRELOC_OVFL"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_DISCARDABLE, C, "IMAGE_SCN_MEM_DISCARDABLE"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_NOT_CACHED, C, "IMAGE_SCN_MEM_NOT_CACHED"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_NOT_PAGED, C, "IMAGE_SCN_MEM_NOT_PAGED"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_SHARED, C, "IMAGE_SCN_MEM_SHARED"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_EXECUTE, C, "IMAGE_SCN_MEM_EXECUTE"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_READ, C, "IMAGE_SCN_MEM_READ"); - PUSH_FLAG(SC, IMAGE_SCN_MEM_WRITE, C, "IMAGE_SCN_MEM_WRITE"); - return typesetItemList(Opts, 3, IndentLevel, " | "); -} - -static std::string formatSegMapDescriptorFlag(uint32_t IndentLevel, - OMFSegDescFlags Flags) { - std::vector Opts; - if (Flags == OMFSegDescFlags::None) - return "none"; - - PUSH_FLAG(OMFSegDescFlags, Read, Flags, "read"); - PUSH_FLAG(OMFSegDescFlags, Write, Flags, "write"); - PUSH_FLAG(OMFSegDescFlags, Execute, Flags, "execute"); - PUSH_FLAG(OMFSegDescFlags, AddressIs32Bit, Flags, "32 bit addr"); - PUSH_FLAG(OMFSegDescFlags, IsSelector, Flags, "selector"); - PUSH_FLAG(OMFSegDescFlags, IsAbsoluteAddress, Flags, "absolute addr"); - PUSH_FLAG(OMFSegDescFlags, IsGroup, Flags, "group"); - return typesetItemList(Opts, 4, IndentLevel, " | "); -} - -Error RawOutputStyle::dumpSectionContribs() { - printHeader(P, "Section Contributions"); - ExitOnError Err("Error dumping publics stream"); - - AutoIndent Indent(P); - if (!File.hasPDBDbiStream()) { - P.formatLine( - "Section contribs require a DBI Stream, which could not be loaded"); - return Error::success(); - } - - auto &Dbi = Err(File.getPDBDbiStream()); - - class Visitor : public ISectionContribVisitor { - public: - Visitor(LinePrinter &P) : P(P) {} - void visit(const SectionContrib &SC) override { - P.formatLine( - "SC | mod = {2}, {0}, size = {1}, data crc = {3}, reloc crc = {4}", - formatSegmentOffset(SC.ISect, SC.Off), SC.Size, SC.Imod, SC.DataCrc, - SC.RelocCrc); - P.formatLine(" {0}", - formatSectionCharacteristics(P.getIndentLevel() + 6, - SC.Characteristics)); - } - void visit(const SectionContrib2 &SC) override { - P.formatLine("SC2 | mod = {2}, {0}, size = {1}, data crc = {3}, reloc " - "crc = {4}, coff section = {5}", - formatSegmentOffset(SC.Base.ISect, SC.Base.Off), - SC.Base.Size, SC.Base.Imod, SC.Base.DataCrc, - SC.Base.RelocCrc, SC.ISectCoff); - P.formatLine(" {0}", - formatSectionCharacteristics(P.getIndentLevel() + 6, - SC.Base.Characteristics)); - } - - private: - LinePrinter &P; - }; - - Visitor V(P); - Dbi.visitSectionContributions(V); - return Error::success(); -} - -Error RawOutputStyle::dumpSectionMap() { - printHeader(P, "Section Map"); - ExitOnError Err("Error dumping section map"); - - AutoIndent Indent(P); - if (!File.hasPDBDbiStream()) { - P.formatLine("Dumping the section map requires a DBI Stream, which could " - "not be loaded"); - return Error::success(); - } - - auto &Dbi = Err(File.getPDBDbiStream()); - - uint32_t I = 0; - for (auto &M : Dbi.getSectionMap()) { - P.formatLine( - "Section {0:4} | ovl = {0}, group = {1}, frame = {2}, name = {3}", I, - M.Ovl, M.Group, M.Frame, M.SecName); - P.formatLine(" class = {0}, offset = {1}, size = {2}", - M.ClassName, M.Offset, M.SecByteLength); - P.formatLine(" flags = {0}", - formatSegMapDescriptorFlag( - P.getIndentLevel() + 13, - static_cast(uint16_t(M.Flags)))); - ++I; - } - return Error::success(); -} diff --git a/llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp b/llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp index ae3138efb13a..8f7aba6d30c8 100644 --- a/llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp @@ -32,13 +32,6 @@ using namespace llvm; using namespace llvm::codeview; using namespace llvm::pdb; -static bool checkModuleSubsection(opts::ModuleSubsection MS) { - return any_of(opts::pdb2yaml::DumpModuleSubsections, - [=](opts::ModuleSubsection M) { - return M == MS || M == opts::ModuleSubsection::All; - }); -} - YAMLOutputStyle::YAMLOutputStyle(PDBFile &File) : File(File), Out(outs()), Obj(File.getAllocator()) { Out.setWriteDefaultValues(!opts::pdb2yaml::Minimal); @@ -100,8 +93,8 @@ Error YAMLOutputStyle::dumpFileHeaders() { } Error YAMLOutputStyle::dumpStringTable() { - bool RequiresStringTable = opts::pdb2yaml::DumpModuleFiles || - !opts::pdb2yaml::DumpModuleSubsections.empty(); + bool RequiresStringTable = opts::shared::DumpModuleFiles || + !opts::shared::DumpModuleSubsections.empty(); bool RequestedStringTable = opts::pdb2yaml::StringTable; if (!RequiresStringTable && !RequestedStringTable) return Error::success(); @@ -208,7 +201,7 @@ Error YAMLOutputStyle::dumpDbiStream() { Obj.DbiStream->PdbDllRbld = DS.getPdbDllRbld(); Obj.DbiStream->PdbDllVersion = DS.getPdbDllVersion(); Obj.DbiStream->VerHeader = DS.getDbiVersion(); - if (opts::pdb2yaml::DumpModules) { + if (opts::shared::DumpModules) { const auto &Modules = DS.modules(); for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) { DbiModuleDescriptor MI = Modules.getModuleDescriptor(I); @@ -218,7 +211,7 @@ Error YAMLOutputStyle::dumpDbiStream() { DMI.Mod = MI.getModuleName(); DMI.Obj = MI.getObjFileName(); - if (opts::pdb2yaml::DumpModuleFiles) { + if (opts::shared::DumpModuleFiles) { auto Files = Modules.source_files(I); DMI.SourceFiles.assign(Files.begin(), Files.end()); } @@ -238,7 +231,7 @@ Error YAMLOutputStyle::dumpDbiStream() { auto ExpectedST = File.getStringTable(); if (!ExpectedST) return ExpectedST.takeError(); - if (!opts::pdb2yaml::DumpModuleSubsections.empty() && + if (!opts::shared::DumpModuleSubsections.empty() && ModS.hasDebugSubsections()) { auto ExpectedChecksums = ModS.findChecksumsSubsection(); if (!ExpectedChecksums) @@ -249,7 +242,7 @@ Error YAMLOutputStyle::dumpDbiStream() { for (const auto &SS : ModS.subsections()) { opts::ModuleSubsection OptionKind = convertSubsectionKind(SS.kind()); - if (!checkModuleSubsection(OptionKind)) + if (!opts::checkModuleSubsection(OptionKind)) continue; auto Converted = @@ -260,7 +253,7 @@ Error YAMLOutputStyle::dumpDbiStream() { } } - if (opts::pdb2yaml::DumpModuleSyms) { + if (opts::shared::DumpModuleSyms) { DMI.Modi.emplace(); DMI.Modi->Signature = ModS.signature(); diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp index 18fda036ee7f..3826ba79a208 100644 --- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp +++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp @@ -15,6 +15,7 @@ #include "Analyze.h" #include "Diff.h" +#include "LLVMOutputStyle.h" #include "LinePrinter.h" #include "OutputStyle.h" #include "PrettyCompilandDumper.h" @@ -22,7 +23,6 @@ #include "PrettyFunctionDumper.h" #include "PrettyTypeDumper.h" #include "PrettyVariableDumper.h" -#include "RawOutputStyle.h" #include "YAMLOutputStyle.h" #include "llvm/ADT/ArrayRef.h" @@ -266,8 +266,6 @@ cl::list InputFilenames(cl::Positional, cl::OneOrMore, cl::sub(DiffSubcommand)); } -cl::OptionCategory FileOptions("Module & File Options"); - namespace raw { cl::OptionCategory MsfOptions("MSF Container Options"); @@ -276,11 +274,18 @@ cl::OptionCategory SymbolOptions("Symbol Options"); cl::OptionCategory MiscOptions("Miscellaneous Options"); // MSF OPTIONS -cl::opt DumpSummary("summary", cl::desc("dump file summary"), - cl::cat(MsfOptions), cl::sub(RawSubcommand)); -cl::opt DumpStreams("streams", - cl::desc("dump summary of the PDB streams"), +cl::opt DumpHeaders("headers", cl::desc("dump PDB headers"), cl::cat(MsfOptions), cl::sub(RawSubcommand)); +cl::opt DumpStreamBlocks("stream-blocks", + cl::desc("dump PDB stream blocks"), + cl::cat(MsfOptions), cl::sub(RawSubcommand)); +cl::opt DumpStreamSummary("stream-summary", + cl::desc("dump summary of the PDB streams"), + cl::cat(MsfOptions), cl::sub(RawSubcommand)); +cl::opt DumpPageStats( + "page-stats", + cl::desc("dump allocation stats of the pages in the MSF file"), + cl::cat(MsfOptions), cl::sub(RawSubcommand)); cl::opt DumpBlockRangeOpt("block-data", cl::value_desc("start[-end]"), cl::desc("Dump binary data from specified range."), @@ -294,45 +299,40 @@ cl::list cl::cat(MsfOptions), cl::sub(RawSubcommand)); // TYPE OPTIONS -cl::opt DumpTypes("types", - cl::desc("dump CodeView type records from TPI stream"), - cl::cat(TypeOptions), cl::sub(RawSubcommand)); -cl::opt DumpTypeData( - "type-data", +cl::opt + CompactRecords("compact-records", + cl::desc("Dump type and symbol records with less detail"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); + +cl::opt + DumpTpiRecords("tpi-records", + cl::desc("dump CodeView type records from TPI stream"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); +cl::opt DumpTpiRecordBytes( + "tpi-record-bytes", cl::desc("dump CodeView type record raw bytes from TPI stream"), cl::cat(TypeOptions), cl::sub(RawSubcommand)); - -cl::opt DumpTypeHashes("type-hash", - cl::desc("dump CodeView TPI hash stream"), - cl::cat(TypeOptions), cl::sub(RawSubcommand)); - -cl::opt DumpIds("ids", - cl::desc("dump CodeView type records from IPI stream"), - cl::cat(TypeOptions), cl::sub(RawSubcommand)); +cl::opt DumpTpiHash("tpi-hash", cl::desc("dump CodeView TPI hash stream"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); cl::opt - DumpIdData("id-data", - cl::desc("dump CodeView type record raw bytes from IPI stream"), - cl::cat(TypeOptions), cl::sub(RawSubcommand)); + DumpIpiRecords("ipi-records", + cl::desc("dump CodeView type records from IPI stream"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); +cl::opt DumpIpiRecordBytes( + "ipi-record-bytes", + cl::desc("dump CodeView type record raw bytes from IPI stream"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); // SYMBOL OPTIONS +cl::opt DumpGlobals("globals", cl::desc("dump globals stream data"), + cl::cat(SymbolOptions), cl::sub(RawSubcommand)); cl::opt DumpPublics("publics", cl::desc("dump Publics stream data"), cl::cat(SymbolOptions), cl::sub(RawSubcommand)); -cl::opt DumpSymbols("symbols", cl::desc("dump module symbols"), - cl::cat(SymbolOptions), cl::sub(RawSubcommand)); - cl::opt - DumpSymRecordBytes("sym-data", + DumpSymRecordBytes("sym-record-bytes", cl::desc("dump CodeView symbol record raw bytes"), cl::cat(SymbolOptions), cl::sub(RawSubcommand)); -// MODULE & FILE OPTIONS -cl::opt DumpModules("modules", cl::desc("dump compiland information"), - cl::cat(FileOptions), cl::sub(RawSubcommand)); -cl::opt DumpModuleFiles( - "files", - cl::desc("for each module dumped, dump the contributing source files"), - cl::cat(FileOptions), cl::sub(RawSubcommand)); - // MISCELLANEOUS OPTIONS cl::opt DumpStringTable("string-table", cl::desc("dump PDB String Table"), cl::cat(MiscOptions), cl::sub(RawSubcommand)); @@ -342,6 +342,11 @@ cl::opt DumpSectionContribs("section-contribs", cl::cat(MiscOptions), cl::sub(RawSubcommand)); cl::opt DumpSectionMap("section-map", cl::desc("dump section map"), cl::cat(MiscOptions), cl::sub(RawSubcommand)); +cl::opt DumpSectionHeaders("section-headers", + cl::desc("dump section headers"), + cl::cat(MiscOptions), cl::sub(RawSubcommand)); +cl::opt DumpFpo("fpo", cl::desc("dump FPO records"), cl::cat(MiscOptions), + cl::sub(RawSubcommand)); cl::opt RawAll("all", cl::desc("Implies most other options."), cl::cat(MiscOptions), cl::sub(RawSubcommand)); @@ -399,11 +404,20 @@ cl::opt IpiStream("ipi-stream", cl::desc("Dump the IPI Stream (Stream 5)"), cl::sub(PdbToYamlSubcommand), cl::init(false)); +cl::list InputFilename(cl::Positional, + cl::desc(""), cl::Required, + cl::sub(PdbToYamlSubcommand)); +} + +namespace shared { +cl::OptionCategory FileOptions("Module & File Options"); + // MODULE & FILE OPTIONS cl::opt DumpModules("modules", cl::desc("dump compiland information"), - cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); + cl::cat(FileOptions), cl::sub(RawSubcommand), + cl::sub(PdbToYamlSubcommand)); cl::opt DumpModuleFiles("module-files", cl::desc("dump file information"), - cl::cat(FileOptions), + cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand)); cl::list DumpModuleSubsections( "subsections", cl::ZeroOrMore, cl::CommaSeparated, @@ -434,15 +448,11 @@ cl::list DumpModuleSubsections( clEnumValN(ModuleSubsection::Unknown, "unknown", "Any subsection not covered by another option"), clEnumValN(ModuleSubsection::All, "all", "All known subsections")), - cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); + cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand)); cl::opt DumpModuleSyms("module-syms", cl::desc("dump module symbols"), - cl::cat(FileOptions), + cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand)); - -cl::list InputFilename(cl::Positional, - cl::desc(""), cl::Required, - cl::sub(PdbToYamlSubcommand)); -} // namespace pdb2yaml +} // namespace shared namespace analyze { cl::opt StringTable("hash-collisions", cl::desc("Find hash collisions"), @@ -464,6 +474,13 @@ cl::opt static ExitOnError ExitOnErr; +bool opts::checkModuleSubsection(opts::ModuleSubsection MS) { + return any_of(opts::shared::DumpModuleSubsections, + [=](opts::ModuleSubsection M) { + return M == MS || M == opts::ModuleSubsection::All; + }); +} + static void yamlToPdb(StringRef Path) { BumpPtrAllocator Allocator; ErrorOr> ErrorOrBuffer = @@ -594,7 +611,7 @@ static void dumpRaw(StringRef Path) { std::unique_ptr Session; auto &File = loadPDB(Path, Session); - auto O = llvm::make_unique(File); + auto O = llvm::make_unique(File); ExitOnErr(O->dump()); } @@ -887,21 +904,49 @@ int main(int argc_, const char *argv_[]) { } } + if ((opts::RawSubcommand && opts::raw::RawAll) || + (opts::PdbToYamlSubcommand && opts::pdb2yaml::All)) { + opts::shared::DumpModules = true; + opts::shared::DumpModuleFiles = true; + opts::shared::DumpModuleSyms = true; + opts::shared::DumpModuleSubsections.push_back(opts::ModuleSubsection::All); + if (llvm::is_contained(opts::shared::DumpModuleSubsections, + opts::ModuleSubsection::All)) { + opts::shared::DumpModuleSubsections.reset(); + opts::shared::DumpModuleSubsections.push_back( + opts::ModuleSubsection::All); + } + } + + if (opts::shared::DumpModuleSyms || opts::shared::DumpModuleFiles) + opts::shared::DumpModules = true; + + if (opts::shared::DumpModules) + opts::pdb2yaml::DbiStream = true; + if (opts::RawSubcommand) { if (opts::raw::RawAll) { - opts::raw::DumpIds = true; + opts::raw::DumpHeaders = true; + opts::raw::DumpGlobals = true; opts::raw::DumpPublics = true; - opts::raw::DumpSectionContribs = true; + opts::raw::DumpSectionHeaders = true; + opts::raw::DumpStreamSummary = true; + opts::raw::DumpPageStats = true; + opts::raw::DumpStreamBlocks = true; + opts::raw::DumpTpiRecords = true; + opts::raw::DumpTpiHash = true; + opts::raw::DumpIpiRecords = true; opts::raw::DumpSectionMap = true; - opts::raw::DumpStreams = true; + opts::raw::DumpSectionContribs = true; + opts::raw::DumpFpo = true; opts::raw::DumpStringTable = true; - opts::raw::DumpSummary = true; - opts::raw::DumpSymbols = true; - opts::raw::DumpIds = true; - opts::raw::DumpTypes = true; - opts::raw::DumpTypeHashes = true; - opts::raw::DumpModules = true; - opts::raw::DumpModuleFiles = true; + } + + if (opts::raw::CompactRecords && + (opts::raw::DumpTpiRecordBytes || opts::raw::DumpIpiRecordBytes)) { + errs() << "-compact-records is incompatible with -tpi-record-bytes and " + "-ipi-record-bytes.\n"; + exit(1); } } if (opts::PdbToYamlSubcommand) { @@ -913,24 +958,7 @@ int main(int argc_, const char *argv_[]) { opts::pdb2yaml::DbiStream = true; opts::pdb2yaml::TpiStream = true; opts::pdb2yaml::IpiStream = true; - opts::pdb2yaml::DumpModules = true; - opts::pdb2yaml::DumpModuleFiles = true; - opts::pdb2yaml::DumpModuleSyms = true; - opts::pdb2yaml::DumpModuleSubsections.push_back( - opts::ModuleSubsection::All); - if (llvm::is_contained(opts::pdb2yaml::DumpModuleSubsections, - opts::ModuleSubsection::All)) { - opts::pdb2yaml::DumpModuleSubsections.reset(); - opts::pdb2yaml::DumpModuleSubsections.push_back( - opts::ModuleSubsection::All); - } } - - if (opts::pdb2yaml::DumpModuleSyms || opts::pdb2yaml::DumpModuleFiles) - opts::pdb2yaml::DumpModules = true; - - if (opts::pdb2yaml::DumpModules) - opts::pdb2yaml::DbiStream = true; } llvm::sys::InitializeCOMRAII COM(llvm::sys::COMThreadingMode::MultiThreaded); diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.h b/llvm/tools/llvm-pdbutil/llvm-pdbutil.h index 37c4ca3ee5d5..f1699d0bb557 100644 --- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.h +++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.h @@ -27,8 +27,6 @@ uint32_t getTypeLength(const PDBSymbolData &Symbol); namespace opts { -enum class DumpLevel { None, Basic, Verbose }; - enum class ModuleSubsection { Unknown, Lines, @@ -43,6 +41,15 @@ enum class ModuleSubsection { All }; +bool checkModuleSubsection(ModuleSubsection Kind); + +template +bool checkModuleSubsection(ModuleSubsection K1, ModuleSubsection K2, + Ts &&... Rest) { + return checkModuleSubsection(K1) || + checkModuleSubsection(K2, std::forward(Rest)...); +} + namespace pretty { enum class ClassDefinitionFormat { None, Layout, All }; @@ -98,24 +105,27 @@ struct BlockRange { llvm::Optional Max; }; -extern llvm::cl::opt DumpSummary; -extern llvm::cl::opt DumpStreams; extern llvm::Optional DumpBlockRange; extern llvm::cl::list DumpStreamData; -extern llvm::cl::opt DumpStringTable; -extern llvm::cl::opt DumpTypes; -extern llvm::cl::opt DumpTypeData; -extern llvm::cl::opt DumpTypeHashes; -extern llvm::cl::opt DumpIds; -extern llvm::cl::opt DumpIdData; -extern llvm::cl::opt DumpSymbols; -extern llvm::cl::opt DumpSymRecordBytes; + +extern llvm::cl::opt CompactRecords; +extern llvm::cl::opt DumpGlobals; +extern llvm::cl::opt DumpHeaders; +extern llvm::cl::opt DumpStreamBlocks; +extern llvm::cl::opt DumpStreamSummary; +extern llvm::cl::opt DumpPageStats; +extern llvm::cl::opt DumpTpiHash; +extern llvm::cl::opt DumpTpiRecordBytes; +extern llvm::cl::opt DumpTpiRecords; +extern llvm::cl::opt DumpIpiRecords; +extern llvm::cl::opt DumpIpiRecordBytes; extern llvm::cl::opt DumpPublics; extern llvm::cl::opt DumpSectionContribs; extern llvm::cl::opt DumpSectionMap; -extern llvm::cl::opt DumpModules; -extern llvm::cl::opt DumpModuleFiles; -extern llvm::cl::opt RawAll; +extern llvm::cl::opt DumpSymRecordBytes; +extern llvm::cl::opt DumpSectionHeaders; +extern llvm::cl::opt DumpFpo; +extern llvm::cl::opt DumpStringTable; } namespace diff { @@ -134,11 +144,14 @@ extern llvm::cl::opt DbiStream; extern llvm::cl::opt TpiStream; extern llvm::cl::opt IpiStream; extern llvm::cl::list InputFilename; +} + +namespace shared { extern llvm::cl::opt DumpModules; extern llvm::cl::opt DumpModuleFiles; extern llvm::cl::list DumpModuleSubsections; extern llvm::cl::opt DumpModuleSyms; -} // namespace pdb2yaml +} // namespace shared } #endif