[pypy-commit] pypy arm-backed-float: (arigo, bivab) generate header and footer for functions when using the shadowstack

bivab noreply at buildbot.pypy.org
Thu May 26 14:00:26 CEST 2011


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backed-float
Changeset: r44503:a30fd39f0ff5
Date: 2011-05-25 14:07 +0200
http://bitbucket.org/pypy/pypy/changeset/a30fd39f0ff5/

Log:	(arigo, bivab) generate header and footer for functions when using
	the shadowstack

diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -380,10 +380,10 @@
 
     def gen_func_epilog(self, mc=None, cond=c.AL):
         gcrootmap = self.cpu.gc_ll_descr.gcrootmap
-        if gcrootmap and gcrootmap.is_shadow_stack:
-            self.gen_footer_shadowstack(gcrootmap)
         if mc is None:
             mc = self.mc
+        if gcrootmap and gcrootmap.is_shadow_stack:
+            self.gen_footer_shadowstack(gcrootmap, mc)
         offset = 1
         if self.cpu.supports_floats:
             offset += 1 # to keep stack alignment
@@ -421,12 +421,12 @@
         self.mc.STR_ri(r.fp.value, r.r4.value, WORD) 
         self.mc.STR_ri(r.r5.value, r.ip.value)
 
-    def gen_footer_shadowstack(self, gcrootmap):
+    def gen_footer_shadowstack(self, gcrootmap, mc):
         rst = gcrootmap.get_root_stack_top_addr()
-        self.mc.gen_load_int(r.ip.value, rst)
-        self.mc.LDR_ri(r.r4.value, r.ip.value) # LDR r4, [rootstacktop]
-        self.mc.SUB_ri(r.r5.value, r.r4.value, imm=2*WORD) # ADD r5, r4 [2*WORD]
-        self.mc.STR_ri(r.r5.value, r.ip.value)
+        mc.gen_load_int(r.ip.value, rst)
+        mc.LDR_ri(r.r4.value, r.ip.value) # LDR r4, [rootstacktop]
+        mc.SUB_ri(r.r5.value, r.r4.value, imm=2*WORD) # ADD r5, r4 [2*WORD]
+        mc.STR_ri(r.r5.value, r.ip.value)
 
     def gen_bootstrap_code(self, nonfloatlocs, floatlocs, inputargs):
         for i in range(len(nonfloatlocs)):
diff --git a/pypy/jit/backend/arm/runner.py b/pypy/jit/backend/arm/runner.py
--- a/pypy/jit/backend/arm/runner.py
+++ b/pypy/jit/backend/arm/runner.py
@@ -4,6 +4,7 @@
 from pypy.jit.backend.llsupport.llmodel import AbstractLLCPU
 from pypy.rpython.llinterp import LLInterpreter
 from pypy.rpython.lltypesystem import lltype, rffi, llmemory
+from pypy.jit.backend.arm.arch import FORCE_INDEX_OFS
 
 
 class ArmCPU(AbstractLLCPU):


More information about the pypy-commit mailing list