about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/expression/simplifications.py14
-rw-r--r--test/expression/simplifications.py8
2 files changed, 21 insertions, 1 deletions
diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py
index d3483d9e..e6c5dc54 100644
--- a/miasm2/expression/simplifications.py
+++ b/miasm2/expression/simplifications.py
@@ -2,6 +2,8 @@
 #                     Simplification methods library                           #
 #                                                                              #
 
+import logging
+
 from miasm2.expression import simplifications_common
 from miasm2.expression import simplifications_cond
 from miasm2.expression.expression_helper import fast_unify
@@ -10,6 +12,12 @@ import miasm2.expression.expression as m2_expr
 # Expression Simplifier
 # ---------------------
 
+log_exprsimp = logging.getLogger("exprsimp")
+console_handler = logging.StreamHandler()
+console_handler.setFormatter(logging.Formatter("%(levelname)-5s: %(message)s"))
+log_exprsimp.addHandler(console_handler)
+log_exprsimp.setLevel(logging.WARNING)
+
 
 class ExpressionSimplifier(object):
 
@@ -67,9 +75,15 @@ class ExpressionSimplifier(object):
         Return an Expr instance"""
 
         cls = expression.__class__
+        debug_level = log_exprsimp.level >= logging.DEBUG
         for simp_func in self.expr_simp_cb.get(cls, []):
             # Apply simplifications
+            before = expression
             expression = simp_func(self, expression)
+            after = expression
+
+            if debug_level and before != after:
+                log_exprsimp.debug("[%s] %s => %s", simp_func, before, after)
 
             # If class changes, stop to prevent wrong simplifications
             if expression.__class__ is not cls:
diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py
index 5a223f7c..cb8dc4f8 100644
--- a/test/expression/simplifications.py
+++ b/test/expression/simplifications.py
@@ -3,17 +3,23 @@
 #
 from pdb import pm
 from argparse import ArgumentParser
+import logging
 
 from miasm2.expression.expression import *
-from miasm2.expression.simplifications import expr_simp, ExpressionSimplifier
+from miasm2.expression.simplifications import expr_simp, ExpressionSimplifier, log_exprsimp
 from miasm2.expression.simplifications_cond import ExprOp_inf_signed, ExprOp_inf_unsigned, ExprOp_equal
 
 parser = ArgumentParser("Expression simplification regression tests")
 parser.add_argument("--z3", action="store_true", help="Enable check against z3")
+parser.add_argument("-v", "--verbose", action="store_true",
+                    help="Verbose simplify")
 parser.add_argument("--z3-timeout", type=int, help="z3 timeout (in seconds)",
                     default=20)
 args = parser.parse_args()
 
+if args.verbose:
+    log_exprsimp.setLevel(logging.DEBUG)
+
 # Additionnal imports and definitions
 if args.z3:
     import z3