|
12 | 12 |
|
13 | 13 |
|
14 | 14 | class SymbolTable:
|
15 |
| - def __init__(self, symbols, bases): |
| 15 | + def __init__(self, symbols, bases, globls): |
16 | 16 | self._symbols = symbols
|
17 | 17 | self._bases = bases
|
| 18 | + self._globls = globls |
18 | 19 | self._pass = None
|
19 | 20 |
|
20 | 21 | def set_pass(self, _pass):
|
@@ -53,7 +54,9 @@ def dump(self):
|
53 | 54 | print(symbol, entry)
|
54 | 55 |
|
55 | 56 | def export(self):
|
56 |
| - addrs_syms = [(self.resolve_absolute(entry), symbol) for symbol, entry in self._symbols.items()] |
| 57 | + addrs_syms = [(self.resolve_absolute(entry), symbol) |
| 58 | + for symbol, entry in self._symbols.items() |
| 59 | + if symbol in self._globls] |
57 | 60 | return sorted(addrs_syms)
|
58 | 61 |
|
59 | 62 | def to_abs_addr(self, section, offset):
|
@@ -93,11 +96,15 @@ def resolve_relative(self, symbol):
|
93 | 96 | from_addr = self.to_abs_addr(self._from_section, self._from_offset)
|
94 | 97 | return sym_addr - from_addr
|
95 | 98 |
|
| 99 | + def set_global(self, symbol): |
| 100 | + self._globls[symbol] = True |
| 101 | + pass |
| 102 | + |
96 | 103 |
|
97 | 104 | class Assembler:
|
98 | 105 |
|
99 |
| - def __init__(self, symbols=None, bases=None): |
100 |
| - self.symbols = SymbolTable(symbols or {}, bases or {}) |
| 106 | + def __init__(self, symbols=None, bases=None, globls=None): |
| 107 | + self.symbols = SymbolTable(symbols or {}, bases or {}, globls or {}) |
101 | 108 | opcodes.symbols = self.symbols # XXX dirty hack
|
102 | 109 |
|
103 | 110 | def init(self, a_pass):
|
@@ -236,6 +243,9 @@ def d_set(self, symbol, expr):
|
236 | 243 | value = int(expr) # TODO: support more than just integers
|
237 | 244 | self.symbols.set_sym(symbol, ABS, None, value)
|
238 | 245 |
|
| 246 | + def d_global(self, symbol): |
| 247 | + self.symbols.set_global(symbol) |
| 248 | + |
239 | 249 | def append_data(self, wordlen, args):
|
240 | 250 | data = [int(arg).to_bytes(wordlen, 'little') for arg in args]
|
241 | 251 | self.append_section(b''.join(data))
|
|
0 commit comments