User exit invocation

User exits are invoked for initialization and termination during calls to CEEPIPI as shown in Table 1.

Table 1. Invocation of user exits during process and enclave initialization and termination
Function When invoked
Assembler user exit for first enclave initialization
  • (init_sub)
  • (init_sub_dp)
  • (call_main)
  • (call_sub) or (call_sub_addr) or (call_sub_addr) ended with stop semantics (see Stop semantics)
HLL user exit
  • (init_sub)
  • (init_sub_dp)
  • (call_main)
  • (call_sub) or (call_sub_addr) or (call_sub_addr) ended with stop semantics
C atexit() functions
  • (call_main)
  • (call_sub) or (call_sub_addr), which ended stop semantics.
  • (term) for environment created with (init_sub) or (init_sub_dp), if the last (call_sub) or (call_sub_addr) did not end with stop semantics
Assembler user exit for first enclave termination
  • (call_main)
  • (call_sub) or (call_sub_addr), which ended stop semantics
  • (term) for environment created with (init_sub) or (init_sub_addr) if the last (call_sub) or (call_sub_addr) did not end with stop semantics
Assembler user exit for process termination
  • (term)

For main environments, the CEEBXITA assembler user exit and CEEBINT HLL user exit that are used with the environment are taken from the main routine being called.

For sub environments, the CEEBXITA assembler user exit and CEEBINT HLL user exit that are used with the environment are taken from the first entry in the PreInit table. Any occurrences of CEEBXITA or CEEBINT in any other PreInit table entries, or in load modules used for call_sub_addr-type calls, are ignored.

See Using runtime user exits for more information about user exits.