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.

You can use the XPCTA exit to do the following:
  • Set a resume address, instead of letting CICS® process the abend
  • Specify the subspace that control is passed in
If a resume address is passed back, registers 0 through 13 and 15 are restored to their values at the time of the abend. Register 14 is used to branch to the resume address. If the exit sets a return code of zero, or a resume address of zero, CICS processes the abend.

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.

In some situations, CICS sets a flag to ignore the resume address that is usually obtained from the UERCMEA return code.
  • 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).
You can map the TACB using the DFHTACB TYPE=DSECT macro.
Return codes
UERCNORM
Continue processing.
UERCPURG
Task purged during XPI call.
UERCMEA
A resume address is supplied.
XPI calls
All can be used.