55 lines
		
	
	
	
		
			886 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			886 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Header$ */
 | |
| 
 | |
| #include	"logging.h"
 | |
| #include	"global.h"
 | |
| #include	"mem.h"
 | |
| #include	"shadow.h"
 | |
| #include	"fra.h"
 | |
| #include	"alloc.h"
 | |
| 
 | |
| #ifdef	LOGGING
 | |
| char *FRA_sh;				/* shadowbytes */
 | |
| #endif	/* LOGGING */
 | |
| 
 | |
| init_FRA() {
 | |
| 	FRA = Malloc(FRALimit, "Function Return Area");
 | |
| #ifdef	LOGGING
 | |
| 	FRA_sh = Malloc(FRALimit, "shadowspace for Function Return Area");
 | |
| #endif	/* LOGGING */
 | |
| 	FRA_def = UNDEFINED;		/* set FRA illegal */
 | |
| }
 | |
| 
 | |
| pushFRA(sz)
 | |
| 	size sz;
 | |
| {
 | |
| 	register int i;
 | |
| 
 | |
| 	if (sz == 0)
 | |
| 		return;
 | |
| 
 | |
| 	st_inc(max(sz, wsize));
 | |
| 	for (i = 0; i < sz; i++) {
 | |
| 		stack_loc(SP + i) = FRA[i];
 | |
| #ifdef	LOGGING
 | |
| 		st_sh(SP + i) = (i < FRASize ? FRA_sh[i] : UNDEFINED);
 | |
| #endif	/* LOGGING */
 | |
| 	}
 | |
| }
 | |
| 
 | |
| popFRA(sz)
 | |
| 	size sz;
 | |
| {
 | |
| 	register int i;
 | |
| 
 | |
| 	if (sz == 0)
 | |
| 		return;
 | |
| 
 | |
| 	for (i = 0; i < sz; i++) {
 | |
| 		FRA[i] = stack_loc(SP + i);
 | |
| #ifdef	LOGGING
 | |
| 		FRA_sh[i] = st_sh(SP + i);
 | |
| #endif	/* LOGGING */
 | |
| 	}
 | |
| 	st_dec(max(sz, wsize));
 | |
| }
 | |
| 
 |