PDP-11 stack use

utzoo!decvax!genradbo!mitccc!jfw utzoo!decvax!genradbo!mitccc!jfw
Fri Jan 14 17:54:05 AEST 1983


A long time ago, I wanted to write a better setjump/longjump system.
This involved finding out what the C stack frame looks like.  After 3
days of poking through cc -S output, I determined the stack frame for the
PDP-11 and, not desiring to ever go through that work again, came up
with the following manual page for the stack frame:

**************** /usr/man/unix/chap5/stack.5 ****************

.nr LL 6.5
.TH STACK 5 PDP-11
.SH NAME
stack, C subroutine discipline
.SH DESCRIPTION
A C subroutine stack frame looks like the following:
.nf
.in +5
.ta 8 16 24 32 40 48 56 64

------------------
|...nth argument |		push arguments in reverse order
------------------
|second argument |
------------------
| first argument |
------------------		JSR PC,*$_FOO
| return address |
------------------		JSR R5,CSV
|  old R5 value  | <----- 
------------------	|
|	r4	 |	|
------------------	|
|	r3	 |	|
------------------	|
|	r2	 |	|
------------------	|
|   blank word	 |	|
------------------	| This is the top of the stack
|     routine	 |	| when the called routine "starts"
|    allocates	 |	|
|     storage	 |	|	SUB $n,SP
|    temporary	 |	|
------------------	|
| push arguments |	|
| of next routine|	|
------------------	|	JSR PC,*$_BAR
| return address |	|
------------------	|	JSR R5,CSV
| old R5 value---+-------
------------------	^
| r4/43/r2/...	 |	|
------------------
| and so on..... |

.fi
.in -5
Functions leave their return value in R0 (floating functions return it in FR0).
"long" functions leave return values in R1/R0; functions returning structures
leave a pointer to bss storage (one chunk of which is allocated for each such
routine) in R0, and the caller will copy from that bss storage to the
local destination.

Local variables are allocated in such a way that they are referred to
as "-N(R5)", arguments are referred to as "+N(R5)"; arguments start at 4(R5),
the first integer local declared will be at -10[8](R5).

It is important to note that routines know how many arguments they pass to a
function, and will adjust the stack accordingly after a function returns.

.SH AUTHOR
John F. Woods, MIT Concouse Computer Center



More information about the Comp.sources.unix mailing list