2009-01-26 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 26 Jan 2009 20:32:34 +0000 (20:32 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 26 Jan 2009 20:32:34 +0000 (20:32 -0000)
* marshal.c (mono_marshal_load_type_info): Fill out info->min_align.
(mono_class_native_size): Use klass->marshal_info->min_align instead of
klass->min_align, since klass->min_align contains the managed alignment,
while the native alignment can be different, like for longs on x86.
Fixes #469135.

* class-internals.h (MonoMarshalType): Add a min_align field.

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

mono/metadata/ChangeLog
mono/metadata/class-internals.h
mono/metadata/marshal.c

index c008215aa99c3ff2d4c77043cafd11b25efec166..6f59787974c4cad023b42bb361792006aae8b664 100644 (file)
@@ -1,3 +1,13 @@
+2009-01-26  Zoltan Varga  <vargaz@gmail.com>
+
+       * marshal.c (mono_marshal_load_type_info): Fill out info->min_align.
+       (mono_class_native_size): Use klass->marshal_info->min_align instead of
+       klass->min_align, since klass->min_align contains the managed alignment,
+       while the native alignment can be different, like for longs on x86.
+       Fixes #469135.
+
+       * class-internals.h (MonoMarshalType): Add a min_align field.
+
 2009-01-26 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * assembly.c (mono_assembly_try_decode_skip_verification): Add a hack to check
index c4aa109b4a439a224ef88602a5496aa4d7bd6f2d..cd927318b3f8ecf5a85ea810867d54e6cdee8e93 100644 (file)
@@ -150,7 +150,7 @@ typedef struct {
 } MonoMarshalField;
 
 typedef struct {
-       guint32 native_size;
+       guint32 native_size, min_align;
        guint32 num_fields;
        MonoMethod *ptr_to_str;
        MonoMethod *str_to_ptr;
index d8230769a333ce0578b7a20f175bee08f4803955..c1cfe499b0191cbef017ccbb571dc554cd36d4a3 100644 (file)
@@ -11506,6 +11506,8 @@ mono_marshal_load_type_info (MonoClass* klass)
                info->native_size &= ~(min_align - 1);
        }
 
+       info->min_align = min_align;
+
        /* Update the class's blittable info, if the layouts don't match */
        if (info->native_size != mono_class_value_size (klass, NULL))
                klass->blittable = FALSE;
@@ -11550,7 +11552,7 @@ mono_class_native_size (MonoClass *klass, guint32 *align)
        }
 
        if (align)
-               *align = klass->min_align;
+               *align = klass->marshal_info->min_align;
 
        return klass->marshal_info->native_size;
 }