/* gen-offsets.c
*
* COPYRIGHT (c) 1992 by AT&T Bell Laboratories.
*
* This C program generates a header file for the *.prim.asm files,
* which gives the offset values in the VProc and ML state vectors.
*/
#include "ml-base.h"
#include "vproc-state.h"
#include "ml-state.h"
#include "gen.h"
#define MOFFSET(fld) (((Addr_t)&(M.s.fld)) - (Addr_t)&(M.b[0]))
#define VOFFSET(fld) (((Addr_t)&(V.s.fld)) - (Addr_t)&(V.b[0]))
#define PVOFFSET(sym, fld) \
fprintf(f, "#define %sOffVSP %ld\n", (sym), (long int) VOFFSET(fld))
#define PMOFFSET(sym, fld) \
fprintf(f, "#define %sOffMSP %ld\n", (sym), (long int) MOFFSET(fld))
int main (void)
{
union {
vproc_state_t s;
char b[sizeof(vproc_state_t)];
} V;
union {
ml_state_t s;
char b[sizeof(ml_state_t)];
} M;
FILE *f;
f = OpenFile ("mlstate-offsets.h", "_MLSTATE_OFFSETS_");
#if TARGET_BYTECODE
fprintf (f, "/* TARGET_BYTECODE */\n");
#else
PMOFFSET("VProc", ml_vproc);
PMOFFSET("AllocPtr", ml_allocPtr);
PMOFFSET("LimitPtr", ml_limitPtr);
PMOFFSET("StorePtr", ml_storePtr);
PMOFFSET("StdArg", ml_arg);
PMOFFSET("StdCont", ml_cont);
PMOFFSET("StdClos", ml_closure);
PMOFFSET("LinkReg", ml_linkReg);
PMOFFSET("PC", ml_pc);
PMOFFSET("ExnPtr", ml_exnCont);
PMOFFSET("VarPtr", ml_varReg);
PMOFFSET("Misc0", ml_calleeSave[0]);
PMOFFSET("Misc1", ml_calleeSave[1]);
PMOFFSET("Misc2", ml_calleeSave[2]);
#ifdef SOFT_POLL
PMOFFSET("RealLimit", ml_realLimit);
PMOFFSET("PollPending", ml_pollPending);
PMOFFSET("InPollHandler", ml_inPollHandler);
#endif
PVOFFSET("InML", vp_inMLFlag);
PVOFFSET("LimitPtrMask", vp_limitPtrMask);
PVOFFSET("HandlerPending", vp_handlerPending);
PVOFFSET("InSigHandler", vp_inSigHandler);
PVOFFSET("SigsRecv", vp_totalSigCount.nReceived);
PVOFFSET("SigsHandled", vp_totalSigCount.nHandled);
#endif /* !BYTECODE */
CloseFile (f, "_MLSTATE_OFFSETS_");
exit (0);
}
syntax highlighted by Code2HTML, v. 0.9.1