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.
int i, offset, size, align, curinst;
int frame_reg = ARMREG_FP;
CallInfo *cinfo;
+ guint32 ualign;
sig = mono_method_signature (cfg->method);
/* 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;
}
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.
*/