aboutsummaryrefslogtreecommitdiffstats
path: root/survey.py
diff options
context:
space:
mode:
Diffstat (limited to 'survey.py')
-rwxr-xr-xsurvey.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/survey.py b/survey.py
index f8df47d..55a8ab0 100755
--- a/survey.py
+++ b/survey.py
@@ -60,6 +60,8 @@ def observe(part, rel_addr, map):
(3, '3')
>>> observe(('label[31:0]', 'imm32'), 0, {'label': 1234})
(1234, 32)
+ >>> observe(('label-2[31:0]', 'imm32'), 0, {'label': 1234})
+ (1232, 32)
>>> observe(('label[1:0]', 'imm32'), 0, {'label': 1234})
(2, 2)
>>> observe(('label[31:0]', 'off32'), 1000, {'label': 1234})
@@ -68,6 +70,10 @@ def observe(part, rel_addr, map):
(16, 20)
>>> observe(('label[31:0]', 'off32'), 2000, {'label': 1000})
(4294966296, 32)
+ >>> observe(('label+4[7:0]', 'off32'), 0x1000, {'label': 0x1234})
+ (56, 8)
+ >>> observe(('label+4[15:8]', 'off32'), 0x1000, {'label': 0x1234})
+ (2, 8)
>>> observe(('label[32:0]', 'imm32'), 0, {})
Traceback (most recent call last):
@@ -81,6 +87,9 @@ def observe(part, rel_addr, map):
assert ref['label'] in map, "undefined label '{}'".format(ref['label'])
addr = map[ref['label']]
+ if 'offset' in ref:
+ addr += ref['offset']
+
# @TODO: the hardcoded 32 here is not right, this is going to blow up
# in some circumstances (e.g. a backwards branch 2<<18 bytes away)
if ref['mode'] == 'imm':