about summary refs log tree commit diff stats
path: root/miasm2/arch/mips32
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/arch/mips32')
-rw-r--r--miasm2/arch/mips32/ira.py12
-rw-r--r--miasm2/arch/mips32/jit.py16
-rw-r--r--miasm2/arch/mips32/sem.py11
3 files changed, 30 insertions, 9 deletions
diff --git a/miasm2/arch/mips32/ira.py b/miasm2/arch/mips32/ira.py
index cb084411..c070b4ba 100644
--- a/miasm2/arch/mips32/ira.py
+++ b/miasm2/arch/mips32/ira.py
@@ -4,13 +4,13 @@
 from miasm2.expression.expression import *
 from miasm2.ir.ir import ir, irbloc
 from miasm2.ir.analysis import ira
-from miasm2.arch.mips32.sem import ir_mips32
+from miasm2.arch.mips32.sem import ir_mips32l, ir_mips32b
 from miasm2.arch.mips32.regs import *
 from miasm2.core.asmbloc import expr_is_int_or_label, expr_is_label
-class ir_a_mips32(ir_mips32, ira):
 
+class ir_a_mips32l(ir_mips32l, ira):
     def __init__(self, symbol_pool=None):
-        ir_mips32.__init__(self, symbol_pool)
+        ir_mips32l.__init__(self, symbol_pool)
         self.ret_reg = self.arch.regs.V0
 
 
@@ -79,3 +79,9 @@ class ir_a_mips32(ir_mips32, ira):
     def sizeof_pointer(self):
         return 32
 
+
+
+class ir_a_mips32b(ir_mips32b, ir_a_mips32l):
+    def __init__(self, symbol_pool=None):
+        ir_mips32b.__init__(self, symbol_pool)
+        self.ret_reg = self.arch.regs.V0
diff --git a/miasm2/arch/mips32/jit.py b/miasm2/arch/mips32/jit.py
index 61fa8a5a..93223896 100644
--- a/miasm2/arch/mips32/jit.py
+++ b/miasm2/arch/mips32/jit.py
@@ -1,7 +1,7 @@
 from miasm2.jitter.jitload import jitter
 from miasm2.core import asmbloc
 from miasm2.core.utils import *
-from miasm2.arch.mips32.sem import ir_mips32
+from miasm2.arch.mips32.sem import ir_mips32l, ir_mips32b
 
 import logging
 
@@ -11,13 +11,13 @@ hnd.setFormatter(logging.Formatter("[%(levelname)s]: %(message)s"))
 log.addHandler(hnd)
 log.setLevel(logging.CRITICAL)
 
-class jitter_mips32(jitter):
+class jitter_mips32l(jitter):
 
     def __init__(self, *args, **kwargs):
         sp = asmbloc.asm_symbol_pool()
-        jitter.__init__(self, ir_mips32(sp), *args, **kwargs)
+        jitter.__init__(self, ir_mips32l(sp), *args, **kwargs)
+        self.vm.set_little_endian()
         self.ir_arch.jit_pc = self.ir_arch.arch.regs.PC
-        self.ir_arch.attrib = 'l'
 
     def push_uint32_t(self, v):
         self.cpu.SP -= 4
@@ -35,3 +35,11 @@ class jitter_mips32(jitter):
     def init_run(self, *args, **kwargs):
         jitter.init_run(self, *args, **kwargs)
         self.cpu.PC = self.pc
+
+
+class jitter_mips32b(jitter_mips32l):
+    def __init__(self, *args, **kwargs):
+        sp = asmbloc.asm_symbol_pool()
+        jitter.__init__(self, ir_mips32b(sp), *args, **kwargs)
+        self.vm.set_big_endian()
+        self.ir_arch.jit_pc = self.ir_arch.arch.regs.PC
diff --git a/miasm2/arch/mips32/sem.py b/miasm2/arch/mips32/sem.py
index 365444d7..57263478 100644
--- a/miasm2/arch/mips32/sem.py
+++ b/miasm2/arch/mips32/sem.py
@@ -522,10 +522,10 @@ def get_mnemo_expr(ir, instr, *args):
     instr, extra_ir = mnemo_func[instr.name.lower()](ir, instr, *args)
     return instr, extra_ir
 
-class ir_mips32(ir):
+class ir_mips32l(ir):
 
     def __init__(self, symbol_pool=None):
-        ir.__init__(self, mn_mips32, None, symbol_pool)
+        ir.__init__(self, mn_mips32, 'l', symbol_pool)
         self.pc = mn_mips32.getpc()
         self.sp = mn_mips32.getsp()
         self.IRDst = ExprId('IRDst', 32)
@@ -590,3 +590,10 @@ class ir_mips32(ir):
         self.post_add_bloc(bloc, ir_blocs_all)
         return ir_blocs_all
     """
+
+class ir_mips32b(ir_mips32l):
+    def __init__(self, symbol_pool=None):
+        ir.__init__(self, mn_mips32, 'b', symbol_pool)
+        self.pc = mn_mips32.getpc()
+        self.sp = mn_mips32.getsp()
+        self.IRDst = ExprId('IRDst', 32)