IEAARR allows you to request that the system establish an associated recovery routine (ARR) while calling a target routine. In this case, the system performs the stacking PC instruction, then give control to your routine (the target routine). When the target routine returns control, the system issues the corresponding PR instruction.
The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Problem state and PSW key 8-15 |
Dispatchable unit mode: | Task |
Cross memory mode: | Any PASN, any HASN, any SASN |
AMODE: | 31-bit or 64-bit |
ASC mode: | Primary or access register (AR) |
Interrupt status: | Enabled or disabled for I/O and external interrupts |
Locks: | The caller is not required to hold any locks on entry. The caller may hold the local, CMS, or CPU lock. |
Control parameters: | None. |
The caller must include the IHAECVT mapping macro.
IEAARR must not be issued while a functional recovery routine (FRR) is established.
TARGETSTATE=PROB should only be issued by a caller currently running in problem state. TARGETSTATE=SUP should only be issued by a caller currently running in supervisor state.
Before issuing the IEAARR macro, the caller does not have to place any information into any general purpose register (GPR) or access register (AR) unless using it in register notation for a particular parameter, or using it as a base register.
Some callers depend on register contents remaining the same before and after issuing a service. If the system changes the contents of registers on which the caller depends, the caller must save them before issuing the service, and restore them after the system returns control.
None.
The IEAARR macro is written as follows:
Syntax | Description |
---|---|
name | name: symbol. Begin name in column 1. |
␢ | One or more blanks must precede IEAARR. |
IEAARR | |
␢ | One or more blanks must follow IEAARR. |
ARRPTR=arrptr | arrptr: RX-type address or address in register (2) - (12). |
ARR=arr | arr: RX-type address or address in register (2) - (12). |
,DYNSTORAGE=AVAIL | Default: DYNSTORAGE=AVAIL |
,DYNSTORAGE=NOTAVAIL | |
,ARRPARAMPTR=arrparamptr | arrparamptr: RX-type address or address in register (2) - (12). |
,ARRPARAMPTR64=arrparamptr64 | arrparamptr64: RX-type address or address in register (2)-(12), of a 64-bit pointer field. |
,ARRPARAM=arrparamp | arrparamp: RX-type address or address in register (2) - (12). |
,ARRPARAM64=arrparam64 | arrparam64: RX-type address or address in register (2) - (12). |
,PARAMPTR=paramptr | paramptr: RX-type address or address in register (2) - (12). |
,PARAMPTR64=paramptr64 | paramptr64: RX-type address or address in register (2)-(12), of a 64-bit pointer field. |
,PARAM=param | param: RX-type address or address in register (2) - (12). |
,PARAM64=param64 | param64: RX-type address or address in register (2) - (12). |
,TARGETPTR=targetptr | targetptr: RX-type address or address in register (2) - (12). |
,TARGET=target | target: RX-type address or address in register (2) - (12). |
,TARGETSTATE=PROB | |
,TARGETSTATE=SUP | |
The parameters are explained as follows:
To code: Specify the RX-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the associated recovery routine.
To code: Specify the RX-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the parameter area.
To code: Specify the RX-type address, or address in register (2)-(12), of a 64-bit pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the parameter area.
To code: Specify the RX-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the parameter.
To code: Specify the RX-type address, or address in register (2)-(12), of a 64-bit pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the parameter.
The target routine gets control with one more entry on the linkage stack than existed when IEAARR was called. That linkage stack entry contains the caller's registers 2-13 which can be extracted using the EREG instruction if needed.
The target routine need not save any registers, but is expected to return to the address provided in GPR 14 on entry. The target routine can pass information back to the caller of IEAARR by placing it in GPR/AR 0, 1, and/or 15. The IEAARR caller will resume immediately after the IEAARR macro expansion.
To code: Specify the RX-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RX-type address, or address in register (2)-(12), of the target routine.
None.
Branch to the target routine pointed to by field TP, and establish as an ARR the routine pointed to by field AP. Pass to the target area in register 1 the contents of field PP. Make sure that the ARR will get access to the contents of field APP (which ordinarily would contain the address of a parameter area). Make sure that the target routine gets control in problem state (which implies that the caller of IEARR should currently be running in problem state).
IEAARR TARGETPTR=TP,ARRPTR=AP,PARAMPTR=PP,
ARRPARAMPTR=APP,TARGETSTATE=PROB
...