/rpython/jit/backend/aarch64/test/test_fficall.py

https://github.com/mozillazg/pypy · Python · 23 lines · 11 code · 2 blank · 10 comment · 2 complexity · 4628d7d45e37ad19671d69246b9942d6 MD5 · raw file

  1. import py
  2. from rpython.jit.metainterp.test import test_fficall
  3. from rpython.jit.backend.aarch64.test.test_basic import JitAarch64Mixin
  4. class TestFfiCall(JitAarch64Mixin, test_fficall.FfiCallTests):
  5. # for the individual tests see
  6. # ====> ../../../metainterp/test/test_fficall.py
  7. def _add_libffi_types_to_ll2types_maybe(self):
  8. # this is needed by test_guard_not_forced_fails, because it produces a
  9. # loop which reads the value of types.* in a variable, then a guard
  10. # fail and we switch to blackhole: the problem is that at this point
  11. # the blackhole interp has a real integer, but it needs to convert it
  12. # back to a lltype pointer (which is handled by ll2ctypes, deeply in
  13. # the logic). The workaround is to teach ll2ctypes in advance which
  14. # are the addresses of the various types.* structures.
  15. # Try to comment this code out and run the test to see how it fails :)
  16. from rpython.rtyper.lltypesystem import rffi, lltype, ll2ctypes
  17. from rpython.rlib.jit_libffi import types
  18. for key, value in types.__dict__.iteritems():
  19. if isinstance(value, lltype._ptr):
  20. addr = rffi.cast(lltype.Signed, value)
  21. ll2ctypes._int2obj[addr] = value