about summary refs log tree commit diff stats
path: root/miasm2/arch/arm/arch.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/arch/arm/arch.py')
-rw-r--r--miasm2/arch/arm/arch.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/miasm2/arch/arm/arch.py b/miasm2/arch/arm/arch.py
index e7c5d535..7529b483 100644
--- a/miasm2/arch/arm/arch.py
+++ b/miasm2/arch/arm/arch.py
@@ -2,6 +2,7 @@
 #-*- coding:utf-8 -*-
 
 import logging
+from pdb import pm
 from pyparsing import *
 from miasm2.expression.expression import *
 from miasm2.core.cpu import *
@@ -1806,13 +1807,18 @@ class armt_reg_wb(arm_reg_wb):
     def decode(self, v):
         v = v & self.lmask
         e = self.reg_info.expr[v]
-        e = ExprOp('wback', e)
+        if not e in self.parent.trlist.expr.args:
+            e = ExprOp('wback', e)
         self.expr = e
         return True
 
     def encode(self):
         e = self.expr
-        self.value = self.reg_info.expr.index(e.args[0])
+        if isinstance(e, ExprOp):
+            if e.op != 'wback':
+                return False
+            e = e.args[0]
+        self.value = self.reg_info.expr.index(e)
         return True
 
 
@@ -1877,7 +1883,7 @@ tswi_i = bs(l=8, cls=(arm_imm,), fname="swi_i")
 
 off8s = bs(l=8, cls=(arm_offs,), fname="offs")
 trlistpclr = bs(l=8, cls=(armt_rlist_pclr,))
-trlist = bs(l=8, cls=(armt_rlist,))
+trlist = bs(l=8, cls=(armt_rlist,), fname="trlist", order = -1)
 
 rbl_wb = bs(l=3, cls=(armt_reg_wb,), fname='rb')