[pypy-commit] pypy s390x-backend: shadowold was a pointer not the value (which it should have been) and the comparison compared the pointers not the values

plan_rich pypy.commits at gmail.com
Mon Feb 1 07:55:04 EST 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r82031:5fe38e24272c
Date: 2016-02-01 13:52 +0100
http://bitbucket.org/pypy/pypy/changeset/5fe38e24272c/

Log:	shadowold was a pointer not the value (which it should have been)
	and the comparison compared the pointers not the values

diff --git a/rpython/jit/backend/zarch/callbuilder.py b/rpython/jit/backend/zarch/callbuilder.py
--- a/rpython/jit/backend/zarch/callbuilder.py
+++ b/rpython/jit/backend/zarch/callbuilder.py
@@ -203,7 +203,7 @@
             if gcrootmap.is_shadow_stack:
                 rst = gcrootmap.get_root_stack_top_addr()
                 self.mc.load_imm(RSHADOWPTR, rst)
-                self.mc.LGR(RSHADOWOLD, RSHADOWPTR)
+                self.mc.load(RSHADOWOLD, RSHADOWPTR, 0)
         #
         # change 'rpy_fastgil' to 0 (it should be non-zero right now)
         self.mc.load_imm(RFASTGILPTR, fastgil)
@@ -244,7 +244,8 @@
             # thread.  So here we check if the shadowstack pointer
             # is still the same as before we released the GIL (saved
             # in RSHADOWOLD), and if not, we fall back to 'reacqgil_addr'.
-            self.mc.CGR(RSHADOWPTR, RSHADOWOLD)
+            self.load(r.r11, RSHADOWPTR, 0)
+            self.mc.CGR(r.r11, RSHADOWOLD)
             bne_location = b1_location
             b1_location = self.mc.currpos()
             self.mc.reserve_cond_jump()
@@ -291,6 +292,8 @@
         self.mc.LMG(r.r8, r.r13, l.addr(pos, r.SP))
 
     def write_real_errno(self, save_err):
+        # r11 is saved in call_releasegil_addr_and_move_real_arguments,
+        # thus can be used freely here!
         if save_err & rffi.RFFI_READSAVED_ERRNO:
             # Just before a call, read '*_errno' and write it into the
             # real 'errno'.
@@ -314,14 +317,14 @@
     def read_real_errno(self, save_err):
         if save_err & rffi.RFFI_SAVE_ERRNO:
             # Just after a call, read the real 'errno' and save a copy of
-            # it inside our thread-local '*_errno'.  Registers r4-r10
+            # it inside our thread-local '*_errno'.  Registers r3-r6
             # never contain anything after the call.
             if save_err & rffi.RFFI_ALT_ERRNO:
                 rpy_errno = llerrno.get_alt_errno_offset(self.asm.cpu)
             else:
                 rpy_errno = llerrno.get_rpy_errno_offset(self.asm.cpu)
             p_errno = llerrno.get_p_errno_offset(self.asm.cpu)
-            self.mc.LG(r.r12, l.addr(THREADLOCAL_ADDR_OFFSET, r.SP))
-            self.mc.LG(r.r11, l.addr(p_errno, r.r12))
-            self.mc.LGF(r.r11, l.addr(0, r.r11))
-            self.mc.STY(r.r11, l.addr(rpy_errno, r.r12))
+            self.mc.LG(r.r3, l.addr(THREADLOCAL_ADDR_OFFSET, r.SP))
+            self.mc.LG(r.r4, l.addr(p_errno, r.r3))
+            self.mc.LGF(r.r4, l.addr(0, r.r4))
+            self.mc.STY(r.r4, l.addr(rpy_errno, r.r3))
diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py
--- a/rpython/jit/backend/zarch/opassembler.py
+++ b/rpython/jit/backend/zarch/opassembler.py
@@ -495,8 +495,7 @@
         mc.NILL(r.SCRATCH, l.imm(mask & 0xFF))
 
         jz_location = mc.get_relative_pos()
-        mc.trap()        # patched later with 'EQ'
-        mc.write('\x00' * 4)
+        mc.reserve_cond_jump()  # patched later with 'EQ'
 
         # for cond_call_gc_wb_array, also add another fast path:
         # if GCFLAG_CARDS_SET, then we can just set one bit and be done
@@ -505,8 +504,7 @@
             mc.LGR(r.SCRATCH, r.SCRATCH2)
             mc.NILL(r.SCRATCH, l.imm(card_marking_mask & 0xFF))
             js_location = mc.get_relative_pos()
-            mc.trap()        # patched later with 'NE'
-            mc.write('\x00' * 4)
+            mc.reserve_cond_jump()  # patched later with 'NE'
         else:
             js_location = 0
 


More information about the pypy-commit mailing list