Language Environment enclave data block

Each enclave is represented by an enclave data block (EDB), which supports the program model. All enclave-related resources are provided in the EDB; it is generated during enclave initialization and deleted during enclave termination. Fields in the EDB should be used as described in other topics of this information. In particular, fields should not be modified and routine addresses should not be used as entry points, except as specified.

The following tables show the format of the EDB.
Table 1. Enclave data block (EDB) field descriptions
Offsets Type Len Name (Dim) ( * = Reserved) Description
Dec Hex
0 (0) STRUCTURE 164 CEEEDB EDB mapping
0 (0) CHARACTER 164 CEEEDB_EXTERNAL External portion
0 (0) CHARACTER 8 CEEEDBEYE Eyecatcher 'CEEEDB '
8 (8) BITSTRING 4 CEEEDBFLAGS Enclave information
8 (8) BITSTRING 1 CEEEDBFLAG1 EDB Flags
   
 1...  ....
  CEEEDBMAINI Main program initialized
   
 .1..  ....
  CEEEDB_INITIAL_AMODE  
   
 ..1.  ....
  CEEEDBACTIV Environment is now active
   
 ...1  ....
  CEEEDBTIP Termination In Progress
   
 ....  1...
  CEEEDBPICI Pre-Init Compat. is active
   
 ....  .1..
  CEEEDB_POSIX z/OS UNIX is active and runtime option POSIX(ON) is active
   
 ....  ..1.
  CEEEDBMULTITHREAD Multithreading environment
   
 ....  ...1
  CEEEDB_OMVS_DUBBED z/OS UNIX is dubbed
9 (9) BITSTRING 1 CEEEDBIPM Initial Program Mask
10 (A) BITSTRING 1 CEEEDBPM Current® Program Mask
11 (B) UNSIGNED 1 CEEEDB_CREATOR_ID Enclave creator ID
12 (C) ADDRESS 4 CEEEDBMEMBR A(member list body)
16 (10) ADDRESS 4 CEEEDBOPTCB A(options control block)
20 (14) SIGNED 4 CEEEDBURC User Return Code
24 (18) SIGNED 4 CEEEDBRSNCD CEL Reason Code
28 (1C) ADDRESS 4 CEEEDBDBGEH Addr of debugger event handler
32 (20) SIGNED 4 CEEEDBANHP CEL Anywhere Heap ID
36 (24) SIGNED 4 CEEEDBBEHP CEL Below Heap ID
40 (28) ADDRESS 4 CEEEDBCELV Addr of CEL LIBVEC
44 (2C) ADDRESS 4 CEEEDBPCB A(PCB)
48 (30) ADDRESS 4 CEEEDBELIST Exit list from HLL user exit
52 (34) ADDRESS 4 CEEEDB_PL_ASTRPTR A(appl parm str)
56 (38) ADDRESS 4 CEEEDBDEFPLPTR A(main parm list)
60 (3C) SIGNED 4 CEEEDBCXIT_PAGE Cxit_page value for user exit
64 (40) CHARACTER 4 CEEEDB_DEBUG_TERMID Debugger terminal ID
68 (44) ADDRESS 4 CEEEDBPARENT Addr of the parent enclave CAA
When the enclave is created, its creator (or parent) needs to provide:
  1. Enclave termination routine (CEEEDB_TERM).
  2. Information where to return to when the enclave terminates along with the environment that is to be restored.

    CEEEDB_R13_PARENT is a convenient way to provide the return information. It is a pointer to the DSA that contains all the registers of the enclave's parent.

72 (48) ADDRESS 4 CEEEDB_R13_PARENT A(DSA of enclave creator)
76 (4C) CHARACTER 64 CEEEDB_LER3 Lang Env V1R3M0 externals
76 (4C) CHARACTER 8 * Reserved from Lang Env V1R2M0
84 (54) ADDRESS 4 CEEEDBLEOV Addr of z/OS UNIX LIBVEC
88 (58) ADDRESS 4 CEEEDBENVAR Address of environment variable array. This is the case only when a POSIX-C prog is not part of the application. WARNING: this field should not be updated by other than CEL or C initialization.
92 (5C) ADDRESS 4 CEEEDBENVIRON Address of environment variable anchor. In POSIX-C, it is the environ variable, otherwise it points to the CEEEDBENVAR.
96 (60) ADDRESS 4 CEEEDB_CEEOSIGR@ CEEOSIGR address
100 (64) ADDRESS 4 CEEEDBOTRB Pointer to trace table
The following five fields are used by the CEEXGPES (get permanent enclave storage) macro. This macro allows member languages to quickly allocate storage that is freed by CEL only after member enclave termination.
104 (68) ADDRESS 4 CEEEDBPSA31 Address and length of ...
108 (6C) SIGNED 4 CEEEDBPSL31 ... preallocated 31 storage
112 (70) ADDRESS 4 CEEEDBPSA24 Address and length of ...
116 (74) SIGNED 4 CEEEDBPSL24 ... preallocated 24 storage
120 (78) ADDRESS 4 CEEEDBPSRA Addr of overflow routine
124 (7C) ADDRESS 4 CEEEDB_CAACHAIN@ Pointer to IPT's CAA
128 (80) BITSTRING 4 CEEEDBFLAGS1 Additional external
128 (80) BITSTRING 1 CEEEDBFLAG1A Flags
   
 1...  ....
  CEEEDB_SIGENABLED Signals enabled
   
 .1..  ....
  CEEEDB_MVS_BATCH Running z/OS batch
   
 ..1.  ....
  CEEEDB_TERM_DNFR Do not free heap or delete programs during termination of the enclave.
   
 ...1  ....
  CEEEDB_TERM_NOEDSA No scan for exit DSAs at enclave termination.
   
 ....  1...
  CEEEDB_CICS_OPEN_PROGRAM
1
Program runs only on an OTE TCB and can use Open C functions
0
Program may run on OTE or QR TCB
   
 ....  .1..
  CEEEDB_MAIN_HP Main uses XP linkage
   
 ....  ..1.
  CEEEDB_HPLINK XPLINK is being used
   
 ....  ...1
  CEEEDB_EVNTDEST Running destructors
129 (81) BITSTRING 1 CEEEDBFLAG1B Flags
   
 1...  ....
  CEEEDB_2_ENV_TABLES
1
Lang Env maintains two identical tables of environment variables: one in EBCDIC and one in ASCII
0
Only an EBCDIC table is maintained
   
 .1..  ....
  CEEEDB_CICS_REUSE_ENCLAVE
1
Program is part of a reusable enclave
0
Program is not part of a reusable enclave
   
 ..1.  ....
  CEEEDB_CICS_RE_DIRTY
1
Reusable enclave has been corrupted and is no longer reusable by Lang Env. CICS® requested to terminate enclave
0
Enclave is clean and still reusable
   
 ...1  ....
  CEEEDB_EXEC_EXIT
1
User exit routine for exec() processing is running
0
User exit routine is not running
   
 ....  1111
  * Reserved
130 (82) CHARACTER 2 * Reserved
132 (84) ADDRESS 4 CEEEDB_CEEOSGR1@ CEEOSIGR end address
136 (88) ADDRESS 4 CEEEDB_XPL_NODLL_FDS Pointer to chain of XPLINK compat descriptors representing NODLL func pointers
140 (8C) CHARACTER 8 CEEEDB_LER4  
140 (8C) BITSTRING 4 CEEEDBMEMBERCOMPAT  
Member compatibility flags
140 (8C) BITSTRING 1 CEEEDBMEMBERCOMPAT1  
   
 1...  ....
  CEEEDBPLITASKING PL/I tasking
   
 .111  1111
  * Reserved
141 (8D) BITSTRING 1 CEEEDBMEMBERCOMPAT2 Reserved
142 (8E) BITSTRING 1 CEEEDBMEMBERCOMPAT3 Reserved
143 (8F) BITSTRING 1 CEEEDBMEMBERCOMPAT4 Reserved
144 (90) SIGNED 4 CEEEDBTHREADSACTIVE Threads active
148 (94) CHARACTER 8 CEEEDB_LER5  
148 (94) SIGNED 4 CEEEDBCURMSGFILEDCBPTR DCB ptr
152 (98) ADDRESS 4 CEEEDB_CEEINT_INPUT_R1  
When the request block boundary is crossed, a new enclave is created and request block info must be maintained. This is to maintain compatibility with the VS COBOL II definition of a run unit. The following two fields allow support for implicit enclave create.
156 (9C) ADDRESS 4 CEEEDB_LAST_RBADDR A(Last request block)
160 (A0) SIGNED 4 CEEEDB_LAST_RBCNT Index of last request blk
164 (A4) SIGNED 4 CEEEDB_ENVLENGTH Length of envar array of pointers
168 (A8) ADDRESS 4 CEEEDBENVAR_A Address of alternate environment variable array
172 (AC) ADDRESS 4 CEEEDBENVIRON_A Address of alternate environment variable anchor
Table 2. Enclave data block (EDB) constants
Len Type Value Name Description
Declare constants to identify creator of an enclave
1 DECIMAL 1 CEEEDB_CREATOR_BINIT batch (BINIT)
1 DECIMAL 2 CEEEDB_CREATOR_RINI CICS (RINI)
1 DECIMAL 3 CEEEDB_CREATOR_BCREN cr_enc(BCREN)
1 DECIMAL 4 CEEEDB_CREATOR_PIPI_MAIN preinit main
1 DECIMAL 5 CEEEDB_CREATOR_PIPI_SUBR preinit subr
1 DECIMAL 6 CEEEDB_CREATOR_IMPLICIT LINK SVC
1 DECIMAL 7 CEEEDB_CREATOR_EXEC POSIX exec()
1 DECIMAL 0 CEEEDBTRMRSN_NORMAL_RETURN  
1 DECIMAL 1 CEEEDBTRMRSN_CEETREN_EXIT  
1 DECIMAL 2 CEEEDBTRMRSN_CEETREC_EXIT  
1 DECIMAL 3 CEEEDBTRMRSN_CEEEXIT_EXIT _exit()
1 DECIMAL 4 CEEEDBTRMRSN_UNHANDLED_ COND  
1 DECIMAL 5 CEEEDBTRMRSN_PTHREAD_EXIT  
1 DECIMAL 6 CEEEDBTRMRSN_QUIESCE  
1 DECIMAL 7 CEEEDBTRMRSN_CEEEXIT_EXEC exec
1 DECIMAL 1 CEEEDB_PIN_UNSET  
1 DECIMAL 2 CEEEDB_PIN_UNAVAIL  
1 DECIMAL 3 CEEEDB_PIN_SET  
Maximum member ID and maximum member number both relate to the number of CEL members currently supported. The range of member ID values is from 0 to max_member_id.
4 DECIMAL 17 CEEEDB_MAXMEMID max member ID
4 DECIMAL 18 CEEEDB_MAXMEMNUM max member number
Table 3. Enclave data block (EDB) cross reference
Name Hex Offset Hex Value Level
CEEEDB 0   1
CEEEDB_CAACHAIN@ 7C   4
CEEEDB_CEEINT_INPUT_R1 98   4
CEEEDB_CEEOSIGR@ 60   4
CEEEDB_CEEOSGR1@ 84   4
CEEEDB_CICS_OPEN_PROGRAM 80   6
CEEEDB_CREATOR_ID B   4
CEEEDB_DEBUG_TERMID 40   3
CEEEDB_ENVLENGTH A4   3
CEEEDB_EVNTDEST 80 01 6
CEEEDB_EXTERNAL 0   2
CEEEDB_HPLINK 80   6
CEEEDB_INITIAL_AMODE 8 40 5
CEEEDB_LAST_RBADDR 9C   3
CEEEDB_LAST_RBCNT A0   3
CEEEDB_LER3 4C   3
CEEEDB_LER4 8C   3
CEEEDB_LER5 94   3
CEEEDB_MAIN_HP 80   6
CEEEDB_MVS_BATCH 80 40 6
CEEEDB_OMVS_DUBBED 8 01 5
CEEEDB_PL_ASTRPTR 34   3
CEEEDB_POSIX 8 04 5
CEEEDB_R13_PARENT 48   3
CEEEDB_SIGENABLED 80 80 6
CEEEDB_TERM_DNFR 80 20 6
CEEEDB_XPL_NODLL_FDS 88   4
CEEEDBACTIV 8 20 5
CEEEDBANHP 20   3
CEEEDBBEHP 24   3
CEEEDBCELV 28   3
CEEEDBCURMSGFILEDCBPTR 94   4
CEEEDBCXIT_PAGE 3C   3
CEEEDBDBGEH 1C   3
CEEEDBDEFPLPTR 38   3
CEEEDBELIST 30   3
CEEEDBENVAR 58   4
CEEEDBENVAR_A 168   3
CEEEDBENVIRON 5C   4
CEEEDBENVIRON_A 172   3
CEEEDBEYE 0   3
CEEEDBFLAGS 8   3
CEEEDBFLAGS1 80   4
CEEEDBFLAG1 8   4
CEEEDBFLAG1A 80   5
CEEEDBIPM 9   4
CEEEDBLEOV 54   4
CEEEDBMAINI 8 80 5
CEEEDBMEMBERCOMPAT 8C   4
CEEEDBMEMBERCOMPAT1 8C   5
CEEEDBMEMBERCOMPAT2 8D   5
CEEEDBMEMBERCOMPAT3 8E   5
CEEEDBMEMBERCOMPAT4 8F   5
CEEEDBMEMBR C   3
CEEEDBMULTITHREAD 8 02 5
CEEEDBOPTCB 10   3
CEEEDBOTRB 64   4
CEEEDBPARENT 44   3
CEEEDBPCB 2C   3
CEEEDBPICI 8 08 5
CEEEDBPLITASKING 8C 80 6
CEEEDBPM A   4
CEEEDBPSA24 70   4
CEEEDBPSA31 68   4
CEEEDBPSL24 74   4
CEEEDBPSL31 6C   4
CEEEDBPSRA 78   4
CEEEDBRSNCD 18   3
CEEEDBTHREADSACTIVE 90   4
CEEEDBTIP 8 10 5
CEEEDBURC 14   3

Table 4 describes the EDB fields in more detail.

Table 4. EDB field descriptions
Field Contents
CEEEDBFLAG1 CEEEDB flags. The bits in this flag byte are defined as follows:
0
CEEEDBMAINI: Indicates that a main program has been initialized within the current enclave. Each member language must ensure that a main program written in that language sets this bit when it is initialized.
1
CEEEDB_INITIAL_AMODE: Indicates the amode upon entry into the Language Environment initialization routine. ON indicates a 31-bit entry; OFF indicates a 24-bit entry.
2
CEEEDBACTIV: Indicates the environment is currently active. A preinitialized environment has this bit initially set to zero.
3
CEEEDBTIP: Indicates termination is in progress.
4
CEEEDBPICI: Preinitialization compatibility is active.
5
CEEEDB_POSIX: POSIX(ON) was specified and z/OS UNIX is available.
6
CEEEDBMULTITHREAD: Multithread environment is active.
7
CEEEDB_OMVS_DUBBED: z/OS UNIX is dubbed.
CEEEDBIPM The initial program mask. This is the result of ORing all of the member language's program mask requirements. Language Environment sets the program mask to this value during initialization.
CEEEDBPM The current program mask setting.
CEEEDB_CREATOR_ID ID of enclave creator. The values defined in this byte are as follows:
1
CEEEDB_CREATOR_BINIT: Indicates this is the first enclave in the process created under batch.
2
CEEEDB_CREATOR_RINI: Indicates the enclave was created under CICS.
3
CEEEDB_CREATOR_BCREN: Indicates the enclave was created with the callable service to create enclaves.
4
CEEEDB_CREATOR_PIPI_MAIN: Indicates the enclave was created with preinitialization services for the main routine.
5
CEEEDB_CREATOR_PIPI_SUBR: Indicates the enclave was created with preinitialization services for subroutines.
6
CEEEDB_CREATOR_IMPLICIT: Indicates the enclave was created implicitly with host system services, such as the LINK SVC.
7
CEEEDB_CREATOR_EXEC: Indicates the enclave was created and invoked from the kernel as a result of an exec().
CEEEDBMEMBR Address of a list of member entries. An entry is reserved for each member known to Language Environment®. There is one member list per enclave. For details, see Language Environment member list and event handler.
CEEEDBOPTCB Address of the options control block. Enclave initialization processes the runtime options and generates the options control block, CEEOCB. There is one CEEOCB per enclave. This pointer makes the runtime options easily available to all members.
CEEEDBURC User return code. This field contains the return code generated and stored here by the user program. It is augmented by the Language Environment reason code and returned at enclave termination.
CEEEDBRSNCD Language Environment reason code. The value indicates the reason for Language Environment termination. It augments the return code, and is returned separately at enclave termination.
CEEEDBDBGEH Debugger event handler. This field holds the address of the debugger event handler, which is loaded by Language Environment. For more information, see Debugging and performance analysis.
CEEEDBANHP Language Environment Anywhere heap ID. This field holds the identification for Language Environment's defined heap storage that is typically allocated above the 16M line. For more information, see Dynamic storage (heap) services for more information.
CEEEDBBEHP Language Environment below heap ID. This field holds the identification for Language Environment's defined heap storage that is always allocated below the 16M line; see Dynamic storage (heap) services for more information.
CEEEDBCELV Address of Language Environment LIBVEC. This field holds the address of Language Environment's library vector table (LIBVEC). Access to Language Environment routines is through this vector table.
CEEEDBPCB Address of the process control block. This field holds the address of Language Environment's process control block (PCB). This allows access to process-level resources and information.
CEEEDBELIST Address of exit list from the HLL user exit. The address of a list of user exits provided by the user with the HLL user exit. Language Environment copies the value to the EDB.
CEEEDB_PL_ASTRPTR Address of the user parameter list varying string pointer.
CEEEDBDEFPLPTR The default pointer that is the inbound parameter list.
CEEEDBCEXIT_PAGE Cxit_page value for user exit parameter list.
CEEEDB_DEBUG_TERMID Debugger terminal ID under CICS.
CEEEDBPARENT Address of parent enclave CAA. When the enclave is created, its creator (or parent) needs to provide:
  1. Enclave termination routine (CEEEDB_TERM).
  2. Information where to return to when the enclave terminates along with the environment which is to be restored.
CEEEDB_R13_PARENT Address of DSA enclave creator. CEEEDB_R13_PARENT is a convenient way to provide return information. It is a pointer to the DSA which contains all the registers of the enclave's parent.
CEEEDB_LER3 External section.
CEEEDBLEOV Address of the LIBVEC for z/OS® UNIX support.
CEEEDBENVAR Address of the environment variable array.
CEEEDBENVAR_A Address of the alternate environment variable array.
CEEEDBENVIRON Address of the environment variable anchor.
CEEEDBENVIRON_A Address of the alternate environment variable anchor.
CEEEDB_CEEOSIGR@ Address of the CEEOSIGR routine.
CEEEDBOTRB Address of the in-core wrapping trace table
CEEEDBPSA31 Address and preallocated 31 storage.
CEEEDBPSL31 Length of preallocated 31 storage.
CEEEDBPSA24 Address of preallocated 24 storage.
CEEEDBPSL24 Length of preallocated 24 storage.
CEEEDBPSRA Address of overflow routine.
CEEEDBFLAG1A Additional EDB flags, as follows:
0
CEEEDB_SIGENABLED: Signal processing enabled.
1
CEEEDB_MVS_BATCH: Running z/OS batch first enclave.
2
CEEEDB_TERM_DNFR: Do not free heap or delete programs at enclave termination.
3
CEEEDB_ENVTDEST: Running destructors.
4-7
Reserved
CEEEDB_CICS_OPEN_PROGRAM
0
Program may run on OTE or QR TCB.
1
Program runs only on an OTE TCB and can use Open C functions.
CEEEDB_MAIN_HP Main uses XPLINK linkage.
CEEEDB_HPLINK XPLINK is being used.
CEEEDB_CEEOSGR1@ CEEOSIGR and address
CEEEDB_XPL_NODLL_FDS Pointer to a chain of XPLINK compatibility descriptors representing NODLL function pointers.
CEEEDB_ENVLENGTH Length to envar array of pointers.