papermario/tools/add_to_symbol_addrs.py
2021-02-06 15:37:43 +00:00

47 lines
1.3 KiB
Python
Executable File

#!/usr/bin/python3
import argparse
import os
import re
script_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = script_dir + "/../"
asm_dir = root_dir + "asm/nonmatchings/"
symbol_addrs_txt = os.path.join(script_dir, "symbol_addrs.txt")
with open(symbol_addrs_txt, "r") as f:
symbols = set()
for line in f.readlines():
line = line.split(";")[0]
s = [s.strip() for s in line.split("=", 1)]
name = s[0]
symbols.add(name)
with open(symbol_addrs_txt, "a") as symbol_addrs:
for root, dirs, files in os.walk(asm_dir):
for f_name in files:
if f_name.endswith(".s"):
f_path = os.path.join(root, f_name)
with open(f_path, "r") as f:
lines = f.readlines()
line = lines[3]
try:
addr = lines[4].split(" ")[2]
except:
addr = ""
if not line.startswith("glabel ") or not addr.startswith("80"):
print(f"??? {f_path}")
continue
func_name = line.split(" ")[1].rstrip()
if not func_name in symbols:
symbol_addrs.write(f"{func_name} = 0x{addr}; // type:func\n")