IARV64 REQUEST=CHANGEGUARD requests that a specified amount of a private memory object be changed from the guard area to the usable area or vice versa. To avoid an abend for exceeding the MEMLIMIT, specify the COND=YES parameter.
IARV64 REQUEST=CHANGEQUARD only applies to 64-bit non-2GB private memory objects. If a 64-bit common memory object or a 64-bit shared memory object is specified on the request, a DC2 abend with reason code X'xx0058xx' is issued.
The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Problem state and PSW key 8-15. |
Dispatchable unit mode: | Task or SRB |
Cross memory mode: | Any PASN, any HASN, any SASN Note: The problem
state caller running in PSW key 8-15 can use CHANGEGUARD only when
the primary address space is the home address space.
|
AMODE: | 31- or 64-bit |
ASC mode: | Primary or access register (AR) |
Interrupt status: | Enabled for I/O and external interrupts |
Locks: | A local lock may be held, subject to the following
limitation: When a local lock is held for a CHANGEGUARD request, the lock must be for the address space specified (or is set as the default) by the input ALETVALUE. |
Control parameters: | Control parameters must be in the primary address space and can reside both below and above the bar. |
None
This macro supports multiple versions. Some keywords are unique to certain versions. See PLISTVER parameter description.
Before issuing the IARV64 macro, the caller does not have to place any information into any register 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 REQUEST=CHANGEGUARD option of the IARV64 macro is written as follows:
Syntax | Description |
---|---|
name | name: symbol. Begin name in column 1. |
␢ | One or more blanks must precede IARV64. |
IARV64 | |
␢ | One or more blanks must follow IARV64. |
REQUEST=CHANGEGUARD | |
,CONVERT=TOGUARD | |
,CONVERT=FROMGUARD | |
,MEMOBJSTART=memobjstart | memobjstart: RS-type address or address in register (2) - (12). |
,CONVERTSTART=convertstart | convertstart: RS-type address or address in register (2) - (12). |
,CONVERTSIZE=convertsize | convertsize: RS-type address or address in register (2) - (12). |
,CONVERTSIZE64=convertsize64 | convertsize64: RS-type address or address in register (2) - (12). |
,RETCODE=retcode | retcode: RS-type address or register (2) - (12). |
,RSNCODE=rsncode | rsncode: RS-type address or register (2) - (12). |
,PLISTVER=IMPLIED_VERSION | Default: PLISTVER=IMPLIED_VERSION |
,PLISTVER=MAX | |
,PLISTVER=0, 1, 2, 3, 4 | |
,MF=S | Default: MF=S |
,MF=(L,list addr) | list addr: RS-type address or register (1) - (12). |
,MF=(L,list addr,attr) | |
,MF=(L,list addr,0D) | |
,MF=(E,list addr) | |
,MF=(E,list addr,COMPLETE) |
|
The parameters are explained as follows:
If the CHANGEGUARD service finds a PAGEFIXed area in the area to be converted into a guard area, the caller will be abnormally ended. If a request is made to guard a guard area or to unguard an area that is not guarded a return code 04 will be issued.
If you code COND=YES and there is insufficient storage to satisfy the request, instead of the request being abnormally ended, the request will complete, but a return code will be set to indicate that the request could not be completed successfully.
If CONVERTSTART is used then a usable area is created from a guard area starting with the address specified continuing for the number of segments specified by CONVERTSIZE. If CONVERTSTART is not used when GUARDLOC=LOW is specified, the first usable virtual address space in the memory object is decreased. If CONVERTSTART is not used when GUARDLOC=HIGH is specified, the last usable virtual address space in the memory object is increased.
Two contiguous guard areas will be consolidated into one contiguous guard area whenever possible. For example, if the guard area that was defined when the memory object was created is contiguous with a guard area created using CONVERTSTART, then the two guard areas are combined into one.
Specifying MEMOBJSTART will change the guard area only at the beginning or the end of the memory object. Whether the guard area is at the beginning or the end is specified on the IARV64 REQUEST=GETSTOR GUARDLOC=[HIGH|LOW]
IBM® recommends that if CONVERTSTART is used to manage the guard areas within a memory object that all REQUEST=CHANGEGUARD use CONVERTSTART.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
For CONVERT=TOGUARD and MEMOBJSTART, CONVERTSIZE or CONVERTSIZE64 must not be larger than the number of usable pages in the memory object to allow successful completion. For CONVERT=FROMGUARD, CONVERTSIZE must not be larger than the number of remaining pages in the default guard area of the memory object to allow successful completion.
To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field.
For CONVERT=TOGUARD and MEMOBJSTART, CONVERTSIZE or CONVERTSIZE64 must not be larger than the number of usable pages in the memory object to allow successful completion. For CONVERT=FROMGUARD, CONVERTSIZE must not be larger than the number of remaining pages in the default guard area of the memory object to allow successful completion.
To code: Specify the RS-type address, or address in register (2)-(12), of a doubleword field.
The only supported values are 0 (primary) and 2 (home). The ALETVALUE parameter can be used only by callers running in supervisor state or with PSW key 0-7. The default is 0.
To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field.
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
If you can tolerate the size change, IBM recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.
If you can tolerate the size change, IBM recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.
Use MF=S to specify the standard form of the macro, which builds an inline parameter list and generates the macro invocation to transfer control to the service. MF=S is the default.
Use MF=L to specify the list form of the macro. Use the list form together with the execute form of the macro for applications that require reentrant code. The list form defines an area of storage that the execute form uses to store the parameters. Only the PLISTVER parameter may be coded with the list form of the macro.
Use MF=E to specify the execute form of the macro. Use the execute form together with the list form of the macro for applications that require reentrant code. The execute form of the macro stores the parameters into the storage area defined by the list form, and generates the macro invocation to transfer control to the service.