The STORAGE macro allows you to obtain storage in an address space
other than the primary address space. The program must be in primary
mode or AR mode and in PSW key 0 - 7 or supervisor state. The ALET
parameter on the STORAGE macro identifies the address space.
The following example shows how a program can obtain storage in
another address space, provided it has the proper authorization. The
caller uses ALESERV ADD to obtain an ALET representing the address
space (or uses an ALET with the value 1 or 2) and then STORAGE OBTAIN
to obtain storage. The example assumes that the caller passes the
STOKEN of the target address space by a pointer in AR/GPR 1 on entry.
It also assumes that this program has the proper authorization to
the target address space.
The program requests one page (4096 bytes) of storage above 16
megabytes in subpool 0 in the target address space.
STOR2 CSECT
STOR2 AMODE 31
STOR2 RMODE ANY
.
* ENTRY LINKAGE
.
BAKR 14,0 SAVE CALLER'S STATUS ON LINKAGE STACK
SAC 512 SWITCH INTO AR MODE
SYSSTATE ASCENV=AR SET GLOBAL BIT INDICATING AR MODE
LAE 12,0(15,0) ESTABLISH ADDRESSABILITY
USING STOR2,12
STORAGE OBTAIN,LENGTH=72 GET STANDARD SAVE AREA
LAE 13,0(1,0) SET UP SAVE AREA POINTER
MVC 4(4,13),=C'F1SA' INDICATE IN SAVE AREA THAT CALLER'S
* STATUS IS ON THE LINKAGE STACK
.
EREG R1,R1 RESTORE CALLER'S PARAMETER REGISTER
USING PARMLIST,R1 ESTABLISH ADDRESSABILITY TO
* PARAMETER LIST
MVC ASTOKEN,CSTOKEN COPY STOKEN INTO LOCAL STORAGE
DROP R1 DROP BASING REGISTER
.
* ADD THE ADDRESS SPACE REPRESENTED BY THE TARGET STOKEN TO
* THE DU-AL AS A PUBLIC ENTRY.
.
ALESERV ADD,STOKEN=ASTOKEN,AL=WORKUNIT,ACCESS=PUBLIC, X
ALET=ASALET
.
* NOW OBTAIN ONE PAGE (4096 BYTES) OF STORAGE IN SUBPOOL 0 IN THAT
* ADDRESS SPACE, ABOVE 16MB.
.
STORAGE OBTAIN,LENGTH=4096,SP=0,ALET=ASALET,LOC=ANY,ADDR=ASADDR
.
* SET UP REGISTERS TO POINT AT THE STORAGE JUST OBTAINED.
.
L R4,ASADDR LOAD ADDRESS OF STORAGE INTO GPR4
L R3,ASALET LOAD ALET OF STORAGE INTO GPR3
SAR R4,R3 LOAD ALET INTO AR4
.
* AR/GPR 4 CAN NOW BE USED TO REFERENCE THE STORAGE IN
* THE OTHER ADDRESS SPACE.
.
USING ARSTOR,R4
MVC FIELD1,DATA1 MOVE DATA INTO THE ADDRESS SPACE
MVC FIELD2,DATA2
DROP R4
.
* RELEASE THE STORAGE PREVIOUSLY OBTAINED.
.
STORAGE RELEASE,LENGTH=4096,ALET=ASALET,ADDR=ASADDR,SP=0
.
* REMOVE THE ENTRY FROM OUR ACCESS LIST
.
ALESERV DELETE,ALET=ASALET
.
* EXIT LINKAGE
.
LAE 1,0(13,0) GET ADDRESS OF SAVE AREA
STORAGE RELEASE,ADDR=(1),LENGTH=72 RELEASE THE SAVE AREA
SLR 15,15 SET A RETURN CODE OF ZERO
PR RETURN TO CALLER
.
* VARIABLES AND REGISTERS
.
ASTOKEN DS CL8 STOKEN OF ADDRESS SPACE
ASADDR DS F ADDRESS OF STORAGE IN ADDRESS SPACE
ASALET DS F ALET REPRESENTING ADDRESS SPACE
DATA1 DC CL4'BLUE'
DATA2 DC CL4'PINK'
LTORG
.
R1 EQU 1
R3 EQU 3
R4 EQU 4
.
* PARAMETER LIST MAPPING
.
PARMLIST DSECT
CSTOKEN DS CL8 USER'S STOKEN
.
* MAPPING OF STORAGE IN TARGET ADDRESS SPACE
.
ARSTOR DSECT
FIELD1 DS CL4 Area 1
FIELD2 DS CL4 Area 2
END