Files

61 lines
1.6 KiB
Python
Raw Permalink Normal View History

2020-05-27 19:14:56 -05:00
import sys
import re
from file_util import FileUtil
2021-06-06 17:46:18 -07:00
SYMBOLS_TEXT_FILENAME = 'build/us_1.0/dkr.map'
2020-05-27 19:14:56 -05:00
2021-06-06 17:46:18 -07:00
symbol_define_regex = r'\s*(0x[0-9a-f]{16})\s*([_0-9A-Za-z]*)'
2020-05-27 19:14:56 -05:00
def main():
2021-06-06 17:46:18 -07:00
FileUtil.set_working_dir_to_project_base()
2020-05-27 19:14:56 -05:00
if len(sys.argv) != 2:
show_help()
return
2021-06-18 22:40:44 -07:00
symbol, address = find_pairing(sys.argv[1])
if symbol is None or address is None:
if is_address(sys.argv[1]):
print('No symbol was found for the address 0x%08X' % int(sys.argv[1], 16))
else:
print('No address was found for the symbol "%s"' % sys.argv[1])
else:
print('0x%08X = %s' % (address, symbol))
2020-05-27 19:14:56 -05:00
2021-06-18 22:40:44 -07:00
def find_pairing(sym_or_addr):
symbol = None
address = None
if is_address(sym_or_addr):
address = int(sym_or_addr, 16)
else:
symbol = sym_or_addr
2021-06-06 17:46:18 -07:00
try:
lines = FileUtil.get_text_from_file(SYMBOLS_TEXT_FILENAME).split('\n')
except:
print('Couldn\'t open file ' + SYMBOLS_TEXT_FILENAME)
return
2020-05-27 19:14:56 -05:00
for line in lines:
matches = re.match(symbol_define_regex, line)
if matches is None:
continue
2021-06-18 22:40:44 -07:00
cur_addr = int(matches[1], 16)
cur_sym = matches[2]
if cur_addr == address:
return cur_sym, address
elif cur_sym == symbol:
return symbol, cur_addr
return None, None
def is_address(symbol):
try:
int(symbol, 16)
return True
except:
return False
2020-05-27 19:14:56 -05:00
def show_help():
2021-06-18 22:40:44 -07:00
print("Usage: ./get_symbol <RAM Address or symbol>")
2020-05-27 19:14:56 -05:00
##################################################################################
main()