diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2018-07-17 17:24:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-17 17:24:19 +0200 |
| commit | cf74092981e4f3fa7bed9ce182a38e570653a138 (patch) | |
| tree | 85ad1132aa2d1d82d60720d1faaf8c0a81b397af /miasm2/jitter/arch/JitCore_arm.c | |
| parent | 85904f4c55e171dec36aadc14f78113d169f6edc (diff) | |
| parent | 5bef729fc0b33da9868ec81c7a0537905fee6b9c (diff) | |
| download | miasm-cf74092981e4f3fa7bed9ce182a38e570653a138.tar.gz miasm-cf74092981e4f3fa7bed9ce182a38e570653a138.zip | |
Merge pull request #804 from aguinet/feature/arm_svc
Support of ARM SVC in the Miasm VM
Diffstat (limited to 'miasm2/jitter/arch/JitCore_arm.c')
| -rw-r--r-- | miasm2/jitter/arch/JitCore_arm.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/miasm2/jitter/arch/JitCore_arm.c b/miasm2/jitter/arch/JitCore_arm.c index c71db0c6..f253c45b 100644 --- a/miasm2/jitter/arch/JitCore_arm.c +++ b/miasm2/jitter/arch/JitCore_arm.c @@ -38,6 +38,9 @@ reg_dict gpreg_dict[] = { {.name = "R0", .offset = offsetof(vm_cpu_t, R0)}, {.name = "ge1", .offset = offsetof(vm_cpu_t, ge1)}, {.name = "ge2", .offset = offsetof(vm_cpu_t, ge2)}, {.name = "ge3", .offset = offsetof(vm_cpu_t, ge3)}, + + {.name = "exception_flags", .offset = offsetof(vm_cpu_t, exception_flags)}, + {.name = "interrupt_num", .offset = offsetof(vm_cpu_t, interrupt_num)}, }; /************************** JitCpu object **************************/ @@ -243,6 +246,26 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) return Py_None; } +PyObject* cpu_set_interrupt_num(JitCpu* self, PyObject* args) +{ + PyObject *item1; + uint64_t i; + + if (!PyArg_ParseTuple(args, "O", &item1)) + RAISE(PyExc_TypeError,"Cannot parse arguments"); + + PyGetInt(item1, i); + + ((vm_cpu_t*)self->cpu)->interrupt_num = i; + Py_INCREF(Py_None); + return Py_None; +} + +PyObject* cpu_get_interrupt_num(JitCpu* self, PyObject* args) +{ + return PyLong_FromUnsignedLongLong((uint64_t)(((vm_cpu_t*)self->cpu)->interrupt_num)); +} + static PyMemberDef JitCpu_members[] = { {NULL} /* Sentinel */ }; @@ -260,6 +283,10 @@ static PyMethodDef JitCpu_methods[] = { "X"}, {"set_exception", (PyCFunction)cpu_set_exception, METH_VARARGS, "X"}, + {"get_interrupt_num", (PyCFunction)cpu_get_interrupt_num, METH_VARARGS, + "X"}, + {"set_interrupt_num", (PyCFunction)cpu_set_interrupt_num, METH_VARARGS, + "X"}, {"set_mem", (PyCFunction)vm_set_mem, METH_VARARGS, "X"}, {"get_mem", (PyCFunction)vm_get_mem, METH_VARARGS, @@ -305,6 +332,8 @@ getset_reg_u32(ge1); getset_reg_u32(ge2); getset_reg_u32(ge3); +getset_reg_u32(exception_flags); +getset_reg_u32(interrupt_num); PyObject* get_gpreg_offset_all(void) { @@ -312,6 +341,7 @@ PyObject* get_gpreg_offset_all(void) PyObject *o; get_reg_off(exception_flags); + get_reg_off(interrupt_num); get_reg_off(R0); get_reg_off(R1); @@ -344,7 +374,6 @@ PyObject* get_gpreg_offset_all(void) return dict; } - static PyGetSetDef JitCpu_getseters[] = { {"vmmngr", (getter)JitCpu_get_vmmngr, (setter)JitCpu_set_vmmngr, @@ -385,6 +414,9 @@ static PyGetSetDef JitCpu_getseters[] = { {"ge2", (getter)JitCpu_get_ge2, (setter)JitCpu_set_ge2, "ge2", NULL}, {"ge3", (getter)JitCpu_get_ge3, (setter)JitCpu_set_ge3, "ge3", NULL}, + {"exception_flags", (getter)JitCpu_get_exception_flags, (setter)JitCpu_set_exception_flags, "exception_flags", NULL}, + {"interrupt_num", (getter)JitCpu_get_interrupt_num, (setter)JitCpu_set_interrupt_num, "interrupt_num", NULL}, + {NULL} /* Sentinel */ }; |