|
1 | 1 | from esp32_ulp.assemble import Assembler, TEXT, DATA, BSS, REL, ABS
|
| 2 | +from esp32_ulp.assemble import SymbolTable |
2 | 3 |
|
3 | 4 | src = """\
|
4 | 5 |
|
@@ -40,7 +41,55 @@ def test_assemble():
|
40 | 41 | assert a.offsets[BSS] == 0
|
41 | 42 |
|
42 | 43 |
|
| 44 | +def test_symbols(): |
| 45 | + st = SymbolTable({}, {}) |
| 46 | + for entry in [ |
| 47 | + ('rel_t4', REL, TEXT, 4), |
| 48 | + ('abs_t4', ABS, TEXT, 4), |
| 49 | + ('rel_d4', REL, DATA, 4), |
| 50 | + ('abs_d4', ABS, DATA, 4), |
| 51 | + ]: |
| 52 | + st.set_sym(*entry) |
| 53 | + # PASS 1 ======================================================== |
| 54 | + st.set_pass(1) |
| 55 | + assert st.has_sym('abs_t4') |
| 56 | + assert st.get_sym('abs_t4') == (ABS, TEXT, 4) |
| 57 | + assert not st.has_sym('notexist') |
| 58 | + assert st.get_sym('notexist') == (REL, TEXT, 0) # pass1 -> dummy |
| 59 | + assert st.resolve_absolute('abs_t4') == 4 |
| 60 | + assert st.resolve_absolute('abs_d4') == 4 |
| 61 | + assert st.resolve_absolute('rel_t4') == 4 |
| 62 | + assert st.resolve_absolute('rel_d4') == 4 |
| 63 | + st.set_from(TEXT, 8) |
| 64 | + assert st.resolve_relative('abs_t4') == -4 |
| 65 | + assert st.resolve_relative('abs_d4') == -4 |
| 66 | + assert st.resolve_relative('rel_t4') == -4 |
| 67 | + assert st.resolve_relative('rel_d4') == -4 |
| 68 | + # PASS 2 ======================================================== |
| 69 | + st.set_bases({TEXT: 100, DATA: 200}) |
| 70 | + st.set_pass(2) |
| 71 | + assert st.has_sym('abs_t4') |
| 72 | + assert st.get_sym('abs_t4') == (ABS, TEXT, 4) |
| 73 | + assert not st.has_sym('notexist') |
| 74 | + try: |
| 75 | + st.get_sym('notexist') # pass2 -> raises |
| 76 | + except KeyError: |
| 77 | + raised = True |
| 78 | + else: |
| 79 | + raised = False |
| 80 | + assert raised |
| 81 | + assert st.resolve_absolute('abs_t4') == 4 |
| 82 | + assert st.resolve_absolute('abs_d4') == 4 |
| 83 | + assert st.resolve_absolute('rel_t4') == 100 + 4 |
| 84 | + assert st.resolve_absolute('rel_d4') == 200 + 4 |
| 85 | + st.set_from(TEXT, 8) |
| 86 | + assert st.resolve_relative('abs_t4') == 4 - 108 |
| 87 | + assert st.resolve_relative('abs_d4') == 4 - 108 |
| 88 | + assert st.resolve_relative('rel_t4') == 104 - 108 |
| 89 | + assert st.resolve_relative('rel_d4') == 204 - 108 |
| 90 | + |
| 91 | + |
43 | 92 | test_parse_line()
|
44 | 93 | test_parse()
|
45 | 94 | test_assemble()
|
46 |
| - |
| 95 | +test_symbols() |
0 commit comments