diff options
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 22 | ||||
| -rw-r--r-- | test/arch/x86/unit/asm_test.py | 10 | ||||
| -rw-r--r-- | test/arch/x86/unit/mn_div.py | 17 | ||||
| -rwxr-xr-x | test/test_all.py | 2 |
4 files changed, 49 insertions, 2 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py index 7729d12c..cf6dea31 100644 --- a/miasm2/jitter/llvmconvert.py +++ b/miasm2/jitter/llvmconvert.py @@ -135,13 +135,31 @@ class LLVMContext_JIT(LLVMContext): self.library_filenames = library_filenames self.ir_arch = ir_arch self.arch_specific() + self.load_libraries() LLVMContext.__init__(self, name) self.vmcpu = {} - def new_module(self, name="mod"): - LLVMContext.new_module(self, name) + def load_libraries(self): + # Get LLVM specific functions + name = "libLLVM-%d.%d" % (llvm.llvm_version_info[0], + llvm.llvm_version_info[1], + ) + try: + # On Windows, no need to add ".dll" + self.add_shared_library(name) + except RuntimeError: + try: + # On Linux, ".so" is needed + self.add_shared_library("%s.so" % name) + except RuntimeError: + pass + + # Load additional libraries for lib_fname in self.library_filenames: self.add_shared_library(lib_fname) + + def new_module(self, name="mod"): + LLVMContext.new_module(self, name) self.add_memlookups() self.add_get_exceptionflag() self.add_op() diff --git a/test/arch/x86/unit/asm_test.py b/test/arch/x86/unit/asm_test.py index aba47df1..8a6b215c 100644 --- a/test/arch/x86/unit/asm_test.py +++ b/test/arch/x86/unit/asm_test.py @@ -90,3 +90,13 @@ class Asm_Test_16(Asm_Test): self.myjit.vm.add_memory_page(self.run_addr, PAGE_READ | PAGE_WRITE, self.assembly) self.myjit.push_uint16_t(self.ret_addr) self.myjit.add_breakpoint(self.ret_addr, lambda x:False) + +class Asm_Test_64(Asm_Test): + arch_name = "x86_64" + arch_attrib = 64 + ret_addr = 0x1337beef + + def init_machine(self): + self.myjit.vm.add_memory_page(self.run_addr, PAGE_READ | PAGE_WRITE, self.assembly) + self.myjit.push_uint64_t(self.ret_addr) + self.myjit.add_breakpoint(self.ret_addr, lambda x:False) diff --git a/test/arch/x86/unit/mn_div.py b/test/arch/x86/unit/mn_div.py new file mode 100644 index 00000000..84569607 --- /dev/null +++ b/test/arch/x86/unit/mn_div.py @@ -0,0 +1,17 @@ +import sys +from asm_test import Asm_Test_64 + +class Test_DIV(Asm_Test_64): + TXT = ''' +main: + MOV RAX, 0x8877665544332211 + MOV RBX, 0x11223344556677 + DIV RBX + RET + ''' + def check(self): + assert self.myjit.cpu.RAX == 0x7F7 + assert self.myjit.cpu.RDX == 0x440 + +if __name__ == "__main__": + [test(*sys.argv[1:])() for test in [Test_DIV]] diff --git a/test/test_all.py b/test/test_all.py index b70afa9a..3da2dbb5 100755 --- a/test/test_all.py +++ b/test/test_all.py @@ -60,6 +60,7 @@ class ArchUnitTest(RegressionTest): # script -> blacklisted jitter blacklist = { "x86/unit/mn_float.py": ["python", "llvm"], + "x86/unit/mn_div.py": ["tcc", "gcc"], } for script in ["x86/sem.py", "x86/unit/mn_strings.py", @@ -80,6 +81,7 @@ for script in ["x86/sem.py", "x86/unit/mn_pushpop.py", "x86/unit/mn_seh.py", "x86/unit/mn_cpuid.py", + "x86/unit/mn_div.py", "arm/arch.py", "arm/sem.py", "aarch64/unit/mn_ubfm.py", |