--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:28 by OpenVMS SDL EV3-3 -- Source: 18-APR-2008 15:21:59 $1$DGA8085:[LIB_ADA.LIS]KFERESDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package KFERESDEF is -- module $KFERESDEF -- -- KNOWN FILE ENTRY DEFINITIONS FOR RESIDENT SECTIONS -- -- Note: The image activator also copies this structure and -- expands the structure to represent the image's data -- sections which have been compressed in process space. -- KFERES_M_SHARE_LINK : constant := 16#00000001#; KFERES_M_64BIT_SECTIONS : constant := 16#00000002#; KFERES_K_FIXED_LENGTH : constant := 32; KFERES_C_FIXED_LENGTH : constant := 32; KFERES_S_KFERESDEF : constant := 32; -- Old size name - synonym type KFERES_FLAGS_TYPE is -- Flags field record SHARE_LINK : BOOLEAN; -- Image is installed in a special way -- to gain maximum performance (linkage -- has been made shareable). KFERES_64BIT_SECTIONS : BOOLEAN; -- 64-bit section records FILLER_1 : UNSIGNED_30; end record; for KFERES_FLAGS_TYPE use record SHARE_LINK at 0 range 0 .. 0; KFERES_64BIT_SECTIONS at 0 range 1 .. 1; FILLER_1 at 0 range 2 .. 31; end record; for KFERES_FLAGS_TYPE'SIZE use 32; KFERES_FLAGS_TYPE_INIT : constant KFERES_FLAGS_TYPE := (SHARE_LINK => FALSE, KFERES_64BIT_SECTIONS => FALSE, FILLER_1 => 0); type KFERES_TYPE is record KFE : ADDRESS; -- Back pointer to KFE COUNT : UNSIGNED_LONGWORD; -- Count of resident sections SIZE : UNSIGNED_WORD; -- Size of block TYP : UNSIGNED_BYTE; -- Structure type SUBTYP : UNSIGNED_BYTE; -- Subtype DATA_COUNT : UNSIGNED_LONGWORD; -- Count of data sections FIXUP_BUFFER : ADDRESS; -- Pointer to fixup buffer FIXUP_SIZE : UNSIGNED_LONGWORD; -- Size of fixup buffer FLAGS : KFERES_FLAGS_TYPE; -- Flags field START_ADDRESS : ADDRESS; -- For images installed with shareable -- linkage, this is the starting P1 address SECTIONS : STRING(1 .. 4); -- Offset to sections -- (needs an abitrary nonzero length for C) end record; for KFERES_TYPE use record KFE at 0 range 0 .. 31; COUNT at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; DATA_COUNT at 12 range 0 .. 31; FIXUP_BUFFER at 16 range 0 .. 31; FIXUP_SIZE at 20 range 0 .. 31; FLAGS at 24 range 0 .. 31; START_ADDRESS at 28 range 0 .. 31; SECTIONS at 32 range 0 .. 31; end record; for KFERES_TYPE'SIZE use 288; KFERES_TYPE_INIT : constant KFERES_TYPE := (KFE => ADDRESS_ZERO, COUNT => 0, SIZE => 0, TYP => 0, SUBTYP => 0, DATA_COUNT => 0, FIXUP_BUFFER => ADDRESS_ZERO, FIXUP_SIZE => 0, FLAGS => KFERES_FLAGS_TYPE_INIT, START_ADDRESS => ADDRESS_ZERO, SECTIONS => (others => ASCII.NUL)); KFERES_K_COMPRESSED_DATA : constant := 0; -- For SDA use only KFERES_K_READ_ONLY_DATA : constant := 1; KFERES_K_CODE : constant := 2; KFERES_K_DZRO : constant := 3; KFERES_K_WRT : constant := 4; KFERES_K_LINKAGE : constant := 5; KFERES_K_RESIDENT_CODE : constant := 6; -- For SDA use only KFERES_K_RESIDENT_DATA : constant := 7; -- For SDA use only KFERES_K_UNKNOWN : constant := 8; -- For SDA use only KFERES_M_SHARESECT : constant := 16#00000001#; KFERES_C_SECTION_LENGTH : constant := 24; KFERES_K_SECTION_LENGTH : constant := 24; KFERES_S_KFERESDEF_SECTION : constant := 24; -- Old size name - synonym type KFERES_SECTION_FLAGS_TYPE is -- Name attributes record SHARESECT : BOOLEAN; -- Section is shareable FILLER_1 : UNSIGNED_31; end record; for KFERES_SECTION_FLAGS_TYPE use record SHARESECT at 0 range 0 .. 0; FILLER_1 at 0 range 1 .. 31; end record; for KFERES_SECTION_FLAGS_TYPE'SIZE use 32; KFERES_SECTION_FLAGS_TYPE_INIT : constant KFERES_SECTION_FLAGS_TYPE := (SHARESECT => FALSE, FILLER_1 => 0); type KFERES_SECTION_TYPE is record VA : ADDRESS; -- Starting VA LENGTH : UNSIGNED_LONGWORD; -- Length in bytes VBN : UNSIGNED_LONGWORD; -- Starting VBN in image file IMAGE_OFFSET : ADDRESS; -- VA offset in image SECTION_TYPE : UNSIGNED_LONGWORD; -- Type of section SECTION_FLAGS : KFERES_SECTION_FLAGS_TYPE; -- Name attributes end record; for KFERES_SECTION_TYPE use record VA at 0 range 0 .. 31; LENGTH at 4 range 0 .. 31; VBN at 8 range 0 .. 31; IMAGE_OFFSET at 12 range 0 .. 31; SECTION_TYPE at 16 range 0 .. 31; SECTION_FLAGS at 20 range 0 .. 31; end record; for KFERES_SECTION_TYPE'SIZE use 192; KFERES_SECTION_TYPE_INIT : constant KFERES_SECTION_TYPE := (VA => ADDRESS_ZERO, LENGTH => 0, VBN => 0, IMAGE_OFFSET => ADDRESS_ZERO, SECTION_TYPE => 0, SECTION_FLAGS => KFERES_SECTION_FLAGS_TYPE_INIT ); KFERES64_M_SHARESECT : constant := 16#00000001#; KFERES64_C_SECTION_LENGTH : constant := 48; KFERES64_K_SECTION_LENGTH : constant := 48; type KFERES64_SECTION_FLAGS_TYPE is -- Name attributes record SHARESECT : BOOLEAN; -- Section is shareable FILLER_1 : UNSIGNED_31; end record; for KFERES64_SECTION_FLAGS_TYPE use record SHARESECT at 0 range 0 .. 0; FILLER_1 at 0 range 1 .. 31; end record; for KFERES64_SECTION_FLAGS_TYPE'SIZE use 32; KFERES64_SECTION_FLAGS_TYPE_INIT : constant KFERES64_SECTION_FLAGS_TYPE := (SHARESECT => FALSE, FILLER_1 => 0); type KFERES64_KFERES_64BIT_SECTION_TYPE is record NEXT : ADDRESS; -- Pointer to next KFERES64 VBN : UNSIGNED_LONGWORD; -- Starting VBN in image file SIZE : UNSIGNED_WORD; -- Size of block TYP : UNSIGNED_BYTE; -- Structure type SUBTYP : UNSIGNED_BYTE; -- Subtype SECTION_TYPE : UNSIGNED_LONGWORD; -- Type of section SECTION_FLAGS : KFERES64_SECTION_FLAGS_TYPE; -- Name attributes FILLER_1 : UNSIGNED_LONGWORD; -- fill for quad alignment VA : UNSIGNED_QUADWORD; -- Starting VA LENGTH : UNSIGNED_QUADWORD; -- Length in bytes IMAGE_OFFSET : UNSIGNED_QUADWORD; -- VA offset in image end record; for KFERES64_KFERES_64BIT_SECTION_TYPE use record NEXT at 0 range 0 .. 31; VBN at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; SECTION_TYPE at 12 range 0 .. 31; SECTION_FLAGS at 16 range 0 .. 31; FILLER_1 at 20 range 0 .. 31; VA at 24 range 0 .. 63; LENGTH at 32 range 0 .. 63; IMAGE_OFFSET at 40 range 0 .. 63; end record; for KFERES64_KFERES_64BIT_SECTION_TYPE'SIZE use 384; KFERES64_KFERES_64BIT_SECTION_TYPE_INIT : constant KFERES64_KFERES_64BIT_SECTION_TYPE := (NEXT => ADDRESS_ZERO, VBN => 0, SIZE => 0, TYP => 0, SUBTYP => 0, SECTION_TYPE => 0, SECTION_FLAGS => KFERES64_SECTION_FLAGS_TYPE_INIT, FILLER_1 => 0, VA => (0, 0), LENGTH => (0, 0), IMAGE_OFFSET => (0, 0)); end KFERESDEF;