diff options
| author | Ajax <commial@gmail.com> | 2016-12-22 23:33:55 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2017-01-04 17:14:55 +0100 |
| commit | 7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5 (patch) | |
| tree | b0b44cc59039c9e9e29dee5f7cb89ec9e5d093ab /miasm2/jitter/llvmconvert.py | |
| parent | a90cf9d4e3eaadfb1661e3eaf7f947a5d9e4294b (diff) | |
| download | miasm-7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5.tar.gz miasm-7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5.zip | |
LLVM: avoid division by zero, using Miasm wrapper instead
Diffstat (limited to '')
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py index 294f9f90..ce54239f 100644 --- a/miasm2/jitter/llvmconvert.py +++ b/miasm2/jitter/llvmconvert.py @@ -258,6 +258,14 @@ class LLVMContext_JIT(LLVMContext): "args": [p8, LLVMType.IntType(k), LLVMType.IntType(k)]}}) + self.add_fc({"umod%s" % k: {"ret": LLVMType.IntType(k), + "args": [p8, + LLVMType.IntType(k), + LLVMType.IntType(k)]}}) + self.add_fc({"udiv%s" % k: {"ret": LLVMType.IntType(k), + "args": [p8, + LLVMType.IntType(k), + LLVMType.IntType(k)]}}) def add_log_functions(self): "Add functions for state logging" @@ -592,7 +600,7 @@ class LLVMFunction(): self.update_cache(expr, ret) return ret - if op in ["imod", "idiv"]: + if op in ["imod", "idiv", "umod", "udiv"]: fc_ptr = self.mod.get_global( "%s%s" % (op, expr.args[0].size)) args_casted = [self.add_ir(arg) for arg in expr.args] @@ -619,10 +627,10 @@ class LLVMFunction(): callback = builder.shl elif op == "a>>": callback = builder.ashr - elif op == "udiv": - callback = builder.udiv - elif op == "umod": + elif op == "%": callback = builder.urem + elif op == "/": + callback = builder.udiv else: raise NotImplementedError('Unknown op: %s' % op) |