about summary refs log tree commit diff stats
path: root/miasm2/jitter
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/jitter')
-rw-r--r--miasm2/jitter/Jittcc.c20
-rw-r--r--miasm2/jitter/arch/JitCore_arm.c1
-rw-r--r--miasm2/jitter/arch/JitCore_mips32.c1
-rw-r--r--miasm2/jitter/arch/JitCore_msp430.c1
-rw-r--r--miasm2/jitter/jitcore_tcc.py3
-rw-r--r--miasm2/jitter/vm_mngr.h1
-rw-r--r--miasm2/jitter/vm_mngr_py.c83
7 files changed, 23 insertions, 87 deletions
diff --git a/miasm2/jitter/Jittcc.c b/miasm2/jitter/Jittcc.c
index 2d309376..fb8b3e27 100644
--- a/miasm2/jitter/Jittcc.c
+++ b/miasm2/jitter/Jittcc.c
@@ -38,7 +38,7 @@ char **lib_array = NULL;
 //char *libcodenat_path = NULL;
 
 
-void tcc_init_state(void)
+TCCState * tcc_init_state(void)
 {
 	int i;
 
@@ -57,10 +57,20 @@ void tcc_init_state(void)
 	for (i=0;i<include_array_count; i++){
 		tcc_add_include_path(tcc_state, include_array[i]);
 	}
-}
 
+	return tcc_state;
+}
 
 
+PyObject* tcc_end(PyObject* self, PyObject* args)
+{
+	if (tcc_state) {
+		tcc_delete(tcc_state);
+		tcc_state = NULL;
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
 
 PyObject* tcc_set_emul_lib_path(PyObject* self, PyObject* args)
 {
@@ -109,6 +119,7 @@ PyObject* tcc_set_emul_lib_path(PyObject* self, PyObject* args)
 	*/
 	Py_INCREF(Py_None);
 
+	tcc_state = tcc_init_state();
 
 	return Py_None;
 }
@@ -133,8 +144,6 @@ PyObject* tcc_compil(PyObject* self, PyObject* args)
 	char* func_code;
 	int (*entry)(void);
 
-	tcc_init_state();
-
 	if (!PyArg_ParseTuple(args, "ss", &func_name, &func_code))
 		return NULL;
 
@@ -154,6 +163,7 @@ PyObject* tcc_compil(PyObject* self, PyObject* args)
 		fprintf(stderr, "%s\n", func_name);
 		exit(0);
 	}
+
 	return PyLong_FromUnsignedLongLong((uint64_t)entry);
 
 }
@@ -207,6 +217,8 @@ static PyMethodDef TccMethods[] = {
      "tcc exec bloc"},
     {"tcc_compil",  tcc_compil, METH_VARARGS,
      "tcc compil"},
+    {"tcc_end",  tcc_end, METH_VARARGS,
+     "tcc end"},
     {NULL, NULL, 0, NULL}        /* Sentinel */
 };
 
diff --git a/miasm2/jitter/arch/JitCore_arm.c b/miasm2/jitter/arch/JitCore_arm.c
index 2b3bc6e0..de234564 100644
--- a/miasm2/jitter/arch/JitCore_arm.c
+++ b/miasm2/jitter/arch/JitCore_arm.c
@@ -515,6 +515,7 @@ static PyMethodDef JitCore_arm_Methods[] = {
 
 static PyObject *JitCore_arm_Error;
 
+extern int init_vm_mngr(PyObject* m);
 PyMODINIT_FUNC
 initJitCore_arm(void)
 {
diff --git a/miasm2/jitter/arch/JitCore_mips32.c b/miasm2/jitter/arch/JitCore_mips32.c
index 7a62a5fc..c340d494 100644
--- a/miasm2/jitter/arch/JitCore_mips32.c
+++ b/miasm2/jitter/arch/JitCore_mips32.c
@@ -598,6 +598,7 @@ static PyMethodDef JitCore_mips32_Methods[] = {
 
 static PyObject *JitCore_mips32_Error;
 
+extern int init_vm_mngr(PyObject* m);
 PyMODINIT_FUNC
 initJitCore_mips32(void)
 {
diff --git a/miasm2/jitter/arch/JitCore_msp430.c b/miasm2/jitter/arch/JitCore_msp430.c
index 7dc2c935..20f15905 100644
--- a/miasm2/jitter/arch/JitCore_msp430.c
+++ b/miasm2/jitter/arch/JitCore_msp430.c
@@ -667,6 +667,7 @@ static PyMethodDef JitCore_msp430_Methods[] = {
 
 static PyObject *JitCore_msp430_Error;
 
+extern int init_vm_mngr(PyObject* m);
 PyMODINIT_FUNC
 initJitCore_msp430(void)
 {
diff --git a/miasm2/jitter/jitcore_tcc.py b/miasm2/jitter/jitcore_tcc.py
index 856bffc0..36f65f07 100644
--- a/miasm2/jitter/jitcore_tcc.py
+++ b/miasm2/jitter/jitcore_tcc.py
@@ -121,6 +121,9 @@ class JitCore_Tcc(jitcore.JitCore):
         include_files = ";".join(include_files)
         Jittcc.tcc_set_emul_lib_path(include_files, libs)
 
+    def __del__(self):
+        Jittcc.tcc_end()
+
     def jitirblocs(self, label, irblocs):
         # irbloc = self.lbl2irbloc[lbl]
         f_name = "bloc_%s" % label.name
diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h
index d092ad5d..0cacb708 100644
--- a/miasm2/jitter/vm_mngr.h
+++ b/miasm2/jitter/vm_mngr.h
@@ -343,7 +343,6 @@ unsigned int load_segment_limit(unsigned int d);
 unsigned int load_segment_limit_ok(unsigned int d);
 
 unsigned int load_tr_segment_selector(unsigned int d);
-
 #define shift_right_arith_08(a, b)\
 	((((char)(a)) >> ((int)(b)&0x1f))&0xff)
 #define shift_right_arith_16(a, b)\
diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c
index 18f2fd51..881d0c42 100644
--- a/miasm2/jitter/vm_mngr_py.c
+++ b/miasm2/jitter/vm_mngr_py.c
@@ -873,90 +873,8 @@ static PyTypeObject VmMngrType = {
     VmMngr_new,                /* tp_new */
 };
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 static PyObject *Vm_Mngr_Error;
 
-
-static PyMethodDef Vm_Mngr_Methods[] = {
-
-    {NULL, NULL, 0, NULL}        /* Sentinel */
-
-};
-
-/*
-PyMODINIT_FUNC
-initvm_mngr(void)
-{
-    PyObject *m;
-
-    if (PyType_Ready(&VmMngrType) < 0)
-	return;
-
-    m = Py_InitModule("vm_mngr", Vm_Mngr_Methods);
-    if (m == NULL)
-	    return;
-
-    Vm_Mngr_Error = PyErr_NewException("vm_mngr_.error", NULL, NULL);
-    Py_INCREF(Vm_Mngr_Error);
-    PyModule_AddObject(m, "error", Vm_Mngr_Error);
-
-    Py_INCREF(&VmMngrType);
-    PyModule_AddObject(m, "VmMngr", (PyObject *)&VmMngrType);
-
-}
-*/
-
 /*
   return
   0 on success
@@ -974,4 +892,5 @@ int init_vm_mngr(PyObject* m)
     Py_INCREF(&VmMngrType);
     PyModule_AddObject(m, "VmMngr", (PyObject *)&VmMngrType);
 
+    return 0;
 }