MVS SP2.2.0 introduced "SWA above the line", taking 3 byte SWA block pointers and turning them into 20 bit tokens that could be then translated into a 31 bit address using services provided by the MVS Scheduler component. The algorithm has not been changed in the last 30 years. It was not difficult to skip the provided services and "roll your own" translation by testing the low order bit to determine if the 3 bytes were an address or a token and then locate the block yourself, referencing data areas. You need to stop doing this. Instead, use the IEFQMREC service or SWAREQ ReadLocate (RL), or obtain the information in some other supported way such as LISTDSI.
The existing IEFQMREQ macro and the SWAREQ RL service, particularly the UNAUTH=YES option, are the best options for translating SWA tokens to addresses within an address space. SWAREQ RL UNAUTH=YES supports SRB and cross memory execution (although all storage accesses are done in the primary address space.) See: z/OS: MVS Programming: Authorized Assembler Services Reference. REXX EXECs that attempt to use the STORAGE function to find SWA blocks to collect information may be able to use the LISTDSI function to get that information instead, as it allows either the DD name or the data set name to be used as input and returns information about the data set and DD. See LISTDSI documentation in : z/OS TSO/E REXX Reference and z/OS TSO/E CLISTs. Peter Relson z/OS Core Technology Design ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN