diff options
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 3 | ||||
| -rwxr-xr-x | test/arch/x86/unit/mn_int.py | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py index 2b0f2702..dd3afed6 100644 --- a/miasm2/jitter/llvmconvert.py +++ b/miasm2/jitter/llvmconvert.py @@ -1056,6 +1056,9 @@ class LLVMFunction(): self.builder.call(fc_ptr, [self.local_vars["vmmngr"]]) self.check_memory_exception(next_instr, restricted_exception=False) + if attrib.set_exception: + self.check_cpu_exception(next_instr, restricted_exception=False) + if attrib.mem_read | attrib.mem_write: fc_ptr = self.mod.get_global("reset_memory_access") self.builder.call(fc_ptr, [self.local_vars["vmmngr"]]) diff --git a/test/arch/x86/unit/mn_int.py b/test/arch/x86/unit/mn_int.py index 09792371..efacb105 100755 --- a/test/arch/x86/unit/mn_int.py +++ b/test/arch/x86/unit/mn_int.py @@ -8,12 +8,18 @@ from asm_test import Asm_Test_32 class Test_INT(Asm_Test_32): TXT = ''' main: + MOV ECX, 0x10 + loop: INT 0x42 + DEC ECX + JNZ loop + ret: RET ''' def set_int_num(self, jitter): - self.int_num = jitter.cpu.get_interrupt_num() + assert jitter.cpu.get_interrupt_num() == 0x42 + self.int_num += 1 jitter.cpu.set_exception(0) return True @@ -24,7 +30,7 @@ class Test_INT(Asm_Test_32): self.set_int_num) def check(self): - assert self.int_num == 0x42 + assert self.int_num == 0x10 self.myjit.cpu.set_interrupt_num(14) assert self.myjit.cpu.get_interrupt_num() == 14 |