| # RUN: yaml2obj < %p/Inputs/pdb1.yaml > %t1.obj |
| # RUN: yaml2obj < %p/Inputs/pdb2.yaml > %t2.obj |
| # RUN: rm -f %t.dll %t.pdb |
| # RUN: lld-link /debug /pdb:%t.pdb /pdbaltpath:test.pdb /dll /out:%t.dll \ |
| # RUN: /entry:main /nodefaultlib %t1.obj %t2.obj |
| |
| # RUN: llvm-pdbutil pdb2yaml -stream-metadata -stream-directory -pdb-stream \ |
| # RUN: -dbi-stream -ipi-stream -tpi-stream %t.pdb | FileCheck %s |
| |
| # RUN: llvm-pdbutil dump -modules -section-map -section-contribs -section-headers \ |
| # RUN: -publics -public-extras -types -ids -type-extras -id-extras %t.pdb \ |
| # RUN: | FileCheck -check-prefix RAW %s |
| |
| # CHECK: MSF: |
| # CHECK-NEXT: SuperBlock: |
| # CHECK-NEXT: BlockSize: 4096 |
| # CHECK-NEXT: FreeBlockMap: 2 |
| # CHECK-NEXT: NumBlocks: |
| # CHECK-NEXT: NumDirectoryBytes: |
| # CHECK-NEXT: Unknown1: 0 |
| # CHECK-NEXT: BlockMapAddr: |
| # CHECK-NEXT: NumDirectoryBlocks: |
| # CHECK-NEXT: DirectoryBlocks: |
| # CHECK-NEXT: NumStreams: |
| # CHECK-NEXT: FileSize: |
| # CHECK-NEXT: StreamSizes: |
| # CHECK: StreamMap: |
| # CHECK: PdbStream: |
| # CHECK-NEXT: Age: 1 |
| # CHECK-NEXT: Guid: |
| # CHECK-NEXT: Signature: |
| # CHECK-NEXT: Features: [ VC140 ] |
| # CHECK-NEXT: Version: VC70 |
| # CHECK-NEXT: DbiStream: |
| # CHECK-NEXT: VerHeader: V70 |
| # CHECK-NEXT: Age: 1 |
| # CHECK-NEXT: BuildNumber: 36363 |
| # CHECK-NEXT: PdbDllVersion: 0 |
| # CHECK-NEXT: PdbDllRbld: 0 |
| # CHECK-NEXT: Flags: 0 |
| # CHECK-NEXT: MachineType: Amd64 |
| # CHECK-NEXT: TpiStream: |
| # CHECK-NEXT: Version: VC80 |
| # CHECK-NEXT: Records: |
| # CHECK-NEXT: - Kind: LF_ARGLIST |
| # CHECK-NEXT: ArgList: |
| # CHECK-NEXT: ArgIndices: [ ] |
| # CHECK-NEXT: - Kind: LF_PROCEDURE |
| # CHECK-NEXT: Procedure: |
| # CHECK-NEXT: ReturnType: 116 |
| # CHECK-NEXT: CallConv: NearC |
| # CHECK-NEXT: Options: [ None ] |
| # CHECK-NEXT: ParameterCount: 0 |
| # CHECK-NEXT: ArgumentList: 4096 |
| # CHECK-NEXT: - Kind: LF_POINTER |
| # CHECK-NEXT: Pointer: |
| # CHECK-NEXT: ReferentType: 4097 |
| # CHECK-NEXT: Attrs: 65548 |
| # CHECK-NEXT: - Kind: LF_ARGLIST |
| # CHECK-NEXT: ArgList: |
| # CHECK-NEXT: ArgIndices: [ 0 ] |
| # CHECK-NEXT: - Kind: LF_PROCEDURE |
| # CHECK-NEXT: Procedure: |
| # CHECK-NEXT: ReturnType: 116 |
| # CHECK-NEXT: CallConv: NearC |
| # CHECK-NEXT: Options: [ None ] |
| # CHECK-NEXT: ParameterCount: 0 |
| # CHECK-NEXT: ArgumentList: 4099 |
| # CHECK-NEXT: IpiStream: |
| # CHECK-NEXT: Version: VC80 |
| # CHECK-NEXT: Records: |
| # CHECK-NEXT: - Kind: LF_FUNC_ID |
| # CHECK-NEXT: FuncId: |
| # CHECK-NEXT: ParentScope: 0 |
| # CHECK-NEXT: FunctionType: 4100 |
| # CHECK-NEXT: Name: main |
| # CHECK-NEXT: - Kind: LF_FUNC_ID |
| # CHECK-NEXT: FuncId: |
| # CHECK-NEXT: ParentScope: 0 |
| # CHECK-NEXT: FunctionType: 4097 |
| # CHECK-NEXT: Name: foo |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: String: 'D:\b' |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: String: 'C:\vs14\VC\BIN\amd64\cl.exe' |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: 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"' |
| # CHECK-NEXT: - Kind: LF_SUBSTR_LIST |
| # CHECK-NEXT: StringList: |
| # CHECK-NEXT: StringIndices: [ 4100 ] |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 4101 |
| # CHECK-NEXT: 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' |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: String: ret42-main.c |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: String: 'D:\b\vc140.pdb' |
| # CHECK-NEXT: - Kind: LF_BUILDINFO |
| # CHECK-NEXT: BuildInfo: |
| # CHECK-NEXT: ArgIndices: [ 4098, 4099, 4103, 4104, 4102 ] |
| # CHECK-NEXT: - Kind: LF_STRING_ID |
| # CHECK-NEXT: StringId: |
| # CHECK-NEXT: Id: 0 |
| # CHECK-NEXT: String: ret42-sub.c |
| # CHECK-NEXT: - Kind: LF_BUILDINFO |
| # CHECK-NEXT: BuildInfo: |
| # CHECK-NEXT: ArgIndices: [ 4098, 4099, 4106, 4104, 4102 ] |
| |
| RAW: Modules |
| RAW-NEXT: ============================================================ |
| RAW-NEXT: Mod 0000 | `{{.*}}pdb.test.tmp1.obj`: |
| RAW-NEXT: SC[.text] | mod = 0, 0001:0000, size = 14, data crc = 1682752513, 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: Obj: `{{.*}}pdb.test.tmp1.obj`: |
| RAW-NEXT: debug stream: 11, # files: 1, has ec info: false |
| RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` |
| RAW-NEXT: Mod 0001 | `{{.*}}pdb.test.tmp2.obj`: |
| RAW-NEXT: SC[.text] | mod = 1, 0001:0016, size = 6, data crc = 2139436471, 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: Obj: `{{.*}}pdb.test.tmp2.obj`: |
| RAW-NEXT: debug stream: 12, # files: 1, has ec info: false |
| RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` |
| RAW-NEXT: Mod 0002 | `* Linker *`: |
| RAW-NEXT: SC[???] | mod = 2, 0000:0000, size = 0, data crc = 0, reloc crc = 0 |
| RAW-NEXT: none |
| RAW-NEXT: Obj: ``: |
| RAW-NEXT: debug stream: 13, # files: 0, has ec info: false |
| RAW-NEXT: pdb file ni: 1 `{{.*pdb.test.tmp.pdb}}`, src file ni: 0 `` |
| RAW: Types (TPI Stream) |
| RAW-NEXT: ============================================================ |
| RAW-NEXT: Showing 5 records |
| RAW-NEXT: 0x1000 | LF_ARGLIST [size = 8, hash = 0xEC0] |
| RAW-NEXT: 0x1001 | LF_PROCEDURE [size = 16, hash = 0x7BC] |
| 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, hash = 0x884] |
| RAW-NEXT: referent = 0x1001, mode = pointer, opts = None, kind = ptr64 |
| RAW-NEXT: 0x1003 | LF_ARGLIST [size = 12, hash = 0x936] |
| RAW-NEXT: <no type>: `` |
| RAW-NEXT: 0x1004 | LF_PROCEDURE [size = 16, hash = 0x852] |
| 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, hash = 0x330] |
| RAW-NEXT: name = main, type = 0x1004, parent scope = <no type> |
| RAW-NEXT: 0x1001 | LF_FUNC_ID [size = 16, hash = 0x120] |
| RAW-NEXT: name = foo, type = 0x1001, parent scope = <no type> |
| RAW-NEXT: 0x1002 | LF_STRING_ID [size = 16, hash = 0x757] ID: <no type>, String: D:\b |
| RAW-NEXT: 0x1003 | LF_STRING_ID [size = 36, hash = 0xC3A] ID: <no type>, String: C:\vs14\VC\BIN\amd64\cl.exe |
| RAW-NEXT: 0x1004 | LF_STRING_ID [size = 260, hash = 0x433] ID: <no type>, 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, hash = 0x759] |
| 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, hash = 0xF57] 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, hash = 0x2D1] ID: <no type>, String: ret42-main.c |
| RAW-NEXT: 0x1008 | LF_STRING_ID [size = 24, hash = 0xB8B] ID: <no type>, String: D:\b\vc140.pdb |
| RAW-NEXT: 0x1009 | LF_BUILDINFO [size = 28, hash = 0xA8C] |
| 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, hash = 0x39C] ID: <no type>, String: ret42-sub.c |
| RAW-NEXT: 0x100B | LF_BUILDINFO [size = 28, hash = 0xAD7] |
| 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: Public Symbols |
| RAW-NEXT: ============================================================ |
| RAW-NEXT: Publics Header |
| RAW-NEXT: sym hash = 556, thunk table addr = 0000:0000 |
| RAW-NEXT: GSI Header |
| RAW-NEXT: sig = 0xFFFFFFFF, hdr = 0xF12F091A, hr size = 16, num buckets = 524 |
| RAW-NEXT: Records |
| RAW-NEXT: 20 | S_PUB32 [size = 20] `main` |
| RAW-NEXT: flags = function, addr = 0001:0000 |
| RAW-NEXT: 0 | S_PUB32 [size = 20] `foo` |
| RAW-NEXT: flags = function, addr = 0001:0016 |
| RAW-NOT: S_PUB32 |
| RAW-NEXT: Hash Bitmap ( |
| RAW-NEXT: 0000: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0020: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0040: 00000000 20000000 00000000 00000000 00000000 00000000 00000000 00000000 |.... ...........................| |
| RAW-NEXT: 0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0080: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 00A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 00C0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 00E0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0100: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0120: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0140: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0160: 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0180: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 01A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 01C0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 01E0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |................................| |
| RAW-NEXT: 0200: 00000000 |....| |
| RAW-NEXT: ) |
| RAW-NEXT: Hash Entries |
| RAW-NEXT: off = 21, refcnt = 1 |
| RAW-NEXT: off = 1, refcnt = 1 |
| RAW-NEXT: Hash Buckets |
| RAW-NEXT: 0x00000000 |
| RAW-NEXT: 0x0000000c |
| RAW-NEXT: Address Map |
| RAW-NEXT: off = 20 |
| RAW-NEXT: off = 0 |
| RAW: Section Headers |
| RAW-NEXT: ============================================================ |
| |
| RAW: SECTION HEADER #1 |
| RAW-NEXT: .text name |
| RAW-NEXT: 16 virtual size |
| RAW-NEXT: 1000 virtual address |
| RAW-NEXT: 200 size of raw data |
| RAW-NEXT: 400 file pointer to raw data |
| RAW-NEXT: 0 file pointer to relocation table |
| RAW-NEXT: 0 file pointer to line numbers |
| RAW-NEXT: 0 number of relocations |
| RAW-NEXT: 0 number of line numbers |
| RAW-NEXT: 60000020 flags |
| RAW-NEXT: IMAGE_SCN_CNT_CODE |
| RAW-NEXT: IMAGE_SCN_MEM_EXECUTE |
| RAW-NEXT: IMAGE_SCN_MEM_READ |
| RAW: SECTION HEADER #2 |
| RAW-NEXT: .rdata name |
| RAW-NEXT: virtual size |
| RAW-NEXT: 2000 virtual address |
| RAW-NEXT: 200 size of raw data |
| RAW-NEXT: 600 file pointer to raw data |
| RAW-NEXT: 0 file pointer to relocation table |
| RAW-NEXT: 0 file pointer to line numbers |
| RAW-NEXT: 0 number of relocations |
| RAW-NEXT: 0 number of line numbers |
| RAW-NEXT: 40000040 flags |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA |
| RAW-NEXT: IMAGE_SCN_MEM_READ |
| RAW: SECTION HEADER #3 |
| RAW-NEXT: .pdata name |
| RAW-NEXT: C virtual size |
| RAW-NEXT: 3000 virtual address |
| RAW-NEXT: 200 size of raw data |
| RAW-NEXT: 800 file pointer to raw data |
| RAW-NEXT: 0 file pointer to relocation table |
| RAW-NEXT: 0 file pointer to line numbers |
| RAW-NEXT: 0 number of relocations |
| RAW-NEXT: 0 number of line numbers |
| RAW-NEXT: 40000040 flags |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA |
| RAW-NEXT: IMAGE_SCN_MEM_READ |
| RAW: Original Section Headers |
| RAW-NEXT: ============================================================ |
| RAW-NEXT: PDB does not contain the requested image section header type |
| RAW: Section Contributions |
| RAW-NEXT: ============================================================ |
| |
| RAW-NEXT: SC[.text] | mod = 0, 0001:0000, size = 14, data crc = 1682752513, 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[.text] | mod = 1, 0001:0016, size = 6, data crc = 2139436471, 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[.rdata] | mod = 2, 0002:0000, size = {{[0-9]+}}, data crc = 0, reloc crc = 0 |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ |
| RAW-NEXT: SC[.rdata] | mod = 2, 0002:0028, size = {{[0-9]+}}, data crc = 0, reloc crc = 0 |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ |
| RAW-NEXT: SC[.rdata] | mod = 0, 0002:0064, size = {{[0-9]+}}, data crc = 264583633, reloc crc = 0 |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ |
| RAW-NEXT: SC[.pdata] | mod = 0, 0003:0000, size = 12, data crc = 361370162, reloc crc = 0 |
| RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ |
| RAW-NOT: SC[ |
| RAW: Section Map |
| RAW-NEXT: ============================================================ |
| |
| RAW-NEXT: Section 0000 | ovl = 0, group = 0, frame = 1, name = 65535 |
| RAW-NEXT: class = 65535, offset = 0, size = |
| RAW-NEXT: flags = read | execute | 32 bit addr | selector |
| RAW-NEXT: Section 0001 | ovl = 0, group = 0, frame = 2, name = 65535 |
| RAW-NEXT: class = 65535, offset = 0, size = |
| RAW-NEXT: flags = read | 32 bit addr | selector |
| RAW-NEXT: Section 0002 | ovl = 0, group = 0, frame = 3, name = 65535 |
| RAW-NEXT: class = 65535, offset = 0, size = |
| RAW-NEXT: flags = read | 32 bit addr | selector |
| RAW-NEXT: Section 0003 | ovl = 0, group = 0, frame = 4, name = 65535 |
| RAW-NEXT: class = 65535, offset = 0, size = 4294967295 |
| RAW-NEXT: flags = 32 bit addr | absolute addr |