about summary refs log tree commit diff stats
path: root/miasm2/jitter/Jitllvm.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--miasm2/jitter/Jitllvm.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/miasm2/jitter/Jitllvm.c b/miasm2/jitter/Jitllvm.c
index cf2e1324..b46f88e3 100644
--- a/miasm2/jitter/Jitllvm.c
+++ b/miasm2/jitter/Jitllvm.c
@@ -22,16 +22,35 @@ PyObject* llvm_exec_bloc(PyObject* self, PyObject* args)
 	PyObject* lbl2ptr;
 	PyObject* breakpoints;
 	PyObject* retaddr = NULL;
+	uint64_t max_exec_per_call = 0;
+	uint64_t cpt;
+	int do_cpt;
 
-
-	if (!PyArg_ParseTuple(args, "OOOO", &retaddr, &jitcpu, &lbl2ptr, &breakpoints))
+	if (!PyArg_ParseTuple(args, "OOOO|K",
+			      &retaddr, &jitcpu, &lbl2ptr, &breakpoints,
+			      &max_exec_per_call))
 		return NULL;
+
 	cpu = jitcpu->cpu;
 	vm = &(jitcpu->pyvm->vm_mngr);
 	/* The loop will decref retaddr always once */
 	Py_INCREF(retaddr);
 
+	if (max_exec_per_call == 0) {
+		do_cpt = 0;
+		cpt = 1;
+	} else {
+		do_cpt = 1;
+		cpt = max_exec_per_call;
+	}
+
 	for (;;) {
+		// Handle cpt
+		if (cpt == 0)
+			return retaddr;
+		if (do_cpt)
+			cpt --;
+
 		// Get the expected jitted function address
 		func_py = PyDict_GetItem(lbl2ptr, retaddr);
 		if (func_py)