diff options
Diffstat (limited to 'miasm2/arch/msp430/ira.py')
| -rw-r--r-- | miasm2/arch/msp430/ira.py | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/miasm2/arch/msp430/ira.py b/miasm2/arch/msp430/ira.py index 26a53a1e..f9da81a7 100644 --- a/miasm2/arch/msp430/ira.py +++ b/miasm2/arch/msp430/ira.py @@ -2,7 +2,7 @@ #-*- coding:utf-8 -*- from miasm2.expression.expression import * -from miasm2.ir.ir import ir, irbloc +from miasm2.ir.ir import ir, irbloc, AssignBlock from miasm2.ir.analysis import ira from miasm2.arch.msp430.sem import ir_msp430 from miasm2.arch.msp430.regs import * @@ -35,39 +35,27 @@ class ir_a_msp430(ir_a_msp430_base): b.rw[-1][1].add(self.arch.regs.cpuoff) b.rw[-1][1].add(self.arch.regs.gie) - def call_effects(self, ad): - irs = [[ExprAff(self.ret_reg, ExprOp('call_func_ret', ad, self.sp)), - ExprAff(self.sp, ExprOp('call_func_stack', ad, self.sp)), - ]] - return irs - def post_add_bloc(self, bloc, ir_blocs): ir.post_add_bloc(self, bloc, ir_blocs) - # flow_graph = DiGraph() - l = bloc.lines[-1] if not l.is_subcall(): return for irb in ir_blocs: - # print 'X'*40 - # print irb pc_val = None - for exprs in irb.irs: - for e in exprs: - if e.dst == PC: - pc_val = e.src + for assignblk in irb.irs: + pc_val = assignblk.get(PC, pc_val) if pc_val is None: continue l = bloc.lines[-1] - # print str(l), 'IS CALL!' lbl = bloc.get_next() new_lbl = self.gen_label() irs = self.call_effects(pc_val) - irs.append([ExprAff(self.IRDst, ExprId(lbl, size=self.pc.size))]) + irs.append(AssignBlock([ExprAff(self.IRDst, + ExprId(lbl, size=self.pc.size))])) nbloc = irbloc(new_lbl, irs) - nbloc.lines = [l] + nbloc.lines = [l] * len(irs) self.blocs[new_lbl] = nbloc irb.dst = ExprId(new_lbl, size=self.pc.size) |