The stack frame,
also called dynamic save area (DSA), for each active routine is listed
in the full dump.
A stack frame chain is associated
with each thread in the runtime environment and is acquired every
time a separately compiled procedure or block is entered. A stack
frame is also allocated for each call to a Language Environment service.
All stack frames are back-chained with a stopping stack frame (also
called a dummy DSA) as the first stack frame on the stack. Register
13 addresses the recently active stack frame or a standard register
save area (RSA). The standard save area back chain must be initialized,
and it holds the address of the previous save area. Not all Language Environment-conforming
compilers set the forward chain; thus, it cannot be guaranteed in
all instances. Calling routines establish the member-defined fields.
When a routine makes a call, registers 0–15 contain the following
values:
- R1 is a pointer to parameter list or 0 if no parameter list passed.
- R0, R2–R11 is unreferenced by Language Environment. Caller’s
values are passed transparently.
- R12 is the pointer to the CAA if entry to an external routine.
- R13 is the pointer to caller’s stack frame.
- R14 is the return address.
- R15 is the address of the called entry point.
With
an optimization level other than 0,
C/C++ routines
save only the registers used during the running of the current routine.
Non-
Language Environment RSAs
can be in the save area chain. The length of the save area and the
saved register contents do not always conform to
Language Environment conventions.
For a detailed description of stack frames
Language Environment storage
management, see
z/OS Language Environment Programming Guide.
Figure 1 shows the format of the upward-growing
stack frame.
Note: The Member-defined fields
are reserved for the specific higher level language.
Figure 1. Upward-growing
(non-XPLINK) stack frame format