rts: Handle SMALL_MUT_ARR_PTRS in checkClosure
[ghc.git] / rts / StgStartup.cmm
index 2a245b0..571e063 100644 (file)
@@ -62,6 +62,14 @@ INFO_TABLE_RET(stg_stop_thread, STOP_FRAME,
        be an info table on top of the stack).
     */
 
+    // 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);
     Sp(1) = R1;
     Sp(0) = stg_enter_info;
@@ -107,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();
@@ -159,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();
 }