FN | ID | Type | Offset in Bytes ===+======+======+================= P1 | x | int | +4 P1 | y | int | +8 P1 | a | int | -8 P1 | b | int | -12 P1 | c | int | -16 P1 | a | dbl | -24 P1 | w | dbl | -32 P2 | x | int | -8 P2 | y | int | -12 P2 | a | dbl | -20 P2 | b | int | -24 P2 | c | int | -28
Before MAIN calls Q: +==========+ MAIN x:| 2 | |----------| | | +==========+ Before Q calls R (the x that Q uses is in MAIN's AR): +==========+ Q y:| 2 | |----------| | ----------+ +==========+ | MAIN x:| 2 | | |----------| | | | <-+ +==========+ Before R calls R (the x that R uses is in MAIN's AR and the y that it uses is in Q's AR): +==========+ R | --------------+ +==========+ | Q y:| 5 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 3 | | |----------| | | |<--+ +==========+ Before R calls P (the x that R uses is in MAIN's AR and the y that it uses is in Q's AR): +==========+ R | ------------------+ +==========+ | R | --------------+ <-+ +==========+ | Q y:| 9 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 4 | | |----------| | | |<--+ +==========+ Before P returns (the x that P uses is in MAIN's AR): +==========+ P | ----------------------+ +==========+ | R | ------------------+ <-+ +==========+ | R | --------------+ <-+ +==========+ | Q y:| 9 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 4 | | |----------| | | |<--+ +==========+ After P returns, the recursive call to R also returns. Then R calls P and the stack looks like this: +==========+ P | ------------------+ +==========+ | R | --------------+ <-+ +==========+ | Q y:| 9 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 4 | | |----------| | | |<--+ +==========+ Next, both P and R return, and Q calls P. Then Q calls itself (the x it uses to initialize y is in MAIN's AR): +==========+ Q y:| 4 | |----------| | --------------+ +==========+ | Q y:| 9 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 4 | | |----------| | | |<--+ +==========+ After Q calls R and R updates x and y (x is in MAIN's AR and y is in the top AR for Q): +==========+ R | ------------------+ +==========+ | Q y:| 9 | | |----------| | | --------------+ <-+ +==========+ | Q y:| 9 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 5 | | |----------| | | |<--+ +==========+ R then calls P, and returns. Q calls P, then all active procedures return.
After MAIN calls Q (case 1 of setting up access links: Q is inside MAIN): +==========+ Q y:| | |----------| | ----------+ +==========+ | MAIN x:| 2 | | |----------| | | | <-+ +==========+ After Q calls R (case 1 of setting up access links; R is inside Q): +==========+ R | --------------+ +==========+ | Q y:| 2 | | |----------| | | ----------+ <-+ +==========+ | MAIN x:| 2 | | |----------| | | |<--+ +==========+ After R calls R (case 2 of setting up access links; must follow 0 links to find the link to copy into the new AR): +==========+ R | ------------------+ +==========+ | R | --------------+ | +==========+ | | Q y:| 5 | | | |----------| | | | ----------+ <-+ <-+ +==========+ | MAIN x:| 3 | | |----------| | | |<--+ +==========+ After R calls P (case 2 of setting up access links; must follow 3-2 = 1 link to find the link to copy into the new AR): +==========+ P | ----------------------+ +==========+ | R | ------------------+ | +==========+ | | R | --------------+ | | +==========+ | | | Q y:| 9 | | | | |----------| | | | | ----------+ <-+ <-+ | +==========+ | | MAIN x:| 4 | | | |----------| | | | |<--+ <---------+ +==========+ After P and the recursive call to R return, and R calls P (case 2 of setting up access links; must follow 3-2=1 link to find the link to copy into the new AR): +==========+ P | ------------------+ +==========+ | R | --------------+ | +==========+ | | Q y:| 9 | | | |----------| | | | ----------+ <-+ | +==========+ | | MAIN x:| 4 | | | |----------| | | | |<--+ <-----+ +==========+ After P and R return, and Q calls Q (case 2 of setting up access links; must follow 1-1=0 links to find the one to copy): +==========+ Q y:| 4 | |----------| | --------------+ +==========+ | Q y:| 9 | | |----------| | | ----------+ | +==========+ | | MAIN x:| 4 | | | |----------| | | | |<--+ <-+ +==========+ After Q calls R (case 1 of setting up access links): +==========+ R | ------------------+ +==========+ | Q y:| 4 | | |----------| | | --------------+ <-+ +==========+ | Q y:| 9 | | |----------| | | ----------+ | +==========+ | | MAIN x:| 4 | | | |----------| | | | |<--+ <-+ +==========+ After this, R calls P, then both P and R return; Q calls P, then both P and Q return. There is nothing new about setting up access links.