2004-05-07 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Fri, 7 May 2004 13:29:50 +0000 (13:29 -0000)
committerZoltan Varga <vargaz@gmail.com>
Fri, 7 May 2004 13:29:50 +0000 (13:29 -0000)
* mini-sparc.c: Fix vararg support + add beginnings of sigaltstack
support.

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

mono/mini/ChangeLog
mono/mini/mini-sparc.c

index 4aa61f6bb2a3bbc2d404dd7237ffaf50a804c855..6c75af2fa6ff88fb85e9c07068a7b0d6c8277885 100644 (file)
@@ -1,3 +1,7 @@
+2004-05-07  Zoltan Varga  <vargaz@freemail.hu>
+
+       * mini-sparc.c: Fix vararg support + add beginnings of sigaltstack
+       support.
 
 Fri May 7 13:25:50 CEST 2004 Paolo Molaro <lupus@ximian.com>
 
index 1c7499a46284071c982321ee80e2f7878129c72d..35cf02ee7a3bb00263f82bff1980483350fcc363 100644 (file)
@@ -83,6 +83,8 @@
 
 #define ALIGN_TO(val,align) (((val) + ((align) - 1)) & ~((align) - 1))
 
+#define SIGNAL_STACK_SIZE (64 * 1024)
+
 /* Whenever the CPU supports v9 instructions */
 gboolean sparcv9 = FALSE;
 
@@ -809,9 +811,11 @@ mono_arch_call_opcode (MonoCompile *cfg, MonoBasicBlock* bb, MonoCallInst *call,
                                gint align;
                                guint32 offset, pad;
                                guint32 size;
-
-                               if (sig->params [i - sig->hasthis]->type == MONO_TYPE_TYPEDBYREF)
+                               
+                               if (sig->params [i - sig->hasthis]->type == MONO_TYPE_TYPEDBYREF) {
                                        size = sizeof (MonoTypedRef);
+                                       align = 4;
+                               }
                                else
                                if (sig->pinvoke)
                                        size = mono_type_native_stack_size (&in->klass->byval_arg, &align);
@@ -3826,6 +3830,19 @@ mono_arch_emit_epilog (MonoCompile *cfg)
 void
 mono_arch_setup_jit_tls_data (MonoJitTlsData *tls)
 {
+#ifdef MONO_ARCH_SIGSEGV_ON_ALTSTACK
+       struct sigaltstack sa;
+
+       printf ("SIGALT!\n");
+       /* Setup an alternate signal stack */
+       tls->signal_stack = g_malloc (SIGNAL_STACK_SIZE * 100);
+       tls->signal_stack_size = SIGNAL_STACK_SIZE;
+
+       sa.ss_sp = tls->signal_stack;
+       sa.ss_size = SIGNAL_STACK_SIZE * 100;
+       sa.ss_flags = 0;
+       g_assert (sigaltstack (&sa, NULL) == 0);
+#endif
 }
 
 void