1# RUN: yaml2obj < %p/Inputs/pdb1.yaml > %t1.obj 2# RUN: yaml2obj < %p/Inputs/pdb2.yaml > %t2.obj 3# RUN: rm -f %t.dll %t.pdb 4# RUN: lld-link /debug /pdb:%t.pdb /pdbaltpath:test.pdb /dll /out:%t.dll \ 5# RUN: /entry:main /nodefaultlib %t1.obj %t2.obj 6 7# RUN: llvm-pdbutil pdb2yaml -stream-metadata -stream-directory -pdb-stream \ 8# RUN: -dbi-stream -ipi-stream -tpi-stream %t.pdb | FileCheck %s 9 10# RUN: llvm-pdbutil dump -modules -section-map -section-contribs -section-headers \ 11# RUN: -publics -public-extras -types -ids -type-extras -id-extras %t.pdb \ 12# RUN: | FileCheck -check-prefix RAW %s 13 14# CHECK: MSF: 15# CHECK-NEXT: SuperBlock: 16# CHECK-NEXT: BlockSize: 4096 17# CHECK-NEXT: FreeBlockMap: 2 18# CHECK-NEXT: NumBlocks: 19# CHECK-NEXT: NumDirectoryBytes: 20# CHECK-NEXT: Unknown1: 0 21# CHECK-NEXT: BlockMapAddr: 22# CHECK-NEXT: NumDirectoryBlocks: 23# CHECK-NEXT: DirectoryBlocks: 24# CHECK-NEXT: NumStreams: 25# CHECK-NEXT: FileSize: 26# CHECK-NEXT: StreamSizes: 27# CHECK: StreamMap: 28# CHECK: PdbStream: 29# CHECK-NEXT: Age: 1 30# CHECK-NEXT: Guid: 31# CHECK-NEXT: Signature: 32# CHECK-NEXT: Features: [ VC140 ] 33# CHECK-NEXT: Version: VC70 34# CHECK-NEXT: DbiStream: 35# CHECK-NEXT: VerHeader: V70 36# CHECK-NEXT: Age: 1 37# CHECK-NEXT: BuildNumber: 36363 38# CHECK-NEXT: PdbDllVersion: 0 39# CHECK-NEXT: PdbDllRbld: 0 40# CHECK-NEXT: Flags: 0 41# CHECK-NEXT: MachineType: Amd64 42# CHECK-NEXT: TpiStream: 43# CHECK-NEXT: Version: VC80 44# CHECK-NEXT: Records: 45# CHECK-NEXT: - Kind: LF_ARGLIST 46# CHECK-NEXT: ArgList: 47# CHECK-NEXT: ArgIndices: [ ] 48# CHECK-NEXT: - Kind: LF_PROCEDURE 49# CHECK-NEXT: Procedure: 50# CHECK-NEXT: ReturnType: 116 51# CHECK-NEXT: CallConv: NearC 52# CHECK-NEXT: Options: [ None ] 53# CHECK-NEXT: ParameterCount: 0 54# CHECK-NEXT: ArgumentList: 4096 55# CHECK-NEXT: - Kind: LF_POINTER 56# CHECK-NEXT: Pointer: 57# CHECK-NEXT: ReferentType: 4097 58# CHECK-NEXT: Attrs: 65548 59# CHECK-NEXT: - Kind: LF_ARGLIST 60# CHECK-NEXT: ArgList: 61# CHECK-NEXT: ArgIndices: [ 0 ] 62# CHECK-NEXT: - Kind: LF_PROCEDURE 63# CHECK-NEXT: Procedure: 64# CHECK-NEXT: ReturnType: 116 65# CHECK-NEXT: CallConv: NearC 66# CHECK-NEXT: Options: [ None ] 67# CHECK-NEXT: ParameterCount: 0 68# CHECK-NEXT: ArgumentList: 4099 69# CHECK-NEXT: IpiStream: 70# CHECK-NEXT: Version: VC80 71# CHECK-NEXT: Records: 72# CHECK-NEXT: - Kind: LF_FUNC_ID 73# CHECK-NEXT: FuncId: 74# CHECK-NEXT: ParentScope: 0 75# CHECK-NEXT: FunctionType: 4100 76# CHECK-NEXT: Name: main 77# CHECK-NEXT: - Kind: LF_FUNC_ID 78# CHECK-NEXT: FuncId: 79# CHECK-NEXT: ParentScope: 0 80# CHECK-NEXT: FunctionType: 4097 81# CHECK-NEXT: Name: foo 82# CHECK-NEXT: - Kind: LF_STRING_ID 83# CHECK-NEXT: StringId: 84# CHECK-NEXT: Id: 0 85# CHECK-NEXT: String: 'D:\b' 86# CHECK-NEXT: - Kind: LF_STRING_ID 87# CHECK-NEXT: StringId: 88# CHECK-NEXT: Id: 0 89# CHECK-NEXT: String: 'C:\vs14\VC\BIN\amd64\cl.exe' 90# CHECK-NEXT: - Kind: LF_STRING_ID 91# CHECK-NEXT: StringId: 92# CHECK-NEXT: Id: 0 93# 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"' 94# CHECK-NEXT: - Kind: LF_SUBSTR_LIST 95# CHECK-NEXT: StringList: 96# CHECK-NEXT: StringIndices: [ 4100 ] 97# CHECK-NEXT: - Kind: LF_STRING_ID 98# CHECK-NEXT: StringId: 99# CHECK-NEXT: Id: 4101 100# 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' 101# CHECK-NEXT: - Kind: LF_STRING_ID 102# CHECK-NEXT: StringId: 103# CHECK-NEXT: Id: 0 104# CHECK-NEXT: String: ret42-main.c 105# CHECK-NEXT: - Kind: LF_STRING_ID 106# CHECK-NEXT: StringId: 107# CHECK-NEXT: Id: 0 108# CHECK-NEXT: String: 'D:\b\vc140.pdb' 109# CHECK-NEXT: - Kind: LF_BUILDINFO 110# CHECK-NEXT: BuildInfo: 111# CHECK-NEXT: ArgIndices: [ 4098, 4099, 4103, 4104, 4102 ] 112# CHECK-NEXT: - Kind: LF_STRING_ID 113# CHECK-NEXT: StringId: 114# CHECK-NEXT: Id: 0 115# CHECK-NEXT: String: ret42-sub.c 116# CHECK-NEXT: - Kind: LF_BUILDINFO 117# CHECK-NEXT: BuildInfo: 118# CHECK-NEXT: ArgIndices: [ 4098, 4099, 4106, 4104, 4102 ] 119 120RAW: Modules 121RAW-NEXT: ============================================================ 122RAW-NEXT: Mod 0000 | `{{.*}}pdb.test.tmp1.obj`: 123RAW-NEXT: SC[.text] | mod = 0, 0001:0000, size = 14, data crc = 1682752513, reloc crc = 0 124RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | 125RAW-NEXT: IMAGE_SCN_MEM_READ 126RAW-NEXT: Obj: `{{.*}}pdb.test.tmp1.obj`: 127RAW-NEXT: debug stream: 11, # files: 1, has ec info: false 128RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` 129RAW-NEXT: Mod 0001 | `{{.*}}pdb.test.tmp2.obj`: 130RAW-NEXT: SC[.text] | mod = 1, 0001:0016, size = 6, data crc = 2139436471, reloc crc = 0 131RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | 132RAW-NEXT: IMAGE_SCN_MEM_READ 133RAW-NEXT: Obj: `{{.*}}pdb.test.tmp2.obj`: 134RAW-NEXT: debug stream: 12, # files: 1, has ec info: false 135RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` 136RAW-NEXT: Mod 0002 | `* Linker *`: 137RAW-NEXT: SC[???] | mod = 65535, 65535:0000, size = -1, data crc = 0, reloc crc = 0 138RAW-NEXT: none 139RAW-NEXT: Obj: ``: 140RAW-NEXT: debug stream: 13, # files: 0, has ec info: false 141RAW-NEXT: pdb file ni: 1 `{{.*pdb.test.tmp.pdb}}`, src file ni: 0 `` 142RAW: Types (TPI Stream) 143RAW-NEXT: ============================================================ 144RAW-NEXT: Showing 5 records 145RAW-NEXT: 0x1000 | LF_ARGLIST [size = 8, hash = 0x32484] 146RAW-NEXT: 0x1001 | LF_PROCEDURE [size = 16, hash = 0x27EE9] 147RAW-NEXT: return type = 0x0074 (int), # args = 0, param list = 0x1000 148RAW-NEXT: calling conv = cdecl, options = None 149RAW-NEXT: 0x1002 | LF_POINTER [size = 12, hash = 0x39732] 150RAW-NEXT: referent = 0x1001, mode = pointer, opts = None, kind = ptr64 151RAW-NEXT: 0x1003 | LF_ARGLIST [size = 12, hash = 0x1FC10] 152RAW-NEXT: <no type>: `` 153RAW-NEXT: 0x1004 | LF_PROCEDURE [size = 16, hash = 0x1BD3] 154RAW-NEXT: return type = 0x0074 (int), # args = 0, param list = 0x1003 155RAW-NEXT: calling conv = cdecl, options = None 156RAW: Types (IPI Stream) 157RAW-NEXT: ============================================================ 158RAW-NEXT: Showing 12 records 159RAW-NEXT: 0x1000 | LF_FUNC_ID [size = 20, hash = 0x38E5A] 160RAW-NEXT: name = main, type = 0x1004, parent scope = <no type> 161RAW-NEXT: 0x1001 | LF_FUNC_ID [size = 16, hash = 0xD08E] 162RAW-NEXT: name = foo, type = 0x1001, parent scope = <no type> 163RAW-NEXT: 0x1002 | LF_STRING_ID [size = 16, hash = 0x3EBD9] ID: <no type>, String: D:\b 164RAW-NEXT: 0x1003 | LF_STRING_ID [size = 36, hash = 0xD327] ID: <no type>, String: C:\vs14\VC\BIN\amd64\cl.exe 165RAW-NEXT: 0x1004 | LF_STRING_ID [size = 260, hash = 0x2FA6A] 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" 166RAW-NEXT: 0x1005 | LF_SUBSTR_LIST [size = 12, hash = 0x6053] 167RAW-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"` 168RAW-NEXT: 0x1006 | LF_STRING_ID [size = 132, hash = 0xCAC7] 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 169RAW-NEXT: 0x1007 | LF_STRING_ID [size = 24, hash = 0x21783] ID: <no type>, String: ret42-main.c 170RAW-NEXT: 0x1008 | LF_STRING_ID [size = 24, hash = 0x1DB87] ID: <no type>, String: D:\b\vc140.pdb 171RAW-NEXT: 0x1009 | LF_BUILDINFO [size = 28, hash = 0x5E91] 172RAW-NEXT: 0x1002: `D:\b` 173RAW-NEXT: 0x1003: `C:\vs14\VC\BIN\amd64\cl.exe` 174RAW-NEXT: 0x1007: `ret42-main.c` 175RAW-NEXT: 0x1008: `D:\b\vc140.pdb` 176RAW-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` 177RAW-NEXT: 0x100A | LF_STRING_ID [size = 20, hash = 0x7C68] ID: <no type>, String: ret42-sub.c 178RAW-NEXT: 0x100B | LF_BUILDINFO [size = 28, hash = 0x254D2] 179RAW-NEXT: 0x1002: `D:\b` 180RAW-NEXT: 0x1003: `C:\vs14\VC\BIN\amd64\cl.exe` 181RAW-NEXT: 0x100A: `ret42-sub.c` 182RAW-NEXT: 0x1008: `D:\b\vc140.pdb` 183RAW-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` 184RAW: Public Symbols 185RAW-NEXT: ============================================================ 186RAW-NEXT: Publics Header 187RAW-NEXT: sym hash = 556, thunk table addr = 0000:0000 188RAW-NEXT: GSI Header 189RAW-NEXT: sig = 0xFFFFFFFF, hdr = 0xF12F091A, hr size = 16, num buckets = 524 190RAW-NEXT: Records 191RAW-NEXT: 20 | S_PUB32 [size = 20] `main` 192RAW-NEXT: flags = function, addr = 0001:0000 193RAW-NEXT: 0 | S_PUB32 [size = 20] `foo` 194RAW-NEXT: flags = function, addr = 0001:0016 195RAW-NOT: S_PUB32 196RAW-NEXT: Hash Entries 197RAW-NEXT: off = 21, refcnt = 1 198RAW-NEXT: off = 1, refcnt = 1 199RAW-NEXT: Hash Buckets 200RAW-NEXT: 0x00000000 201RAW-NEXT: 0x0000000c 202RAW-NEXT: Address Map 203RAW-NEXT: off = 20 204RAW-NEXT: off = 0 205RAW: Section Headers 206RAW-NEXT: ============================================================ 207 208RAW: SECTION HEADER #1 209RAW-NEXT: .text name 210RAW-NEXT: 16 virtual size 211RAW-NEXT: 1000 virtual address 212RAW-NEXT: 200 size of raw data 213RAW-NEXT: 400 file pointer to raw data 214RAW-NEXT: 0 file pointer to relocation table 215RAW-NEXT: 0 file pointer to line numbers 216RAW-NEXT: 0 number of relocations 217RAW-NEXT: 0 number of line numbers 218RAW-NEXT: 60000020 flags 219RAW-NEXT: IMAGE_SCN_CNT_CODE 220RAW-NEXT: IMAGE_SCN_MEM_EXECUTE 221RAW-NEXT: IMAGE_SCN_MEM_READ 222RAW: SECTION HEADER #2 223RAW-NEXT: .rdata name 224RAW-NEXT: virtual size 225RAW-NEXT: 2000 virtual address 226RAW-NEXT: 200 size of raw data 227RAW-NEXT: 600 file pointer to raw data 228RAW-NEXT: 0 file pointer to relocation table 229RAW-NEXT: 0 file pointer to line numbers 230RAW-NEXT: 0 number of relocations 231RAW-NEXT: 0 number of line numbers 232RAW-NEXT: 40000040 flags 233RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA 234RAW-NEXT: IMAGE_SCN_MEM_READ 235RAW: SECTION HEADER #3 236RAW-NEXT: .pdata name 237RAW-NEXT: C virtual size 238RAW-NEXT: 3000 virtual address 239RAW-NEXT: 200 size of raw data 240RAW-NEXT: 800 file pointer to raw data 241RAW-NEXT: 0 file pointer to relocation table 242RAW-NEXT: 0 file pointer to line numbers 243RAW-NEXT: 0 number of relocations 244RAW-NEXT: 0 number of line numbers 245RAW-NEXT: 40000040 flags 246RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA 247RAW-NEXT: IMAGE_SCN_MEM_READ 248RAW: Original Section Headers 249RAW-NEXT: ============================================================ 250RAW-NEXT: PDB does not contain the requested image section header type 251RAW: Section Contributions 252RAW-NEXT: ============================================================ 253 254RAW-NEXT: SC[.text] | mod = 0, 0001:0000, size = 14, data crc = 1682752513, reloc crc = 0 255RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | 256RAW-NEXT: IMAGE_SCN_MEM_READ 257RAW-NEXT: SC[.text] | mod = 1, 0001:0016, size = 6, data crc = 2139436471, reloc crc = 0 258RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | 259RAW-NEXT: IMAGE_SCN_MEM_READ 260RAW-NEXT: SC[.rdata] | mod = 2, 0002:0000, size = {{[0-9]+}}, data crc = 0, reloc crc = 0 261RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ 262RAW-NEXT: SC[.rdata] | mod = 2, 0002:0028, size = {{[0-9]+}}, data crc = 0, reloc crc = 0 263RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ 264RAW-NEXT: SC[.rdata] | mod = 0, 0002:0064, size = {{[0-9]+}}, data crc = 264583633, reloc crc = 0 265RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ 266RAW-NEXT: SC[.pdata] | mod = 0, 0003:0000, size = 12, data crc = 361370162, reloc crc = 0 267RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ 268RAW-NOT: SC[ 269RAW: Section Map 270RAW-NEXT: ============================================================ 271 272RAW-NEXT: Section 0000 | ovl = 0, group = 0, frame = 1, name = 65535 273RAW-NEXT: class = 65535, offset = 0, size = 274RAW-NEXT: flags = read | execute | 32 bit addr | selector 275RAW-NEXT: Section 0001 | ovl = 0, group = 0, frame = 2, name = 65535 276RAW-NEXT: class = 65535, offset = 0, size = 277RAW-NEXT: flags = read | 32 bit addr | selector 278RAW-NEXT: Section 0002 | ovl = 0, group = 0, frame = 3, name = 65535 279RAW-NEXT: class = 65535, offset = 0, size = 280RAW-NEXT: flags = read | 32 bit addr | selector 281RAW-NEXT: Section 0003 | ovl = 0, group = 0, frame = 4, name = 65535 282RAW-NEXT: class = 65535, offset = 0, size = 4294967295 283RAW-NEXT: flags = 32 bit addr | absolute addr 284