Sparc fix: work around gcc optimising away the reserved stack chunk
authorSimon Marlow <simonmar@microsoft.com>
Thu, 24 Aug 2006 11:37:50 +0000 (11:37 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Thu, 24 Aug 2006 11:37:50 +0000 (11:37 +0000)
This bug causes crashse on Sparc when calling foreign functions with
more than 13 arguments.

rts/StgCRun.c

index c1afc16..70c4bf0 100644 (file)
@@ -328,13 +328,16 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
            ".align 4\n"
             ".global " STG_RETURN "\n"
                    STG_RETURN ":"
-           : : : "l0","l1","l2","l3","l4","l5","l6","l7");
+           : : "p" (space) : "l0","l1","l2","l3","l4","l5","l6","l7");
     /* we tell the C compiler that l0-l7 are clobbered on return to
      * StgReturn, otherwise it tries to use these to save eg. the
      * address of space[100] across the call.  The correct thing
      * to do would be to save all the callee-saves regs, but we
      * can't be bothered to do that.
      *
+     * We also explicitly mark space as used since gcc eliminates it
+     * otherwise.
+     *
      * The code that gcc generates for this little fragment is now
      * terrible.  We could do much better by coding it directly in
      * assembler.