/***************************************************************************/ /** **/ /** HPE CONFIDENTIAL. This software is confidential proprietary software **/ /** licensed by Hewlett-Packard Enterprise Development, LP, and is not **/ /** authorized to be used, duplicated OR disclosed to anyone without the **/ /** prior written permission of HPE. **/ /** © 2023 Copyright Hewlett-Packard Enterprise Development, LP **/ /** **/ /** VMS SOFTWARE, INC. CONFIDENTIAL. This software is confidential **/ /** proprietary software licensed by VMS Software, Inc., and is not **/ /** authorized to be used, duplicated or disclosed to anyone without **/ /** the prior written permission of VMS Software, Inc. **/ /** © 2023 Copyright VMS Software, Inc. **/ /** **/ /***************************************************************************/ /********************************************************************************************************************************/ /* Created: 9-Nov-2023 12:06:53 by OpenVMS SDL V3.7 */ /* Source: 30-JUN-2020 06:26:52 $1$DGA8345:[LIB_H.SRC]PROC_READ_WRITE.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE proc_read_write ***/ #ifndef __PROC_READ_WRITE_LOADED #define __PROC_READ_WRITE_LOADED 1 #pragma __nostandard /* This file uses non-ANSI-Standard features */ #pragma __member_alignment __save #pragma __nomember_alignment #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __save /* Save the previously-defined required ptr size */ #pragma __required_pointer_size __short /* And set ptr size default to 32-bit pointers */ #endif #ifdef __cplusplus extern "C" { #define __unknown_params ... #define __optional_params ... #else #define __unknown_params #define __optional_params ... #endif #ifndef __struct #if !defined(__VAXC) #define __struct struct #else #define __struct variant_struct #endif #endif #ifndef __union #if !defined(__VAXC) #define __union union #else #define __union variant_union #endif #endif /*++ */ /* Facility: */ /* */ /* SYS */ /* */ /* Abstract: */ /* */ /* This module defines all the constants and data structures for */ /* PROC_READ_WRITE.BLI which are specific to that module. */ /* */ /* Environment: */ /* */ /* Kernel mode at IPL = 0 */ /* */ /* Author: Steve DiPirro , Creation date: 30-JAN-1991 */ /* */ /* Modified by: */ /* */ /* X-14 HB Hartmut Becker 30-Jun-2020 */ /* Fix constant for Alpha pseudo register size. */ /* For X86, remove (Alpha/IA64?) floating point registers. */ /* */ /* X-13 RAB Richard A. Bishop 16-Jul-2019 */ /* Change RIP cell name from PC to RIP (x86 only) */ /* */ /* X-12 CEG0495 Clair Grant 16-May-2018 */ /* Fix multiple definition of float_regs_length */ /* */ /* X-11 CEG0494 Clair Grant 15-May-2018 */ /* A couple more build bugs */ /* */ /* X-10 CEG0492 Clair Grant 15-May-2018 */ /* Fix a couple build bugs */ /* */ /* X-9 CV-0174 Camiel Vanderhoeven 11-May-2018 */ /* Provide X86 specifics. */ /* */ /* X-8 CEG0133 Clair Grant 11-May-2017 */ /* Verified conditionals for x86 port. */ /* Updated copyright to VSI. */ /* */ /* X-7 PM Pramod Mangalore 02-Feb-2010 */ /* PTR 75-13-2205/QXCM1000976519 */ /* Add a new constant EACB$K_PC_PSL. */ /* */ /* X-6 RAB Richard A. Bishop 11-Jun-2004 */ /* Add a cell for the actual size of the extended ACB. */ /* If it's over 65K, the size won't fit in the ACB$W_SIZE */ /* field. */ /* */ /* X-5 CAD Chip Dancy 20-Jun-2003 */ /* Increase IA64 memory pool size to 16384. */ /* */ /* X-4 CAD Chip Dancy 16-May-2003 */ /* Add IPF fields. */ /* */ /* X-3 RAB Richard A. Bishop 06-Dec-2002 */ /* Add IA64 register set */ /* */ /* X-2 RAB Richard A. Bishop 07-Feb-2000 */ /* Add new class of processor registers */ /* */ /* (fix audit trail - idents are out of step) */ /* */ /* X-2 RS00178 Richard Sayde 28-Oct-1991 */ /* Add definitions to be able to read and write registers. */ /* */ /* X-1 RS00175 Richard Sayde 22-Oct-1991 */ /* Put module into CMS - made some changes based on the */ /* way SDA solved the problem. */ /*--- */ /* */ /* */ /* */ /* ACB extensions to accommodate various additional pieces of information */ /* needed to complete process read/write operations. */ /* */ #define EACB$K_MEMORY 1 /* virtual memory */ #define EACB$K_GENERAL_REGISTER 2 /* RAX..R15,PC,RFLAGS */ #define EACB$K_PSEUDO_REGISTER 3 /* In-memory Alpha/VAX registers */ #define EACB$K_MMX_REGISTER 4 /* MM0..7 */ #define EACB$K_XMM_REGISTER 5 /* XMM0..31 */ #define EACB$K_YMM_REGISTER 6 /* YMM0..31 */ #define EACB$K_ZMM_REGISTER 7 /* ZMM0..31 */ #define EACB$K_INTERNAL_REGISTER 8 /* VIRBND,SYSPTBR etc */ #define EACB$K_INVOCATION_CONTEXT 9 /* ICB */ #define EACB$K_PC_PSL 10 /* PC,PS */ #define EACB$K_GEN_REGISTER_SIZE 8 /* Number of bytes in a general */ /* register */ #define EACB$K_RAX 0 #define EACB$K_RCX 1 #define EACB$K_RDX 2 #define EACB$K_RBX 3 #define EACB$K_RSI 4 #define EACB$K_RDI 5 #define EACB$K_RSP 6 #define EACB$K_RBP 7 #define EACB$K_R8 8 #define EACB$K_R9 9 #define EACB$K_R10 10 #define EACB$K_R11 11 #define EACB$K_R12 12 #define EACB$K_R13 13 #define EACB$K_R14 14 #define EACB$K_R15 15 #define EACB$K_PC 16 #define EACB$K_RFLAGS 17 #define EACB$K_GEN_REGS_LENGTH 18 #define EACB$K_PSEUDO_REGISTER_SIZE 8 #define EACB$K_PR0 0 #define EACB$K_PR1 1 #define EACB$K_PR2 2 #define EACB$K_PR3 3 #define EACB$K_PR4 4 #define EACB$K_PR5 5 #define EACB$K_PR6 6 #define EACB$K_PR7 7 #define EACB$K_PR8 8 #define EACB$K_PR9 9 #define EACB$K_PR10 10 #define EACB$K_PR11 11 #define EACB$K_PR12 12 #define EACB$K_PR13 13 #define EACB$K_PR14 14 #define EACB$K_PR15 15 #define EACB$K_PR16 16 #define EACB$K_PR17 17 #define EACB$K_PR18 18 #define EACB$K_PR19 19 #define EACB$K_PR20 20 #define EACB$K_PR21 21 #define EACB$K_PR22 22 #define EACB$K_PR23 23 #define EACB$K_PR24 24 #define EACB$K_PR25 25 #define EACB$K_PR26 26 #define EACB$K_PR27 27 #define EACB$K_PR28 28 #define EACB$K_PR29 29 #define EACB$K_PR30 30 #define EACB$K_PR31 31 #define EACB$K_PSEUDO_REGS_LENGTH 32 /* Verified for x86 port - Camiel Vanderhoeven */ #define EACB$K_MMX_REGISTER_SIZE 8 #define EACB$K_MM0 0 #define EACB$K_MM1 1 #define EACB$K_MM2 2 #define EACB$K_MM3 3 #define EACB$K_MM4 4 #define EACB$K_MM5 5 #define EACB$K_MM6 6 #define EACB$K_MM7 7 #define EACB$K_MMX_REGS_LENGTH 8 #define EACB$K_XMM_REGISTER_SIZE 16 #define EACB$K_XMM0 0 #define EACB$K_XMM1 1 #define EACB$K_XMM2 2 #define EACB$K_XMM3 3 #define EACB$K_XMM4 4 #define EACB$K_XMM5 5 #define EACB$K_XMM6 6 #define EACB$K_XMM7 7 #define EACB$K_XMM8 8 #define EACB$K_XMM9 9 #define EACB$K_XMM10 10 #define EACB$K_XMM11 11 #define EACB$K_XMM12 12 #define EACB$K_XMM13 13 #define EACB$K_XMM14 14 #define EACB$K_XMM15 15 #define EACB$K_XMM16 16 #define EACB$K_XMM17 17 #define EACB$K_XMM18 18 #define EACB$K_XMM19 19 #define EACB$K_XMM20 20 #define EACB$K_XMM21 21 #define EACB$K_XMM22 22 #define EACB$K_XMM23 23 #define EACB$K_XMM24 24 #define EACB$K_XMM25 25 #define EACB$K_XMM26 26 #define EACB$K_XMM27 27 #define EACB$K_XMM28 28 #define EACB$K_XMM29 29 #define EACB$K_XMM30 30 #define EACB$K_XMM31 31 #define EACB$K_XMM_REGS_LENGTH 32 #define EACB$K_YMM_REGISTER_SIZE 32 #define EACB$K_YMM0 0 #define EACB$K_YMM1 1 #define EACB$K_YMM2 2 #define EACB$K_YMM3 3 #define EACB$K_YMM4 4 #define EACB$K_YMM5 5 #define EACB$K_YMM6 6 #define EACB$K_YMM7 7 #define EACB$K_YMM8 8 #define EACB$K_YMM9 9 #define EACB$K_YMM10 10 #define EACB$K_YMM11 11 #define EACB$K_YMM12 12 #define EACB$K_YMM13 13 #define EACB$K_YMM14 14 #define EACB$K_YMM15 15 #define EACB$K_YMM16 16 #define EACB$K_YMM17 17 #define EACB$K_YMM18 18 #define EACB$K_YMM19 19 #define EACB$K_YMM20 20 #define EACB$K_YMM21 21 #define EACB$K_YMM22 22 #define EACB$K_YMM23 23 #define EACB$K_YMM24 24 #define EACB$K_YMM25 25 #define EACB$K_YMM26 26 #define EACB$K_YMM27 27 #define EACB$K_YMM28 28 #define EACB$K_YMM29 29 #define EACB$K_YMM30 30 #define EACB$K_YMM31 31 #define EACB$K_YMM_REGS_LENGTH 32 #define EACB$K_ZMM_REGISTER_SIZE 64 #define EACB$K_ZMM0 0 #define EACB$K_ZMM1 1 #define EACB$K_ZMM2 2 #define EACB$K_ZMM3 3 #define EACB$K_ZMM4 4 #define EACB$K_ZMM5 5 #define EACB$K_ZMM6 6 #define EACB$K_ZMM7 7 #define EACB$K_ZMM8 8 #define EACB$K_ZMM9 9 #define EACB$K_ZMM10 10 #define EACB$K_ZMM11 11 #define EACB$K_ZMM12 12 #define EACB$K_ZMM13 13 #define EACB$K_ZMM14 14 #define EACB$K_ZMM15 15 #define EACB$K_ZMM16 16 #define EACB$K_ZMM17 17 #define EACB$K_ZMM18 18 #define EACB$K_ZMM19 19 #define EACB$K_ZMM20 20 #define EACB$K_ZMM21 21 #define EACB$K_ZMM22 22 #define EACB$K_ZMM23 23 #define EACB$K_ZMM24 24 #define EACB$K_ZMM25 25 #define EACB$K_ZMM26 26 #define EACB$K_ZMM27 27 #define EACB$K_ZMM28 28 #define EACB$K_ZMM29 29 #define EACB$K_ZMM30 30 #define EACB$K_ZMM31 31 #define EACB$K_ZMM_REGS_LENGTH 32 #define EACB$K_INT_REGISTER_SIZE 8 #define EACB$K_VIRBND 0 #define EACB$K_SYSPTBR 1 #define EACB$K_SCC 2 /* VIRBND,SYSPTBR etc */ #define EACB$K_INT_REGS_LENGTH 3 /*Invocation Context size is in ICBDEF */ #define EACB$K_MEMORY_POOL_SIZE 16384 /* Memory pool size following EACB */ #define EACB$M_DONE 0x1 #define EACB$M_HALF_DONE 0x2 #define EACB$M_SUSPEND 0x4 #define EACB$K_BLOCK_SIZE 68 /*Length of data block */ struct acb_extend { unsigned __int64 eacb$q_local_adr; /*Local process address */ unsigned __int64 eacb$q_target_adr_type; /*target type, one of: */ /* Verified for x86 port - Camiel Vanderhoeven */ unsigned __int64 eacb$q_target_adr; /*Target process address */ /* Verified for x86 port - Camiel Vanderhoeven */ /* Temporary for xbuild, needs x86 review - Clair Grant */ unsigned __int64 eacb$q_status_adr; /*Address of src process status longword */ /* Temporary for xbuild, needs x86 review - Clair Grant */ unsigned __int64 eacb$q_memory_pool_addr; /*Address of memory pool following EACB */ unsigned int eacb$l_status_icb_alert_code; /*ICB error status or zero */ unsigned int eacb$l_status; /*Operation completion status */ unsigned int eacb$l_buffer_size; /*Buffer size to transfer */ unsigned int eacb$l_local_pid; /*Local process PID */ unsigned int eacb$l_image_count; /*Process image count */ __union { /* */ unsigned int eacb$l_flags; /*For references to whole thing */ __struct { /*For individual bits */ unsigned eacb$v_done : 1; /*Operation complete flag */ unsigned eacb$v_half_done : 1; /*Operation partly complete flag */ unsigned eacb$v_suspend : 1; /*Set if target process should suspend */ unsigned eacb$v_fill_0_ : 5; } eacb$r_flags_bits; /* */ } eacb$r_flags_field; /* */ unsigned int eacb$l_acb_extend_size; /*Size of extended ACB actually allocated */ } ; #if !defined(__VAXC) #define eacb$l_flags eacb$r_flags_field.eacb$l_flags #define eacb$r_flags_bits eacb$r_flags_field.eacb$r_flags_bits #define eacb$v_done eacb$r_flags_bits.eacb$v_done #define eacb$v_half_done eacb$r_flags_bits.eacb$v_half_done #define eacb$v_suspend eacb$r_flags_bits.eacb$v_suspend #endif /* #if !defined(__VAXC) */ #define PRCSTK$K_NOFP_SAVE_SIZE 144 struct proc_save_regs { /* Verified for x86 port - Camiel Vanderhoeven */ unsigned __int64 prcstk$q_rax; /* Saved RAX */ unsigned __int64 prcstk$q_rcx; /* Saved RCX */ unsigned __int64 prcstk$q_rdx; /* Saved RDX */ unsigned __int64 prcstk$q_rbx; /* Saved RBX */ unsigned __int64 prcstk$q_rsi; /* Saved RSI */ unsigned __int64 prcstk$q_rdi; /* Saved RDI */ unsigned __int64 prcstk$q_rsp; /* Saved RSP */ unsigned __int64 prcstk$q_rbp; /* Saved RBP */ unsigned __int64 prcstk$q_r8; /* Saved R8 */ unsigned __int64 prcstk$q_r9; /* Saved R9 */ unsigned __int64 prcstk$q_r10; /* Saved R10 */ unsigned __int64 prcstk$q_r11; /* Saved R11 */ unsigned __int64 prcstk$q_r12; /* Saved R12 */ unsigned __int64 prcstk$q_r13; /* Saved R13 */ unsigned __int64 prcstk$q_r14; /* Saved R14 */ unsigned __int64 prcstk$q_r15; /* Saved R15 */ unsigned __int64 prcstk$q_rip; /* Saved RIP */ unsigned __int64 prcstk$q_rflags; /* Saved RFLAGS */ } ; #define PRCSTK$K_INTREG_SAVE_SIZE 24 struct proc_save_int_regs { unsigned __int64 prcstk$q_virbnd; /* Saved VIRBND */ unsigned __int64 prcstk$q_sysptbr; /* Saved SYSPTBR */ unsigned __int64 prcstk$q_scc; /* Saved SCC */ } ; /* */ /* End of module proc_read_write */ /* */ #pragma __member_alignment __restore #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __restore /* Restore the previously-defined required ptr size */ #endif #ifdef __cplusplus } #endif #pragma __standard #endif /* __PROC_READ_WRITE_LOADED */