Peter F wrote:
<snip>
. . . each save area indicates how the BACKCHAIN POINTER WAS (not 
"registers were") stored by the program that created that area.
</snip>
No, it indicates BOTH how the backchain pointer was stored *and* also how 
the caller's registers were stored.

<snip>
When you create a save area, it is for your callees to use to save.  All 
you can tell them is where YOU stored the backchain, not necessarily where 
nor how many registers they can save in it.
</snip>
This is pretty much true except for the word "All". The created save area 
is also for you to use to save the address of your caller's save area. You 
can also tell the callee (but they should not have interest) where/how you 
saved your caller's registers.  And the callee should not need to know 
where you saved the backchain. The conventions are such that whether you 
saved at +4 or +x'80' that value will not be overwritten by the callee.

The general purpose of the FxSA designation is not for either the caller 
or the callee. It is for diagnosticians and programs they might use, in 
particular to be able to ascertain the caller's registers from some kind 
of dump (such as in following backwards the savearea chain from time of 
error and formatting the registers that had been saved). Can the 
designation be used for additional things such as Tony T seems to want to 
do? I suppose so. 

Peter Relson
z/OS Core Technology Design

Reply via email to