Selaa lähdekoodia

A few native stack detection fixes for macOS/arm64 (#3368)

YAMAMOTO Takashi 1 vuosi sitten
vanhempi
sitoutus
120b9659dd

+ 0 - 2
.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

+ 5 - 0
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

+ 2 - 1
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;