about summary refs log tree commit diff stats
path: root/miasm2/jitter/jitcore_tcc.py
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2018-05-16 09:42:48 +0200
committerAjax <commial@gmail.com>2018-05-16 09:42:48 +0200
commit05aecdbc0a3d1cef6449f1c242d713922f990777 (patch)
treea6e365958e34ab57270b5095c7e542294746477d /miasm2/jitter/jitcore_tcc.py
parentc2b0779c68ce50514e19e021084328d265b53663 (diff)
downloadmiasm-05aecdbc0a3d1cef6449f1c242d713922f990777.tar.gz
miasm-05aecdbc0a3d1cef6449f1c242d713922f990777.zip
Remove TCC jitter engine
Diffstat (limited to 'miasm2/jitter/jitcore_tcc.py')
-rw-r--r--miasm2/jitter/jitcore_tcc.py104
1 files changed, 0 insertions, 104 deletions
diff --git a/miasm2/jitter/jitcore_tcc.py b/miasm2/jitter/jitcore_tcc.py
deleted file mode 100644
index 28288400..00000000
--- a/miasm2/jitter/jitcore_tcc.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#-*- coding:utf-8 -*-
-import os
-import tempfile
-from subprocess import Popen, PIPE
-
-from miasm2.jitter import Jittcc
-from miasm2.jitter.jitcore_cc_base import JitCore_Cc_Base, gen_core
-
-
-class JitCore_Tcc(JitCore_Cc_Base):
-
-    "JiT management, using LibTCC as backend"
-
-    def __init__(self, ir_arch, bs=None):
-        super(JitCore_Tcc, self).__init__(ir_arch, bs)
-        self.exec_wrapper = Jittcc.tcc_exec_bloc
-
-    def deleteCB(self, offset):
-        "Free the TCCState corresponding to @offset"
-        if offset in self.states:
-            Jittcc.tcc_end(self.states[offset])
-            del self.states[offset]
-
-    def load(self):
-        super(JitCore_Tcc, self).load()
-        libs = ';'.join(self.libs)
-        jittcc_path = Jittcc.__file__
-        include_dir = os.path.dirname(jittcc_path)
-        include_dir += ";" + os.path.join(include_dir, "arch")
-
-        # XXX HACK
-        # As debian/ubuntu have moved some include files using arch directory,
-        # TCC doesn't know them, so we get the info from CC
-        # For example /usr/include/x86_64-linux-gnu which contains limits.h
-        p = Popen(["cc", "-Wp,-v", "-E", "-"],
-                  stdout=PIPE, stderr=PIPE, stdin=PIPE)
-        p.stdin.close()
-        include_files = p.stderr.read().split('\n')
-        include_files = [x[1:]
-                         for x in include_files if x.startswith(' /usr/include')]
-        include_files += self.include_files
-        include_files = ";".join(include_files)
-        Jittcc.tcc_set_emul_lib_path(include_files, libs)
-
-    def __del__(self):
-        for tcc_state in self.states.values():
-            Jittcc.tcc_end(tcc_state)
-
-    def jit_tcc_compil(self, func_name, func_code):
-        return Jittcc.tcc_compil(func_name, func_code)
-
-    def compil_code(self, block, func_code):
-        """
-        Compil the C code of @func_code from @block
-        @block: original asm_block
-        @func_code: C code of the block
-        """
-        label = block.label
-        self.jitcount += 1
-        tcc_state, mcode = self.jit_tcc_compil(self.label2fname(label), func_code)
-        self.lbl2jitbloc[label.offset] = mcode
-        self.states[label.offset] = tcc_state
-
-    def add_bloc(self, block):
-        """Add a bloc to JiT and JiT it.
-        @block: block to jit
-        """
-        block_hash = self.hash_block(block)
-        fname_out = os.path.join(self.tempdir, "%s.c" % block_hash)
-
-        if os.access(fname_out, os.R_OK):
-            func_code = open(fname_out, "rb").read()
-        else:
-            func_code = self.gen_c_code(block.label, block)
-
-            # Create unique C file
-            fdesc, fname_tmp = tempfile.mkstemp(suffix=".c")
-            os.write(fdesc, func_code)
-            os.close(fdesc)
-            os.rename(fname_tmp, fname_out)
-
-        self.compil_code(block, func_code)
-
-    @staticmethod
-    def gen_C_source(ir_arch, func_code):
-        c_source = ""
-        c_source += "\n".join(func_code)
-
-        c_source = gen_core(ir_arch.arch, ir_arch.attrib) + c_source
-
-        c_source = """
-     #ifdef __x86_64__
-     #ifndef __LP64__
-     /*
-      for ubuntu ?!? XXX TODO
-      /!\ force 64 bit system using 64 bits libc
-      change this to __ILP32__ to do so.
-     */
-     #define __LP64__
-     #endif
-     #endif
-     """ + "#include <Python.h>\n" + c_source
-
-        return c_source