Wed Feb 22 10:31:25 CET 2006 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Wed, 22 Feb 2006 09:35:09 +0000 (09:35 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Wed, 22 Feb 2006 09:35:09 +0000 (09:35 -0000)
* exceptions-x86.c, mini-x86.h, driver.c, mini-codegen.c:
updates and compilation fixes for the OSX/x86 port, mostly from
Geoff Norton <gnorton@customerdna.com>.

svn path=/trunk/mono/; revision=57148

mono/mini/ChangeLog
mono/mini/driver.c
mono/mini/exceptions-x86.c
mono/mini/mini-codegen.c
mono/mini/mini-x86.h

index 35679718a28d6899aedf45c060a49a5101c7c22c..3d2ece9749cff16efd9fbcbcb5f5d4a74ede7189 100644 (file)
@@ -1,4 +1,10 @@
 
+Wed Feb 22 10:31:25 CET 2006 Paolo Molaro <lupus@ximian.com>
+
+       * exceptions-x86.c, mini-x86.h, driver.c, mini-codegen.c:
+       updates and compilation fixes for the OSX/x86 port, mostly from
+       Geoff Norton <gnorton@customerdna.com>.
+
 Tue Feb 21 19:56:55 CET 2006 Paolo Molaro <lupus@ximian.com>
 
        * inssel.brg: faster interface call implementation
index 3710e5490e05994ee98804740b07a4aeb3a190c1..99c259882cae79f1c78578081ee52da521c5a599 100644 (file)
@@ -811,7 +811,9 @@ mono_main (int argc, char* argv[])
                        mono_use_security_manager = TRUE;
                        mono_activate_security_manager ();
                } else if (strcmp (argv [i], "--desktop") == 0) {
+#if defined (HAVE_BOEHM_GC)
                        GC_dont_expand = 1;
+#endif
                        /* Put desktop-specific optimizations here */
                } else if (strcmp (argv [i], "--server") == 0){
                        /* Put server-specific optimizations here */
index 92b78b183c1cb30573d7c1c778415b7ae8f01d88..c63f05cdc1541cad420d28cdc43eb2a497f0bd51 100644 (file)
 #include "mini.h"
 #include "mini-x86.h"
 
-#if defined(__FreeBSD__)
-#include <ucontext.h>
-#endif 
-
 #ifdef PLATFORM_WIN32
 static void (*restore_stack) (void *);
 
@@ -689,27 +685,15 @@ mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 #ifdef MONO_ARCH_USE_SIGACTION
        ucontext_t *ctx = (ucontext_t*)sigctx;
        
-#if defined(__FreeBSD__)
-       mctx->eax = ctx->uc_mcontext.mc_eax;
-       mctx->ebx = ctx->uc_mcontext.mc_ebx;
-       mctx->ecx = ctx->uc_mcontext.mc_ecx;
-       mctx->edx = ctx->uc_mcontext.mc_edx;
-       mctx->ebp = ctx->uc_mcontext.mc_ebp;
-       mctx->esp = ctx->uc_mcontext.mc_esp;
-       mctx->esi = ctx->uc_mcontext.mc_esi;
-       mctx->edi = ctx->uc_mcontext.mc_edi;
-       mctx->eip = ctx->uc_mcontext.mc_eip;
-#else
-       mctx->eax = ctx->uc_mcontext.gregs [REG_EAX];
-       mctx->ebx = ctx->uc_mcontext.gregs [REG_EBX];
-       mctx->ecx = ctx->uc_mcontext.gregs [REG_ECX];
-       mctx->edx = ctx->uc_mcontext.gregs [REG_EDX];
-       mctx->ebp = ctx->uc_mcontext.gregs [REG_EBP];
-       mctx->esp = ctx->uc_mcontext.gregs [REG_ESP];
-       mctx->esi = ctx->uc_mcontext.gregs [REG_ESI];
-       mctx->edi = ctx->uc_mcontext.gregs [REG_EDI];
-       mctx->eip = ctx->uc_mcontext.gregs [REG_EIP];
-#endif
+       mctx->eax = UCONTEXT_REG_EAX (ctx);
+       mctx->ebx = UCONTEXT_REG_EBX (ctx);
+       mctx->ecx = UCONTEXT_REG_ECX (ctx);
+       mctx->edx = UCONTEXT_REG_EDX (ctx);
+       mctx->ebp = UCONTEXT_REG_EBP (ctx);
+       mctx->esp = UCONTEXT_REG_ESP (ctx);
+       mctx->esi = UCONTEXT_REG_ESI (ctx);
+       mctx->edi = UCONTEXT_REG_EDI (ctx);
+       mctx->eip = UCONTEXT_REG_EIP (ctx);
 #else  
        struct sigcontext *ctx = (struct sigcontext *)sigctx;
 
@@ -731,28 +715,15 @@ mono_arch_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
 #ifdef MONO_ARCH_USE_SIGACTION
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
-#if defined(__FreeBSD__)
-       ctx->uc_mcontext.mc_eax = mctx->eax;
-       ctx->uc_mcontext.mc_ebx = mctx->ebx;
-       ctx->uc_mcontext.mc_ecx = mctx->ecx;
-       ctx->uc_mcontext.mc_edx = mctx->edx;
-       ctx->uc_mcontext.mc_ebp  = mctx->ebp;
-       ctx->uc_mcontext.mc_esp = mctx->esp;
-       ctx->uc_mcontext.mc_esi = mctx->esi;
-       ctx->uc_mcontext.mc_edi = mctx->edi;
-       ctx->uc_mcontext.mc_eip = mctx->eip;
-
-#else
-       ctx->uc_mcontext.gregs [REG_EAX] = mctx->eax;
-       ctx->uc_mcontext.gregs [REG_EBX] = mctx->ebx;
-       ctx->uc_mcontext.gregs [REG_ECX] = mctx->ecx;
-       ctx->uc_mcontext.gregs [REG_EDX] = mctx->edx;
-       ctx->uc_mcontext.gregs [REG_EBP] = mctx->ebp;
-       ctx->uc_mcontext.gregs [REG_ESP] = mctx->esp;
-       ctx->uc_mcontext.gregs [REG_ESI] = mctx->esi;
-       ctx->uc_mcontext.gregs [REG_EDI] = mctx->edi;
-       ctx->uc_mcontext.gregs [REG_EIP] = mctx->eip;
-#endif
+       UCONTEXT_REG_EAX (ctx) = mctx->eax;
+       UCONTEXT_REG_EBX (ctx) = mctx->ebx;
+       UCONTEXT_REG_ECX (ctx) = mctx->ecx;
+       UCONTEXT_REG_EDX (ctx) = mctx->edx;
+       UCONTEXT_REG_EBP (ctx) = mctx->ebp;
+       UCONTEXT_REG_ESP (ctx) = mctx->esp;
+       UCONTEXT_REG_ESI (ctx) = mctx->esi;
+       UCONTEXT_REG_EDI (ctx) = mctx->edi;
+       UCONTEXT_REG_EIP (ctx) = mctx->eip;
 #else
        struct sigcontext *ctx = (struct sigcontext *)sigctx;
 
@@ -773,11 +744,7 @@ mono_arch_ip_from_context (void *sigctx)
 {
 #ifdef MONO_ARCH_USE_SIGACTION
        ucontext_t *ctx = (ucontext_t*)sigctx;
-#if defined(__FreeBSD__)
-       return (gpointer)ctx->uc_mcontext.mc_eip;
-#else
-       return (gpointer)ctx->uc_mcontext.gregs [REG_EIP];
-#endif
+       return (gpointer)UCONTEXT_REG_EIP (ctx);
 #else
        struct sigcontext *ctx = sigctx;
        return (gpointer)ctx->SC_EIP;
index e81b608fd470a9f7d2284c8db08f9c0e0adc6922..5b40e94aad8092bb13a96ec63fa00ed208db1fbe 100644 (file)
@@ -28,11 +28,7 @@ static const char*const * ins_spec = amd64_desc;
 const char * const sparc_desc [OP_LAST];
 static const char*const * ins_spec = sparc_desc;
 #elif defined(__i386__)
-#ifdef _MSC_VER
 extern const char * const pentium_desc [OP_LAST];
-#else
-const char * const pentium_desc [OP_LAST];
-#endif
 static const char*const * ins_spec = pentium_desc;
 #elif defined(__ia64__)
 const char * const ia64_desc [OP_LAST];
index 302703d9848d28f3fca632b6fe7857cc24525f60..ed67dae08779e2c764bad4d862b362b44f5d0157 100644 (file)
@@ -43,7 +43,7 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep);
 
 #endif /* PLATFORM_WIN32 */
 
-#if defined( __linux__) || defined(__sun)
+#if defined( __linux__) || defined(__sun) || defined(__APPLE__)
 #define MONO_ARCH_USE_SIGACTION
 #endif
 
@@ -98,7 +98,11 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep);
 #define MONO_ARCH_INST_IS_REGPAIR(desc) (desc == 'l' || desc == 'L')
 #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (desc == 'l' ? X86_EDX : -1)
 
+#if defined(__APPLE__)
+#define MONO_ARCH_FRAME_ALIGNMENT 16
+#else
 #define MONO_ARCH_FRAME_ALIGNMENT 4
+#endif
 
 /* fixme: align to 16byte instead of 32byte (we align to 32byte to get 
  * reproduceable results for benchmarks */
@@ -130,6 +134,42 @@ struct MonoLMF {
 
 typedef void* MonoCompileArch;
 
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <ucontext.h>
+#endif 
+
+#if defined(__FreeBSD__)
+       #define UCONTEXT_REG_EAX(ctx) ((ctx)->uc_mcontext.mc_eax)
+       #define UCONTEXT_REG_EBX(ctx) ((ctx)->uc_mcontext.mc_ebx)
+       #define UCONTEXT_REG_ECX(ctx) ((ctx)->uc_mcontext.mc_ecx)
+       #define UCONTEXT_REG_EDX(ctx) ((ctx)->uc_mcontext.mc_edx)
+       #define UCONTEXT_REG_EBP(ctx) ((ctx)->uc_mcontext.mc_ebp)
+       #define UCONTEXT_REG_ESP(ctx) ((ctx)->uc_mcontext.mc_esp)
+       #define UCONTEXT_REG_ESI(ctx) ((ctx)->uc_mcontext.mc_esi)
+       #define UCONTEXT_REG_EDI(ctx) ((ctx)->uc_mcontext.mc_edi)
+       #define UCONTEXT_REG_EIP(ctx) ((ctx)->uc_mcontext.mc_eip)
+#elif defined(__APPLE__)
+       #define UCONTEXT_REG_EAX(ctx) ((ctx)->uc_mcontext->ss.eax)
+       #define UCONTEXT_REG_EBX(ctx) ((ctx)->uc_mcontext->ss.ebx)
+       #define UCONTEXT_REG_ECX(ctx) ((ctx)->uc_mcontext->ss.ecx)
+       #define UCONTEXT_REG_EDX(ctx) ((ctx)->uc_mcontext->ss.edx)
+       #define UCONTEXT_REG_EBP(ctx) ((ctx)->uc_mcontext->ss.ebp)
+       #define UCONTEXT_REG_ESP(ctx) ((ctx)->uc_mcontext->ss.esp)
+       #define UCONTEXT_REG_ESI(ctx) ((ctx)->uc_mcontext->ss.esi)
+       #define UCONTEXT_REG_EDI(ctx) ((ctx)->uc_mcontext->ss.edi)
+       #define UCONTEXT_REG_EIP(ctx) ((ctx)->uc_mcontext->ss.eip)
+#else
+       #define UCONTEXT_REG_EAX(ctx) ((ctx)->uc_mcontext.gregs [REG_EAX])
+       #define UCONTEXT_REG_EBX(ctx) ((ctx)->uc_mcontext.gregs [REG_EBX])
+       #define UCONTEXT_REG_ECX(ctx) ((ctx)->uc_mcontext.gregs [REG_ECX])
+       #define UCONTEXT_REG_EDX(ctx) ((ctx)->uc_mcontext.gregs [REG_EDX])
+       #define UCONTEXT_REG_EBP(ctx) ((ctx)->uc_mcontext.gregs [REG_EBP])
+       #define UCONTEXT_REG_ESP(ctx) ((ctx)->uc_mcontext.gregs [REG_ESP])
+       #define UCONTEXT_REG_ESI(ctx) ((ctx)->uc_mcontext.gregs [REG_ESI])
+       #define UCONTEXT_REG_EDI(ctx) ((ctx)->uc_mcontext.gregs [REG_EDI])
+       #define UCONTEXT_REG_EIP(ctx) ((ctx)->uc_mcontext.gregs [REG_EIP])
+#endif
+
 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
 # define SC_EAX sc_eax
 # define SC_EBX sc_ebx