From f08882db2cbb30c379a1736f59943c5f60e73959 Mon Sep 17 00:00:00 2001 From: Zihao Yu Date: Fri, 12 Jan 2024 20:14:32 +0800 Subject: [PATCH] bsp,am,integrate-am-apps: fix linking error for microbench * do not change the name of symbol in libraries * run microbench, but trigger segmentation fault --- bsp/abstract-machine/integrate-am-apps.py | 29 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/bsp/abstract-machine/integrate-am-apps.py b/bsp/abstract-machine/integrate-am-apps.py index f083c6e..6021f4b 100644 --- a/bsp/abstract-machine/integrate-am-apps.py +++ b/bsp/abstract-machine/integrate-am-apps.py @@ -5,12 +5,21 @@ from pathlib import Path AM_HOME = Path(os.environ["AM_HOME"]) AM_KERNELS_HOME = (AM_HOME / ".." / "am-kernels").resolve() -app_dir_list = AM_KERNELS_HOME / "kernels" / "hello" ARCH = "native" Path("build").mkdir(exist_ok=True) am_app_mk_fp = open("am-apps.mk", "w") am_app_c_fp = open("build/am-apps.c" , "w") -lib_sym = [] +lib_sym = [ + "memset", "memcpy", "memmove", "memcmp", + "strlen", "strcat", "strcpy", "strncpy", "strcmp", "strncmp", + "srand", "rand", "malloc", "free", "abs", "atoi", + "printf", "sprintf", "snprintf", "vsprintf", "vsnprintf", +] +am_init_sym = [ "trm_init", "ioe_init", "cte_init", "vme_init", "mpe_init" ] +app_dir_list = [ + AM_KERNELS_HOME / "kernels" / "hello", + AM_KERNELS_HOME / "benchmarks" / "microbench", +] def read_lib_symbols(lib): libfile = AM_HOME / lib / "build" / f"{lib}-{ARCH}.a" @@ -31,7 +40,10 @@ def integrate(app_dir): redefine_sym_file = "redefine_sym.txt" redefine_sym_fp = open(redefine_sym_file, "w") for f in lib_sym: - redefine_sym_fp.write(f"__am_{app_name}_{f} {f}\n") + if f in am_init_sym: + redefine_sym_fp.write(f"__am_{app_name}_{f} __dummy_{f}\n") + else: + redefine_sym_fp.write(f"__am_{app_name}_{f} {f}\n") redefine_sym_fp.close() for obj in objs: os.system(f"objcopy --prefix-symbols=__am_{app_name}_ {str(obj)}") @@ -48,7 +60,14 @@ read_lib_symbols("am") read_lib_symbols("klib") am_app_mk_fp.write("SRCS += build/am-apps.c\n") -am_app_c_fp.write("#include \n") -integrate(app_dir_list) +am_app_c_fp.write("""#include +#include +bool __dummy_ioe_init() { return true; } +bool __dummy_cte_init(Context *(*handler)(Event ev, Context *ctx)) { return true; } +bool __dummy_vme_init(void *(*pgalloc)(int), void (*pgfree)(void *)) { return true; } +bool __dummy_mpe_init(void (*entry)()) { return true; } +""") +for app in app_dir_list: + integrate(app) am_app_mk_fp.close() am_app_c_fp.close()