Exit XPCTA
Exit XPCTA is invoked immediately after a transaction abend, and before any processing that might modify the existing environment so that the task could not be resumed.
- Set a resume address, instead of letting CICS® process the abend
- Specify the subspace that control is passed in
If the transaction abend occurs as a result of a program check or an operating system abend, the XDUREQ dump domain exit might be invoked before XPCTA (see Exit XDUREQ). Also, if a resume address is passed back, registers 0 through 15 are restored to their value at the time of the abend. The program status word (PSW) is used to branch to the resume address.
- CICS sets the PCUE_NO_RESUME
flag to ignore any resume address that the exit supplies in the following
situations:
- XPCTA is invoked for a C or C++ program that is compiled with the XPLINK option.
- The task control block (TCB) of the application is no longer available.
- The transaction abend is an AKxx abend (relating to a kill request) other than AKKD or AKKE.
- For an AMODE(64) program, CICS sets the PCUE_NO_RESUME_AMODE64 flag to ignore any resume address that the exit supplies if the 64-bit registers are not available at the time of the abend.
- When invoked
- After an abend and before the environment is modified.
- Exit-specific parameters
-
- UEPPCDS
- Address of a storage area that contains program- and terminal-related
information, and that can be mapped using the DSECT DFHPCUE. When
XPCTA is invoked, the following DFHPCUE fields are significant:
- PCUE_CONTROL_BITS
- 1-byte flag field. A setting of PCUECBTE indicates that the transaction
is linked to a terminal.
Flags PCUE_NO_RESUME and PCUE_NO_RESUME_AMODE64 in PCUE_CONTROL_BITS indicate that a resume address is not supported. When set, any return code of UERCMEA from XPCTA is ignored. CICS sets PCUE_NO_RESUME before invoking XPCTA for C and C++ programs compiled with the XPLINK option, when the TCB of the application is no longer available, and for AKxx abends other than AKKD or AKKE. CICS sets PCUE_NO_RESUME_AMODE64 for AMODE(64) programs when a resume address is not supported.
- PCUE_TASK_NUMBER
- 3-character packed decimal field that contains the task number.
- PCUE_TRANSACTION_ID
- 4-character field that contains the transaction ID.
- PCUE_TERMINAL_ID
- 4-character field that contains the terminal ID (if any).
- PCUE_PROGRAM_NAME
- 8-character field that contains the name of the failing program.
- PCUE_LOGICAL_LEVEL
- Fullword that contains the program logical level.
- PCUE_BRANCH_ADDRESS
- Fullword. You can use this field to supply a resume address. Set the top bit to specify that the resumed task is to run AMODE(31). Set the bottom bit to specify that the resumed task is to run AMODE(64).
- PCUE_BRANCH_EXECKEY
- If storage protection is active, you can use this 1-byte field
to specify the execution key of the resumed task. The possible values
are:
- PCUE_BRANCH_USER
- User key
- PCUE_BRANCH_CICS
- CICS key.
If storage protection is active and you do not specify a value, the resumed task executes in user key.
If storage protection is not active, the resumed task executes in CICS key.
- UEPTACB
- Address of the transaction abend control block (TACB) for the
abend. If the abend occurred because of a program check, the information
in the TACB includes:
- The program status word (PSW).
- The registers at the time of the abend.
- Details of the subspace, access registers and vector registers current at the time of the abend.
- The Breaking Event Address Register (BEAR).
- The Translation Exception Address (TEA).
- Return codes
-
- UERCNORM
- Continue processing.
- UERCPURG
- Task purged during XPI call.
- UERCMEA
- A resume address is supplied.
- XPI calls
- All can be used.