Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoff Norton <grompf@sublimeintervention.com>2007-11-01 19:21:34 +0300
committerGeoff Norton <grompf@sublimeintervention.com>2007-11-01 19:21:34 +0300
commite70a6cb0e01f498e1bb8eba61d5c52cc47af7466 (patch)
treecb4076a52cb98cf2bf8bd20adbcd122bc9a7003a /libgc/darwin_stop_world.c
parent7726efe114981366f12472655e3d2be0efededa0 (diff)
2007-11-01 Geoff Norton <gnorton@novell.com>
* 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
Diffstat (limited to 'libgc/darwin_stop_world.c')
-rw-r--r--libgc/darwin_stop_world.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/libgc/darwin_stop_world.c b/libgc/darwin_stop_world.c
index 6dcc0680831..7cba3f00374 100644
--- a/libgc/darwin_stop_world.c
+++ b/libgc/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);