1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/test/DebugInfo/PDB/module-bytes.test
Zachary Turner ca694514d5 Support skewed stream arrays.
VarStreamArray was built on the assumption that it is backed by a
StreamRef, and offset 0 of that StreamRef is the first byte of the first
record in the array.

This is a logical and intuitive assumption, but unfortunately we have
use cases where it doesn't hold. Specifically, a PDB module's symbol
stream is prefixed by 4 bytes containing a magic value, and the first
byte of record data in the array is actually at offset 4 of this byte
sequence.

Previously, we would just truncate the first 4 bytes and then construct
the VarStreamArray with the resulting StreamRef, so that offset 0 of the
underlying stream did correspond to the first byte of the first record,
but this is problematic, because symbol records reference other symbol
records by the absolute offset including that initial magic 4 bytes. So
if another record wants to refer to the first record in the array, it
would say "the record at offset 4".

This led to extremely confusing hacks and semantics in loading code, and
after spending 30 minutes trying to get some math right and failing, I
decided to fix this in the underlying implementation of VarStreamArray.
Now, we can say that a stream is skewed by a particular amount. This
way, when we access a record by absolute offset, we can use the same
values that the records themselves contain, instead of having to do
fixups.

Differential Revision: https://reviews.llvm.org/D55344

llvm-svn: 348499
2018-12-06 16:55:00 +00:00

87 lines
7.4 KiB
Plaintext

; RUN: llvm-pdbutil bytes -chunks %p/Inputs/empty.pdb | FileCheck --check-prefix=CHUNKS %s
; RUN: llvm-pdbutil bytes -chunks -mod=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=FILTERED-CHUNKS %s
; RUN: llvm-pdbutil bytes -chunks -split-chunks -mod=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=SPLIT-CHUNKS %s
; RUN: llvm-pdbutil bytes -syms %p/Inputs/empty.pdb | FileCheck --check-prefix=SYMS %s
; RUN: llvm-pdbutil bytes -syms -mod=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=FILTERED-SYMS %s
CHUNKS: Debug Chunks
CHUNKS-NEXT: ============================================================
CHUNKS-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
CHUNKS-NEXT: Debug Chunks (
CHUNKS-NEXT: 60D0: F2000000 30000000 10000000 01000000 0A000000 00000000 03000000 24000000 |....0.......................$...|
CHUNKS-NEXT: 60F0: 00000000 05000080 03000000 06000080 08000000 07000080 F4000000 18000000 |................................|
CHUNKS-NEXT: 6110: 56000000 1001A0A5 BD0D3ECD 93FC29D1 9DE826FB F4BC0000 |V.........>...)...&.....|
CHUNKS-NEXT: )
CHUNKS-NEXT: Mod 0001 | `* Linker *`:
CHUNKS-NEXT: Debug Chunks (
CHUNKS-NEXT: )
FILTERED-CHUNKS: Debug Chunks
FILTERED-CHUNKS-NEXT: ============================================================
FILTERED-CHUNKS-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
FILTERED-CHUNKS-NEXT: Debug Chunks (
FILTERED-CHUNKS-NEXT: 60D0: F2000000 30000000 10000000 01000000 0A000000 00000000 03000000 24000000 |....0.......................$...|
FILTERED-CHUNKS-NEXT: 60F0: 00000000 05000080 03000000 06000080 08000000 07000080 F4000000 18000000 |................................|
FILTERED-CHUNKS-NEXT: 6110: 56000000 1001A0A5 BD0D3ECD 93FC29D1 9DE826FB F4BC0000 |V.........>...)...&.....|
FILTERED-CHUNKS-NEXT: )
FILTERED-CHUNKS-NOT: Mod 0001
SPLIT-CHUNKS: Debug Chunks
SPLIT-CHUNKS-NEXT: ============================================================
SPLIT-CHUNKS-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
SPLIT-CHUNKS-NEXT: lines (
SPLIT-CHUNKS-NEXT: 60D0: F2000000 30000000 10000000 01000000 0A000000 00000000 03000000 24000000 |....0.......................$...|
SPLIT-CHUNKS-NEXT: 60F0: 00000000 05000080 03000000 06000080 08000000 07000080 |........................|
SPLIT-CHUNKS-NEXT: )
SPLIT-CHUNKS-NEXT: checksums (
SPLIT-CHUNKS-NEXT: 6108: F4000000 18000000 56000000 1001A0A5 BD0D3ECD 93FC29D1 9DE826FB F4BC0000 |........V.........>...)...&.....|
SPLIT-CHUNKS-NEXT: )
SYMS: Module Symbols
SYMS-NEXT: ============================================================
SYMS-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
SYMS-NEXT: Symbols (
SYMS-NEXT: 6000: 04000000 36000111 00000000 643A5C73 72635C6C 6C766D5C 74657374 5C446562 |....6.......d:\src\llvm\test\Deb|
SYMS-NEXT: 6020: 7567496E 666F5C50 44425C49 6E707574 735C656D 7074792E 6F626A00 3A003C11 |ugInfo\PDB\Inputs\empty.obj.:.<.|
SYMS-NEXT: 6040: 01200000 07001200 00007D79 00001200 00007D79 00004D69 63726F73 6F667420 |. ........}y......}y..Microsoft |
SYMS-NEXT: 6060: 28522920 4F707469 6D697A69 6E672043 6F6D7069 6C657200 2A001011 00000000 |(R) Optimizing Compiler.*.......|
SYMS-NEXT: 6080: C4000000 00000000 0A000000 03000000 08000000 01100000 10000000 0100016D |...............................m|
SYMS-NEXT: 60A0: 61696E00 1E001210 00000000 00000000 00000000 00000000 00000000 00000082 |ain.............................|
SYMS-NEXT: 60C0: 12000000 02000600 06004C11 0E100000 |..........L.....|
SYMS-NEXT: )
SYMS-NEXT: Mod 0001 | `* Linker *`:
SYMS-NEXT: Symbols (
SYMS-NEXT: 7000: 04000000 12000111 00000000 2A204C69 6E6B6572 202A0000 2E003C11 07000000 |............* Linker *....<.....|
SYMS-NEXT: 7020: 03000000 00000000 00000C00 00007D79 00004D69 63726F73 6F667420 28522920 |..............}y..Microsoft (R) |
SYMS-NEXT: 7040: 4C494E4B 00000000 AA003D11 00637764 00643A5C 7372635C 6C6C766D 5C746573 |LINK......=..cwd.d:\src\llvm\tes|
SYMS-NEXT: 7060: 745C4465 62756749 6E666F5C 5044425C 496E7075 74730065 78650043 3A5C5072 |t\DebugInfo\PDB\Inputs.exe.C:\Pr|
SYMS-NEXT: 7080: 6F677261 6D204669 6C657320 28783836 295C4D69 63726F73 6F667420 56697375 |ogram Files (x86)\Microsoft Visu|
SYMS-NEXT: 70A0: 616C2053 74756469 6F203132 2E305C56 435C4249 4E5C6C69 6E6B2E65 78650070 |al Studio 12.0\VC\BIN\link.exe.p|
SYMS-NEXT: 70C0: 64620064 3A5C7372 635C6C6C 766D5C74 6573745C 44656275 67496E66 6F5C5044 |db.d:\src\llvm\test\DebugInfo\PD|
SYMS-NEXT: 70E0: 425C496E 70757473 5C656D70 74792E70 64620000 12002C11 00000500 05000000 |B\Inputs\empty.pdb....,.........|
SYMS-NEXT: 7100: 10000000 01000100 1A003611 01000C00 00100000 1A100000 20000060 2E746578 |..........6............. ..`.tex|
SYMS-NEXT: 7120: 74000000 1A003711 1A100000 20000060 00000000 01002E74 65787424 6D6E0000 |t.....7..... ..`.......text$mn..|
SYMS-NEXT: 7140: 1A003611 02000C00 00300000 B2020000 40000040 2E726461 74610000 1A003711 |..6......0......@..@.rdata....7.|
SYMS-NEXT: 7160: 43010000 40000040 00000000 02002E72 64617461 00000000 1A003711 00000000 |C...@..@.......rdata......7.....|
SYMS-NEXT: 7180: 40000040 43010000 02002E65 64617461 00000000 1E003711 6E010000 40000040 |@..@C......edata......7.n...@..@|
SYMS-NEXT: 71A0: 44010000 02002E72 64617461 24646562 75670000 1A003611 03000C00 00400000 |D......rdata$debug....6......@..|
SYMS-NEXT: 71C0: 04000000 400000C0 2E646174 61000000 16003711 04000000 800000C0 00000000 |....@....data.....7.............|
SYMS-NEXT: 71E0: 03002E62 73730000 1A003611 04000C00 00500000 08000000 40000042 2E72656C |...bss....6......P......@..B.rel|
SYMS-NEXT: 7200: 6F630000 |oc..|
SYMS-NEXT: )
FILTERED-SYMS: Module Symbols
FILTERED-SYMS-NEXT: ============================================================
FILTERED-SYMS-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
FILTERED-SYMS-NEXT: Symbols (
FILTERED-SYMS-NEXT: 6000: 04000000 36000111 00000000 643A5C73 72635C6C 6C766D5C 74657374 5C446562 |....6.......d:\src\llvm\test\Deb|
FILTERED-SYMS-NEXT: 6020: 7567496E 666F5C50 44425C49 6E707574 735C656D 7074792E 6F626A00 3A003C11 |ugInfo\PDB\Inputs\empty.obj.:.<.|
FILTERED-SYMS-NEXT: 6040: 01200000 07001200 00007D79 00001200 00007D79 00004D69 63726F73 6F667420 |. ........}y......}y..Microsoft |
FILTERED-SYMS-NEXT: 6060: 28522920 4F707469 6D697A69 6E672043 6F6D7069 6C657200 2A001011 00000000 |(R) Optimizing Compiler.*.......|
FILTERED-SYMS-NEXT: 6080: C4000000 00000000 0A000000 03000000 08000000 01100000 10000000 0100016D |...............................m|
FILTERED-SYMS-NEXT: 60A0: 61696E00 1E001210 00000000 00000000 00000000 00000000 00000000 00000082 |ain.............................|
FILTERED-SYMS-NEXT: 60C0: 12000000 02000600 06004C11 0E100000 |..........L.....|
FILTERED-SYMS-NEXT: )
FILTERED-SYMS-NOT: Mod 0001