--******************************************************************************************************************** -- Created: 30-Mar-2010 17:33:06 by OpenVMS SDL EV3-3 -- Source: 14-JUL-2009 20:09:00 $1$DGA7274:[LIB_ADA.LIS]DMPDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; with LIBICB;use LIBICB; with INTSTKDEF;use INTSTKDEF; with EMBCRDEF;use EMBCRDEF; with EMBHDDEF;use EMBHDDEF; with EMBHDDEF;use EMBHDDEF; package DMPDEF is -- module $DMPDEF -- -- LAYOUT OF THE HEADER BLOCK OF THE SYSTEM DUMP FILE -- (WHICH IS THE FIRST TWO DISK BLOCKS OF SYS$SYSTEM:SYSDUMP.DMP) -- DMP_M_OLDDUMP : constant := 16#00000001#; DMP_M_EMPTY : constant := 16#00000002#; DMP_M_HDRBLK : constant := 16#00000004#; DMP_M_ERRLOG : constant := 16#00000008#; DMP_M_MEMORY : constant := 16#00000010#; DMP_M_STUB : constant := 16#00000020#; DMP_M_WRITECOMP : constant := 16#00000040#; DMP_M_ERRLOGCOMP : constant := 16#00000080#; DMP_M_TRAP_VALID : constant := 16#00000100#; DMP_M_ORIGINAL : constant := 16#00000200#; DMP_M_COLLECT : constant := 16#00000400#; DMP_M_PARTIAL : constant := 16#00000800#; DMP_M_BITS_12_14 : constant := 16#00007000#; DMP_M_I64DUMP : constant := 16#00008000#; DMP_M_COMPRESSED : constant := 16#00010000#; DMP_M_NOTSAVED : constant := 16#00020000#; DMP_M_VAXDUMP : constant := 16#00040000#; DMP_M_ALPHADUMP : constant := 16#00080000#; DMP_M_BAD4GBDUMP : constant := 16#00100000#; DMP_M_MODIFIED : constant := 16#00200000#; DMP_M_SHMEMDUMP : constant := 16#00400000#; DMP_M_PROCDUMP : constant := 16#00800000#; DMP_M_BITS_24_28 : constant := 16#1F000000#; DMP_M_EXCLDATA : constant := 16#20000000#; DMP_M_FEN : constant := 16#C0000000#; DMP_M_FEN_MFL : constant := 1; DMP_M_FEN_MFH : constant := 2; DMP_M_DUMPSTYLE : constant := 16#00000001#; DMP_M_FULL_MESSAGES : constant := 16#00000002#; DMP_M_DO_DOSD : constant := 16#00000004#; DMP_M_COMPRESS : constant := 16#00000008#; DMP_M_SKIP_SHARED : constant := 16#00000010#; DMP_M_KEY_ONLY : constant := 16#00000020#; DMP_M_BITS_6_9 : constant := 16#000003C0#; DMP_M_SUPER_VERBOSE : constant := 16#00000400#; DMP_M_SKIP_SYSDISK : constant := 16#00000800#; DMP_M_DO_GLXFATAL : constant := 16#00001000#; DMP_M_DISABLE_GLXRMTPFN : constant := 16#00002000#; DMP_M_ALLOW_HBVS_DUMPDEV : constant := 16#00004000#; DMP_M_DATACHECK : constant := 16#00008000#; DMP_M_SKIP_INIT : constant := 16#00010000#; DMP_M_BITS_17_23 : constant := 16#00FE0000#; DMP_M_MEM_STACK_PAGES : constant := 16#0F000000#; DMP_M_REG_STACK_PAGES : constant := 16#F0000000#; DMP_K_DEFAULT_MEM_STACK_PAGES : constant := 1; -- Default stack size for Alpha DMP_K_DUMPVER : constant := 2561; -- DUMP FILE VERSION NUMBER DMP_K_PROCVER : constant := 769; -- PROCESS DUMP FILE VERSION NUMBER DMP_K_SHMEMVER : constant := 769; -- SHARED MEMORY DUMP FILE VERSION NUMBER DMP_K_LENGTH : constant := 1024; -- Length of dump header type DMP_FLAGS_TYPE is -- DUMP FILE FLAGS **** KEEP AT OFFSET 4. **** record OLDDUMP : BOOLEAN; -- SET IF DUMP ALREADY ANALYZED EMPTY : BOOLEAN; -- SET IF DUMP HAS NO DATA BLOCKS HDRBLK : BOOLEAN; -- SET IF ERROR WRITING DUMP HEADER ERRLOG : BOOLEAN; -- SET IF ERROR WRITING ERROR LOGS TO DUMP FILE MEMORY : BOOLEAN; -- SET IF ERROR WRITING MEMORY CONTENTS TO DUMP FILE STUB : BOOLEAN; -- SET IF SYS$ERRLOG.DMP BEING WRITTEN WRITECOMP : BOOLEAN; -- SET IF DUMP WRITE WAS COMPLETED ERRLOGCOMP : BOOLEAN; -- SET IF HEADER/ERROR LOGS WRITE WAS COMPLETED TRAP_VALID : BOOLEAN; -- Set if a trap happened ORIGINAL : BOOLEAN; -- Set by BUGCHECK, cleared by SDA COPY COLLECT : BOOLEAN; -- Set if a COLLECT/SAVE file PARTIAL : BOOLEAN; -- Set if a partial dump not including error logs, PT space, etc, BITS_12_14 : UNSIGNED_3; -- Spare to keep bits in old FLAGS2 in matching positions I64DUMP : BOOLEAN; -- Set for IA64 dumps **** KEEP AT BIT 15. **** COMPRESSED : BOOLEAN; -- SET IF DUMP DATA IS COMPRESSED (in this copy) NOTSAVED : BOOLEAN; -- Set by SYSINIT if SAVEDUMP not set and dump in PAGEFILE.SYS VAXDUMP : BOOLEAN; -- Never set **** KEEP AT BIT 18. **** ALPHADUMP : BOOLEAN; -- Set for Alpha dumps **** KEEP AT BIT 19. **** BAD4GBDUMP : BOOLEAN; -- Set if memory above 4GB written directly (no buffer pages available) MODIFIED : BOOLEAN; -- Dump has been modified with /OVERRIDE SHMEMDUMP : BOOLEAN; -- Galaxy Shared Memory Dump **** KEEP AT BIT 22. **** PROCDUMP : BOOLEAN; -- Process dump **** KEEP AT BIT 23. **** BITS_24_28 : UNSIGNED_5; -- Spare -- Remaining bits are specific to process dumps EXCLDATA : BOOLEAN; -- Set if data wasn't saved because of insufficient privilege FEN : UNSIGNED_2; -- Set if FEN was set in the process -- (Only 1 bit used on Alpha, both bits on IPF) end record; for DMP_FLAGS_TYPE use record OLDDUMP at 0 range 0 .. 0; EMPTY at 0 range 1 .. 1; HDRBLK at 0 range 2 .. 2; ERRLOG at 0 range 3 .. 3; MEMORY at 0 range 4 .. 4; STUB at 0 range 5 .. 5; WRITECOMP at 0 range 6 .. 6; ERRLOGCOMP at 0 range 7 .. 7; TRAP_VALID at 1 range 0 .. 0; ORIGINAL at 1 range 1 .. 1; COLLECT at 1 range 2 .. 2; PARTIAL at 1 range 3 .. 3; BITS_12_14 at 1 range 4 .. 6; I64DUMP at 1 range 7 .. 7; COMPRESSED at 2 range 0 .. 0; NOTSAVED at 2 range 1 .. 1; VAXDUMP at 2 range 2 .. 2; ALPHADUMP at 2 range 3 .. 3; BAD4GBDUMP at 2 range 4 .. 4; MODIFIED at 2 range 5 .. 5; SHMEMDUMP at 2 range 6 .. 6; PROCDUMP at 2 range 7 .. 7; BITS_24_28 at 3 range 0 .. 4; EXCLDATA at 3 range 5 .. 5; FEN at 3 range 6 .. 7; end record; for DMP_FLAGS_TYPE'SIZE use 32; DMP_FLAGS_TYPE_INIT : constant DMP_FLAGS_TYPE := (OLDDUMP => FALSE, EMPTY => FALSE, HDRBLK => FALSE, ERRLOG => FALSE, MEMORY => FALSE, STUB => FALSE, WRITECOMP => FALSE, ERRLOGCOMP => FALSE, TRAP_VALID => FALSE, ORIGINAL => FALSE, COLLECT => FALSE, PARTIAL => FALSE, BITS_12_14 => 0, I64DUMP => FALSE, COMPRESSED => FALSE, NOTSAVED => FALSE, VAXDUMP => FALSE, ALPHADUMP => FALSE, BAD4GBDUMP => FALSE, MODIFIED => FALSE, SHMEMDUMP => FALSE, PROCDUMP => FALSE, BITS_24_28 => 0, EXCLDATA => FALSE, FEN => 0); type DMP_DUMPSTYLE_TYPE is -- Setting of SYSGEN parameter DUMPSTYLE when dump written record DUMPSTYLE : BOOLEAN; -- Full vs. Selective FULL_MESSAGES : BOOLEAN; -- Minimal console output vs. Verbose DO_DOSD : BOOLEAN; -- System disk vs. DOSD disk COMPRESS : BOOLEAN; -- Raw vs. Compressed (when writing the original dump) SKIP_SHARED : BOOLEAN; -- Dump shared memory vs. Don't dump it KEY_ONLY : BOOLEAN; -- Only dump system space, key processes, key global pages BITS_6_9 : UNSIGNED_4; -- Spare bits for future documented features SUPER_VERBOSE : BOOLEAN; -- Diagnostics SKIP_SYSDISK : BOOLEAN; -- Don't touch system disk DO_GLXFATAL : BOOLEAN; -- Force Galaxy-wide crash DISABLE_GLXRMTPFN : BOOLEAN; -- Disable Galaxy remote PFN checks ALLOW_HBVS_DUMPDEV : BOOLEAN; -- Allow DOSD to be shadow set member DATACHECK : BOOLEAN; -- Do a datacheck read after each write I/O SKIP_INIT : BOOLEAN; -- Don't fill in the SCB/IDT (i.e. primitive exception display) -- **** Note: SKIP_INIT is not dynamic in SYSGEN!!!! **** BITS_17_23 : UNSIGNED_7; -- Spare bits for future undocumented features MEM_STACK_PAGES : UNSIGNED_4; -- Additional pages for BUGCHECK's stack REG_STACK_PAGES : UNSIGNED_4; -- Additional pages for BUGCHECK's stack (only useful on IA64) end record; for DMP_DUMPSTYLE_TYPE use record DUMPSTYLE at 0 range 0 .. 0; FULL_MESSAGES at 0 range 1 .. 1; DO_DOSD at 0 range 2 .. 2; COMPRESS at 0 range 3 .. 3; SKIP_SHARED at 0 range 4 .. 4; KEY_ONLY at 0 range 5 .. 5; BITS_6_9 at 0 range 6 .. 9; SUPER_VERBOSE at 1 range 2 .. 2; SKIP_SYSDISK at 1 range 3 .. 3; DO_GLXFATAL at 1 range 4 .. 4; DISABLE_GLXRMTPFN at 1 range 5 .. 5; ALLOW_HBVS_DUMPDEV at 1 range 6 .. 6; DATACHECK at 1 range 7 .. 7; SKIP_INIT at 2 range 0 .. 0; BITS_17_23 at 2 range 1 .. 7; MEM_STACK_PAGES at 3 range 0 .. 3; REG_STACK_PAGES at 3 range 4 .. 7; end record; for DMP_DUMPSTYLE_TYPE'SIZE use 32; DMP_DUMPSTYLE_TYPE_INIT : constant DMP_DUMPSTYLE_TYPE := (DUMPSTYLE => FALSE, FULL_MESSAGES => FALSE, DO_DOSD => FALSE, COMPRESS => FALSE, SKIP_SHARED => FALSE, KEY_ONLY => FALSE, BITS_6_9 => 0, SUPER_VERBOSE => FALSE, SKIP_SYSDISK => FALSE, DO_GLXFATAL => FALSE, DISABLE_GLXRMTPFN => FALSE, ALLOW_HBVS_DUMPDEV => FALSE, DATACHECK => FALSE, SKIP_INIT => FALSE, BITS_17_23 => 0, MEM_STACK_PAGES => 0, REG_STACK_PAGES => 0); type DMP_TYPE is record ERRSEQ : UNSIGNED_LONGWORD; -- LAST ERROR LOG SEQ. NUMBER FLAGS : DMP_FLAGS_TYPE; -- DUMP FILE FLAGS **** KEEP AT OFFSET 4. **** DUMPSTYLE : DMP_DUMPSTYLE_TYPE; -- Setting of SYSGEN parameter DUMPSTYLE when dump written MEMMAP_ENTRIES : UNSIGNED_WORD; -- Entries in memory map (full dump) ERLBUFPAGES : UNSIGNED_WORD; -- # pagelets / S0 error log buffer PTBR : UNSIGNED_QUADWORD; -- PAGE TABLE BASE REGISTER (SYSPTBR if VIRBND or IA64) KSP : UNSIGNED_QUADWORD; -- KERNEL STACK POINTER ESP : UNSIGNED_QUADWORD; -- EXECUTIVE STACK POINTER SSP : UNSIGNED_QUADWORD; -- SUPERVISOR STACK POINTER USP : UNSIGNED_QUADWORD; -- USER STACK POINTER SYSIDENT : UNSIGNED_QUADWORD; -- TEXT ident for SYS.EXE **** KEEP AT OFFSET 56. **** ERLBUFADR : ADDRESS; -- Address of S0 error log buffers PAGEBITS : UNSIGNED_WORD; -- NUMBER OF BITS IN PAGE INDEX VA_BITS : UNSIGNED_WORD; -- NUMBER OF BITS IN VIRTUAL ADDRESS SYMVECT_VA : ADDRESS; -- ABSOLUTE VIRTUAL ADDRESS OF SYMBOL VECTOR IN MEMORY SYMVECT_END : ADDRESS; -- ABSOLUTE VIRTUAL ADDRESS OF END OF SYMBOL VECTOR IN MEMORY DUMPBLOCKCNT : UNSIGNED_LONGWORD; -- COUNT OF BLOCKS DUMPED NOCOMPBLOCKCNT : UNSIGNED_LONGWORD; -- As DUMPBLOCKCNT with no compression SYSVER : UNSIGNED_LONGWORD; -- SYSTEM VERSION NUMBER **** KEEP AT OFFSET 88. **** CHECK : UNSIGNED_LONGWORD; -- ONES COMPLEMENT OF SYSVER **** KEEP AT OFFSET 92. **** DUMPVER : UNSIGNED_WORD; -- DUMP FILE VERSION NUMBER **** KEEP AT OFFSET 96. **** ERLBUFCNT : UNSIGNED_WORD; -- # S0 error log buffers ERLBUFHEAD : UNSIGNED_WORD; -- Index of next S0 error log buffer to be written to file ERLBUFTAIL : UNSIGNED_WORD; -- Index of next available S0 error log buffer L2_BASE : UNSIGNED_QUADWORD; -- Crash-time contents of mmg$gq_l2_base L1_BASE : UNSIGNED_QUADWORD; -- Crash-time contents of mmg$gq_l1_base PT_BASE : UNSIGNED_QUADWORD; -- Crash-time contents of mmg$gq_pt_base CRASHTIME : UNSIGNED_QUADWORD; -- Crash date/time LINKTIME : UNSIGNED_QUADWORD; -- Link date/time of base image in system dumped CHFCTXADR : ADDRESS; -- Base address of CHFCTX block (process dumps) CALL_HANDL : ADDRESS; -- Address of SYS$GL_CALL_HANDL (process dumps) ASTDEL : ADDRESS; -- Address of SYS$GL_ASTDEL (process dumps) ASTDEL_K : ADDRESS; -- Address of SYS$GL_ASTDEL_K (process dumps) ERRSTATUS : UNSIGNED_LONGWORD; -- LAST ERROR STATUS FROM DUMP WRITE DUMPERRS : UNSIGNED_LONGWORD; -- COUNT OF ERRORS DURING DUMP WRITE MAXCOMPENTRIES : UNSIGNED_LONGWORD; -- Worst case count of compression map entries in dump SHORTBLOCKCNT : UNSIGNED_LONGWORD; -- THE NUMBER OF ADDITIONAL BLOCKS NEEDED FOR COMPLETE DUMP COMPENTRYPAGES : UNSIGNED_LONGWORD; -- Max # pages mapped by a data compression map entry SAVEPRCCNT : UNSIGNED_LONGWORD; -- Count of saved processes (subset dump) SAVERADCNT : UNSIGNED_WORD; -- Count of saved RADs (selective dump) REGIONCNT : UNSIGNED_WORD; -- Count of regions dumped (shared memory) PCBVEC : ADDRESS; -- Pointer to PCB vector (Process dumps) TEB_ADDR : INTEGER_32; -- Address of thread environment block (Process dumps) MAXPIX : UNSIGNED_LONGWORD; -- Highest process index (Process dumps) L1_INDEX : UNSIGNED_LONGWORD; LEVEL_WIDTH : UNSIGNED_LONGWORD; NPAGEDYN : ADDRESS; BALBASE : ADDRESS; BAL_END : ADDRESS; BSLOTSZ : UNSIGNED_LONGWORD; PIXBAS : ADDRESS; KTB_ADDRESS : ADDRESS; SYSPHD : ADDRESS; HPDESC : ADDRESS; SYS_VIRT_BASE : UNSIGNED_QUADWORD; SHARED_VA_PTES : UNSIGNED_QUADWORD; GPT_BASE : UNSIGNED_QUADWORD; MAX_GPTE : UNSIGNED_QUADWORD; PFN_DATABASE : UNSIGNED_QUADWORD; ASTSR_ASTEN : UNSIGNED_BYTE; -- AST summary register and AST enable bits (process dumps only) TRAPINFO_BLKS : UNSIGNED_BYTE; -- # blocks set aside for trap data CRASHERL_BLKS : UNSIGNED_BYTE; -- # blocks for crash error log entry IMGDMP_ICB_BLKS : UNSIGNED_BYTE; -- # blocks used for invocation context (process dumps only) IMGDMP_REG_BLKS : UNSIGNED_BYTE; -- # blocks used for internal registers (process dumps only) FILLER_1 : STRING(1 .. 2); NODENAME : STRING(1 .. 9); -- ASCIC node name PROCNAME : STRING(1 .. 16); -- ASCIC process name MODELNAME : STRING(1 .. 32); -- ASCIC model name BUGCODE : UNSIGNED_LONGWORD; -- The bugcheck code MCH_ARRAY : ADDRESS; -- Address of the mechanism array (process dumps) ERLBUFADR_S2 : UNSIGNED_QUADWORD; -- Address of S2 error log buffers ERLBUFPAGES_S2 : UNSIGNED_LONGWORD; -- # pagelets / S2 error log buffer ERLBUFCNT_S2 : UNSIGNED_LONGWORD; -- # S2 error log buffers ERLBUFHEAD_S2 : UNSIGNED_LONGWORD; -- Index of next S2 error log buffer to be written to file ERLBUFTAIL_S2 : UNSIGNED_LONGWORD; -- Index of next available S2 error log buffer COLLECT_TOTAL : UNSIGNED_LONGWORD; -- The total size of the file-ID + unwind-data collection COLLECT_DISK : UNSIGNED_LONGWORD; -- The size of the disk portion of the collection -- (a subset of and the final blocks of COLLECT_TOTAL) KEYBLOCKCNT : UNSIGNED_LONGWORD; -- Count of blocks dumped for system space, key processes, key globals NOCOMPKEYCNT : UNSIGNED_LONGWORD; -- As KEYBLOCKCNT with no compression COMPENTRIES : UNSIGNED_LONGWORD; -- Count of compression map entries in this (partial copy of a) dump FRAGBLOCKS : UNSIGNED_LONGWORD; -- Number of blocks BUGCHECK could use because file too fragmented ADD_PCB_ASTCNT : INTEGER_32; -- ASTCNT adjustment required to take process dump ADD_PCB_BIOCNT : INTEGER_32; -- BIOCNT adjustment required to take process dump ADD_PCB_DIOCNT : INTEGER_32; -- DIOCNT adjustment required to take process dump ADD_JIB_BYTCNT : INTEGER_32; -- BYTCNT adjustment required to take process dump ADD_JIB_FILCNT : INTEGER_32; -- FILCNT adjustment required to take process dump ADD_JIB_TQCNT : INTEGER_32; -- TQCNT adjustment required to take process dump ADD_JIB_PGFLCNT : INTEGER_32; -- PGFLCNT adjustment required to take process dump ADD_JIB_ENQCNT : INTEGER_32; -- ENQCNT adjustment required to take process dump ADD_PHD_CPULIM : UNSIGNED_QUADWORD; -- CPULIM adjustment required to take process dump -- (not yet used, but would be recorded as a delta time) WSLBASE : UNSIGNED_QUADWORD; -- Base address of working set pages in S2 space (process dumps) WSL_END : UNSIGNED_QUADWORD; -- End address of working set pages in S2 space (process dumps) EXTRA_SPACE : STRING(1 .. 564); CHECKSUM : UNSIGNED_LONGWORD; -- Last longword of 2-block header **** KEEP AT OFFSET 1020. **** end record; for DMP_TYPE use record ERRSEQ at 0 range 0 .. 31; FLAGS at 4 range 0 .. 31; DUMPSTYLE at 8 range 0 .. 31; MEMMAP_ENTRIES at 12 range 0 .. 15; ERLBUFPAGES at 14 range 0 .. 15; PTBR at 16 range 0 .. 63; KSP at 24 range 0 .. 63; ESP at 32 range 0 .. 63; SSP at 40 range 0 .. 63; USP at 48 range 0 .. 63; SYSIDENT at 56 range 0 .. 63; ERLBUFADR at 64 range 0 .. 31; PAGEBITS at 68 range 0 .. 15; VA_BITS at 70 range 0 .. 15; SYMVECT_VA at 72 range 0 .. 31; SYMVECT_END at 76 range 0 .. 31; DUMPBLOCKCNT at 80 range 0 .. 31; NOCOMPBLOCKCNT at 84 range 0 .. 31; SYSVER at 88 range 0 .. 31; CHECK at 92 range 0 .. 31; DUMPVER at 96 range 0 .. 15; ERLBUFCNT at 98 range 0 .. 15; ERLBUFHEAD at 100 range 0 .. 15; ERLBUFTAIL at 102 range 0 .. 15; L2_BASE at 104 range 0 .. 63; L1_BASE at 112 range 0 .. 63; PT_BASE at 120 range 0 .. 63; CRASHTIME at 128 range 0 .. 63; LINKTIME at 136 range 0 .. 63; CHFCTXADR at 144 range 0 .. 31; CALL_HANDL at 148 range 0 .. 31; ASTDEL at 152 range 0 .. 31; ASTDEL_K at 156 range 0 .. 31; ERRSTATUS at 160 range 0 .. 31; DUMPERRS at 164 range 0 .. 31; MAXCOMPENTRIES at 168 range 0 .. 31; SHORTBLOCKCNT at 172 range 0 .. 31; COMPENTRYPAGES at 176 range 0 .. 31; SAVEPRCCNT at 180 range 0 .. 31; SAVERADCNT at 184 range 0 .. 15; REGIONCNT at 186 range 0 .. 15; PCBVEC at 188 range 0 .. 31; TEB_ADDR at 192 range 0 .. 31; MAXPIX at 196 range 0 .. 31; L1_INDEX at 200 range 0 .. 31; LEVEL_WIDTH at 204 range 0 .. 31; NPAGEDYN at 208 range 0 .. 31; BALBASE at 212 range 0 .. 31; BAL_END at 216 range 0 .. 31; BSLOTSZ at 220 range 0 .. 31; PIXBAS at 224 range 0 .. 31; KTB_ADDRESS at 228 range 0 .. 31; SYSPHD at 232 range 0 .. 31; HPDESC at 236 range 0 .. 31; SYS_VIRT_BASE at 240 range 0 .. 63; SHARED_VA_PTES at 248 range 0 .. 63; GPT_BASE at 256 range 0 .. 63; MAX_GPTE at 264 range 0 .. 63; PFN_DATABASE at 272 range 0 .. 63; ASTSR_ASTEN at 280 range 0 .. 7; TRAPINFO_BLKS at 281 range 0 .. 7; CRASHERL_BLKS at 282 range 0 .. 7; IMGDMP_ICB_BLKS at 283 range 0 .. 7; IMGDMP_REG_BLKS at 284 range 0 .. 7; FILLER_1 at 285 range 0 .. 15; NODENAME at 287 range 0 .. 71; PROCNAME at 296 range 0 .. 127; MODELNAME at 312 range 0 .. 255; BUGCODE at 344 range 0 .. 31; MCH_ARRAY at 348 range 0 .. 31; ERLBUFADR_S2 at 352 range 0 .. 63; ERLBUFPAGES_S2 at 360 range 0 .. 31; ERLBUFCNT_S2 at 364 range 0 .. 31; ERLBUFHEAD_S2 at 368 range 0 .. 31; ERLBUFTAIL_S2 at 372 range 0 .. 31; COLLECT_TOTAL at 376 range 0 .. 31; COLLECT_DISK at 380 range 0 .. 31; KEYBLOCKCNT at 384 range 0 .. 31; NOCOMPKEYCNT at 388 range 0 .. 31; COMPENTRIES at 392 range 0 .. 31; FRAGBLOCKS at 396 range 0 .. 31; ADD_PCB_ASTCNT at 400 range 0 .. 31; ADD_PCB_BIOCNT at 404 range 0 .. 31; ADD_PCB_DIOCNT at 408 range 0 .. 31; ADD_JIB_BYTCNT at 412 range 0 .. 31; ADD_JIB_FILCNT at 416 range 0 .. 31; ADD_JIB_TQCNT at 420 range 0 .. 31; ADD_JIB_PGFLCNT at 424 range 0 .. 31; ADD_JIB_ENQCNT at 428 range 0 .. 31; ADD_PHD_CPULIM at 432 range 0 .. 63; WSLBASE at 440 range 0 .. 63; WSL_END at 448 range 0 .. 63; EXTRA_SPACE at 456 range 0 .. 4511; CHECKSUM at 1020 range 0 .. 31; end record; for DMP_TYPE'SIZE use 8192; DMP_TYPE_INIT : constant DMP_TYPE := (ERRSEQ => 0, FLAGS => DMP_FLAGS_TYPE_INIT, DUMPSTYLE => DMP_DUMPSTYLE_TYPE_INIT, MEMMAP_ENTRIES => 0, ERLBUFPAGES => 0, PTBR => (0, 0), KSP => (0, 0), ESP => (0, 0), SSP => (0, 0), USP => (0, 0), SYSIDENT => (0, 0), ERLBUFADR => ADDRESS_ZERO, PAGEBITS => 0, VA_BITS => 0, SYMVECT_VA => ADDRESS_ZERO, SYMVECT_END => ADDRESS_ZERO, DUMPBLOCKCNT => 0, NOCOMPBLOCKCNT => 0, SYSVER => 0, CHECK => 0, DUMPVER => 0, ERLBUFCNT => 0, ERLBUFHEAD => 0, ERLBUFTAIL => 0, L2_BASE => (0, 0), L1_BASE => (0, 0), PT_BASE => (0, 0), CRASHTIME => (0, 0), LINKTIME => (0, 0), CHFCTXADR => ADDRESS_ZERO, CALL_HANDL => ADDRESS_ZERO, ASTDEL => ADDRESS_ZERO, ASTDEL_K => ADDRESS_ZERO, ERRSTATUS => 0, DUMPERRS => 0, MAXCOMPENTRIES => 0, SHORTBLOCKCNT => 0, COMPENTRYPAGES => 0, SAVEPRCCNT => 0, SAVERADCNT => 0, REGIONCNT => 0, PCBVEC => ADDRESS_ZERO, TEB_ADDR => 0, MAXPIX => 0, L1_INDEX => 0, LEVEL_WIDTH => 0, NPAGEDYN => ADDRESS_ZERO, BALBASE => ADDRESS_ZERO, BAL_END => ADDRESS_ZERO, BSLOTSZ => 0, PIXBAS => ADDRESS_ZERO, KTB_ADDRESS => ADDRESS_ZERO, SYSPHD => ADDRESS_ZERO, HPDESC => ADDRESS_ZERO, SYS_VIRT_BASE => (0, 0), SHARED_VA_PTES => (0, 0), GPT_BASE => (0, 0), MAX_GPTE => (0, 0), PFN_DATABASE => (0, 0), ASTSR_ASTEN => 0, TRAPINFO_BLKS => 0, CRASHERL_BLKS => 0, IMGDMP_ICB_BLKS => 0, IMGDMP_REG_BLKS => 0, FILLER_1 => (others => ASCII.NUL), NODENAME => (others => ASCII.NUL), PROCNAME => (others => ASCII.NUL), MODELNAME => (others => ASCII.NUL), BUGCODE => 0, MCH_ARRAY => ADDRESS_ZERO, ERLBUFADR_S2 => (0, 0), ERLBUFPAGES_S2 => 0, ERLBUFCNT_S2 => 0, ERLBUFHEAD_S2 => 0, ERLBUFTAIL_S2 => 0, COLLECT_TOTAL => 0, COLLECT_DISK => 0, KEYBLOCKCNT => 0, NOCOMPKEYCNT => 0, COMPENTRIES => 0, FRAGBLOCKS => 0, ADD_PCB_ASTCNT => 0, ADD_PCB_BIOCNT => 0, ADD_PCB_DIOCNT => 0, ADD_JIB_BYTCNT => 0, ADD_JIB_FILCNT => 0, ADD_JIB_TQCNT => 0, ADD_JIB_PGFLCNT => 0, ADD_JIB_ENQCNT => 0, ADD_PHD_CPULIM => (0, 0), WSLBASE => (0, 0), WSL_END => (0, 0), EXTRA_SPACE => (others => ASCII.NUL), CHECKSUM => 0); DMP_K_VAX_EMB_LENGTH : constant := 12; -- Length of EMB header on VAX type DMP_PRE_V731_SYSIDENT_TYPE is -- TEXT ident for SYS.EXE **** KEEP AT OFFSET 104. **** record COMPAT_FILL_4 : UNSIGNED_LONGWORD; VAX_DUMPVER : UNSIGNED_WORD; -- DUMP FILE VERSION NUMBER ON VAX **** KEEP AT OFFSET 108. **** COMPAT_FILL_5 : UNSIGNED_WORD; end record; for DMP_PRE_V731_SYSIDENT_TYPE use record COMPAT_FILL_4 at 0 range 0 .. 31; VAX_DUMPVER at 4 range 0 .. 15; COMPAT_FILL_5 at 6 range 0 .. 15; end record; for DMP_PRE_V731_SYSIDENT_TYPE'SIZE use 64; DMP_PRE_V731_SYSIDENT_TYPE_INIT : constant DMP_PRE_V731_SYSIDENT_TYPE := (COMPAT_FILL_4 => 0, VAX_DUMPVER => 0, COMPAT_FILL_5 => 0); type DMP_COMPAT_TYPE is record FILLER_1 : STRING(1 .. 48); V731_SYSIDENT : UNSIGNED_QUADWORD; -- TEXT ident for SYS.EXE **** KEEP AT OFFSET 48. **** ----Component(s) below are defined as comments since they ----overlap other fields ---- ----VAX_EMBCR_SWVERS : UNSIGNED_QUADWORD; -- SOFTWARE VERSION IN VAX CRASH ERRLOG **** KEEP AT OFFSET 48. **** FILLER_2 : STRING(1 .. 12); PRE_V731_SYSVER : UNSIGNED_LONGWORD; -- SYSTEM VERSION NUMBER **** KEEP AT OFFSET 68. **** PRE_V731_CHECK : UNSIGNED_LONGWORD; -- ONES COMPLEMENT OF SYSVER **** KEEP AT OFFSET 72. **** PRE_V731_DUMPVER : UNSIGNED_WORD; -- DUMP FILE VERSION NUMBER **** KEEP AT OFFSET 76. **** FILLER_3 : STRING(1 .. 26); PRE_V731_SYSIDENT : DMP_PRE_V731_SYSIDENT_TYPE; -- TEXT ident for SYS.EXE **** KEEP AT OFFSET 104. **** FILLER_4 : STRING(1 .. 20); VAX_CRASHERL : UNSIGNED_LONGWORD; -- SYSTEM CRASH ERR LOG ENTRY ON VAX **** KEEP AT OFFSET 132. **** end record; for DMP_COMPAT_TYPE use record FILLER_1 at 0 range 0 .. 383; V731_SYSIDENT at 48 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----VAX_EMBCR_SWVERS at 48 range 0 .. 63; FILLER_2 at 56 range 0 .. 95; PRE_V731_SYSVER at 68 range 0 .. 31; PRE_V731_CHECK at 72 range 0 .. 31; PRE_V731_DUMPVER at 76 range 0 .. 15; FILLER_3 at 78 range 0 .. 207; PRE_V731_SYSIDENT at 104 range 0 .. 63; FILLER_4 at 112 range 0 .. 159; VAX_CRASHERL at 132 range 0 .. 31; end record; for DMP_COMPAT_TYPE'SIZE use 1088; DMP_COMPAT_TYPE_INIT : constant DMP_COMPAT_TYPE := (FILLER_1 => (others => ASCII.NUL), V731_SYSIDENT => (0, 0), FILLER_2 => (others => ASCII.NUL), PRE_V731_SYSVER => 0, PRE_V731_CHECK => 0, PRE_V731_DUMPVER => 0, FILLER_3 => (others => ASCII.NUL), PRE_V731_SYSIDENT => DMP_PRE_V731_SYSIDENT_TYPE_INIT, FILLER_4 => (others => ASCII.NUL), VAX_CRASHERL => 0); DMP_K_TRAPINFO_LENGTH : constant := 512; -- Length of trap entry buffer type DMP_TRAPINFO_ENTRY_TYPE is record TRAPINFO : INTSTK_TYPE; TRAP_VA : UNSIGNED_QUADWORD; -- trap VA TRAP_MMF : UNSIGNED_QUADWORD; -- trap MMF TRAPINFO_FILL : STRING(1 .. 432); end record; for DMP_TRAPINFO_ENTRY_TYPE use record TRAPINFO at 0 range 0 .. 511; TRAP_VA at 64 range 0 .. 63; TRAP_MMF at 72 range 0 .. 63; TRAPINFO_FILL at 80 range 0 .. 3455; end record; for DMP_TRAPINFO_ENTRY_TYPE'SIZE use 4096; DMP_TRAPINFO_ENTRY_TYPE_INIT : constant DMP_TRAPINFO_ENTRY_TYPE := (TRAPINFO => INTSTK_TYPE_INIT, TRAP_VA => (0, 0), TRAP_MMF => (0, 0), TRAPINFO_FILL => (others => ASCII.NUL)); DMP_K_CRASHERL_LENGTH : constant := 1024; -- Length of crash error log buffer type DMP_CRASHERL_ENTRY_TYPE is record FILLER_1 : STRING(1 .. 16); FILLER_2 : STRING(1 .. 600); CRASHERL_ENTRY_FILL : STRING(1 .. 408); end record; for DMP_CRASHERL_ENTRY_TYPE use record FILLER_1 at 0 range 0 .. 127; FILLER_2 at 16 range 0 .. 4799; CRASHERL_ENTRY_FILL at 616 range 0 .. 3263; end record; for DMP_CRASHERL_ENTRY_TYPE'SIZE use 8192; DMP_CRASHERL_ENTRY_TYPE_INIT : constant DMP_CRASHERL_ENTRY_TYPE := (FILLER_1 => (others => ASCII.NUL), FILLER_2 => (others => ASCII.NUL), CRASHERL_ENTRY_FILL => (others => ASCII.NUL)); DMP_K_IMGDMP_ICB_LENGTH : constant := 1024; -- Length of invo context block type DMP_IMGDMP_ICB_TYPE is record IMGDMP_ICB : LIBICB_INVO_CONTEXT_BLK_TYPE; FILLER_1 : STRING(1 .. 480); -- filler to end of block end record; for DMP_IMGDMP_ICB_TYPE use record IMGDMP_ICB at 0 range 0 .. 4351; FILLER_1 at 544 range 0 .. 3839; end record; for DMP_IMGDMP_ICB_TYPE'SIZE use 8192; DMP_IMGDMP_ICB_TYPE_INIT : constant DMP_IMGDMP_ICB_TYPE := (IMGDMP_ICB => LIBICB_INVO_CONTEXT_BLK_TYPE_INIT, FILLER_1 => (others => ASCII.NUL)); DMP_K_IMGDMP_REGS_LENGTH : constant := 512; -- Length of general registers type DMP_IMGDMP_REGS_TYPE is record IMGDMP_KEEP_SDL_HAPPY : UNSIGNED_QUADWORD; -- Currently unused on Alpha -- this entry can be deleted if a use is found FILLER_1 : STRING(1 .. 504); -- filler to end of block end record; for DMP_IMGDMP_REGS_TYPE use record IMGDMP_KEEP_SDL_HAPPY at 0 range 0 .. 63; FILLER_1 at 8 range 0 .. 4031; end record; for DMP_IMGDMP_REGS_TYPE'SIZE use 4096; DMP_IMGDMP_REGS_TYPE_INIT : constant DMP_IMGDMP_REGS_TYPE := (IMGDMP_KEEP_SDL_HAPPY => (0, 0), FILLER_1 => (others => ASCII.NUL)); DMP_M_NODUMP : constant := 16#00000001#; DMP_M_POWEROFF : constant := 16#00000002#; DMP_M_BADMEMORY : constant := 16#00000004#; DMP_M_BIB_STATE : constant := 16#00000008#; DMP_M_LONG_FILL : constant := 16#FFFFFFF0#; type DMP_DUMPMASK_TYPE is record NODUMP : BOOLEAN; -- Do not write dumpfile POWEROFF : BOOLEAN; -- Request power off of system BADMEMORY : BOOLEAN; -- Memory is too broken to try dumping it BIB_STATE : BOOLEAN; -- Request shutdown to BIB state FILLER_1 : UNSIGNED_28; -- Longword filler end record; for DMP_DUMPMASK_TYPE use record NODUMP at 0 range 0 .. 0; POWEROFF at 0 range 1 .. 1; BADMEMORY at 0 range 2 .. 2; BIB_STATE at 0 range 3 .. 3; FILLER_1 at 0 range 4 .. 31; end record; for DMP_DUMPMASK_TYPE'SIZE use 32; DMP_DUMPMASK_TYPE_INIT : constant DMP_DUMPMASK_TYPE := (NODUMP => FALSE, POWEROFF => FALSE, BADMEMORY => FALSE, BIB_STATE => FALSE, FILLER_1 => 0); DMP_C_FRAG_GCT : constant := -1; -- if all bits set then GCT fragment DMP_K_FRAG_MAP_LENGTH : constant := 32; DMP_C_FRAG_MAP_LENGTH : constant := 32; type DMP_MEMMAP_TYPE is record FRAG_MAP_LENGTH : INTEGER_32; -- Size of structure FRAG_FLAGS : UNSIGNED_LONGWORD; -- See [STARLET]PMMDEF.SDL for these FRAG_START_PFN : UNSIGNED_QUADWORD; -- Start PFN of fragment FRAG_LENGTH : UNSIGNED_QUADWORD; -- Actual block count for memory fragment FRAG_NOCOMP_LENGTH : UNSIGNED_QUADWORD; -- As FRAG_LENGTH without compression end record; for DMP_MEMMAP_TYPE use record FRAG_MAP_LENGTH at 0 range 0 .. 31; FRAG_FLAGS at 4 range 0 .. 31; FRAG_START_PFN at 8 range 0 .. 63; FRAG_LENGTH at 16 range 0 .. 63; FRAG_NOCOMP_LENGTH at 24 range 0 .. 63; end record; for DMP_MEMMAP_TYPE'SIZE use 256; DMP_MEMMAP_TYPE_INIT : constant DMP_MEMMAP_TYPE := (FRAG_MAP_LENGTH => 0, FRAG_FLAGS => 0, FRAG_START_PFN => (0, 0), FRAG_LENGTH => (0, 0), FRAG_NOCOMP_LENGTH => (0, 0)); DMP_M_SPARE : constant := 16#000007FF#; DMP_M_LMBHDR : constant := 16#00000800#; DMP_M_UNCOMP : constant := 16#00001000#; DMP_M_OVERRUN : constant := 16#00002000#; DMP_M_IO_ERROR : constant := 16#00004000#; DMP_M_NOCOMP : constant := 16#00008000#; DMP_K_REPEAT : constant := 0; -- Repeated character sequence DMP_K_REENCODE_1 : constant := 1; -- 1-bit re-encoding DMP_K_REENCODE_2 : constant := 2; -- 2-bit re-encoding DMP_K_REENCODE_3 : constant := 3; -- 3-bit re-encoding DMP_K_REENCODE_4 : constant := 4; -- 4-bit re-encoding DMP_K_REENCODE_5 : constant := 5; -- 5-bit re-encoding DMP_K_REENCODE_6 : constant := 6; -- 6-bit re-encoding DMP_K_BITMAP_1 : constant := 7; -- Bitmap (one dominant character) DMP_K_BITMAP_3 : constant := 8; -- Bitmap (2-3 dominant characters) DMP_K_BITMAP_7 : constant := 9; -- Bitmap (4-7 dominant characters) DMP_K_INCREMENT : constant := 10; -- Incrementing character sequence DMP_K_DECREMENT : constant := 11; -- Decrementing character sequence DMP_K_NOCOMP : constant := 12; -- No compression DMP_K_COMPRESSION_TYPES : constant := 13; -- Number of types DMP_M_RECOMP : constant := 32; -- Recompressed section DMP_M_FINAL : constant := 64; -- Final section to restore DMP_M_FIRST : constant := 128; -- Section is first in a "raw" read type DMP_COMP_FIELDS_4_TYPE is record FILLER_1 : UNSIGNED_11; -- Bits are used from the top down LMBHDR : BOOLEAN; -- LMB header (so we can distinguish from map entries for holes) UNCOMP : BOOLEAN; -- Uncompressed data section OVERRUN : BOOLEAN; -- Dumpfile filled while writing this section IO_ERROR : BOOLEAN; -- I/O error occurred while writing this section NOCOMP : BOOLEAN; -- Non-compressed section (LMB header, holes) end record; for DMP_COMP_FIELDS_4_TYPE use record FILLER_1 at 0 range 0 .. 10; LMBHDR at 1 range 3 .. 3; UNCOMP at 1 range 4 .. 4; OVERRUN at 1 range 5 .. 5; IO_ERROR at 1 range 6 .. 6; NOCOMP at 1 range 7 .. 7; end record; for DMP_COMP_FIELDS_4_TYPE'SIZE use 16; DMP_COMP_FIELDS_4_TYPE_INIT : constant DMP_COMP_FIELDS_4_TYPE := (FILLER_1 => 0, LMBHDR => FALSE, UNCOMP => FALSE, OVERRUN => FALSE, IO_ERROR => FALSE, NOCOMP => FALSE); type DMP_COMP_FIELDS_2_TYPE is record COMP_ENDING_VBN : UNSIGNED_LONGWORD; -- Final uncompressed VBN from this section COMP_BLOCKS : UNSIGNED_WORD; -- The count of compressed blocks in this section COMP_FLAGS : UNSIGNED_WORD; -- Flags for this section ----Component(s) below are defined as comments since they ----overlap other fields ---- ----COMP_FIELDS_4 : DMP_COMP_FIELDS_4_TYPE; end record; for DMP_COMP_FIELDS_2_TYPE use record COMP_ENDING_VBN at 0 range 0 .. 31; COMP_BLOCKS at 4 range 0 .. 15; COMP_FLAGS at 6 range 0 .. 15; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----COMP_FIELDS_4 at 6 range 0 .. 15; end record; for DMP_COMP_FIELDS_2_TYPE'SIZE use 64; DMP_COMP_FIELDS_2_TYPE_INIT : constant DMP_COMP_FIELDS_2_TYPE := (COMP_ENDING_VBN => 0, COMP_BLOCKS => 0, COMP_FLAGS => 0 ); type DMP_COMP_OVERLAY_1_TYPE is record COMP_ENTRY : UNSIGNED_QUADWORD; -- An entire entry ----Component(s) below are defined as comments since they ----overlap other fields ---- ----COMP_FIELDS_2 : DMP_COMP_FIELDS_2_TYPE; end record; for DMP_COMP_OVERLAY_1_TYPE use record COMP_ENTRY at 0 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----COMP_FIELDS_2 at 0 range 0 .. 63; end record; for DMP_COMP_OVERLAY_1_TYPE'SIZE use 64; DMP_COMP_OVERLAY_1_TYPE_INIT : constant DMP_COMP_OVERLAY_1_TYPE := (COMP_ENTRY => (0, 0)); type DMP_CBLOCK_TYPE is record COMP_OVERLAY_1 : DMP_COMP_OVERLAY_1_TYPE; -- Compression types end record; for DMP_CBLOCK_TYPE use record COMP_OVERLAY_1 at 0 range 0 .. 63; end record; for DMP_CBLOCK_TYPE'SIZE use 64; DMP_CBLOCK_TYPE_INIT : constant DMP_CBLOCK_TYPE := ( COMP_OVERLAY_1 => DMP_COMP_OVERLAY_1_TYPE_INIT ); DMP_K_SQUEEZE_LENGTH : constant := 72; DMP_K_MAX_COMPRESSIONS : constant := 4; DMP_K_MAX_IO_RAW : constant := 32768; DMP_K_MAX_IO_112 : constant := 57344; -- max full-page I/O without split DMP_K_MAX_IO_124 : constant := 63488; -- max raw data when no compression possible DMP_K_MAX_IO_127 : constant := 65024; -- max regular I/O without split DMP_K_MAX_IO : constant := 65536; DMP_K_COMP_LENGTH : constant := 2048; DMP_K_MIN_REPEAT : constant := 16; DMP_K_ERROR_COUNT : constant := 156; DMP_K_OVERRUN_COUNT : constant := 159; DMP_K_STATS_ENTRIES : constant := 162; DMP_K_SHORT_STATS : constant := 39; type DMP_SQUEEZE_TYPE is record OUTPUT_START : UNSIGNED_QUADWORD; -- The output buffer being filled SQUEEZE_WORK : UNSIGNED_QUADWORD; -- Address of the work area into which data is initially compressed BYTE_TABLE : UNSIGNED_QUADWORD; -- Address of array where byte values are counted OUTPUT_USED : INTEGER_32; -- How much of the output buffer has been used PRIOR_UNCOMP : INTEGER_32; -- Length of prior uncompressed section in output buffer CURRENT_UNCOMP : INTEGER_32; -- Offset to start of current uncompressed section in output buffer SQUEEZE_FLAGS : INTEGER_32; -- DMP$M_UNCOMP gets set in here when an uncompressible section is created BASE_VBN : INTEGER_32; -- Raw VBN of base of LMB (always zero in full dumps) FILLER_1 : STRING(1 .. 4); -- filler to quadword WRITE_COMPRESSED_BLOCKS : UNSIGNED_QUADWORD; -- Callback routine to write buffer contents SQUEEZE_STATS : UNSIGNED_QUADWORD; -- Pointer to statistics array - 3 quadwords for each compression type -- for each compression attempt SQUEEZE_UNCOMP_COUNT : UNSIGNED_LONGWORD; SQUEEZE_MERGE_COUNT : UNSIGNED_LONGWORD; end record; for DMP_SQUEEZE_TYPE use record OUTPUT_START at 0 range 0 .. 63; SQUEEZE_WORK at 8 range 0 .. 63; BYTE_TABLE at 16 range 0 .. 63; OUTPUT_USED at 24 range 0 .. 31; PRIOR_UNCOMP at 28 range 0 .. 31; CURRENT_UNCOMP at 32 range 0 .. 31; SQUEEZE_FLAGS at 36 range 0 .. 31; BASE_VBN at 40 range 0 .. 31; FILLER_1 at 44 range 0 .. 31; WRITE_COMPRESSED_BLOCKS at 48 range 0 .. 63; SQUEEZE_STATS at 56 range 0 .. 63; SQUEEZE_UNCOMP_COUNT at 64 range 0 .. 31; SQUEEZE_MERGE_COUNT at 68 range 0 .. 31; end record; for DMP_SQUEEZE_TYPE'SIZE use 576; DMP_SQUEEZE_TYPE_INIT : constant DMP_SQUEEZE_TYPE := (OUTPUT_START => (0, 0), SQUEEZE_WORK => (0, 0), BYTE_TABLE => (0, 0), OUTPUT_USED => 0, PRIOR_UNCOMP => 0, CURRENT_UNCOMP => 0, SQUEEZE_FLAGS => 0, BASE_VBN => 0, FILLER_1 => (others => ASCII.NUL), WRITE_COMPRESSED_BLOCKS => (0, 0), SQUEEZE_STATS => (0, 0), SQUEEZE_UNCOMP_COUNT => 0, SQUEEZE_MERGE_COUNT => 0); DMP_K_EXPLODE_LENGTH : constant := 40; type DMP_EXPLODE_TYPE is record INPUT_START : ADDRESS; -- The input buffer being processed EXPLODE_WORK : ADDRESS; -- Address of the work area into which data is initially decompressed INPUT_USED : INTEGER_32; -- How much of the input buffer has been used EXPLODE_FLAGS : INTEGER_32; -- DMP$M_UNCOMP gets set in here when an uncompressible section is processed LOWEST_VBN : INTEGER_32; -- Lowest VBN exploded left in the output buffer HIGHEST_VBN : INTEGER_32; -- Highest VBN exploded left in the output buffer READ_COMPRESSED_BLOCKS : ADDRESS; -- Callback routine to read more compressed data into the input buffer EXPLODE_STATS : ADDRESS; -- Pointer to statistics array - 3 quadwords for each compression type -- for each decompression pass EXPLODE_UNCOMP_COUNT : UNSIGNED_LONGWORD; EXPLODE_FILEDATA : ADDRESS; -- Pointer to the file_data stucture for the file being processed end record; for DMP_EXPLODE_TYPE use record INPUT_START at 0 range 0 .. 31; EXPLODE_WORK at 4 range 0 .. 31; INPUT_USED at 8 range 0 .. 31; EXPLODE_FLAGS at 12 range 0 .. 31; LOWEST_VBN at 16 range 0 .. 31; HIGHEST_VBN at 20 range 0 .. 31; READ_COMPRESSED_BLOCKS at 24 range 0 .. 31; EXPLODE_STATS at 28 range 0 .. 31; EXPLODE_UNCOMP_COUNT at 32 range 0 .. 31; EXPLODE_FILEDATA at 36 range 0 .. 31; end record; for DMP_EXPLODE_TYPE'SIZE use 320; DMP_EXPLODE_TYPE_INIT : constant DMP_EXPLODE_TYPE := (INPUT_START => ADDRESS_ZERO, EXPLODE_WORK => ADDRESS_ZERO, INPUT_USED => 0, EXPLODE_FLAGS => 0, LOWEST_VBN => 0, HIGHEST_VBN => 0, READ_COMPRESSED_BLOCKS => ADDRESS_ZERO, EXPLODE_STATS => ADDRESS_ZERO, EXPLODE_UNCOMP_COUNT => 0, EXPLODE_FILEDATA => ADDRESS_ZERO); DMP_DISK_M_NO_ACCESS : constant := 16#00000001#; DMP_DISK_M_SEPARATE : constant := 16#00000002#; DMP_DISK_M_UNCOMBINED : constant := 16#00000004#; DMP_DISK_K_LENGTH : constant := 45; -- Base length of DMP_DISK_DATA type DMP_DISK_FLAGS_TYPE is record NO_ACCESS : BOOLEAN; -- Unable to access the disk SEPARAT : BOOLEAN; -- This DMP_DISK_DATA was allocated separately (pre-reorg) UNCOMBINED : BOOLEAN; -- The attached file/code/etc were allocated separately FILLER_1 : UNSIGNED_13; end record; for DMP_DISK_FLAGS_TYPE use record NO_ACCESS at 0 range 0 .. 0; SEPARAT at 0 range 1 .. 1; UNCOMBINED at 0 range 2 .. 2; FILLER_1 at 0 range 3 .. 15; end record; for DMP_DISK_FLAGS_TYPE'SIZE use 16; DMP_DISK_FLAGS_TYPE_INIT : constant DMP_DISK_FLAGS_TYPE := (NO_ACCESS => FALSE, SEPARAT => FALSE, UNCOMBINED => FALSE, FILLER_1 => 0); type DMP_DISK_DATA_TYPE is record NEXT : UNSIGNED_QUADWORD; -- Pointer to next DMP_DISK_DATA structure FILE : UNSIGNED_QUADWORD; -- Pointer to first DMP_FILE_DATA for this disk VBN : UNSIGNED_LONGWORD; -- Relative VBN in collection for this disk's file/code/etc data BLOCKS : UNSIGNED_LONGWORD; -- Count of blocks for this disk's file/code/etc data DISK_DATA_LENGTH : UNSIGNED_QUADWORD; -- Length of this DMP_DISK_DATA structure DISK_DATA_TOTAL : UNSIGNED_QUADWORD; -- Total length of all this disk's file/code/etc structures FLAGS : DMP_DISK_FLAGS_TYPE; NAME_LENGTH : UNSIGNED_WORD; -- Length of the disk name NAME : STRING(1 .. 1); -- Start of the disk name end record; for DMP_DISK_DATA_TYPE use record NEXT at 0 range 0 .. 63; FILE at 8 range 0 .. 63; VBN at 16 range 0 .. 31; BLOCKS at 20 range 0 .. 31; DISK_DATA_LENGTH at 24 range 0 .. 63; DISK_DATA_TOTAL at 32 range 0 .. 63; FLAGS at 40 range 0 .. 15; NAME_LENGTH at 42 range 0 .. 15; NAME at 44 range 0 .. 7; end record; for DMP_DISK_DATA_TYPE'SIZE use 360; DMP_DISK_DATA_TYPE_INIT : constant DMP_DISK_DATA_TYPE := (NEXT => (0, 0), FILE => (0, 0), VBN => 0, BLOCKS => 0, DISK_DATA_LENGTH => (0, 0), DISK_DATA_TOTAL => (0, 0), FLAGS => DMP_DISK_FLAGS_TYPE_INIT, NAME_LENGTH => 0, NAME => (others => ASCII.NUL)); DMP_FILE_M_NO_ACCESS : constant := 16#00000001#; DMP_FILE_M_NO_UNWIND : constant := 16#00000002#; DMP_FILE_M_SEPARATE : constant := 16#00000004#; DMP_FILE_M_COUNTED : constant := 16#00000008#; DMP_FILE_K_LENGTH : constant := 53; -- Base length of DMP_FILE_DATA type DMP_FILE_FLAGS_TYPE is record NO_ACCESS : BOOLEAN; -- Unable to access the file NO_UNWIND : BOOLEAN; -- An image file but no unwind data (e.g. message file) SEPARAT : BOOLEAN; -- This DMP_FILE_DATA was allocated separately (pre-reorg) COUNTED : BOOLEAN; -- Any DMP_UNWIND_DATAs for this file have been counted FILLER_1 : UNSIGNED_12; end record; for DMP_FILE_FLAGS_TYPE use record NO_ACCESS at 0 range 0 .. 0; NO_UNWIND at 0 range 1 .. 1; SEPARAT at 0 range 2 .. 2; COUNTED at 0 range 3 .. 3; FILLER_1 at 0 range 4 .. 15; end record; for DMP_FILE_FLAGS_TYPE'SIZE use 16; DMP_FILE_FLAGS_TYPE_INIT : constant DMP_FILE_FLAGS_TYPE := (NO_ACCESS => FALSE, NO_UNWIND => FALSE, SEPARAT => FALSE, COUNTED => FALSE, FILLER_1 => 0); type DMP_FILE_DATA_TYPE is record NEXT : UNSIGNED_QUADWORD; -- Pointer to next DMP_FILE_DATA for this disk CODE : UNSIGNED_QUADWORD; -- Pointer to first DMP_CODE_DATA for this file UNWIND : UNSIGNED_QUADWORD; -- Pointer to first DMP_UNWIND_DATA for this file FID_NUM : UNSIGNED_WORD; -- File number FID_SEQ : UNSIGNED_WORD; -- File sequence number FID_RVN : UNSIGNED_BYTE; -- Short form relative volume number FID_NMX : UNSIGNED_BYTE; -- File number extension FILLER_1 : UNSIGNED_WORD; FILE_DATA_LENGTH : UNSIGNED_QUADWORD; -- Length of this DMP_FILE_DATA structure STATUS : UNSIGNED_LONGWORD; -- Status when we tried to open the file STV : UNSIGNED_LONGWORD; -- Corresponding STV if relevant FLAGS : DMP_FILE_FLAGS_TYPE; NAME_LENGTH : UNSIGNED_WORD; -- Length of the file name NAME : STRING(1 .. 1); -- Start of the file name end record; for DMP_FILE_DATA_TYPE use record NEXT at 0 range 0 .. 63; CODE at 8 range 0 .. 63; UNWIND at 16 range 0 .. 63; FID_NUM at 24 range 0 .. 15; FID_SEQ at 26 range 0 .. 15; FID_RVN at 28 range 0 .. 7; FID_NMX at 29 range 0 .. 7; FILLER_1 at 30 range 0 .. 15; FILE_DATA_LENGTH at 32 range 0 .. 63; STATUS at 40 range 0 .. 31; STV at 44 range 0 .. 31; FLAGS at 48 range 0 .. 15; NAME_LENGTH at 50 range 0 .. 15; NAME at 52 range 0 .. 7; end record; for DMP_FILE_DATA_TYPE'SIZE use 424; DMP_FILE_DATA_TYPE_INIT : constant DMP_FILE_DATA_TYPE := (NEXT => (0, 0), CODE => (0, 0), UNWIND => (0, 0), FID_NUM => 0, FID_SEQ => 0, FID_RVN => 0, FID_NMX => 0, FILLER_1 => 0, FILE_DATA_LENGTH => (0, 0), STATUS => 0, STV => 0, FLAGS => DMP_FILE_FLAGS_TYPE_INIT, NAME_LENGTH => 0, NAME => (others => ASCII.NUL)); DMP_CODE_M_SEPARATE : constant := 16#00000001#; DMP_CODE_K_LENGTH : constant := 64; -- Length of DMP_CODE_DATA type DMP_CODE_FLAGS_TYPE is record SEPARAT : BOOLEAN; -- This DMP_CODE_DATA was allocated separately (pre-reorg) FILLER_1 : UNSIGNED_15; end record; for DMP_CODE_FLAGS_TYPE use record SEPARAT at 0 range 0 .. 0; FILLER_1 at 0 range 1 .. 15; end record; for DMP_CODE_FLAGS_TYPE'SIZE use 16; DMP_CODE_FLAGS_TYPE_INIT : constant DMP_CODE_FLAGS_TYPE := (SEPARAT => FALSE, FILLER_1 => 0); type DMP_CODE_DATA_TYPE is record NEXT : UNSIGNED_QUADWORD; -- Pointer to next DMP_CODE_DATA for this file UNWIND : UNSIGNED_QUADWORD; -- Pointer to DMP_UNWIND_DATA for this code segment SEGNUM : UNSIGNED_QUADWORD; -- Code segment number CODE_OFFSET : UNSIGNED_QUADWORD; -- Start offset of this code segment within the image CODE_SIZE : UNSIGNED_QUADWORD; -- Size of this code segment INFO_OFFSET : UNSIGNED_QUADWORD; -- Start offset within unwind segment for this code segment INFO_SIZE : UNSIGNED_QUADWORD; -- Size of unwind data for this code segment FLAGS : DMP_CODE_FLAGS_TYPE; FILLER_1 : STRING(1 .. 6); -- filler to octaword end record; for DMP_CODE_DATA_TYPE use record NEXT at 0 range 0 .. 63; UNWIND at 8 range 0 .. 63; SEGNUM at 16 range 0 .. 63; CODE_OFFSET at 24 range 0 .. 63; CODE_SIZE at 32 range 0 .. 63; INFO_OFFSET at 40 range 0 .. 63; INFO_SIZE at 48 range 0 .. 63; FLAGS at 56 range 0 .. 15; FILLER_1 at 58 range 0 .. 47; end record; for DMP_CODE_DATA_TYPE'SIZE use 512; DMP_CODE_DATA_TYPE_INIT : constant DMP_CODE_DATA_TYPE := (NEXT => (0, 0), UNWIND => (0, 0), SEGNUM => (0, 0), CODE_OFFSET => (0, 0), CODE_SIZE => (0, 0), INFO_OFFSET => (0, 0), INFO_SIZE => (0, 0), FLAGS => DMP_CODE_FLAGS_TYPE_INIT, FILLER_1 => (others => ASCII.NUL)); DMP_UNWIND_M_NOT_HERE : constant := 16#00000001#; DMP_UNWIND_M_SEPARATE : constant := 16#00000002#; DMP_UNWIND_K_LENGTH : constant := 80; -- Length of DMP_UNWIND_DATA type DMP_UNWIND_FLAGS_TYPE is record NOT_HERE : BOOLEAN; -- The unwind segment wasn't kept in memory during dump copy SEPARAT : BOOLEAN; -- This DMP_UNWIND_DATA was allocated separately (pre-reorg) FILLER_1 : UNSIGNED_14; end record; for DMP_UNWIND_FLAGS_TYPE use record NOT_HERE at 0 range 0 .. 0; SEPARAT at 0 range 1 .. 1; FILLER_1 at 0 range 2 .. 15; end record; for DMP_UNWIND_FLAGS_TYPE'SIZE use 16; DMP_UNWIND_FLAGS_TYPE_INIT : constant DMP_UNWIND_FLAGS_TYPE := (NOT_HERE => FALSE, SEPARAT => FALSE, FILLER_1 => 0); type DMP_UNWIND_DATA_TYPE is record NEXT : UNSIGNED_QUADWORD; -- Pointer to next DMP_UNWIND_DATA for this file SEGMENT : UNSIGNED_QUADWORD; -- Address of in-memory copy of actual unwind segment SEGLEN : UNSIGNED_QUADWORD; -- Length of in-memory copy of the unwind segment SEGNUM : UNSIGNED_QUADWORD; -- Unwind segment number IMAGE_OFFSET : UNSIGNED_QUADWORD; -- Start offset of this unwind segment within the image IMAGE_SEGLEN : UNSIGNED_QUADWORD; -- Size of unwind segment in image file UNWTAB_LENGTH : UNSIGNED_QUADWORD; -- Size (in bytes) of unwind table portion of this segment CODESEG_COUNT : UNSIGNED_LONGWORD; -- Number of code segments described by this segment VBN : UNSIGNED_LONGWORD; -- Relative VBN in collection for this unwind segment BLOCKS : UNSIGNED_LONGWORD; -- Count of blocks for this unwind segment FLAGS : DMP_UNWIND_FLAGS_TYPE; FILLER_1 : STRING(1 .. 10); -- filler to octaword end record; for DMP_UNWIND_DATA_TYPE use record NEXT at 0 range 0 .. 63; SEGMENT at 8 range 0 .. 63; SEGLEN at 16 range 0 .. 63; SEGNUM at 24 range 0 .. 63; IMAGE_OFFSET at 32 range 0 .. 63; IMAGE_SEGLEN at 40 range 0 .. 63; UNWTAB_LENGTH at 48 range 0 .. 63; CODESEG_COUNT at 56 range 0 .. 31; VBN at 60 range 0 .. 31; BLOCKS at 64 range 0 .. 31; FLAGS at 68 range 0 .. 15; FILLER_1 at 70 range 0 .. 79; end record; for DMP_UNWIND_DATA_TYPE'SIZE use 640; DMP_UNWIND_DATA_TYPE_INIT : constant DMP_UNWIND_DATA_TYPE := (NEXT => (0, 0), SEGMENT => (0, 0), SEGLEN => (0, 0), SEGNUM => (0, 0), IMAGE_OFFSET => (0, 0), IMAGE_SEGLEN => (0, 0), UNWTAB_LENGTH => (0, 0), CODESEG_COUNT => 0, VBN => 0, BLOCKS => 0, FLAGS => DMP_UNWIND_FLAGS_TYPE_INIT, FILLER_1 => (others => ASCII.NUL)); end DMPDEF;