Index: lld/test/COFF/pdb-lib.s =================================================================== --- lld/test/COFF/pdb-lib.s +++ lld/test/COFF/pdb-lib.s @@ -8,48 +8,17 @@ # 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-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: ] - +# 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 .def _main; .scl 2; Index: lld/test/COFF/pdb.test =================================================================== --- lld/test/COFF/pdb.test +++ 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-headers -section-contribs \ -# RUN: -tpi-records %t.pdb | FileCheck -check-prefix RAW %s +# RUN: llvm-pdbutil raw -modules -section-map -section-contribs \ +# RUN: -types -ids %t.pdb | FileCheck -check-prefix RAW %s # CHECK: MSF: # CHECK-NEXT: SuperBlock: @@ -115,322 +115,85 @@ # CHECK-NEXT: BuildInfo: # CHECK-NEXT: ArgIndices: [ 4098, 4099, 4106, 4104, 4102 ] -# 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: ] +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 Index: llvm/include/llvm/DebugInfo/CodeView/CodeView.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/CodeView.h +++ llvm/include/llvm/DebugInfo/CodeView/CodeView.h @@ -418,6 +418,8 @@ /// Corresponds to COMPILESYM2::Flags bitfield. enum class CompileSym2Flags : uint32_t { + None = 0, + SourceLanguageMask = 0xFF, EC = 1 << 8, NoDbgInfo = 1 << 9, LTCG = 1 << 10, @@ -432,6 +434,8 @@ /// Corresponds to COMPILESYM3::Flags bitfield. enum class CompileSym3Flags : uint32_t { + None = 0, + SourceLanguageMask = 0xFF, EC = 1 << 8, NoDbgInfo = 1 << 9, LTCG = 1 << 10, @@ -448,6 +452,7 @@ CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(CompileSym3Flags) enum class ExportFlags : uint16_t { + None = 0, IsConstant = 1 << 0, IsData = 1 << 1, IsPrivate = 1 << 2, Index: llvm/include/llvm/DebugInfo/CodeView/Formatters.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/Formatters.h +++ llvm/include/llvm/DebugInfo/CodeView/Formatters.h @@ -12,7 +12,10 @@ #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 { @@ -35,6 +38,20 @@ 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 Index: llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h +++ llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h @@ -363,7 +363,7 @@ : SymbolRecord(SymbolRecordKind::PublicSym32), RecordOffset(RecordOffset) {} - uint32_t Index; + TypeIndex Index; uint32_t Offset; uint16_t Segment; StringRef Name; @@ -379,7 +379,7 @@ : SymbolRecord(SymbolRecordKind::RegisterSym), RecordOffset(RecordOffset) {} - uint32_t Index; + TypeIndex Index; RegisterId Register; StringRef Name; @@ -679,7 +679,7 @@ : SymbolRecord(SymbolRecordKind::FileStaticSym), RecordOffset(RecordOffset) {} - uint32_t Index; + TypeIndex Index; uint32_t ModFilenameOffset; LocalSymFlags Flags; StringRef Name; @@ -814,7 +814,7 @@ uint32_t CodeOffset; uint16_t Register; - uint8_t CookieKind; + FrameCookieKind CookieKind; uint8_t Flags; uint32_t RecordOffset; @@ -871,7 +871,7 @@ uint32_t Offset; TypeIndex Type; - uint16_t Register; + RegisterId Register; StringRef Name; uint32_t RecordOffset; Index: llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h +++ llvm/include/llvm/DebugInfo/CodeView/TypeIndex.h @@ -248,6 +248,8 @@ return A.toArrayIndex() - B.toArrayIndex(); } + static StringRef simpleTypeName(TypeIndex TI); + private: support::ulittle32_t Index; }; Index: llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h +++ llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h @@ -40,6 +40,10 @@ iterator_range symbols(bool *HadError) const; + const codeview::CVSymbolArray &getSymbolArray() const { + return SymbolsSubstream; + } + llvm::iterator_range subsections() const; bool hasDebugSubsections() const; Index: llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h +++ llvm/include/llvm/DebugInfo/PDB/Native/PublicsStream.h @@ -35,6 +35,7 @@ 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 { Index: llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h +++ llvm/include/llvm/DebugInfo/PDB/Native/RawConstants.h @@ -98,15 +98,19 @@ }; 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. + IsGroup = 1 << 10, // If set, descriptor represents a group. + LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ IsGroup) }; +LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); + } // end namespace pdb } // end namespace llvm Index: llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h +++ llvm/include/llvm/DebugInfo/PDB/Native/SymbolStream.h @@ -27,6 +27,10 @@ ~SymbolStream(); Error reload(); + const codeview::CVSymbolArray &getSymbolArray() const { + return SymbolRecords; + } + iterator_range getSymbols(bool *HadError) const; Index: llvm/include/llvm/Support/BinaryStreamArray.h =================================================================== --- llvm/include/llvm/Support/BinaryStreamArray.h +++ llvm/include/llvm/Support/BinaryStreamArray.h @@ -290,6 +290,12 @@ 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: Index: llvm/include/llvm/Support/FormatProviders.h =================================================================== --- llvm/include/llvm/Support/FormatProviders.h +++ llvm/include/llvm/Support/FormatProviders.h @@ -19,6 +19,7 @@ #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" @@ -150,6 +151,19 @@ } }; +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: Index: llvm/include/llvm/Support/MathExtras.h =================================================================== --- llvm/include/llvm/Support/MathExtras.h +++ llvm/include/llvm/Support/MathExtras.h @@ -526,6 +526,49 @@ return detail::PopulationCounter::count(Value); } +/// 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; +} + /// Log2 - This function returns the log base 2 of the specified value inline double Log2(double Value) { #if defined(__ANDROID_API__) && __ANDROID_API__ < 18 Index: llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp +++ llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp @@ -212,7 +212,7 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FileStatic) { DictScope S(W, "FileStatic"); - W.printNumber("Index", FileStatic.Index); + printTypeIndex("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, RegisterSym &Register) { DictScope S(W, "RegisterSym"); - W.printNumber("Type", Register.Index); + printTypeIndex("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, PublicSym32 &Public) { DictScope S(W, "PublicSym"); - W.printNumber("Type", Public.Index); + printTypeIndex("Type", Public.Index); W.printNumber("Seg", Public.Segment); W.printNumber("Off", Public.Offset); W.printString("Name", Public.Name); @@ -631,7 +631,7 @@ W.printHex("Offset", RegRel.Offset); printTypeIndex("Type", RegRel.Type); - W.printHex("Register", RegRel.Register); + W.printEnum("Register", uint16_t(RegRel.Register), getRegisterNames()); W.printString("VarName", RegRel.Name); return Error::success(); } Index: llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp +++ llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp @@ -307,7 +307,7 @@ error(IO.mapInteger(FrameCookie.CodeOffset)); error(IO.mapInteger(FrameCookie.Register)); - error(IO.mapInteger(FrameCookie.CookieKind)); + error(IO.mapEnum(FrameCookie.CookieKind)); error(IO.mapInteger(FrameCookie.Flags)); return Error::success(); @@ -439,7 +439,7 @@ error(IO.mapInteger(RegRel.Offset)); error(IO.mapInteger(RegRel.Type)); - error(IO.mapInteger(RegRel.Register)); + error(IO.mapEnum(RegRel.Register)); error(IO.mapStringZ(RegRel.Name)); return Error::success(); Index: llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp +++ llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp @@ -12,59 +12,6 @@ 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); @@ -103,22 +50,8 @@ } StringRef TypeDatabase::getTypeName(TypeIndex Index) const { - 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 (Index.isNoneType() || Index.isSimple()) + return TypeIndex::simpleTypeName(Index); if (contains(Index)) return CVUDTNames[Index.toArrayIndex()]; Index: llvm/lib/DebugInfo/CodeView/TypeIndex.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/TypeIndex.cpp +++ llvm/lib/DebugInfo/CodeView/TypeIndex.cpp @@ -15,11 +15,88 @@ 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}, +}; +} + +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()) - TypeName = Types.getTypeName(TI); + if (!TI.isNoneType()) { + if (TI.isSimple()) + TypeName = TypeIndex::simpleTypeName(TI); + else + TypeName = Types.getTypeName(TI); + } + if (!TypeName.empty()) Printer.printHex(FieldName, TypeName, TI.getIndex()); else Index: llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp +++ llvm/lib/DebugInfo/PDB/Native/PublicsStream.cpp @@ -130,4 +130,13 @@ 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(); } Index: llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp =================================================================== --- llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp +++ llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp @@ -35,6 +35,7 @@ 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) @@ -149,6 +150,15 @@ } } +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 { Index: llvm/test/DebugInfo/PDB/pdb-yaml-types.test =================================================================== --- llvm/test/DebugInfo/PDB/pdb-yaml-types.test +++ /dev/null @@ -1,74 +0,0 @@ -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: ] Index: llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test +++ llvm/test/DebugInfo/PDB/pdbdump-debug-subsections.test @@ -1,6 +1,5 @@ ; 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 @@ -65,146 +64,3 @@ 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: } Index: llvm/test/DebugInfo/PDB/pdbdump-headers.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-headers.test +++ llvm/test/DebugInfo/PDB/pdbdump-headers.test @@ -1,2901 +1,1093 @@ -; 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 -headers -modules -module-files \ +; RUN: llvm-pdbutil raw -summary -modules -files \ ; RUN: %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %s -; RUN: not llvm-pdbutil raw -headers %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %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 + + + + + + + + + + + + + + + + + + + + + + + + + + + -; 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 Index: llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test +++ llvm/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test @@ -1,65 +1,51 @@ ; 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 -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 +; 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 -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 +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 -; 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 +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 Index: llvm/test/DebugInfo/PDB/pdbdump-mergeids.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-mergeids.test +++ llvm/test/DebugInfo/PDB/pdbdump-mergeids.test @@ -1,31 +1,24 @@ ; 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 -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 +; 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 -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 +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 -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 +TPI-EMPTY: Types (TPI Stream) +TPI-EMPTY-NEXT: ============================================================ +TPI-EMPTY-NEXT: Showing 0 records Index: llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test +++ llvm/test/DebugInfo/PDB/pdbdump-mergetypes.test @@ -1,24 +1,36 @@ -; 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** +; 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 Index: llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test +++ llvm/test/DebugInfo/PDB/pdbdump-raw-blocks.test @@ -1,35 +1,29 @@ -; 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. +; 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. Index: llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test +++ llvm/test/DebugInfo/PDB/pdbdump-raw-stream.test @@ -1,23 +1,28 @@ -; 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. +; 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 Index: llvm/test/DebugInfo/PDB/pdbdump-readwrite.test =================================================================== --- llvm/test/DebugInfo/PDB/pdbdump-readwrite.test +++ llvm/test/DebugInfo/PDB/pdbdump-readwrite.test @@ -3,48 +3,33 @@ RUN: -stream-metadata %p/Inputs/empty.pdb > %t.1 RUN: llvm-pdbutil yaml2pdb -pdb=%t.2 %t.1 -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 +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 -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: } + +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 Index: llvm/test/tools/llvm-pdbdump/raw-stream-data.test =================================================================== --- llvm/test/tools/llvm-pdbdump/raw-stream-data.test +++ /dev/null @@ -1,47 +0,0 @@ -; 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 Index: llvm/tools/llvm-pdbutil/CMakeLists.txt =================================================================== --- llvm/tools/llvm-pdbutil/CMakeLists.txt +++ llvm/tools/llvm-pdbutil/CMakeLists.txt @@ -12,8 +12,10 @@ CompactTypeDumpVisitor.cpp Diff.cpp llvm-pdbutil.cpp + FormatUtil.cpp LinePrinter.cpp - LLVMOutputStyle.cpp + MinimalSymbolDumper.cpp + MinimalTypeDumper.cpp PdbYaml.cpp PrettyBuiltinDumper.cpp PrettyClassDefinitionDumper.cpp @@ -25,6 +27,7 @@ PrettyTypeDumper.cpp PrettyTypedefDumper.cpp PrettyVariableDumper.cpp + RawOutputStyle.cpp StreamUtil.cpp YAMLOutputStyle.cpp ) Index: llvm/tools/llvm-pdbutil/FormatUtil.h =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/FormatUtil.h @@ -0,0 +1,49 @@ +//===- 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); +} +} +#endif Index: llvm/tools/llvm-pdbutil/FormatUtil.cpp =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/FormatUtil.cpp @@ -0,0 +1,49 @@ +//===- 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); +} Index: llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp =================================================================== --- llvm/tools/llvm-pdbutil/LLVMOutputStyle.cpp +++ /dev/null @@ -1,1197 +0,0 @@ -//===- 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/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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &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 DebugSubsectionState &State) { - if (auto Result = getNameFromChecksumsBuffer(Offset, State)) { - P.printString(Label, *Result); - return Error::success(); - } else - return Result.takeError(); - } - - Expected - getNameFromStringTable(uint32_t Offset, const DebugSubsectionState &State) { - return State.strings().getString(Offset); - } - - Expected - getNameFromChecksumsBuffer(uint32_t Offset, - const DebugSubsectionState &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(); } Index: llvm/tools/llvm-pdbutil/LinePrinter.h =================================================================== --- llvm/tools/llvm-pdbutil/LinePrinter.h +++ llvm/tools/llvm-pdbutil/LinePrinter.h @@ -10,10 +10,12 @@ #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/raw_ostream.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/Regex.h" +#include "llvm/Support/raw_ostream.h" #include @@ -28,10 +30,22 @@ public: LinePrinter(int Indent, bool UseColor, raw_ostream &Stream); - void Indent(); - void Unindent(); + void Indent(uint32_t Amount = 0); + void Unindent(uint32_t Amount = 0); 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; } @@ -63,6 +77,17 @@ 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; Index: llvm/tools/llvm-pdbutil/LinePrinter.cpp =================================================================== --- llvm/tools/llvm-pdbutil/LinePrinter.cpp +++ llvm/tools/llvm-pdbutil/LinePrinter.cpp @@ -13,6 +13,7 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/DebugInfo/PDB/UDTLayout.h" +#include "llvm/Support/Format.h" #include "llvm/Support/Regex.h" #include @@ -60,10 +61,16 @@ opts::pretty::IncludeCompilands.end()); } -void LinePrinter::Indent() { CurrentIndent += IndentSpaces; } +void LinePrinter::Indent(uint32_t Amount) { + if (Amount == 0) + Amount = IndentSpaces; + CurrentIndent += Amount; +} -void LinePrinter::Unindent() { - CurrentIndent = std::max(0, CurrentIndent - IndentSpaces); +void LinePrinter::Unindent(uint32_t Amount) { + if (Amount == 0) + Amount = IndentSpaces; + CurrentIndent = std::max(0, CurrentIndent - Amount); } void LinePrinter::NewLine() { @@ -71,6 +78,13 @@ 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; @@ -79,6 +93,19 @@ 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; Index: llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h @@ -0,0 +1,49 @@ +//===- 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), RecordBytes(RecordBytes), Types(Types) {} + + virtual Error visitSymbolBegin(codeview::CVSymbol &Record); + virtual Error visitSymbolEnd(codeview::CVSymbol &Record); + +#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; + + uint32_t Width; + LinePrinter &P; + bool RecordBytes = false; + codeview::LazyRandomTypeCollection &Types; +}; +} +} + +#endif \ No newline at end of file Index: llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp @@ -0,0 +1,753 @@ +//===- 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"); + default: + return formatUnknownEnum(Ordinal); + } +} + +static std::string formatTrampolineType(TrampolineType Tramp) { + switch (Tramp) { + RETURN_CASE(TrampolineType, TrampIncremental, "tramp incremental"); + RETURN_CASE(TrampolineType, BranchIsland, "branch island"); + default: + 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, 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"); + default: + 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"); + default: + 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"); + default: + 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(); +} Index: llvm/tools/llvm-pdbutil/MinimalTypeDumper.h =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/MinimalTypeDumper.h @@ -0,0 +1,56 @@ +//===- 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; + + uint32_t Width; + LinePrinter &P; + bool RecordBytes = false; + codeview::LazyRandomTypeCollection &Types; +}; +} +} + +#endif Index: llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp @@ -0,0 +1,535 @@ +//===- 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, NearVector, "vectorcall"); + RETURN_CASE(CallingConvention, PpcCall, "ppccall"); + RETURN_CASE(CallingConvention, SH5Call, "sh5call"); + RETURN_CASE(CallingConvention, ThisCall, "thiscall"); + RETURN_CASE(CallingConvention, TriCall, "tricall"); + default: + return formatUnknownEnum(Convention); + } + return ""; +} + +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"); + default: + return formatUnknownEnum(Mode); + } +} + +static std::string memberAccess(MemberAccess Access) { + switch (Access) { + RETURN_CASE(MemberAccess, Private, "private"); + RETURN_CASE(MemberAccess, Protected, "protected"); + RETURN_CASE(MemberAccess, Public, "public"); + default: + 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"); + default: + 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"); + default: + 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(); +} Index: llvm/tools/llvm-pdbutil/RawOutputStyle.h =================================================================== --- llvm/tools/llvm-pdbutil/RawOutputStyle.h +++ llvm/tools/llvm-pdbutil/RawOutputStyle.h @@ -1,4 +1,4 @@ -//===- LLVMOutputStyle.h -------------------------------------- *- C++ --*-===// +//===- RawOutputStyle.h -------------------------------------- *- C++ --*-===// // // The LLVM Compiler Infrastructure // @@ -7,15 +7,15 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H -#define LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H +#ifndef LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_H +#define LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_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 @@ } namespace pdb { -class LLVMOutputStyle : public OutputStyle { +class RawOutputStyle : public OutputStyle { public: - LLVMOutputStyle(PDBFile &File); + RawOutputStyle(PDBFile &File); Error dump() override; @@ -37,34 +37,25 @@ Expected initializeTypeDatabase(uint32_t SN); - Error dumpFileHeaders(); + Error dumpFileSummary(); Error dumpStreamSummary(); - Error dumpFreePageMap(); Error dumpBlockRanges(); - Error dumpGlobalsStream(); Error dumpStreamBytes(); - Error dumpStreamBlocks(); Error dumpStringTable(); - Error dumpInfoStream(); Error dumpTpiStream(uint32_t StreamIdx); - Error dumpDbiStream(); + Error dumpModules(); + Error dumpModuleSyms(); + Error dumpPublics(); Error dumpSectionContribs(); Error dumpSectionMap(); - Error dumpPublicsStream(); - Error dumpSectionHeaders(); - Error dumpFpoStream(); - - void dumpBitVector(StringRef Name, const BitVector &V); - - void flush(); PDBFile &File; - ScopedPrinter P; + LinePrinter P; std::unique_ptr TpiTypes; std::unique_ptr IpiTypes; SmallVector StreamPurposes; }; -} -} +} // namespace pdb +} // namespace llvm #endif Index: llvm/tools/llvm-pdbutil/RawOutputStyle.cpp =================================================================== --- /dev/null +++ llvm/tools/llvm-pdbutil/RawOutputStyle.cpp @@ -0,0 +1,669 @@ +//===- 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, DbiStream &DS) : P(P), DS(DS) {} + 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; + DbiStream &DS; + }; + + Visitor V(P, Dbi); + 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(); +} Index: llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp =================================================================== --- llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp +++ llvm/tools/llvm-pdbutil/YAMLOutputStyle.cpp @@ -31,6 +31,13 @@ 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); @@ -92,8 +99,8 @@ } Error YAMLOutputStyle::dumpStringTable() { - bool RequiresStringTable = opts::shared::DumpModuleFiles || - !opts::shared::DumpModuleSubsections.empty(); + bool RequiresStringTable = opts::pdb2yaml::DumpModuleFiles || + !opts::pdb2yaml::DumpModuleSubsections.empty(); bool RequestedStringTable = opts::pdb2yaml::StringTable; if (!RequiresStringTable && !RequestedStringTable) return Error::success(); @@ -200,7 +207,7 @@ Obj.DbiStream->PdbDllRbld = DS.getPdbDllRbld(); Obj.DbiStream->PdbDllVersion = DS.getPdbDllVersion(); Obj.DbiStream->VerHeader = DS.getDbiVersion(); - if (opts::shared::DumpModules) { + if (opts::pdb2yaml::DumpModules) { const auto &Modules = DS.modules(); for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) { DbiModuleDescriptor MI = Modules.getModuleDescriptor(I); @@ -210,7 +217,7 @@ DMI.Mod = MI.getModuleName(); DMI.Obj = MI.getObjFileName(); - if (opts::shared::DumpModuleFiles) { + if (opts::pdb2yaml::DumpModuleFiles) { auto Files = Modules.source_files(I); DMI.SourceFiles.assign(Files.begin(), Files.end()); } @@ -230,7 +237,7 @@ auto ExpectedST = File.getStringTable(); if (!ExpectedST) return ExpectedST.takeError(); - if (!opts::shared::DumpModuleSubsections.empty() && + if (!opts::pdb2yaml::DumpModuleSubsections.empty() && ModS.hasDebugSubsections()) { auto ExpectedChecksums = ModS.findChecksumsSubsection(); if (!ExpectedChecksums) @@ -238,7 +245,7 @@ for (const auto &SS : ModS.subsections()) { opts::ModuleSubsection OptionKind = convertSubsectionKind(SS.kind()); - if (!opts::checkModuleSubsection(OptionKind)) + if (!checkModuleSubsection(OptionKind)) continue; auto Converted = @@ -250,7 +257,7 @@ } } - if (opts::shared::DumpModuleSyms) { + if (opts::pdb2yaml::DumpModuleSyms) { DMI.Modi.emplace(); DMI.Modi->Signature = ModS.signature(); Index: llvm/tools/llvm-pdbutil/llvm-pdbutil.h =================================================================== --- llvm/tools/llvm-pdbutil/llvm-pdbutil.h +++ llvm/tools/llvm-pdbutil/llvm-pdbutil.h @@ -27,6 +27,8 @@ namespace opts { +enum class DumpLevel { None, Basic, Verbose }; + enum class ModuleSubsection { Unknown, Lines, @@ -41,15 +43,6 @@ 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 }; @@ -105,27 +98,24 @@ 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 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 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 DumpPublics; extern llvm::cl::opt DumpSectionContribs; extern llvm::cl::opt DumpSectionMap; -extern llvm::cl::opt DumpSymRecordBytes; -extern llvm::cl::opt DumpSectionHeaders; -extern llvm::cl::opt DumpFpo; -extern llvm::cl::opt DumpStringTable; +extern llvm::cl::opt DumpModules; +extern llvm::cl::opt DumpModuleFiles; +extern llvm::cl::opt RawAll; } namespace diff { @@ -144,14 +134,11 @@ 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 shared +} } #endif Index: llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp =================================================================== --- llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp +++ llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp @@ -15,7 +15,6 @@ #include "Analyze.h" #include "Diff.h" -#include "LLVMOutputStyle.h" #include "LinePrinter.h" #include "OutputStyle.h" #include "PrettyCompilandDumper.h" @@ -23,6 +22,7 @@ #include "PrettyFunctionDumper.h" #include "PrettyTypeDumper.h" #include "PrettyVariableDumper.h" +#include "RawOutputStyle.h" #include "YAMLOutputStyle.h" #include "llvm/ADT/ArrayRef.h" @@ -265,6 +265,8 @@ cl::OneOrMore, cl::sub(DiffSubcommand)); } +cl::OptionCategory FileOptions("Module & File Options"); + namespace raw { cl::OptionCategory MsfOptions("MSF Container Options"); @@ -273,18 +275,11 @@ cl::OptionCategory MiscOptions("Miscellaneous Options"); // MSF OPTIONS -cl::opt DumpHeaders("headers", cl::desc("dump PDB headers"), +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::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."), @@ -298,40 +293,45 @@ cl::cat(MsfOptions), cl::sub(RawSubcommand)); // TYPE OPTIONS -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::opt DumpTypes("types", + cl::desc("dump CodeView type records from TPI stream"), + cl::cat(TypeOptions), cl::sub(RawSubcommand)); +cl::opt DumpTypeData( + "type-data", cl::desc("dump CodeView type record raw bytes from TPI 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 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 - 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)); + DumpIdData("id-data", + 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-record-bytes", + DumpSymRecordBytes("sym-data", 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)); @@ -341,11 +341,6 @@ 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)); @@ -403,20 +398,11 @@ 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(RawSubcommand), - cl::sub(PdbToYamlSubcommand)); + cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); cl::opt DumpModuleFiles("module-files", cl::desc("dump file information"), - cl::cat(FileOptions), cl::sub(RawSubcommand), + cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); cl::list DumpModuleSubsections( "subsections", cl::ZeroOrMore, cl::CommaSeparated, @@ -447,11 +433,15 @@ clEnumValN(ModuleSubsection::Unknown, "unknown", "Any subsection not covered by another option"), clEnumValN(ModuleSubsection::All, "all", "All known subsections")), - cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand)); + cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); cl::opt DumpModuleSyms("module-syms", cl::desc("dump module symbols"), - cl::cat(FileOptions), cl::sub(RawSubcommand), + cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand)); -} // namespace shared + +cl::list InputFilename(cl::Positional, + cl::desc(""), cl::Required, + cl::sub(PdbToYamlSubcommand)); +} namespace analyze { cl::opt StringTable("hash-collisions", cl::desc("Find hash collisions"), @@ -473,13 +463,6 @@ 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 = @@ -604,7 +587,7 @@ std::unique_ptr Session; auto &File = loadPDB(Path, Session); - auto O = llvm::make_unique(File); + auto O = llvm::make_unique(File); ExitOnErr(O->dump()); } @@ -897,49 +880,21 @@ } } - 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::DumpHeaders = true; - opts::raw::DumpGlobals = true; + opts::raw::DumpIds = true; opts::raw::DumpPublics = 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::DumpSectionContribs = true; - opts::raw::DumpFpo = true; + opts::raw::DumpSectionMap = true; + opts::raw::DumpStreams = true; opts::raw::DumpStringTable = 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); + 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::PdbToYamlSubcommand) { @@ -951,7 +906,24 @@ 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);