blob: 3b6cb6e1c3ce55e682075de517ac55927dda58ae [file] [log] [blame]
#!/usr/bin/env python3
#-------------------------------------------------------------------------------
# SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------
import sys
import re
from datetime import datetime
def load_symbols_to_keep(symbols):
return [re.compile(x.replace('*', '.*')) for x in symbols]
def convert_fromelf_to_symdefs(fromelf_lines, symbols_to_keep):
lines = []
lines.append(f"#<SYMDEFS># Generated from fromelf --text -s: Last Updated: {datetime.now()}\n")
pattern = re.compile(r"\s*\d+\s+(\S+)\s+(?:\n\s+)?(0x[0-9a-fA-F]+)\s+(\S+)\s+(\S+)\s+(\S+)")
for match in pattern.finditer(fromelf_lines):
symbol, address, bind, section, stype = match.groups()
if not any(p.search(symbol) for p in symbols_to_keep):
continue
# Normalize symbol type
if stype == "Code":
sym_type = "T"
elif stype == "Data":
sym_type = "D"
else:
sym_type = "N" # Unknown or other
lines.append(f"{address} {sym_type} {symbol}\n")
return lines
if __name__ == "__main__":
fromelf_path = sys.argv[1]
output_path = sys.argv[2]
symbols_list = sys.argv[3:]
symbols_to_keep = load_symbols_to_keep(symbols_list)
with open(fromelf_path, "r") as f:
fromelf_lines = f.read()
newlines = convert_fromelf_to_symdefs(fromelf_lines, symbols_to_keep)
with open(output_path, "w") as f:
f.writelines(newlines)