/***************************************************************************/ /** **/ /** 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:07:00 by OpenVMS SDL V3.7 */ /* Source: 23-APR-2021 13:12:45 $1$DGA8345:[LIB_H.SRC]LDRIMGDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $LDRIMGDEF ***/ #ifndef __LDRIMGDEF_LOADED #define __LDRIMGDEF_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 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _ldrisd { #pragma __nomember_alignment unsigned __int64 ldrisd$iq_vbn; /* image section VBN */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrisd$pq_base; /* process virtual image section base (relocated) */ #else unsigned __int64 ldrisd$pq_base; #endif unsigned __int64 ldrisd$iq_len; /* image section length in memory (filled from filesz with demand zero) */ unsigned __int64 ldrisd$iq_link_base; /* image section offset (linker base) */ unsigned __int64 ldrisd$iq_link_end; /* image section end (unrelocated, rounded to 'bigpage') */ /* to avoid privileged applications depending on the size of LDRISD, the size is recorded) */ unsigned __int64 ldrisd$iq_filesz; /* image section length in file */ unsigned int ldrisd$i_type; /* ELF segment type */ short int ldrisd$w_size; /* size of this structure */ short int ldrisd$w_stx; /* section table index */ unsigned int ldrisd$i_flags; /* ELF segment flags */ int ldrisd$l_reserved_1; /* reserve some space for debug/patch */ __int64 ldrisd$q_reserved_2 [2]; /* reserve some space for debug/patch */ } LDRISD; /* In support of Shared Address Data (SAD), an LDRRQI is created for each needed image. */ /* the LDRRQI contains dynamic table entries for needed images, plus the register */ /* image signature to verify that the proper image is activated. (if not, SAD cannot */ /* be used for that image activation) */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _ldrrqi { #pragma __nomember_alignment __int64 ldrrqi$q_needed; /* strtab index for needed image name */ __int64 ldrrqi$q_needed_ident; /* image ident (required IDENT of needed image) */ __int64 ldrrqi$q_fixup_rela_cnt; /* count of fixups */ __int64 ldrrqi$q_fixup_rela_off; /* dynseg offset to firs fixup */ char ldrrqi$b_risig [32]; /* image signiture */ __int64 ldrrqi$q_reserved [2]; /* reserve some space for debug/patch */ } LDRRQI; #define LDRIMG$M_NOT_XQP 0x1 #define LDRIMG$M_DELAY_INIT 0x2 #define LDRIMG$M_NO_PFN_DB 0x4 #define LDRIMG$M_NOOVERLAY 0x8 #define LDRIMG$M_CAN_UNL 0x10 #define LDRIMG$M_UNL_PEN 0x20 #define LDRIMG$M_SYNC 0x40 #define LDRIMG$M_VALID 0x80 #define LDRIMG$M_GSTVA_VALID 0x100 #define LDRIMG$M_PAGED_RELOC 0x200 #define LDRIMG$M_NONPAGED_RELOC 0x400 #define LDRIMG$M_PAGED_FIXUPS 0x800 #define LDRIMG$M_NONPAGED_FIXUPS 0x1000 #define LDRIMG$M_SECOND_PASS_FIXUP 0x2000 #define LDRIMG$M_NO_SLICE 0x4000 #define LDRIMG$M_DYN_LOAD 0x8000 #define LDRIMG$M_NPAGED_LOAD 0x10000 #define LDRIMG$M_MSG_LOADED 0x20000 #define LDRIMG$M_INITIALIZED 0x40000 #define LDRIMG$M_INIT_GONE 0x80000 #define LDRIMG$M_SDA 0x100000 #define LDRIMG$C_LENGTH 296 #define LDRIMG$K_LENGTH 296 #define LDRIMG$S_LDRIMGDEF 296 /* Old size name - synonym */ #ifdef __cplusplus /* Define structure prototypes */ struct _wcb; struct _imcb; struct _transfer_address; struct _spf_blk; struct _char; #endif /* #ifdef __cplusplus */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _ldrimg { #pragma __nomember_alignment #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrimg *ldrimg$pq_flink; /* forward link */ #else unsigned __int64 ldrimg$pq_flink; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrimg *ldrimg$pq_blink; /* backward link */ #else unsigned __int64 ldrimg$pq_blink; #endif unsigned short int ldrimg$w_size; /* structure size */ unsigned char ldrimg$b_type; /* DYN$C_LOADCODE */ unsigned char ldrimg$b_subtype; /* DYN$C_LDRIMG */ __union { unsigned int ldrimg$l_flags; /* status flags */ __struct { unsigned ldrimg$v_not_xqp : 1; /* not opened by XQP */ unsigned ldrimg$v_delay_init : 1; /* needs delayed initialization */ unsigned ldrimg$v_no_pfn_db : 1; /* no PFN data base when loaded */ unsigned ldrimg$v_nooverlay : 1; /* not overlaid by bugcheck */ unsigned ldrimg$v_can_unl : 1; /* unloadable exec image */ unsigned ldrimg$v_unl_pen : 1; /* exec image unload is pending */ unsigned ldrimg$v_sync : 1; /* synchronize access to this block */ unsigned ldrimg$v_valid : 1; /* contents of this block are valid */ unsigned ldrimg$v_gstva_valid : 1; /* GSTVA contains a valid address */ unsigned ldrimg$v_paged_reloc : 1; /* paged relocations done */ unsigned ldrimg$v_nonpaged_reloc : 1; /* nonpaged relocations done */ unsigned ldrimg$v_paged_fixups : 1; /* paged fix-ups done */ unsigned ldrimg$v_nonpaged_fixups : 1; /* Non-paged fix-ups done */ unsigned ldrimg$v_second_pass_fixup : 1; /* 2nd pass fixup required */ unsigned ldrimg$v_no_slice : 1; /* execlet not sliced */ unsigned ldrimg$v_dyn_load : 1; /* loaded by dynamic loader */ unsigned ldrimg$v_npaged_load : 1; /* paged code loaded nonpaged */ unsigned ldrimg$v_msg_loaded : 1; /* message section found/loaded */ unsigned ldrimg$v_initialized : 1; /* initialization complete */ unsigned ldrimg$v_init_gone : 1; /* when set, init sections have */ /* been deallocated - I64 only */ unsigned ldrimg$v_sda : 1; /* This is the execlet for an */ /* SDA extension */ unsigned ldrimg$v_fill_0_ : 3; } ldrimg$r_flags_bits; } ldrimg$r_flags_overlay; unsigned __int64 ldrimg$q_linktime; /* link time */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ int (*ldrimg$pq_init_rtn)(); /* delayed initialization routine */ #else unsigned __int64 ldrimg$pq_init_rtn; #endif int ldrimg$l_version; /* image version */ unsigned int ldrimg$l_fill1; /* Correct alignment */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _wcb *ldrimg$pq_wcb; /* WCB pointer */ #else unsigned __int64 ldrimg$pq_wcb; #endif int ldrimg$l_pid; /* pid of proc attempting load */ int ldrimg$l_chan; /* chan number */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_basimgvec; /* VA of list of base image vectors */ #else unsigned __int64 ldrimg$pq_basimgvec; #endif int ldrimg$l_num_basvec; /* number of base image contributions */ int ldrimg$l_seq; /* sequence number */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_unlvec; /* VA of unload routine vector */ #else unsigned __int64 ldrimg$pq_unlvec; #endif unsigned int ldrimg$l_fill2; /* correct alignment */ int ldrimg$l_refcnt; /* number of references pending */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_symvva; /* Address of symbol vector */ #else unsigned __int64 ldrimg$pq_symvva; #endif unsigned int ldrimg$l_symv_count; /* count of symbol vector entries */ unsigned int ldrimg$l_anomoly; /* count of unusual conditions detected */ /* while loading this image */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_ssvec; /* Address of system service vectors */ #else unsigned __int64 ldrimg$pq_ssvec; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_fst; /* Address of FST for boot time IO */ #else unsigned __int64 ldrimg$pq_fst; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_vec_segment; /* Address of segment(isect) with VEC attribute */ #else unsigned __int64 ldrimg$pq_vec_segment; #endif unsigned int ldrimg$l_segcount; /* count of segments */ unsigned int ldrimg$l_imgnamlen; /* count for image name */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrisd *ldrimg$pq_segments; /* pointer to ISD array */ #else unsigned __int64 ldrimg$pq_segments; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrisd *ldrimg$pq_dyn_seg; /* pointer to the dynamic segment ISD */ #else unsigned __int64 ldrimg$pq_dyn_seg; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ char *ldrimg$pq_imgnam; /* image name string */ #else unsigned __int64 ldrimg$pq_imgnam; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _imcb *ldrimg$pq_imcb; /* pointer to IMCB (for process iamges) */ #else unsigned __int64 ldrimg$pq_imcb; #endif unsigned int ldrimg$l_needed_count; /* count of needed images */ unsigned int ldrimg$l_link_flags; /* linker flags (DT_VMS_LNKFLAGS) */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _transfer_address *ldrimg$p_tfradr; /* pointer to ELF transfer adress struct. */ #else unsigned __int64 ldrimg$p_tfradr; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrimg (*(*ldrimg$pq_needed)); /* pointer to array of pointers to needed images */ #else unsigned __int64 ldrimg$pq_needed; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _spf_blk (*(*ldrimg$pq_needed_spf)); /* array of pointers to 2nd pass fixups */ #else unsigned __int64 ldrimg$pq_needed_spf; #endif unsigned int ldrimg$l_ldrimg_size; /* length of the LDRIMG structure. */ unsigned int ldrimg$l_ldrisd_size; /* length of each LDRISD structure. */ unsigned int ldrimg$l_xlated; /* translated image type. */ unsigned int ldrimg$l_public_image_index; /* */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_public_image_flink; /* queue element for "public" execlets */ #else unsigned __int64 ldrimg$pq_public_image_flink; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrimg$pq_public_image_blink; #else unsigned __int64 ldrimg$pq_public_image_blink; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrrqi *ldrimg$pq_ldrrqi; /* pointer to array of LDRRQI */ #else unsigned __int64 ldrimg$pq_ldrrqi; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _char *ldrimg$pq_strtab; /* pointer to string table */ #else unsigned __int64 ldrimg$pq_strtab; #endif __int64 ldrimg$q_reserved_1; /* reserved space for debug/patch */ __int64 ldrimg$q_reserved_2 [4]; /* reserve some space for debug/patch */ } LDRIMG; #if !defined(__VAXC) #define ldrimg$l_flags ldrimg$r_flags_overlay.ldrimg$l_flags #define ldrimg$r_flags_bits ldrimg$r_flags_overlay.ldrimg$r_flags_bits #define ldrimg$v_not_xqp ldrimg$r_flags_bits.ldrimg$v_not_xqp #define ldrimg$v_delay_init ldrimg$r_flags_bits.ldrimg$v_delay_init #define ldrimg$v_no_pfn_db ldrimg$r_flags_bits.ldrimg$v_no_pfn_db #define ldrimg$v_nooverlay ldrimg$r_flags_bits.ldrimg$v_nooverlay #define ldrimg$v_can_unl ldrimg$r_flags_bits.ldrimg$v_can_unl #define ldrimg$v_unl_pen ldrimg$r_flags_bits.ldrimg$v_unl_pen #define ldrimg$v_sync ldrimg$r_flags_bits.ldrimg$v_sync #define ldrimg$v_valid ldrimg$r_flags_bits.ldrimg$v_valid #define ldrimg$v_gstva_valid ldrimg$r_flags_bits.ldrimg$v_gstva_valid #define ldrimg$v_paged_reloc ldrimg$r_flags_bits.ldrimg$v_paged_reloc #define ldrimg$v_nonpaged_reloc ldrimg$r_flags_bits.ldrimg$v_nonpaged_reloc #define ldrimg$v_paged_fixups ldrimg$r_flags_bits.ldrimg$v_paged_fixups #define ldrimg$v_nonpaged_fixups ldrimg$r_flags_bits.ldrimg$v_nonpaged_fixups #define ldrimg$v_second_pass_fixup ldrimg$r_flags_bits.ldrimg$v_second_pass_fixup #define ldrimg$v_no_slice ldrimg$r_flags_bits.ldrimg$v_no_slice #define ldrimg$v_dyn_load ldrimg$r_flags_bits.ldrimg$v_dyn_load #define ldrimg$v_npaged_load ldrimg$r_flags_bits.ldrimg$v_npaged_load #define ldrimg$v_msg_loaded ldrimg$r_flags_bits.ldrimg$v_msg_loaded #define ldrimg$v_initialized ldrimg$r_flags_bits.ldrimg$v_initialized #define ldrimg$v_init_gone ldrimg$r_flags_bits.ldrimg$v_init_gone #define ldrimg$v_sda ldrimg$r_flags_bits.ldrimg$v_sda #endif /* #if !defined(__VAXC) */ typedef struct _ldrhdl { #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *ldrhdl$pq_base; /* base virtual address */ #else unsigned __int64 ldrhdl$pq_base; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _ldrimg *ldrhdl$pq_ldrimg; /* ldrimg address of the loaded image */ #else unsigned __int64 ldrhdl$pq_ldrimg; #endif int ldrhdl$l_seq; /* sequence number */ } LDRHDL; #define ALLOCA_LDRHDL() __ALLOCA(sizeof(LDRHDL)) #ifdef __x86_64 #define SET_LDRHDL(H,B,L,S) H->ldrhdl$pq_base=B; H->ldrhdl$pq_ldrimg=L;H->ldrhdl$l_seq=S #else #define SET_LDRHDL(H,B,L,S) H->ldrhdl$l_base=B; H->ldrhdl$l_ldrimg=L;H->ldrhdl$l_seq=S #endif #ifdef __INITIAL_POINTER_SIZE #pragma __required_pointer_size __save #pragma __required_pointer_size __long typedef LDRIMG * LDRIMG_PQ; typedef LDRIMG ** LDRIMG_PPQ; typedef LDRISD * LDRISD_PQ; typedef LDRHDL * LDRHDL_PQ; #pragma __required_pointer_size __short typedef LDRIMG * LDRIMG_PL; typedef LDRIMG ** LDRIMG_PPL; typedef LDRISD * LDRISD_PL; typedef LDRHDL * LDRHDL_PL; #pragma __required_pointer_size __restore #else typedef __int64 LDRIMG_PQ; typedef __int64 LDRIMG_PPQ; typedef __int32 LDRIMG_PL; typedef __int32 LDRIMG_PPL; typedef __int64 LDRISD_PQ; typedef __int32 LDRISD_PL; typedef __int32 LDRHDL_PQ; typedef __int64 LDRHDL_PL; #endif /* __INITIAL_POINTER_SIZE */ #ifdef __INITIAL_POINTER_SIZE #pragma __required_pointer_size __save #pragma __required_pointer_size __long typedef LDRRQI * LDRRQI_PQ; #pragma __required_pointer_size __short typedef LDRRQI * LDRRQI_PL; #pragma __required_pointer_size __restore #else typedef __int64 LDRRQI_PQ; typedef __int32 LDRRQI_PL; #endif /* __INITIAL_POINTER_SIZE */ #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 /* __LDRIMGDEF_LOADED */