about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2012-12-03 10:33:05 +0100
committerserpilliere <devnull@localhost>2012-12-03 10:33:05 +0100
commite7945a8c1177ed047e4968bd9b69e4ec79a7d292 (patch)
tree937cd44a59da4f53932c88268ca84dd111a2f00f
parentc2271f30c212ad4ca521f0e28b5d06ae4ff95fa7 (diff)
downloadmiasm-e7945a8c1177ed047e4968bd9b69e4ec79a7d292.tar.gz
miasm-e7945a8c1177ed047e4968bd9b69e4ec79a7d292.zip
asmbloc: rewrite calc_symbol_offset
-rw-r--r--miasm/core/asmbloc.py32
1 files changed, 15 insertions, 17 deletions
diff --git a/miasm/core/asmbloc.py b/miasm/core/asmbloc.py
index a560dd4c..eb5708d8 100644
--- a/miasm/core/asmbloc.py
+++ b/miasm/core/asmbloc.py
@@ -787,29 +787,27 @@ def calc_symbol_offset(symbol_pool):
     s_dependent = {}
 
     for l in symbol_pool.s:
-        offset = symbol_pool.s[l].offset
-        if offset == None:
+        label = symbol_pool.s[l]
+        if label.offset == None:
             raise ValueError("symbol missing?", l)
-        if not is_int(offset):
+        if not is_int(label.offset):
             #construct dependant blocs tree
-            s_d = offset[0]
-            if not s_d.name in s_dependent:
-                s_dependent[s_d.name] = set()
-            s_dependent[s_d.name].add(l)
+            s_d = label.offset[0]
+            if not s_d in s_dependent:
+                s_dependent[s_d] = set()
+            s_dependent[s_d].add(label)
         else:
-            s_to_use.add(l)
-        symbol_pool.s[l].offset_g = offset
+            s_to_use.add(label)
+        label.offset_g = label.offset
 
     while s_to_use:
-        s = s_to_use.pop()
-        offset = symbol_pool.s[s].offset_g
-
-        if not s in s_dependent:
+        label = s_to_use.pop()
+        if not label in s_dependent:
             continue
-        for l in s_dependent[s]:
-            if symbol_pool.s[s].offset_g== None:
-                raise ValueError("unknown symbol: %s"%str(s))
-            symbol_pool.s[l].offset_g=offset+symbol_pool.s[l].offset_g[1].blen*symbol_pool.s[l].offset_g[2]
+        for l in s_dependent[label]:
+            if label.offset_g== None:
+                raise ValueError("unknown symbol: %s"%str(label.name))
+            l.offset_g=label.offset_g+l.offset_g[1].blen*l.offset_g[2]
             s_to_use.add(l)