/* $Id$ */ #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)); }