From 9c8b8c3289613bf11fcb40fa9ff1d408a5c0d4fc Mon Sep 17 00:00:00 2001 From: Zihao Yu Date: Fri, 12 Jan 2024 20:18:37 +0800 Subject: [PATCH] bsp,am,integrate-am-apps: fix heap smash * now pass microbench --- bsp/abstract-machine/integrate-am-apps.py | 2 ++ bsp/abstract-machine/src/init.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/bsp/abstract-machine/integrate-am-apps.py b/bsp/abstract-machine/integrate-am-apps.py index 6021f4b..d441ae2 100644 --- a/bsp/abstract-machine/integrate-am-apps.py +++ b/bsp/abstract-machine/integrate-am-apps.py @@ -52,6 +52,7 @@ def integrate(app_dir): os.remove(redefine_sym_file) am_app_c_fp.write(f"""extern int __am_{app_name}_main(const char *); static void am_{app_name}(int argc, char *argv[]) {{ + heap = am_apps_heap; __am_{app_name}_main(argc >= 2 ? argv[1] : ""); }} MSH_CMD_EXPORT(am_{app_name}, AM {app_name});""") @@ -62,6 +63,7 @@ read_lib_symbols("klib") am_app_mk_fp.write("SRCS += build/am-apps.c\n") am_app_c_fp.write("""#include #include +extern Area am_apps_heap; 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; } diff --git a/bsp/abstract-machine/src/init.c b/bsp/abstract-machine/src/init.c index 76b07e9..75bedb8 100644 --- a/bsp/abstract-machine/src/init.c +++ b/bsp/abstract-machine/src/init.c @@ -2,9 +2,12 @@ #include #include +#define AM_APPS_HEAP_SIZE 0x2000000 #define RT_HW_HEAP_BEGIN heap.start #define RT_HW_HEAP_END heap.end +Area am_apps_heap; + void rt_hw_board_init() { int rt_hw_uart_init(void); rt_hw_uart_init(); @@ -14,6 +17,11 @@ void rt_hw_board_init() { rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); #endif + uint32_t size = AM_APPS_HEAP_SIZE; + void *p = NULL; + for (; p == NULL && size != 0; size /= 2) { p = rt_malloc(size); } + am_apps_heap = (Area) { .start = p, .end = p + size }; + #ifdef RT_USING_CONSOLE /* set console device */ rt_console_set_device("uart");