Fix register clobber list in StgRun for ARM
authorBen Gamari <bgamari.foss@gmail.com>
Sat, 28 Jan 2012 21:55:04 +0000 (16:55 -0500)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 30 Jan 2012 11:08:43 +0000 (11:08 +0000)
The ARM implementation of StgRun does not claim that it clobbers r7-r12. As a
result, the compiler will sometimes put the returned RegTable in one of these
registers, resulting in an invalid RegTable to be returned. Hilarity ensues.

Signed-off-by: Ben Gamari <bgamari.foss@gmail.com>
rts/StgCRun.c

index c302efb..8fcb550 100644 (file)
@@ -672,7 +672,7 @@ StgRun(StgFunPtr f, StgRegTable *basereg) {
         "ldmfd sp!, {r4-r10, fp, ip, lr}\n\t"
       : "=r" (r)
       : "r" (f), "r" (basereg), "i" (RESERVED_C_STACK_BYTES)
-      : 
+      : "%r4", "%r5", "%r6", "%r8", "%r9", "%r10", "%fp", "%ip", "%lr"
     );
     return r;
 }