about summary refs log tree commit diff stats
path: root/miasm2/arch/arm/ira.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/arch/arm/ira.py')
-rw-r--r--miasm2/arch/arm/ira.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/miasm2/arch/arm/ira.py b/miasm2/arch/arm/ira.py
index 0c84c919..7b26a6e4 100644
--- a/miasm2/arch/arm/ira.py
+++ b/miasm2/arch/arm/ira.py
@@ -2,7 +2,8 @@
 
 from miasm2.ir.analysis import ira
 from miasm2.arch.arm.sem import ir_arml, ir_armtl, ir_armb, ir_armtb
-
+from miasm2.expression.expression import ExprAff, ExprOp
+from miasm2.ir.ir import AssignBlock
 
 class ir_a_arml_base(ir_arml, ira):
     def __init__(self, loc_db=None):
@@ -21,6 +22,19 @@ class ir_a_arml(ir_a_arml_base):
         ir_a_arml_base.__init__(self, loc_db)
         self.ret_reg = self.arch.regs.R0
 
+    def call_effects(self, ad, instr):
+        return [AssignBlock([ExprAff(self.ret_reg, ExprOp('call_func_ret', ad,
+                                                          self.arch.regs.R0,
+                                                          self.arch.regs.R1,
+                                                          self.arch.regs.R2,
+                                                          self.arch.regs.R3,
+                                                          )),
+                             ExprAff(self.sp, ExprOp('call_func_stack',
+                                                     ad, self.sp)),
+                            ],
+                             instr
+                           )]
+
     def get_out_regs(self, _):
         return set([self.ret_reg, self.sp])