rts: Handle SMALL_MUT_ARR_PTRS in checkClosure
[ghc.git] / rts / StgStartup.cmm
index a3a75d8..571e063 100644 (file)
@@ -62,16 +62,12 @@ INFO_TABLE_RET(stg_stop_thread, STOP_FRAME,
        be an info table on top of the stack).
     */
 
-    /*
-       Here we setup the stack unwinding annotation necessary to allow
-       debuggers to find their way back to the C stack.
-
-       This is a bit fiddly as we assume the layout of the stack prepared
-       for us by StgRun.
-     */
-#ifdef x86_64_HOST_ARCH
-    unwind MachSp = MachSp + RESERVED_C_STACK_BYTES + 0x38 + 8,
-           UnwindReturnReg = W_[MachSp + RESERVED_C_STACK_BYTES + 0x38];
+    // See Note [Unwinding foreign exports on x86-64].
+#if defined(x86_64_HOST_ARCH)
+    unwind UnwindReturnReg = STG_RUN_JMP;
+#else
+    // FIXME: Fill in for other platforms
+    unwind UnwindReturnReg = return;
 #endif
 
     Sp = Sp + SIZEOF_StgStopFrame - WDS(2);
@@ -119,6 +115,9 @@ stg_returnToSched /* no args: explicit stack layout */
 // current thread.  This is used for switching from compiled execution to the
 // interpreter, where calling threadPaused() on every switch would be too
 // expensive.
+//
+// See Note [avoiding threadPaused] in Interpreter.c
+//
 stg_returnToSchedNotPaused /* no args: explicit stack layout */
 {
   SAVE_THREAD_STATE();
@@ -171,24 +170,8 @@ INFO_TABLE_RET(stg_forceIO, RET_SMALL, P_ info_ptr)
     ENTER(ret);
 }
 
-/* -----------------------------------------------------------------------------
-   Special STG entry points for module registration.
-   -------------------------------------------------------------------------- */
-
-stg_init_finish /* no args: explicit stack layout */
-{
-  jump StgReturn [];
-}
-
-/* On entry to stg_init:
- *    init_stack[0] = &stg_init_ret;
- *    init_stack[1] = __stginit_Something;
- */
-stg_init /* no args: explicit stack layout */
+/* Called when compiled with -falignment-sanitisation on alignment failure */
+stg_badAlignment_entry
 {
-  W_ next;
-  Sp = W_[BaseReg + OFFSET_StgRegTable_rSp];
-  next = W_[Sp];
-  Sp_adj(1);
-  jump next [];
+  foreign "C" barf();
 }