5 from distutils.sysconfig
import get_python_inc
6 from subprocess
import Popen, PIPE
14 c = Jittcc.tcc_compil(func_name, func_code)
24 return Jittcc.tcc_exec_bloc(self.
c, cpu, vm)
28 lib_dir = os.path.dirname(os.path.realpath(__file__))
31 txt +=
'#include "%s/queue.h"\n' % lib_dir
32 txt +=
'#include "%s/vm_mngr.h"\n' % lib_dir
33 txt +=
'#include "%s/vm_mngr_py.h"\n' % lib_dir
34 txt +=
'#include "%s/JitCore.h"\n' % lib_dir
35 txt +=
'#include "%s/arch/JitCore_%s.h"\n' % (lib_dir, arch.name)
38 #define RAISE(errtype, msg) {PyObject* p; p = PyErr_Format( errtype, msg ); return p;}
45 c_source +=
"\n".join(func_code)
47 c_source =
gen_core(ir_arch.arch, ir_arch.attrib) + c_source
53 for ubuntu ?!? XXX TODO
54 /!\ force 64 bit system using 64 bits libc
55 change this to __ILP32__ to do so.
60 """ +
"#include <Python.h>\n" + c_source
77 return "return PyLong_FromUnsignedLongLong(0x%X);" % self.
offset
93 "JiT management, using LibTCC as backend"
97 super(JitCore_Tcc, self).
__init__(ir_arch, bs)
104 "Free the TCCState corresponding to @offset"
111 lib_dir = os.path.dirname(os.path.realpath(__file__))
113 libs.append(os.path.join(lib_dir,
'VmMngr.so'))
114 libs.append(os.path.join(lib_dir,
'arch/JitCore_%s.so' % (self.ir_arch.arch.name)))
115 libs =
';'.join(libs)
116 jittcc_path = Jittcc.__file__
117 include_dir = os.path.dirname(jittcc_path)
118 include_dir +=
";" + os.path.join(include_dir,
"arch")
125 p = Popen([
"cc",
"-Wp,-v",
"-E",
"-"],
126 stdout=PIPE, stderr=PIPE, stdin=PIPE)
128 include_files = p.stderr.read().split(
'\n')
129 include_files = [x[1:]
130 for x
in include_files
if x.startswith(
' /usr/include')]
131 include_files += [include_dir, get_python_inc()]
132 include_files =
";".join(include_files)
133 Jittcc.tcc_set_emul_lib_path(include_files, libs)
136 for tcc_state
in self.tcc_states.values():
137 Jittcc.tcc_end(tcc_state)
140 f_name =
"bloc_%s" % label.name
141 f_declaration =
'int %s(block_id * BlockDst, JitCpu* jitcpu)' % f_name
143 gen_exception_code=
True,
146 out = [f_declaration +
'{'] + out + [
'}\n']