[project @ 2001-02-11 17:51:07 by simonmar]
[ghc-hetmet.git] / ghc / rts / ForeignCall.c
index 38158ce..7dc5661 100644 (file)
@@ -1,6 +1,6 @@
 
 /* -----------------------------------------------------------------------------
- * $Id: ForeignCall.c,v 1.14 2000/04/11 16:49:20 sewardj Exp $
+ * $Id: ForeignCall.c,v 1.19 2000/10/09 10:28:33 daan Exp $
  *
  * (c) The GHC Team 1994-1999.
  *
@@ -205,7 +205,8 @@ static void universal_call_c_generic
       printf("%c",(char)argstr[i]);
     }
     printf("' [%d arg(s)]\n",n_args);
-    assert(0);
+    barf("aborting");
+    ASSERT(0);
   }
 #undef CALL
 #undef CMP
@@ -316,7 +317,6 @@ int ccall ( CFunDescriptor*  d,
    PushPtr((StgPtr)(*bco));
    cap->rCurrentTSO->sp    = MainRegTable.rSp;
    cap->rCurrentTSO->su    = MainRegTable.rSu;
-   cap->rCurrentTSO->splim = MainRegTable.rSpLim;
    token = suspendThread(cap);
 
 #if i386_TARGET_ARCH
@@ -335,7 +335,6 @@ int ccall ( CFunDescriptor*  d,
    cap = resumeThread(token);
    MainRegTable.rSp    = cap->rCurrentTSO->sp;
    MainRegTable.rSu    = cap->rCurrentTSO->su;
-   MainRegTable.rSpLim = cap->rCurrentTSO->splim;
    *bco=(StgBCO*)PopPtr();
 
    /* INT, WORD, ADDR, STABLE don't need to do a word-size check
@@ -385,7 +384,7 @@ int ccall ( CFunDescriptor*  d,
 /* Make it possible for the evaluator to get hold of bytecode
    for a given function by name.  Useful but a hack.  Sigh.
  */
-extern void* getHugs_AsmObject_for ( char* s );
+extern void* /* StgClosure* */ getHugs_BCO_cptr_for ( char* s );
 extern int /*Bool*/ combined;
 
 /* ----------------------------------------------------------------*
@@ -430,7 +429,7 @@ unpackArgsAndCallHaskell_x86_nocallconv_wrk ( StgStablePtr stableptr,
    while (*argp) {
       switch (*argp) {
          case CHAR_REP:
-            node = rts_apply ( node, rts_mkChar ( *(char*)args ) );
+            node = rts_apply ( node, rts_mkChar ( *(unsigned int*)args ) );
             args += 4;
             break;
          case INT_REP:
@@ -469,7 +468,7 @@ unpackArgsAndCallHaskell_x86_nocallconv_wrk ( StgStablePtr stableptr,
       sstat = rts_evalIO ( node, &nodeOut );
    } else {
       node = rts_apply ( 
-                asmClosureOfObject(getHugs_AsmObject_for("primRunST")), 
+                getHugs_BCO_cptr_for("runST"), 
                 node );
       sstat = rts_eval ( node, &nodeOut );
    }