From 120b9659dd4f3f500419e05fceab1f47aba54529 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Fri, 26 Apr 2024 20:37:55 +0900 Subject: [PATCH] A few native stack detection fixes for macOS/arm64 (#3368) --- .github/workflows/compilation_on_macos.yml | 2 -- core/config.h | 5 +++++ samples/native-stack-overflow/src/main.c | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compilation_on_macos.yml b/.github/workflows/compilation_on_macos.yml index 559f25ed7..d9598a00b 100644 --- a/.github/workflows/compilation_on_macos.yml +++ b/.github/workflows/compilation_on_macos.yml @@ -380,9 +380,7 @@ jobs: ./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt bash -x ../symbolicate.sh - # skip on arm64 (macos-14) for now - name: Build Sample [native-stack-overflow] - if: matrix.os != 'macos-14' run: | cd samples/native-stack-overflow ./build.sh diff --git a/core/config.h b/core/config.h index b2e07da28..0a77ec949 100644 --- a/core/config.h +++ b/core/config.h @@ -523,8 +523,13 @@ /* Guard page count for stack overflow check with hardware trap */ #ifndef STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT +#if defined(__APPLE__) && defined(__aarch64__) +/* Note: on macOS/iOS arm64, the user page size is 16KB */ +#define STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT 1 +#else #define STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT 3 #endif +#endif /* Default wasm block address cache size and conflict list size */ #ifndef BLOCK_ADDR_CACHE_SIZE diff --git a/samples/native-stack-overflow/src/main.c b/samples/native-stack-overflow/src/main.c index 071929323..8d42cc0aa 100644 --- a/samples/native-stack-overflow/src/main.c +++ b/samples/native-stack-overflow/src/main.c @@ -113,10 +113,11 @@ main(int argc, char **argv) printf("-------------------------------------------------------------------" "--------\n"); + uint32_t page_size = os_getpagesize(); unsigned int stack; unsigned int prevstack = 0; /* appease GCC -Wmaybe-uninitialized */ unsigned int stack_range_start = 0; - unsigned int stack_range_end = 4096 * 6; + unsigned int stack_range_end = page_size * 6; unsigned int step = 16; struct record rec0; struct record rec1;