diff options
| author | serpilliere <devnull@localhost> | 2012-12-03 10:33:05 +0100 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2012-12-03 10:33:05 +0100 |
| commit | e7945a8c1177ed047e4968bd9b69e4ec79a7d292 (patch) | |
| tree | 937cd44a59da4f53932c88268ca84dd111a2f00f | |
| parent | c2271f30c212ad4ca521f0e28b5d06ae4ff95fa7 (diff) | |
| download | miasm-e7945a8c1177ed047e4968bd9b69e4ec79a7d292.tar.gz miasm-e7945a8c1177ed047e4968bd9b69e4ec79a7d292.zip | |
asmbloc: rewrite calc_symbol_offset
| -rw-r--r-- | miasm/core/asmbloc.py | 32 |
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) |