出口 XPCTA

当事务异常终止后以及在可能修改现有环境以导致任务无法复原的任何处理之前会立即调用出口 XPCTA。

您可以使用 XPCTA 出口来执行以下操作:
  • 设置恢复地址,而不是让 CICS® 处理异常终止
  • 指定传入控制的子空间
如果将恢复地址传回,那么会将寄存器 0 到 13 和 15 复原为它们在异常结束时的值。 寄存器 14 用于分支到简历地址。 如果出口设置返回码为零或恢复地址为零,那么 CICS 将处理异常终止。

如果由于程序检查或操作系统异常终止而发生事务异常终止,那么可能会在 XPCTA 之前调用 XDUREQ 转储域出口 (请参阅 Exit XDUREQ)。 此外,如果将恢复地址传回,那么寄存器 0 到 15 在异常结束时将恢复为它们的值。 程序状态字 (PSW) 用于分支到恢复地址。

在某些情况下, CICS 会设置一个标志,以忽略通常从 UERCMEA 返回码获取的恢复地址。
  • CICS 设置 PCUE_NO_RESUME 标志以忽略在以下情况下出口提供的任何恢复地址:
    • 对使用 XPLINK 选项编译的 C 或 C++ 程序调用 XPCTA。
    • 应用程序的任务控制块 (TCB) 不再可用。
    • 事务异常终止是 AKxx 异常终止 (与终止请求相关) ,而不是 AKKD 或 AKKE。
  • 对于 AMODE (64) 程序, CICS 设置 PCUE_NO_RESUME_AMODE64 标志以忽略在异常终止时 64 位寄存器不可用时出口提供的任何恢复地址。
调用时机
在异常结束之后以及在修改环境之前。
特定于出口的参数
UEPPCDS
包含程序和终端相关信息的存储区域的地址,可以使用 DSECT DFHPCUE 进行映射。 调用 XPCTA 时,以下 DFHPCUE 字段很重要:
PCUE_CONTROL_BITS
1 字节标志字段。 设置 PCUECBTE 指示事务已链接到终端。

PCUE_CONTROL_BITS 中的标志 PCUE_NO_RESUME 和 PCUE_NO_RESUME_AMODE64 指示不支持恢复地址。 设置时,将忽略来自 XPCTA 的 UERCMEA 的任何返回码。 CICS 在调用使用 XPLINK 选项编译的 XPCTA for C 和 C++ 程序之前设置 PCUE_NO_RESUME ,当应用程序的 TCB 不再可用时,对于 AKxx 会异常终止,而不是 AKKD 或 AKKE。 当不支持恢复地址时, CICS 会为 AMODE (64) 程序设置 PCUE_NO_RESUME_AMODE64 。

PCUE_TASK_NUMBER
3-包含任务编号的字符压缩十进制字段。
PCUE_TRANSACTION_ID
4-包含事务标识的字符字段。
PCUE_TERMINAL_ID
4-包含终端标识 (如果有) 的字符字段。
PCUE_PROGRAM_NAME
8-包含失败程序的名称的字符字段。
PCUE_LOGICAL_LEVEL
包含程序逻辑级别的全字。
PCUE_BRANCH_ADDRESS
全字 您可以使用此字段来提供恢复地址。 设置顶部位以指定恢复的任务是运行 AMODE (31)。 设置底部位以指定恢复的任务是运行 AMODE (64)。
PCUE_BRANCH_EXECKEY
如果存储器保护处于活动状态,那么可以使用此 1 字节字段来指定恢复任务的执行键。 可能的值包括:
PCUE_BRANCH_USER
用户密钥
PCUE_BRANCH_CICS
CICS 键。

如果存储器保护处于活动状态并且您未指定值,那么恢复的任务将在用户密钥中执行。

如果存储器保护未处于活动状态,那么将在 CICS 键中执行恢复的任务。

UEPTACB
异常终止的事务异常终止控制块 (TACB) 的地址。 如果由于程序检查而发生异常终止,那么 TACB 中的信息包括:
  • 程序状态字 (PSW)。
  • 异常结束时的寄存器。
  • 异常结束时当前的子空间,访问寄存器和向量寄存器的详细信息。
  • 中断事件地址寄存器 (BEAR)。
  • 转换异常地址 (TEA)。
可以使用 DFHTACB TYPE=DSECT 宏来映射 TACB。
返回码
UERCNORM
继续处理。
UERCPURG
在 XPI 调用期间清除了任务。
UERCMEA
提供了恢复地址。
XPI 调用
都可以用。

样本 XPCTA 出口程序

DFH$PCTA 是用于 XPCTA 出口点的样本全局用户出口程序。 它测试异常终止是否由存储器保护异常情况引起。 有关 DFH$PCTA 的更多信息,请参阅 事务异常终止样本出口程序 :DFH$PCTA