2009-11-09 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 9 Nov 2009 02:01:57 +0000 (02:01 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 9 Nov 2009 02:01:57 +0000 (02:01 -0000)
* mini-arm.c (mono_arch_allocate_vars): Fix the previous change by passing
&align to mini_type_stack_size_full ().

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

mono/mini/ChangeLog
mono/mini/mini-arm.c

index 09efc89f6f95fe3cd635b3be54475826e4525e81..01e1fd4d7faec52ff947d6119870b62dd373ec99 100644 (file)
@@ -1,5 +1,8 @@
 2009-11-09  Zoltan Varga  <vargaz@gmail.com>
 
+       * mini-arm.c (mono_arch_allocate_vars): Fix the previous change by passing
+       &align to mini_type_stack_size_full ().
+
        * mini-arm.c (mono_arch_emit_prolog): Implement support for varargs.
 
        * mini-ops.h: Add documentation for the OP_ARGLIST opcode.
index 40949a3355fc5f1f55f94086b4c614d1eb0c68dd..b93450d4eb9d5879d5b442e5e23bb28b4480721d 100644 (file)
@@ -1055,6 +1055,7 @@ mono_arch_allocate_vars (MonoCompile *cfg)
        int i, offset, size, align, curinst;
        int frame_reg = ARMREG_FP;
        CallInfo *cinfo;
+       guint32 ualign;
 
        sig = mono_method_signature (cfg->method);
 
@@ -1156,7 +1157,6 @@ mono_arch_allocate_vars (MonoCompile *cfg)
                /* inst->backend.is_pinvoke indicates native sized value types, this is used by the
                * pinvoke wrappers when they call functions returning structure */
                if (inst->backend.is_pinvoke && MONO_TYPE_ISSTRUCT (inst->inst_vtype) && inst->inst_vtype->type != MONO_TYPE_TYPEDBYREF) {
-                       guint32 ualign;
                        size = mono_class_native_size (mono_class_from_mono_type (inst->inst_vtype), &ualign);
                        align = ualign;
                }
@@ -1208,7 +1208,8 @@ mono_arch_allocate_vars (MonoCompile *cfg)
                if (inst->opcode != OP_REGVAR) {
                        inst->opcode = OP_REGOFFSET;
                        inst->inst_basereg = frame_reg;
-                       size = mini_type_stack_size_full (NULL, sig->params [i], NULL, sig->pinvoke);
+                       size = mini_type_stack_size_full (NULL, sig->params [i], &ualign, sig->pinvoke);
+                       align = ualign;
                        /* FIXME: if a structure is misaligned, our memcpy doesn't work,
                         * since it loads/stores misaligned words, which don't do the right thing.
                         */