#import "Debug_Info";
Reads the debug information in a compiled program: DWARF (Linux and macOS) and CodeView in PDB files (Windows).
- parse_dwarf_debug_info turns the DWARF sections of an executable into a Debug_Info of compilation units, functions, variables and line tables.
- get_line_mapping_for_address finds the source line for a code address in a Line_Info.
- parse_pdb and parse_msf open a PDB file and its stream container; get_stream_data reads one stream.
info: Line_Info;
sequence: Line_Info_Sequence;
array_add(*sequence.addresses, 0x1000);
array_add(*sequence.addresses, 0x1010);
array_add(*sequence.mappings, .{ file_id = 1, line = 42 });
array_add(*sequence.mappings, .{ is_end = true });
array_add(*info.sequences, sequence);
mapping, found := get_line_mapping_for_address(info, 0x1004);
assert(found && mapping.line == 42);Procedures#
DWARF frame#
CodeView lines#
CodeView symbol fields#
Debug int set#
DWARF line query#
Returns the source position for the code at address, and whether one was found. Returns false when no sequence covers the address, or the table is malformed.
Returns the source positions for the code from start up to, not including, end_exclusive, in address order.
info: Line_Info;
mappings, ok := get_line_mappings_for_address_range(info, 0x2000, 0x2000);
assert(ok && mappings.count == 0);↗MSF streams#
True if file_content starts with the MSF signature.
True if file_content starts with the MSF signature.
Reads the stream directory of an MSF file. file_content must stay alive as long as the result is used. Returns false, and logs why, for a file that is damaged or uses an unsupported layout. path is only used in that message.
Re-reads the file and checks that msf's stream directory and free-page map agree with it.
True if stream_index names a stream in msf.
Returns the size in bytes of stream stream_index, or -1 if there is no such stream.
Returns a copy of the contents of stream stream_index, and whether it could be read. The caller frees the bytes.
msf: Msf;
data, ok := get_stream_data(msf, 1);
assert(!ok);↗MSF page bits#
DWARF model query#
Returns the type in unit with the given id, or null if there is none.
CodeView string query#
DWARF public#
Parses DWARF 4 data into a Debug_Info. Pass the contents of the .debug_info, .debug_abbrev, .debug_line and .debug_str sections. Returns false, and logs why, for data that is malformed or not DWARF 4. Set verbose to log what it reads.
info, ok := parse_dwarf_debug_info(.[], .[], .[], .[]);
assert(ok && info.compilation_units.count == 0);↗Returns the full path of file_info: its directory in info joined to its path, or the path alone when it is absolute.
CodeView types#
PDB parser#
Reads the type records of the type stream stream_index (stream 2 is the usual TPI stream, 4 the IPI stream).
Opens a PDB file: its container, signature, name table and type records. Returns false, and logs why, if it cannot. file_content must stay alive as long as the result is used.
CodeView truncate#
CodeView inline#
CodeView symbol parser#
Types#
- words: [] u32
The line table of one compilation unit: its directories and files, and the address sequences that map code to lines.
- dirs: [..] string
- files: [..] File_Info
- sequences: [..] Line_Info_Sequence
A source file in a Line_Info: its directory (an index into dirs, 0 for none) and its path.
- dir_id: u64
- path: string
One run of the line program. addresses[i] starts the source position mappings[i]; the last mapping has is_end set and closes the run.
- addresses: [..] u64
- mappings: [..] Line_Mapping
The source position of a code address: file, line and column, plus what kind of position it is (statement start, end of prologue, and so on).
- file_id: Dwarf_File_Id
- line: u32
- column: u32
- is_end: bool
- flags: Flags
- text_offset: u32
- line_and_delta_and_flag: u32
- start_offset: u16
- range_bytes: u16
- start_offset: u32
- start_section: u16
- range_bytes: u16
- base_register: u16
- spilled_udt_member_and_offset_parent: u16
- base_pointer_offset: u32
- range: Codeview_Address_Range
- gaps: [] Codeview_Address_Gap
One DWARF call frame instruction, as found in a Frame_Description_Entry.
- arg1: Argument
- arg2: Argument
The DWARF call frame information shared by a group of functions.
- length: u64
- id: u32
- version: u8
- augmentation: string
- eh_data: u64
- code_alignment_factor: u64
- data_alignment_factor: s64
- return_address_register: u64
- augmentation_data: [] u8
- initial_instructions: [] Call_Frame_Address_Instruction
- offset: u64
The DWARF call frame instructions for the code range pc_begin to pc_begin + pc_range.
- length: u64
- cie_offset: u64
- pc_begin: u64
- pc_range: u64
- augmentation_data: [] u8
- instructions: [] Call_Frame_Address_Instruction
The operation of a Call_Frame_Address_Instruction: how to find the caller's registers at one point in a function.
- ADVANCE_LOC
- OFFSET
- RESTORE
- NOP
- SET_LOC
- ADVANCE_LOC1
- ADVANCE_LOC2
- ADVANCE_LOC4
- OFFSET_EXTENDED
- RESTORE_EXTENDED
- UNDEFINED
- SAME_VALUE
- REGISTER
- REMEMBER_STATE
- RESTORE_STATE
- DEF_CFA
- DEF_CFA_REGISTER
- DEF_CFA_OFFSET
- DEF_CFA_EXPRESSION
- OFFSET_EXTENDED_SF
- DEF_CFA_SF
- DEF_CFA_OFFSET_SF
- VAL_OFFSET
- VAL_OFFSET_SF
- VAL_EXPRESSION
- LO_USER
- HI_USER
- iwMac: u32
- iwRover: u32
- cbPg: s32
- fBigMsf: bool
- rgw: [..] s64
- wFill: s64
A parsed MSF container, the file format PDB files are stored in: a set of numbered streams over fixed-size pages.
- header: *Msf_Header_Big
- parms: Msf_Parms
- stream_table: Stream_Table
- fpm: Free_Page_Map
- fpm_freed: Free_Page_Map
- siPnList: Stream_Info
- content: string
How a DWARF base type encodes its values: signed or unsigned integer, float, boolean, character and so on.
- ADDRESS
- BOOLEAN
- COMPLEX_FLOAT
- DECIMAL_FLOAT
- EDITED
- FLOAT
- HI_USER
- IMAGINARY_FLOAT
- LO_USER
- NUMERIC_STRING
- PACKED_DECIMAL
- SIGNED
- SIGNED_CHAR
- SIGNED_FIXED
- UNSIGNED
- UNSIGNED_CHAR
- UNSIGNED_FIXED
- UTF
The source language a DWARF compilation unit was written in.
- ADA2005
- ADA2012
- ADA83
- ADA95
- ALGOL68
- ASSEMBLY
- BLISS
- C
- C11
- C17
- C23
- C89
- C99
- COBOL74
- COBOL85
- CPP_FOR_OPEN_CL
- CRYSTAL
- C_PLUS_PLUS
- C_PLUS_PLUS_03
- C_PLUS_PLUS_11
- C_PLUS_PLUS_14
- C_PLUS_PLUS_17
- C_PLUS_PLUS_20
- C_PLUS_PLUS_23
- C_SHARP
- D
- DYLAN
- ELIXIR
- ERLANG
- FORTRAN03
- FORTRAN08
- FORTRAN18
- FORTRAN23
- FORTRAN77
- FORTRAN90
- FORTRAN95
- GLEAM
- GLSL
- GLSL_ES
- GO
- HASKELL
- HIP
- HLSL
- HYLO
- JAVA
- JULIA
- KOTLIN
- METAL
- MODULA2
- MODULA3
- MOJO
- MOVE
- NIM
- OBJ_C
- OBJ_C_PLUS_PLUS
- ODIN
- OPEN_CL
- OPEN_CL_CPP
- O_CAML
- P4
- PASCAL83
- PLI
- PYTHON
- RENDER_SCRIPT
- RUBY
- RUST
- SWIFT
- SYCL
- UPC
- V
- ZIG
What kind of entry a DWARF record is: a function, a variable, a type, a scope and so on.
- ACCESS_DECLARATION
- APPLE_PROPERTY
- ARRAY_TYPE
- ATOMIC_TYPE
- BASE_TYPE
- BORLAND_DELPHI_DYNAMIC_ARRAY
- BORLAND_DELPHI_SET
- BORLAND_DELPHI_STRING
- BORLAND_DELPHI_VARIANT
- BORLAND_PROPERTY
- CALL_SITE
- CALL_SITE_PARAMETER
- CATCH_BLOCK
- CLASS_TEMPLATE
- CLASS_TYPE
- COARRAY_TYPE
- COMMON_BLOCK
- COMMON_INCLUSION
- COMPILE_UNIT
- CONDITION
- CONSTANT
- CONST_TYPE
- DWARF_PROCEDURE
- DYNAMIC_TYPE
- ENTRY_POINT
- ENUMERATION_TYPE
- ENUMERATOR
- FILE_TYPE
- FORMAL_PARAMETER
- FORMAT_LABEL
- FRIEND
- FUNCTION_TEMPLATE
- GENERIC_SUBRANGE
- GNU_CALL_SITE
- GNU_CALL_SITE_PARAMETER
- GNU_FORMAL_PARAMETER_PACK
- GNU_TEMPLATE_PARAMETER_PACK
- GNU_TEMPLATE_TEMPLATE_PARAM
- IMMUTABLE_TYPE
- IMPORTED_DECLARATION
- IMPORTED_MODULE
- IMPORTED_UNIT
- INHERITANCE
- INLINED_SUBROUTINE
- INTERFACE_TYPE
- LABEL
- LEXICAL_BLOCK
- MEMBER
- MIPS_LOOP
- MODULE
- NAMELIST
- NAMELIST_ITEM
- NAMESPACE
- NULL
- PACKED_TYPE
- PARTIAL_UNIT
- POINTER_TYPE
- PTR_TO_MEMBER_TYPE
- REFERENCE_TYPE
- RESTRICT_TYPE
- RVALUE_REFERENCE_TYPE
- SET_TYPE
- SHARED_TYPE
- SKELETON_UNIT
- STRING_TYPE
- STRUCTURE_TYPE
- SUBPROGRAM
- SUBRANGE_TYPE
- SUBROUTINE_TYPE
- TEMPLATE_ALIAS
- TEMPLATE_TYPE_PARAMETER
- TEMPLATE_VALUE_PARAMETER
- THROWN_TYPE
- TRY_BLOCK
- TYPEDEF
- TYPE_UNIT
- UNION_TYPE
- UNSPECIFIED_PARAMETERS
- UNSPECIFIED_TYPE
- VARIABLE
- VARIANT
- VARIANT_PART
- VOLATILE_TYPE
- WITH_STMT
A named type from the DWARF data: its tag, name and size.
- offset: s64
- tag: Dwarf_Tag
- name: string
- size: u64
- base_type: Dwarf_Base_Type
A variable or parameter: its name, where it was declared and its type.
- tag: Dwarf_Tag
- name: string
- decl_file_id: Dwarf_File_Id
- decl_line: u32
- type_id: u32
- kind: enum { PARAMETER; VARIABLE; }
A scope inside a function: its code range, the declarations in it and the scopes nested in it.
- low_pc: u64
- high_pc: u64
- declarations: [..] Declaration
- children: [..] *Lexical_Block
A function: its name, code range (low_pc to high_pc), declaration site and scope tree.
- name: string
- linkage_name: string
- external: bool
- decl_file_id: Dwarf_File_Id
- decl_line: u32
- type_id: u32
- is_main: bool
- calling_convention: u8
- low_pc: u64
- high_pc: u64
- all_blocks: BA.Bucket_Array(Lexical_Block, 8)
- root_block: *Lexical_Block
One source file as compiled: its producer, language, functions, global variables, types and line table.
- producer: string
- language: Dwarf_Language
- name: string
- statement_list: u64
- low_pc: u64
- high_pc: u64
- types: [..] Debug_Type
- line_info: Line_Info
- subprograms: BA.Bucket_Array(Subprogram, 32)
- globals: [..] Declaration
Everything read from a program's DWARF sections, one Compilation_Unit per compiled source file.
- compilation_units: [..] Compilation_Unit
The fixed header at the start of a DWARF line program.
- size: u32
- version: u16
- header_length: u32
- minimum_instruction_length: u8
- maximum_operations_per_instruction: u8
- default_is_stmt: bool
- line_base: s8
- line_range: u8
- opcode_base: u8
- ALIAS
- ALIAS_ST
- ARGLIST
- ARGLIST_16T
- ARRAY
- ARRAY_16T
- ARRAY_ST
- BARRAY
- BARRAY_16T
- BCLASS
- BCLASS_16T
- BINTERFACE
- BITFIELD
- BITFIELD_16T
- BUILDINFO
- BUILTIN
- CHAR
- CLASS
- CLASS_16T
- CLASS_ST
- COBOL0
- COBOL0_16T
- COBOL1
- COMPLEX128
- COMPLEX32
- COMPLEX64
- COMPLEX80
- DATE
- DECIMAL
- DEFARG
- DEFARG_16T
- DEFARG_ST
- DERIVED
- DERIVED_16T
- DIMARRAY
- DIMARRAY_16T
- DIMARRAY_ST
- DIMCONLU
- DIMCONLU_16T
- DIMCONU
- DIMCONU_16T
- DIMVARLU
- DIMVARLU_16T
- DIMVARU
- DIMVARU_16T
- ENDOFLEAFRECORD
- ENDPRECOMP
- ENUM
- ENUMERATE
- ENUMERATE_ST
- ENUM_16T
- ENUM_ST
- FIELDLIST
- FIELDLIST_16T
- FRIENDCLS
- FRIENDCLS_16T
- FRIENDFCN
- FRIENDFCN_16T
- FRIENDFCN_ST
- FUNC_ID
- HLSL
- ID_LAST
- ID_MAX
- INDEX
- INDEX_16T
- INTERFACE
- IVBCLASS
- IVBCLASS_16T
- LABEL
- LIST
- LONG
- MANAGED
- MANAGED_ST
- MATRIX
- MEMBER
- MEMBERMODIFY
- MEMBERMODIFY_ST
- MEMBER_16T
- MEMBER_ST
- METHOD
- METHODLIST
- METHODLIST_16T
- METHOD_16T
- METHOD_ST
- MFUNCTION
- MFUNCTION_16T
- MFUNC_ID
- MODIFIER
- MODIFIER_16T
- MODIFIER_EX
- NESTTYPE
- NESTTYPEEX
- NESTTYPEEX_ST
- NESTTYPE_16T
- NESTTYPE_ST
- NOTTRAN
- NULL
- NUMERIC
- OCTWORD
- OEM
- OEM2
- OEM_16T
- ONEMETHOD
- ONEMETHOD_16T
- ONEMETHOD_ST
- PAD0
- PAD1
- PAD10
- PAD11
- PAD12
- PAD13
- PAD14
- PAD15
- PAD2
- PAD3
- PAD4
- PAD5
- PAD6
- PAD7
- PAD8
- PAD9
- POINTER
- POINTER_16T
- PRECOMP
- PRECOMP_16T
- PRECOMP_ST
- PROCEDURE
- PROCEDURE_16T
- QUADWORD
- REAL128
- REAL16
- REAL32
- REAL48
- REAL64
- REAL80
- REFSYM
- SHORT
- SKIP
- SKIP_16T
- STMEMBER
- STMEMBER_16T
- STMEMBER_ST
- STRIDED_ARRAY
- STRING_ID
- STRUCTURE
- STRUCTURE_16T
- STRUCTURE_ST
- ST_MAX
- SUBSTR_LIST
- TI16_MAX
- TYPESERVER
- TYPESERVER2
- TYPESERVER_ST
- TYPE_LAST
- TYPE_MAX
- UDT_MOD_SRC_LINE
- UDT_SRC_LINE
- ULONG
- UNION
- UNION_16T
- UNION_ST
- UOCTWORD
- UQUADWORD
- USHORT
- UTF8STRING
- VARSTRING
- VBCLASS
- VBCLASS_16T
- VECTOR
- VFTABLE
- VFTPATH
- VFTPATH_16T
- VFUNCOFF
- VFUNCOFF_16T
- VFUNCTAB
- VFUNCTAB_16T
- VTSHAPE
- ALIGN
- ANNOTATION
- ANNOTATIONREF
- ARMSWITCHTABLE
- ATTR_FRAMEREL
- ATTR_MANYREG
- ATTR_REGISTER
- ATTR_REGREL
- BLOCK16
- BLOCK32
- BLOCK32_ST
- BPREL16
- BPREL32
- BPREL32_16t
- BPREL32_ST
- BUILDINFO
- CALLEES
- CALLERS
- CALLSITEINFO
- CEXMODEL16
- CEXMODEL32
- COBOLUDT
- COBOLUDT_16t
- COBOLUDT_ST
- COFFGROUP
- COMPILE
- COMPILE2
- COMPILE2_ST
- COMPILE3
- CONSTANT
- CONSTANT_16t
- CONSTANT_ST
- CVRESERVE
- DATAREF
- DATAREF_ST
- DEFRANGE
- DEFRANGE2_2005
- DEFRANGE_2005
- DEFRANGE_DPC_PTR_TAG
- DEFRANGE_FRAMEPOINTER_REL
- DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
- DEFRANGE_HLSL
- DEFRANGE_REGISTER
- DEFRANGE_REGISTER_REL
- DEFRANGE_SUBFIELD
- DEFRANGE_SUBFIELD_REGISTER
- DISCARDED
- DPC_SYM_TAG_MAP
- END
- ENDARG
- ENTRYTHIS
- ENVBLOCK
- EXPORT
- FILESTATIC
- FRAMECOOKIE
- FRAMEPROC
- GDATA16
- GDATA32
- GDATA32_16t
- GDATA32_ST
- GDATA_HLSL
- GDATA_HLSL32
- GDATA_HLSL32_EX
- GMANDATA
- GMANDATA_ST
- GMANPROC
- GMANPROC_ST
- GPROC16
- GPROC32
- GPROC32_16t
- GPROC32_ID
- GPROC32_ST
- GPROCIA64
- GPROCIA64_ID
- GPROCIA64_ST
- GPROCMIPS
- GPROCMIPS_16t
- GPROCMIPS_ID
- GPROCMIPS_ST
- GTHREAD32
- GTHREAD32_16t
- GTHREAD32_ST
- HEAPALLOCSITE
- INLINEES
- INLINESITE
- INLINESITE2
- INLINESITE_END
- LABEL16
- LABEL32
- LABEL32_ST
- LDATA16
- LDATA32
- LDATA32_16t
- LDATA32_ST
- LDATA_HLSL
- LDATA_HLSL32
- LDATA_HLSL32_EX
- LMANDATA
- LMANDATA_ST
- LMANPROC
- LMANPROC_ST
- LOCAL
- LOCALSLOT
- LOCALSLOT_ST
- LOCAL_2005
- LOCAL_DPC_GROUPSHARED
- LPROC16
- LPROC32
- LPROC32_16t
- LPROC32_DPC
- LPROC32_DPC_ID
- LPROC32_ID
- LPROC32_ST
- LPROCIA64
- LPROCIA64_ID
- LPROCIA64_ST
- LPROCMIPS
- LPROCMIPS_16t
- LPROCMIPS_ID
- LPROCMIPS_ST
- LPROCREF
- LPROCREF_ST
- LTHREAD32
- LTHREAD32_16t
- LTHREAD32_ST
- MANCONSTANT
- MANFRAMEREL
- MANFRAMEREL_ST
- MANMANYREG
- MANMANYREG2
- MANMANYREG2_ST
- MANMANYREG_ST
- MANREGISTER
- MANREGISTER_ST
- MANREGREL
- MANREGREL_ST
- MANSLOT
- MANSLOT_ST
- MANTYPREF
- MANYREG
- MANYREG2
- MANYREG2_ST
- MANYREG_16t
- MANYREG_ST
- MOD_TYPEREF
- OBJNAME
- OBJNAME_ST
- OEM
- PARAMSLOT
- PARAMSLOT_ST
- PDBMAP
- POGODATA
- PROCREF
- PROCREF_ST
- PROC_ID_END
- PUB16
- PUB32
- PUB32_16t
- PUB32_ST
- RECTYPE_LAST
- RECTYPE_MAX
- RECTYPE_PAD
- REF_MINIPDB
- REGISTER
- REGISTER_16t
- REGISTER_ST
- REGREL16
- REGREL32
- REGREL32_16t
- REGREL32_ST
- RESERVED1
- RESERVED2
- RESERVED3
- RESERVED4
- RETURN
- SECTION
- SEPCODE
- SKIP
- SLINK32
- SLOT
- SSEARCH
- ST_MAX
- THUNK16
- THUNK32
- THUNK32_ST
- TI16_MAX
- TOKENREF
- TRAMPOLINE
- UDT
- UDT_16t
- UDT_ST
- UNAMESPACE
- UNAMESPACE_ST
- VFTABLE16
- VFTABLE32
- VFTABLE32_16t
- WITH16
- WITH32
- WITH32_ST
- kind: Codeview_Leaf_Type
- symbol_type: Codeview_Symbol_Type
- filename_id: Codeview_String_Table_Id
- checksum_type: Checksum_Type
- checksum: [] u8
- file_id: Codeview_File_Checksum_Id
- lines: [] Codeview_Line_Info
- columns: [] Codeview_Column_Type
- text_offset: u32
- segment_index: u16
- flags: Flags
- length_in_bytes: u32
- file_blocks: [..] Codeview_Lines_File_Block
- inlinee: Type_Id
- file_id: Codeview_File_Checksum_Id
- source_line: u32
- extra_files: [] u32
- types: [] *Codeview_Type
- ids: [] *Codeview_Type
- symbols: [..] *Codeview_Symbol
- string_table: [] u8
- file_checksums: [..] Codeview_File_Checksum
- line_info: [..] Codeview_Line_Info_Sequence
- inlinee_line_info: [..] Codeview_Inlinee_Line_Info
Canonical CodeView type records, including common using base storage.
- base: Codeview_Type
- id: Type_Id
- base: Codeview_Type
- num_fields: u16
- properties: Struct_Properties
- field_list: Type_Id
- derived: Type_Id
- vshape: u32
- size: u64
- name: string
- unique_name: string
- base: Codeview_Type
- num_fields: u16
- properties: Struct_Properties
- type: Type_Id
- field_list: Type_Id
- name: string
- unique_name: string
- base: Codeview_Type
- element_type: Type_Id
- index_type: Type_Id
- size: u64
- name: string
- base: Codeview_Type
- type: Type_Id
- flags: u32
- base: Codeview_Type
- return_type: Type_Id
- calling_convention: u8
- attributes: u8
- num_arguments: u16
- arguments: Type_Id
- base: Codeview_Type
- return_type: Type_Id
- class_type: Type_Id
- this_type: Type_Id
- calling_convention: u8
- attributes: u8
- num_arguments: u16
- arguments: Type_Id
- this_adjuster: s32
- base: Codeview_Type
- count: u16
- list_type: Type_Id
- name: string
- base: Codeview_Type
- elements: [..] Codeview_Method
- base: Codeview_Type
- attributes: u16
- procedure_type: Type_Id
- base_offset: u32
- name: string
- base: Codeview_Type
- previous: Type_Id
- members: [..] Codeview_Member
- overloaded_methods: [..] Codeview_Overloaded_Method
- methods: [..] Codeview_Method
- enumerates: [..] Codeview_Enumerate
- nested: [..] Codeview_Nested_Type
- base: Codeview_Type
- arguments: [] Type_Id
- base: Codeview_Type
- id: u32
- name: string
- base: Codeview_Type
- type: Type_Id
- src: Type_Id
- line: u32
- base: Codeview_Type
- scope: Type_Id
- type: Type_Id
- name: string
- undocumented: u64
- base: Codeview_Type
- type: Type_Id
- name: string
- base: Codeview_Type
- sig70: Guid
- age: u32
- name: string
- base: Codeview_Type
- type: Type_Id
- modifier: Modifier_Type
- base: Codeview_Type
- access: u16
- type: Type_Id
- offset: u64
- name: string
- base: Codeview_Type
- access: u16
- value: u64
- name: string
- base: Codeview_Type
- type: Type_Id
- name: string
- PACKED
- CTOR
- OVLOPS
- IS_NESTED
- NESTED_TYPES
- OP_ASSIGN
- OP_CAST
- FWDREF
- SCOPED
- UNIQUE_NAME
- SEALED
- HFA_OTHER
- HFA_FLOAT
- HFA_DOUBLE
- INTRINSIC
- MOCOM_UDT_INTERFACE
- MOCOM_UDT_REF
- MOCOM_UDT_VALUE
- CXX_RETURN_UDT
- CTOR
- CTOR_V_BASE
- NONE
- PUBLIC
- NOTYPE
- ABS
- SEGMENT
- VOID
- HRESULT
- CHAR
- SHORT
- LONG
- QUAD
- UCHAR
- USHORT
- ULONG
- UQUAD
- FLOAT32
- FLOAT64
- FLOAT16
- S8
- U8
- RCHAR
- WCHAR
- CHAR16
- CHAR32
- S16
- U16
- S32
- U32
- S64
- U64
- BOOL8
- BOOL16
- BOOL32
- BOOL64
- NEAR
- FAR
- HUGE
- BASE_SEG
- BASE_VAL
- BASE_SEGVAL
- BASE_ADDR
- BASE_SEGADDR
- BASE_TYPE
- BASE_SELF
- NEAR32
- FAR32
- _64
- UNUSEDPTR
- data1: u32
- data2: u16
- data3: u16
- data4: [8] u8
Reviewed public PDB aggregates; contextual map storage is independently designed.
- header: Pdb_Header
- signature: GUID
- name_table: Name_Table
- contains_id_stream: bool
- no_type_merge: bool
- minimal_debug_info: bool
- tpi: [] *Codeview_Type
- ipi: [] *Codeview_Type
- msf: Msf
The fixed header of a PDB's information stream.
- version: Pdb_Version
- signature: u32
- age: u32
The fixed header of a PDB type stream (TPI or IPI).
- version: Tpi_Stream_Version
- header_size: u32
- type_index_begin: u32
- type_index_end: u32
- type_record_bytes: u32
- hash_stream_index: u16
- hash_aux_stream_index: u16
- hash_key_size: u32
- num_hash_buckets: u32
- hash_value_buffer_offset: s32
- hash_value_buffer_length: u32
- index_offset_buffer_offset: s32
- index_offset_buffer_length: u32
- hash_adj_buffer_offset: s32
- hash_adj_buffer_length: u32
- VC2
- VC4
- VC41
- VC50
- VC98
- VC70
- VC70Dep
- VC80
- VC110
- VC140
- V40
- V41
- V50
- V70
- V80
Reviewed Jai aggregates; serialized payloads are decoded separately.
- base: Codeview_Symbol
- target_cpu: u8
- language: u8
- flags: u16
- compiler_version: string
- base: Codeview_Symbol
- language: u8
- flags1: u8
- flags2: u8
- reserved: u8
- target_cpu: u16
- fe_version: Version
- be_version: Version
- compiler_version: string
- base: Codeview_Symbol
- parent: u32
- end: u32
- next: u32
- length: u32
- debug_start_offset: u32
- debug_end_offset: u32
- type: Type_Id
- offset: u32
- segment_index: u16
- flags: Flags
- name: string
- inlinesites: [..] *Codeview_Symbol_Inline_Site
- base: Codeview_Symbol
- parent: u32
- end: u32
- inlinee: Item_Id
- binary_annotations: [..] Codeview_Binary_Annotation
- children: [..] *Codeview_Symbol_Inline_Site
- operand1: Operand
- operand2: Operand
- data: [] u8
- offset: s64
- success: bool
- verbose: bool
- types: [..] *Codeview_Type
- info: *Codeview_Debug_Info
- current_procedure: *Codeview_Symbol_Procedure
- open_inlinesites: [..] *Codeview_Symbol_Inline_Site
- INVALID
- CODE_OFFSET
- CHANGE_CODE_OFFSET_BASE
- CHANGE_CODE_OFFSET
- CHANGE_CODE_LENGTH
- CHANGE_FILE
- CHANGE_LINE_OFFSET
- CHANGE_LINE_END_DELTA
- CHANGE_RANGE_KIND
- CHANGE_COLUMN_START
- CHANGE_COLUMN_END_DELTA
- CHANGE_CODE_OFFSET_AND_LINE_OFFSET
- CHANGE_CODE_LENGTH_AND_CODE_OFFSET
- CHANGE_COLUMN_END
- SYMBOLS
- LINES
- STRING_TABLE
- FILE_CHECKSUMS
- FRAME_DATA
- INLINEELINES
- CROSS_SCOPE_IMPORTS
- CROSS_SCOPE_EXPORTS
- IL_LINES
- FUNC_MDTOKEN_MAP
- TYPE_MDTOKEN_MAP
- MERGED_ASSEMBLYINPUT
- COFF_SYMBOL_RVA
- IGNORE
- NORMAL
- EX