From 02954567894bc270ffe7cb075448b56a706c9381 Mon Sep 17 00:00:00 2001 From: Jonathan Chambers Date: Fri, 2 Feb 2018 11:46:19 +0300 Subject: [PATCH] Implement FindTopOfStack(0) for ARM and AArch64 (Darwin) (part of commit 9379c66 from Unity-Technologies/bdwgc) Issue #173 (bdwgc). * darwin_stop_world.c [!DARWIN_DONT_PARSE_STACK && (ARM32 || AARCH64)] (GC_FindTopOfStack): Set proper frame value (using asm instruction) if stack_start is zero (instead of ABORT). --- darwin_stop_world.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/darwin_stop_world.c b/darwin_stop_world.c index aef58c2..062eb21 100644 --- a/darwin_stop_world.c +++ b/darwin_stop_world.c @@ -64,6 +64,14 @@ GC_INNER ptr_t GC_FindTopOfStack(unsigned long stack_start) # else __asm__ __volatile__ ("ld %0,0(r1)" : "=r" (frame)); # endif +# elif defined(ARM32) + volatile ptr_t sp_reg; + __asm__ __volatile__ ("mov %0, r7\n" : "=r" (sp_reg)); + frame = (StackFrame *)sp_reg; +# elif defined(AARCH64) + volatile ptr_t sp_reg; + __asm__ __volatile__ ("mov %0, x29\n" : "=r" (sp_reg)); + frame = (StackFrame *)sp_reg; # else ABORT("GC_FindTopOfStack(0) is not implemented"); # endif -- 2.7.4