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)