From: Geoff Norton Date: Thu, 1 Nov 2007 16:21:34 +0000 (+0000) Subject: 2007-11-01 Geoff Norton X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c8b83636bb2e7462f0c18dd09b077a0426b944c3;p=gc 2007-11-01 Geoff Norton * darwin_stop_world.c: Apple has changed ppc_thread_state_t on leopard so we need to conditionally check for that. __DARWIN_UNIX03 is the suggested define. svn path=/trunk/mono/; revision=88659 --- diff --git a/ChangeLog b/ChangeLog index a650423f..102d5aa0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-11-01 Geoff Norton + + * darwin_stop_world.c: Apple has changed ppc_thread_state_t on leopard + so we need to conditionally check for that. __DARWIN_UNIX03 is the + suggested define. Mon Sep 24 16:15:47 CEST 2007 Paolo Molaro diff --git a/darwin_stop_world.c b/darwin_stop_world.c index 6dcc0680..7cba3f00 100644 --- a/darwin_stop_world.c +++ b/darwin_stop_world.c @@ -112,6 +112,41 @@ void GC_push_all_stacks() { GC_push_one(state.esi); GC_push_one(state.ebp); #elif defined(POWERPC) +#if defined(__DARWIN_UNIX03) + lo = (void*)(state.__r1 - PPC_RED_ZONE_SIZE); + + GC_push_one(state.__r0); + GC_push_one(state.__r2); + GC_push_one(state.__r3); + GC_push_one(state.__r4); + GC_push_one(state.__r5); + GC_push_one(state.__r6); + GC_push_one(state.__r7); + GC_push_one(state.__r8); + GC_push_one(state.__r9); + GC_push_one(state.__r10); + GC_push_one(state.__r11); + GC_push_one(state.__r12); + GC_push_one(state.__r13); + GC_push_one(state.__r14); + GC_push_one(state.__r15); + GC_push_one(state.__r16); + GC_push_one(state.__r17); + GC_push_one(state.__r18); + GC_push_one(state.__r19); + GC_push_one(state.__r20); + GC_push_one(state.__r21); + GC_push_one(state.__r22); + GC_push_one(state.__r23); + GC_push_one(state.__r24); + GC_push_one(state.__r25); + GC_push_one(state.__r26); + GC_push_one(state.__r27); + GC_push_one(state.__r28); + GC_push_one(state.__r29); + GC_push_one(state.__r30); + GC_push_one(state.__r31); +#else lo = (void*)(state.r1 - PPC_RED_ZONE_SIZE); GC_push_one(state.r0); @@ -145,6 +180,7 @@ void GC_push_all_stacks() { GC_push_one(state.r29); GC_push_one(state.r30); GC_push_one(state.r31); +#endif #else # error FIXME for non-x86 || ppc architectures #endif @@ -199,6 +235,42 @@ void GC_push_all_stacks() { (natural_t *)&info, &outCount); if(r != KERN_SUCCESS) continue; +#if defined(__DARWIN_UNIX03) + lo = (void*)(info.__r1 - PPC_RED_ZONE_SIZE); + hi = (ptr_t)FindTopOfStack(info.__r1); + + GC_push_one(info.__r0); + GC_push_one(info.__r2); + GC_push_one(info.__r3); + GC_push_one(info.__r4); + GC_push_one(info.__r5); + GC_push_one(info.__r6); + GC_push_one(info.__r7); + GC_push_one(info.__r8); + GC_push_one(info.__r9); + GC_push_one(info.__r10); + GC_push_one(info.__r11); + GC_push_one(info.__r12); + GC_push_one(info.__r13); + GC_push_one(info.__r14); + GC_push_one(info.__r15); + GC_push_one(info.__r16); + GC_push_one(info.__r17); + GC_push_one(info.__r18); + GC_push_one(info.__r19); + GC_push_one(info.__r20); + GC_push_one(info.__r21); + GC_push_one(info.__r22); + GC_push_one(info.__r23); + GC_push_one(info.__r24); + GC_push_one(info.__r25); + GC_push_one(info.__r26); + GC_push_one(info.__r27); + GC_push_one(info.__r28); + GC_push_one(info.__r29); + GC_push_one(info.__r30); + GC_push_one(info.__r31); +#else lo = (void*)(info.r1 - PPC_RED_ZONE_SIZE); hi = (ptr_t)FindTopOfStack(info.r1); @@ -233,6 +305,7 @@ void GC_push_all_stacks() { GC_push_one(info.r29); GC_push_one(info.r30); GC_push_one(info.r31); +#endif # else /* FIXME: Remove after testing: */ WARN("This is completely untested and likely will not work\n", 0);