build: symtab: sanitize function name
Sanitize the function name and only store the valid part.
Signed-off-by: Yong Cong Sin <ycsin@meta.com>
diff --git a/scripts/build/gen_symtab.py b/scripts/build/gen_symtab.py
index a2c767c..c924cfc 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 @@
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 @@
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)