The dump is showing a trace of the save areas. A "standard" 72 byte save area is described by this DSECT -
Code: Select all
SAVEAREA DSECT , 72 BYTE OS/360 SAVE AREA
SAVEWD1 DS A RESERVED
SAVEHSA DS A ADDRESS OF PREVIOUS SAVE AREA
SAVELSA DS A ADDRESS OF LOWER SAVE AREA
SAVER14 DS A CALLER'S REG 14
SAVER15 DS A CALLER'S REG 15
SAVER0 DS A CALLER'S REG 0
SAVER1 DS A CALLER'S REG 1
SAVER2 DS A CALLER'S REG 2
SAVER3 DS A CALLER'S REG 3
SAVER4 DS A CALLER'S REG 4
SAVER5 DS A CALLER'S REG 5
SAVER6 DS A CALLER'S REG 6
SAVER7 DS A CALLER'S REG 7
SAVER8 DS A CALLER'S REG 8
SAVER9 DS A CALLER'S REG 9
SAVER10 DS A CALLER'S REG 10
SAVER11 DS A CALLER'S REG 11
SAVER12 DS A CALLER'S REG 12
Save areas are useful in debugging as you can trace the path of program calls to arrive at the point of error - assuming, of course, that everyone in the path is doing the entire convention, which many people don't do. This is an example -
Code: Select all
APGM CSECT
USING *,12 ESTABLISH PROGRAM ADDRESSABILITY
OLDSAVE USING SAVEAREA,13 CALLER'S SAVE AREA
NEWSAVE USING SAVEAREA,15 NEW SAVE AREA
SAVE (14,12),,* SAVE REGISTERS
LR 12,15 COPY ENTRY POINT ADDR TO REG 12
LA 15,NEWSAVEAREA LOAD ADDRESS OF THE NEW SAVE AREA
ST 15,OLDSAVE.SAVELSA ADD NEW SAVE AREA TO THE
ST 13,NEWSAVE.SAVEHSA SAVE AREA CHAIN
LR 13,15 ESTABLISH NEW SAVE AREA POINTER
DROP OLDSAVE,NEWSAVE KILL SAVE AREA ADDRESSABILITY
* ...
* CALL ANOTHER_PROGRAM
* ...
USING SAVEAREA,13 ESTASBLISH SAVE AREA ADDRESSABILITY
L 13,SAVEHSA LOAD ADDR OF CALLER'S SAVE AREA
RETURN (14,12),RC=0 RESTORE REGISTERS & RETURN
DROP 12,13 KILL ADDRESSABILITY
NEWSAVEAREA DC 18F'0'
END
Many beginners don't bother with
ST 15,OLDSAVE.SAVELSA
either because they don't understand it is required for the dump program to properly trace the save area chain, they arrogantly believe, "my programs will never have an error," or they are just too lazy.