/* -----------------------------------------------------------------------------
- * $Id: StgStartup.hc,v 1.11 2000/04/03 16:28:08 simonmar Exp $
+ * $Id: StgStartup.hc,v 1.19 2002/07/16 14:56:09 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
*
* ---------------------------------------------------------------------------*/
+#include "Stg.h"
#include "Rts.h"
#include "StgRun.h" /* StgReturn */
#include "StgStartup.h"
EXTFUN(stg_stop_thread_entry);
-#ifdef PROFILING
-#define STOP_THREAD_BITMAP 1
+#if defined(PROFILING)
+#define STOP_THREAD_BITMAP 3
#else
#define STOP_THREAD_BITMAP 0
#endif
* tidy up the registers and return to the scheduler.
*/
- /* Move Su just off the end of the stack, we're about to spam the
- * STOP_FRAME with the return value.
+ /* Move Sp to the last word on the stack, and Su to just past the end
+ * of the stack. We then place the return value at the top of the stack.
*/
+ Sp += sizeofW(StgStopFrame) - 1;
Su = (StgUpdateFrame *)(Sp+1);
Sp[0] = R1.w;
+ CurrentTSO->what_next = ThreadComplete;
+
SaveThreadState(); /* inline! */
/* R1 contains the return value of the thread */
/* -----------------------------------------------------------------------------
Special STG entry points for module registration.
-
- This stuff is problematic for Hugs, because it introduces a
- dependency between the RTS and the program (ie. __init_PrelMain). So
- we currently disable module initialisation for Hugs.
-------------------------------------------------------------------------- */
-#ifndef INTERPRETER
-
extern F_ *init_stack;
STGFUN(stg_init_ret)
/* On entry to stg_init:
* init_stack[0] = &stg_init_ret;
- * init_stack[1] = __init_Something;
+ * init_stack[1] = __stginit_Something;
*/
STGFUN(stg_init)
{
JMP_(POP_INIT_STACK());
FE_
}
-
-/* PrelGHC doesn't really exist... */
-
-START_MOD_INIT(__init_PrelGHC);
-END_MOD_INIT();
-
-#endif /* !INTERPRETER */