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
path: root/libgc
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2006-11-19 19:42:26 +0300
committerMiguel de Icaza <miguel@gnome.org>2006-11-19 19:42:26 +0300
commitc71714cbda8b7a4fe4f1a5e1c95b95b5618623d8 (patch)
tree318022a93a8d18ff6cd9ffa8ddedce487408690a /libgc
parent4ba7cf098c6a2623cc6ffdd60f8a6f0aeb9c0e27 (diff)
2006-11-19 Allan Hsu <allan@counterpop.net>
* libgc/darwin_stop_world.c, libgc/include/private/gc_priv.h, libgc/os_dep.c: Fixes to make the GC work on OSX/Intel with XCode 2.4 (10.4u SDK and newer). This code should work with older versions of the SDK as well. svn path=/trunk/mono/; revision=68156
Diffstat (limited to 'libgc')
-rw-r--r--libgc/ChangeLog7
-rw-r--r--libgc/darwin_stop_world.c10
-rw-r--r--libgc/include/private/gc_priv.h10
-rw-r--r--libgc/os_dep.c2
4 files changed, 24 insertions, 5 deletions
diff --git a/libgc/ChangeLog b/libgc/ChangeLog
index 06ed8152122..d9a9a5d98ec 100644
--- a/libgc/ChangeLog
+++ b/libgc/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-19 Allan Hsu <allan@counterpop.net>
+
+ * libgc/darwin_stop_world.c, libgc/include/private/gc_priv.h,
+ libgc/os_dep.c: Fixes to make the GC work on OSX/Intel with XCode
+ 2.4 (10.4u SDK and newer).
+
+ This code should work with older versions of the SDK as well.
Tue Oct 10 16:58:37 CEST 2006 Paolo Molaro <lupus@ximian.com>
diff --git a/libgc/darwin_stop_world.c b/libgc/darwin_stop_world.c
index 00a25cf62d2..04bb415e026 100644
--- a/libgc/darwin_stop_world.c
+++ b/libgc/darwin_stop_world.c
@@ -75,12 +75,14 @@ void GC_push_all_stacks() {
ptr_t lo, hi;
#if defined(POWERPC)
ppc_thread_state_t state;
+ mach_msg_type_number_t thread_state_count = PPC_THREAD_STATE_COUNT;
#elif defined(I386)
i386_thread_state_t state;
+ mach_msg_type_number_t thread_state_count = i386_THREAD_STATE_COUNT;
#else
# error FIXME for non-x86 || ppc architectures
-#endif
mach_msg_type_number_t thread_state_count = MACHINE_THREAD_STATE_COUNT;
+#endif
me = pthread_self();
if (!GC_thr_initialized) GC_thr_init();
@@ -94,7 +96,7 @@ void GC_push_all_stacks() {
/* Get the thread state (registers, etc) */
r = thread_get_state(
p->stop_info.mach_thread,
- MACHINE_THREAD_STATE,
+ GC_MACH_THREAD_STATE_FLAVOR,
(natural_t*)&state,
&thread_state_count);
if(r != KERN_SUCCESS) ABORT("thread_get_state failed");
@@ -193,7 +195,7 @@ void GC_push_all_stacks() {
ppc_thread_state64_t info;
# endif
mach_msg_type_number_t outCount = THREAD_STATE_MAX;
- r = thread_get_state(thread, MACHINE_THREAD_STATE,
+ r = thread_get_state(thread, GC_MACH_THREAD_STATE_FLAVOR,
(natural_t *)&info, &outCount);
if(r != KERN_SUCCESS) continue;
@@ -236,7 +238,7 @@ void GC_push_all_stacks() {
WARN("This is completely untested and likely will not work\n", 0);
i386_thread_state_t info;
mach_msg_type_number_t outCount = THREAD_STATE_MAX;
- r = thread_get_state(thread, MACHINE_THREAD_STATE,
+ r = thread_get_state(thread, GC_MACH_THREAD_STATE_FLAVOR,
(natural_t *)&info, &outCount);
if(r != KERN_SUCCESS) continue;
diff --git a/libgc/include/private/gc_priv.h b/libgc/include/private/gc_priv.h
index 6cb6a8991a8..cc0410d441f 100644
--- a/libgc/include/private/gc_priv.h
+++ b/libgc/include/private/gc_priv.h
@@ -366,6 +366,16 @@ void GC_print_callers GC_PROTO((struct callinfo info[NFRAMES]));
# define BZERO(x,n) bzero((char *)(x),(int)(n))
# endif
+#if defined(DARWIN)
+# if defined(POWERPC)
+# define GC_MACH_THREAD_STATE_FLAVOR PPC_THREAD_STATE
+# elif defined(I386)
+# define GC_MACH_THREAD_STATE_FLAVOR i386_THREAD_STATE
+# else
+# define GC_MACH_THREAD_STATE_FLAVOR MACHINE_THREAD_STATE
+# endif
+#endif
+
/* Delay any interrupts or signals that may abort this thread. Data */
/* structures are in a consistent state outside this pair of calls. */
/* ANSI C allows both to be empty (though the standard isn't very */
diff --git a/libgc/os_dep.c b/libgc/os_dep.c
index e92a9ef636c..f64caeffa2f 100644
--- a/libgc/os_dep.c
+++ b/libgc/os_dep.c
@@ -3702,7 +3702,7 @@ void GC_dirty_init() {
mask,
GC_ports.exception,
EXCEPTION_DEFAULT,
- MACHINE_THREAD_STATE
+ GC_MACH_THREAD_STATE_FLAVOR
);
if(r != KERN_SUCCESS) ABORT("task_set_exception_ports failed");