summaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index d8f8b1ff..3ec20d76 100644
--- a/gc.c
+++ b/gc.c
@@ -52,6 +52,12 @@
#define FRESHOBJ_VEC_SIZE (8 * HEAP_SIZE)
#define DFL_MALLOC_DELTA_THRESH (64L * 1024 * 1024)
+#if __aarch64__
+#define STACK_TOP_EXTRA_WORDS 4
+#else
+#define STACK_TOP_EXTRA_WORDS 0
+#endif
+
typedef struct heap {
struct heap *next;
obj_t block[HEAP_SIZE];
@@ -499,7 +505,7 @@ static void mark(mach_context_t *pmc, val *gc_stack_top)
/*
* Finally, the stack.
*/
- mark_mem_region(gc_stack_top, gc_stack_bottom);
+ mark_mem_region(gc_stack_top - STACK_TOP_EXTRA_WORDS, gc_stack_bottom);
}
static int sweep_one(obj_t *block)