Commit 506299fe authored by Simon Marlow's avatar Simon Marlow
Browse files

Sparc fix: work around gcc optimising away the reserved stack chunk

This bug causes crashse on Sparc when calling foreign functions with
more than 13 arguments.
parent af0d070b
...@@ -328,13 +328,16 @@ StgRun(StgFunPtr f, StgRegTable *basereg) { ...@@ -328,13 +328,16 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
".align 4\n" ".align 4\n"
".global " STG_RETURN "\n" ".global " STG_RETURN "\n"
STG_RETURN ":" 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 /* we tell the C compiler that l0-l7 are clobbered on return to
* StgReturn, otherwise it tries to use these to save eg. the * StgReturn, otherwise it tries to use these to save eg. the
* address of space[100] across the call. The correct thing * address of space[100] across the call. The correct thing
* to do would be to save all the callee-saves regs, but we * to do would be to save all the callee-saves regs, but we
* can't be bothered to do that. * 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 * The code that gcc generates for this little fragment is now
* terrible. We could do much better by coding it directly in * terrible. We could do much better by coding it directly in
* assembler. * assembler.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment