[Openmcl-cvs-notifications] r14188 - in /trunk/source/lisp-kernel: arm-spentry.s arm-subprims.s

gb at clozure.com gb at clozure.com
Sat Aug 14 09:11:42 CDT 2010


Author: gb
Date: Sat Aug 14 09:11:41 2010
New Revision: 14188

Log:
Ensure that stack pointer is aligned on an 8-byte boundary when calling
into lisp (the iOS ABI doesn't ensure this.)

Modified:
    trunk/source/lisp-kernel/arm-spentry.s
    trunk/source/lisp-kernel/arm-subprims.s

Modified: trunk/source/lisp-kernel/arm-spentry.s
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/arm-spentry.s (original)
+++ trunk/source/lisp-kernel/arm-spentry.s Sat Aug 14 09:11:41 2010
@@ -3031,6 +3031,10 @@
         __(mov r0,#1)
         __(blx r12)
         __(mov rcontext,r0)
+        __(tst sp,#4)
+        __(mov imm2,sp)
+        __(strne imm2,[sp,#-4]!)
+        __(streq imm2,[sp,#-8]!)
         __(ldr imm2,[rcontext,#tcr.last_lisp_frame])
         __(sub imm0,imm2,sp)
         __(add imm0,imm0,#node_size)
@@ -3058,7 +3062,7 @@
         __(str allocptr,[rcontext,#tcr.save_allocptr])
         __(mov imm0,#TCR_STATE_FOREIGN)
         __(str imm0,[rcontext,#tcr.valence])
-        __(add sp,sp,#node_size*2)   /* drop the ivector that hides foreig=
n stack contents */
+        __(ldr sp,[sp,#node_size*2])   /* drop the ivector that hides fore=
ign stack contents and restore (possibly misaligned) sp */
         __(ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr})
         __(ldmia sp!,{r0,r1})
         __(add sp,sp,#4*node_size)

Modified: trunk/source/lisp-kernel/arm-subprims.s
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/arm-subprims.s (original)
+++ trunk/source/lisp-kernel/arm-subprims.s Sat Aug 14 09:11:41 2010
@@ -62,6 +62,10 @@
 _exportfn(C(start_lisp))
         __(stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr})
         __(mov rcontext,r0)
+        __(mov r0,sp)
+        __(tst sp,#4)
+        __(strne r0,[sp,#-4]!)
+        __(streq r0,[sp,#-8]!)
         __(mov arg_z,#0)
         __(mov arg_y,#0)
         __(mov arg_x,#0)
@@ -86,6 +90,7 @@
         __(str imm1,[rcontext,#tcr.last_lisp_frame])
         __(str imm0,[rcontext,#tcr.valence])
         __(mov imm0,#nil_value)
+        __(ldr sp,[sp])
         __(ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr})
         __(bx lr)
 =




More information about the Openmcl-cvs-notifications mailing list