--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:33 by OpenVMS SDL EV3-3 -- Source: 31-MAR-1997 10:56:26 $1$DGA8085:[LIB_ADA.LIS]PLVDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package PLVDEF is -- module $PLVDEF --+ -- PRIVILEGED LIBRARY VECTOR DEFINITION --- -- -- ********* NOTE WELL ********* -- -- The following masks must EXACTLY EQUAL the SSFLAG masks defined in -- [LIB]VECTORS.SDL. The system service dispatcher assumes, for example, that -- PLV$M_WAIT_CALLERS_MODE equals SSFLAG_K_WCM. Ensure that any additions to -- the PLVFLG structure are reflected in [LIB]VECTORS.SDL (and vice versa). -- -- Also note that although PLVFLG is defined to be a quadword, the dispatcher -- treats the array of kernel flags and exec flags as an array of LONGWORD -- flags. Another interesting point is that the flags value for regular -- system services is limited to a byte. -- -- ********* END NOTE WELL ********* -- PLV_M_WAIT_CALLERS_MODE : constant := 16#00000001#; PLV_M_WAIT_CALLERS_NO_REEXEC : constant := 16#00000002#; PLV_M_CLRREG : constant := 16#00000004#; PLV_M_RETURN_ANY : constant := 16#00000008#; PLV_M_WCM_NO_SAVE : constant := 16#00000010#; PLV_M_STACK_ARGS : constant := 16#00000020#; PLV_M_THREAD_SAFE : constant := 16#00000040#; PLV_M_64_BIT_ARGS : constant := 16#00000080#; PLV_M_CHECK_UPCALL : constant := 16#00000100#; PLV_M_EXCLUSIVE : constant := 16#00000200#; PLV_M_TOLERANT : constant := 16#00000400#; PLV_M_IMSEM_RELEASE : constant := 16#00000800#; PLV_M_RESET_ASTEN : constant := 16#00001000#; type PLVFLG_TYPE is record WAIT_CALLERS_MODE : BOOLEAN; -- equals SSFLAG_K_WCM WAIT_CALLERS_NO_REEXEC : BOOLEAN; -- equals SSFLAG_K_WCM_NO_REEXEC CLRREG : BOOLEAN; -- equals SSFLAG_K_CLRREG RETURN_ANY : BOOLEAN; -- equals SSFLAG_K_RETURN_ANY WCM_NO_SAVE : BOOLEAN; -- equals SSFLAG_K_WCM_NO_SAVE STACK_ARGS : BOOLEAN; -- equals SSFLAG_K_STACK_ARGS THREAD_SAFE : BOOLEAN; -- equals SSFLAG_K_THREAD_SAFE PLV_64_BIT_ARGS : BOOLEAN; -- equals SSFLAG_K_64_BIT_ARGS CHECK_UPCALL : BOOLEAN; -- equals SSFLAG_K_CHECK_UPCALL EXCLUSIVE : BOOLEAN; -- equals SSFLAG_K_EXCLUSIVE TOLERANT : BOOLEAN; -- equals SSFLAG_K_TOLERANT IMSEM_RELEASE : BOOLEAN; -- equals SSFLAG_K_IMSEM_RELEASE RESET_ASTEN : BOOLEAN; -- equals SSFLAG_K_RESET_ASTEN FILLER_1 : BIT_ARRAY (0 .. 50); end record; for PLVFLG_TYPE use record WAIT_CALLERS_MODE at 0 range 0 .. 0; WAIT_CALLERS_NO_REEXEC at 0 range 1 .. 1; CLRREG at 0 range 2 .. 2; RETURN_ANY at 0 range 3 .. 3; WCM_NO_SAVE at 0 range 4 .. 4; STACK_ARGS at 0 range 5 .. 5; THREAD_SAFE at 0 range 6 .. 6; PLV_64_BIT_ARGS at 0 range 7 .. 7; CHECK_UPCALL at 1 range 0 .. 0; EXCLUSIVE at 1 range 1 .. 1; TOLERANT at 1 range 2 .. 2; IMSEM_RELEASE at 1 range 3 .. 3; RESET_ASTEN at 1 range 4 .. 4; FILLER_1 at 1 range 5 .. 55; end record; for PLVFLG_TYPE'SIZE use 64; PLV_C_LENGTH : constant := 44; -- Size of fixed portion PLV_S_PLVDEF : constant := 44; type PLV_MSG_DATA_TYPE is -- MSG type specific data record MSGDSP : INTEGER_32; -- self-rel ptr to message dispatcher MSG_ENTRY : UNSIGNED_LONGWORD; -- message dispatcher code MSG_SECTION : INTEGER_32; -- self-rel ptr to msg section end record; for PLV_MSG_DATA_TYPE use record MSGDSP at 0 range 0 .. 31; MSG_ENTRY at 4 range 0 .. 31; MSG_SECTION at 8 range 0 .. 31; end record; for PLV_MSG_DATA_TYPE'SIZE use 96; PLV_MSG_DATA_TYPE_INIT : constant PLV_MSG_DATA_TYPE := (MSGDSP => 0, MSG_ENTRY => 0, MSG_SECTION => 0); type PLV_FLAGS_TYPE is record MAIN_IMAGE : BOOLEAN; -- Closest to system service FILLER_1 : UNSIGNED_31; end record; for PLV_FLAGS_TYPE use record MAIN_IMAGE at 0 range 0 .. 0; FILLER_1 at 0 range 1 .. 31; end record; for PLV_FLAGS_TYPE'SIZE use 32; PLV_FLAGS_TYPE_INIT : constant PLV_FLAGS_TYPE := (MAIN_IMAGE => FALSE, FILLER_1 => 0); type PLV_SSI_DATA_TYPE is -- SSI type specific data record FLAGS : PLV_FLAGS_TYPE; SSI_ROUTINE_COUNT : UNSIGNED_LONGWORD; -- Count of SSI symbol vectors VECTOR_ADDRESS : ADDRESS; -- Private symbol vector address end record; for PLV_SSI_DATA_TYPE use record FLAGS at 0 range 0 .. 31; SSI_ROUTINE_COUNT at 4 range 0 .. 31; VECTOR_ADDRESS at 8 range 0 .. 31; end record; for PLV_SSI_DATA_TYPE'SIZE use 96; PLV_SSI_DATA_TYPE_INIT : constant PLV_SSI_DATA_TYPE := ( FLAGS => PLV_FLAGS_TYPE_INIT, SSI_ROUTINE_COUNT => 0, VECTOR_ADDRESS => ADDRESS_ZERO); type PLV_TYPE_SPECIFIC_TYPE is record KERNEL_ROUTINE_COUNT : UNSIGNED_LONGWORD; -- # of kernel routines EXEC_ROUTINE_COUNT : UNSIGNED_LONGWORD; -- # of exec routines KERNEL_ROUTINE_LIST : ADDRESS; -- addr of kernel list EXEC_ROUTINE_LIST : ADDRESS; -- addr of exec list KERNEL_RUNDOWN_HANDLER : ADDRESS; -- kern rundown routine EXEC_RUNDOWN_HANDLER : ADDRESS; -- exec rundown routine RMS_DISPATCHER : ADDRESS; -- RMS dispatch routine KERNEL_ROUTINE_FLAGS : ADDRESS; -- flags vector EXEC_ROUTINE_FLAGS : ADDRESS; -- flags vector ----Component(s) below are defined as comments since they ----overlap other fields ---- ----MSG_DATA : PLV_MSG_DATA_TYPE; -- MSG type specific data ----SSI_DATA : PLV_SSI_DATA_TYPE; -- SSI type specific data end record; for PLV_TYPE_SPECIFIC_TYPE use record KERNEL_ROUTINE_COUNT at 0 range 0 .. 31; EXEC_ROUTINE_COUNT at 4 range 0 .. 31; KERNEL_ROUTINE_LIST at 8 range 0 .. 31; EXEC_ROUTINE_LIST at 12 range 0 .. 31; KERNEL_RUNDOWN_HANDLER at 16 range 0 .. 31; EXEC_RUNDOWN_HANDLER at 20 range 0 .. 31; RMS_DISPATCHER at 24 range 0 .. 31; KERNEL_ROUTINE_FLAGS at 28 range 0 .. 31; EXEC_ROUTINE_FLAGS at 32 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----MSG_DATA at 0 range 0 .. 95; ----SSI_DATA at 0 range 0 .. 95; end record; for PLV_TYPE_SPECIFIC_TYPE'SIZE use 288; PLV_TYPE_SPECIFIC_TYPE_INIT : constant PLV_TYPE_SPECIFIC_TYPE := (KERNEL_ROUTINE_COUNT => 0, EXEC_ROUTINE_COUNT => 0, KERNEL_ROUTINE_LIST => ADDRESS_ZERO, EXEC_ROUTINE_LIST => ADDRESS_ZERO, KERNEL_RUNDOWN_HANDLER => ADDRESS_ZERO, EXEC_RUNDOWN_HANDLER => ADDRESS_ZERO, RMS_DISPATCHER => ADDRESS_ZERO, KERNEL_ROUTINE_FLAGS => ADDRESS_ZERO, EXEC_ROUTINE_FLAGS => ADDRESS_ZERO); type PLV_TYPE is record TYP : UNSIGNED_LONGWORD; -- TYPE CODE FOR VECTOR FORMAT VERSION : UNSIGNED_LONGWORD; -- SYSTEM VERSION NUMBER TYPE_SPECIFIC : PLV_TYPE_SPECIFIC_TYPE; end record; for PLV_TYPE use record TYP at 0 range 0 .. 31; VERSION at 4 range 0 .. 31; TYPE_SPECIFIC at 8 range 0 .. 287; end record; for PLV_TYPE'SIZE use 352; PLV_TYPE_INIT : constant PLV_TYPE := (TYP => 0, VERSION => 0, TYPE_SPECIFIC => PLV_TYPE_SPECIFIC_TYPE_INIT ); --+ -- TYPE CODES FOR PRIVILEGE VECTORS --- PLV_C_TYP_CMOD : constant := 1; -- CHANGE MODE VECTOR TYPE PLV_C_TYP_MSG : constant := 2; -- MESSAGE VECTOR TYPE PLV_C_TYP_SSI : constant := 3; -- SYSTEM SERVICE INTERCEPT TYPE end PLVDEF;