[pypy-commit] pypy errno-again: rffi.RFFI_ZERO_ERRNO_BEFORE
arigo
noreply at buildbot.pypy.org
Thu Jan 15 11:36:02 CET 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: errno-again
Changeset: r75339:05b2fc705f1a
Date: 2015-01-15 11:35 +0100
http://bitbucket.org/pypy/pypy/changeset/05b2fc705f1a/
Log: rffi.RFFI_ZERO_ERRNO_BEFORE
diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -2981,7 +2981,7 @@
func1_adr = rffi.cast(lltype.Signed, func1_ptr)
calldescr = self.cpu._calldescr_dynamic_for_tests([], types.sint32)
#
- for saveerr in [rffi.RFFI_READSAVED_ERRNO]:
+ for saveerr in [rffi.RFFI_READSAVED_ERRNO, rffi.RFFI_ZERO_ERRNO_BEFORE]:
faildescr = BasicFailDescr(1)
i1 = BoxInt()
ops = [
@@ -2999,10 +2999,11 @@
deadframe = self.cpu.execute_token(looptoken)
result = self.cpu.get_int_value(deadframe, 0)
assert llerrno.get_debug_saved_errno(self.cpu) == 24
- assert result == 24
-
- def test_call_release_gil_zero_errno_before(self):
- XXX
+ #
+ if saveerr == rffi.RFFI_READSAVED_ERRNO:
+ assert result == 24
+ else:
+ assert result == 0
def test_call_release_gil_save_lasterror(self):
XXX
diff --git a/rpython/jit/backend/x86/callbuilder.py b/rpython/jit/backend/x86/callbuilder.py
--- a/rpython/jit/backend/x86/callbuilder.py
+++ b/rpython/jit/backend/x86/callbuilder.py
@@ -162,6 +162,13 @@
mc.MOV_rm(edx.value, (eax.value, p_errno))
mc.MOV32_rm(eax.value, (eax.value, rpy_errno))
mc.MOV32_mr((edx.value, 0), eax.value)
+ elif save_err & rffi.RFFI_ZERO_ERRNO_BEFORE:
+ # Same, but write zero.
+ p_errno = llerrno.get_p_errno_offset(self.asm.cpu)
+ mc = self.mc
+ mc.MOV_rs(eax.value, THREADLOCAL_OFS - self.current_esp)
+ mc.MOV_rm(eax.value, (eax.value, p_errno))
+ mc.MOV32_mi((eax.value, 0), 0)
def read_real_errno(self, save_err):
if save_err & rffi.RFFI_SAVE_ERRNO:
More information about the pypy-commit
mailing list