x86 pushes vararg arguments unaligned
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 27 Apr 2011 15:17:37 +0000 (12:17 -0300)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 27 Apr 2011 15:18:01 +0000 (12:18 -0300)
mono/metadata/icall.c

index cdc8665d019d23433fd42ed0f769e86d977d85a7..8b328a86e6b46b6dc1013c2df2fccf8999e6ce22 100644 (file)
@@ -7187,7 +7187,9 @@ mono_ArgIterator_IntGetNextArg (MonoArgIterator *iter)
        res.type = iter->sig->params [i];
        res.klass = mono_class_from_mono_type (res.type);
        arg_size = mono_type_stack_size (res.type, &align);
+#if defined(__arm__)
        iter->args = (guint8*)(((gsize)iter->args + (align) - 1) & ~(align - 1));
+#endif
        res.value = iter->args;
 #if G_BYTE_ORDER != G_LITTLE_ENDIAN
        if (arg_size <= sizeof (gpointer)) {
@@ -7223,7 +7225,9 @@ mono_ArgIterator_IntGetNextArgT (MonoArgIterator *iter, MonoType *type)
                res.klass = mono_class_from_mono_type (res.type);
                /* FIXME: endianess issue... */
                arg_size = mono_type_stack_size (res.type, &align);
+#if defined(__arm__)
                iter->args = (guint8*)(((gsize)iter->args + (align) - 1) & ~(align - 1));
+#endif
                res.value = iter->args;
                iter->args = (char*)iter->args + arg_size;
                iter->next_arg++;