Start of outer block/main program. RP is saved, the stack frame is
allocated, and the unwind delimiter is initialized.
Call to procedure two. This is a local call, so the branch
goes directly to the procedure, with no stub interaction.
Entry to procedure two. RP is saved, the frame is
allocated, and the constant values 1 and 2 are loaded into argument
registers 1 and 2 (gr26 and gr25).
Branch to Calling Stub. As far as the procedure two is
concerned, this is the call to the procedure one, but the
branch actually goes to the calling stub that is necessary because
this is an external procedure call.
Entry to Calling Stub attached to two. The calling stub
performs as is documented in detail in Chapter 5, Calling Stub, of
the text.
Call to CALLX millicode. The Branch External instruction is used
in order to reach the CALL X millicode routine.
Execution of CALLX millicode; it performs exactly as is documented
in Chapter 5, External Procedure Call Millicode (CALLX), of the text,
and then branches to the called stub that is attached to procedure
one.
Entry to called stub attached to procedure one.
Branch to procedure one. The standard Branch and Link
instruction is used to reach the actual code for the external
procedure one.
Entry to procedure one. The arguments in gr26 and gr25 are
stored onto the stack (this is not necessary, and only remains
because the code has not been optimized.
Exit from one / Branch back to called stub. The standard
return instruction (BV) is used here, although the branch is actually
going to the called stub, and not directly to the caller.
Re-entry to called stub. The remainder of the called stub performs
as is documented in detail in Chapter 5, Called Stub, of the
text.
Exit from called stub / branch back to procedure two. The
Branch External instruction is used to reach to actual code for the
procedure two (the caller).
Return to procedure two from called stub. The previous RP
is loaded into gr2 from the stack, and the frame is
deallocated.
Exit from procedure two / branch back to main program
block. The standard procedure return is made, because this is a local
return.
Return to main program block from procedure two. After
return, calls are made to the system process termination procedures,
and then the frame is deallocated and the return is made to the
system.