diff options
Diffstat (limited to 'survey.py')
| -rwxr-xr-x | survey.py | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -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': |
