On Tue, 12 Apr 2011 01:22:10 -0400, Robert A. Rosenberg wrote: >At 16:07 -0400 on 04/11/2011, Tom Marchant wrote about Re: Best way >to multiply doublewords?: > >>You can not tell by looking at the save area that was passed to you >>to determine the size of the save area that was passed to you. > >I though that there was a flag (a text FxSA string) in the first word >of the save area if it is not a standard 72-byte SA. That should be a >tip-off to you being passed an extended SA. That flag is required so >that the dump formatting software can correctly format your save area >chain.
That is not correct. I was under the same impression until I had an extensive discussion with Peter Relson. As a result, he extensively revised theLinkage Conventions chapter of the Assembler Services Guide for the z/OS 1.12 edition of the manual (SA22-7605-12). Please read it again. I hope it will make sense to you. FxSA at offset 4 (not in the first word) does not indicate the size of the save area that contains that value. It specifies the format that was used by the program that allocated the save area to save the registers when it received control. This allows a program, such as one that formats dumps, to be able to follow the save area chain backward from the value in register 13. When a program receives control, it saves the caller's registers and allocates a new save area to be used by the programs that it calls. The format that it used to save its callers registers is saved at offset 4 of the new save area. If the program used traditional 72-byte standard save area format, it stores the address of the save area that it used in offset 4 of the new save area. If it used one of the newer formats, it stores the format that it used (e.g. F4SA) in offset 4 of the new save area. If it did not use the save area pointed to by register 13, but instead used the linkage stack (with BAKR) it stores F1SA or F6SA in offset 4 of the new save area. -- Tom Marchant Abend-AID development Compuware
