From 408d0be89fb1331bc008b7c3ac8202b11c5d3c0d Mon Sep 17 00:00:00 2001 From: Yong Cong Sin Date: Mon, 27 May 2024 15:40:27 +0800 Subject: [PATCH] build: symtab: sanitize function name Sanitize the function name and only store the valid part. Signed-off-by: Yong Cong Sin --- scripts/build/gen_symtab.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/scripts/build/gen_symtab.py b/scripts/build/gen_symtab.py index a2c767c4461..c924cfc06db 100644 --- a/scripts/build/gen_symtab.py +++ b/scripts/build/gen_symtab.py @@ -7,6 +7,7 @@ import argparse import sys import os +import re from elftools.elf.elffile import ELFFile from elftools.elf.descriptions import ( @@ -64,6 +65,17 @@ start_addr = 0 symtab_list = [] +def sanitize_func_name(name): + pattern = r'(^[a-zA-Z_][a-zA-Z0-9_]*)' + match = re.match(pattern, name) + if match: + return match.group(0) + else: + log.error(f"Failed to sanitize function name: {name}") + + return name + + def main(): args = parse_args() log.set_debug(args.debug) @@ -75,17 +87,18 @@ def main(): symtab = elf.get_section_by_name('.symtab') i = 1 - for nsym, symbol in enumerate(symtab.iter_symbols()): # pylint: disable=unused-variable + for nsym, symbol in enumerate(symtab.iter_symbols()): # pylint: disable=unused-variable symbol_type = describe_symbol_type(symbol['st_info']['type']) symbol_addr = symbol['st_value'] if symbol_type == 'FUNC' and symbol_addr != 0: + symbol_name = sanitize_func_name(symbol.name) symtab_list.append(symtab_entry( - symbol_addr, symbol_addr, symbol.name)) + symbol_addr, symbol_addr, symbol_name)) log.debug('%6d: %s %.25s' % ( i, hex(symbol_addr), - symbol.name)) + symbol_name)) i = i + 1 symtab_list.sort(key=lambda x: x.addr, reverse=False)