@@ -113,6 +113,7 @@ struct _StaticDataFreeList {
113
113
StaticDataFreeList * next ;
114
114
guint32 offset ;
115
115
guint32 size ;
116
+ gint32 align ;
116
117
};
117
118
118
119
typedef struct {
@@ -4381,12 +4382,12 @@ alloc_context_static_data_helper (gpointer key, gpointer value, gpointer user)
4381
4382
}
4382
4383
4383
4384
static StaticDataFreeList *
4384
- search_slot_in_freelist (StaticDataInfo * static_data , guint32 size , guint32 align )
4385
+ search_slot_in_freelist (StaticDataInfo * static_data , guint32 size , gint32 align )
4385
4386
{
4386
4387
StaticDataFreeList * prev = NULL ;
4387
4388
StaticDataFreeList * tmp = static_data -> freelist ;
4388
4389
while (tmp ) {
4389
- if (tmp -> size == size ) {
4390
+ if (tmp -> size == size && tmp -> align == align ) {
4390
4391
if (prev )
4391
4392
prev -> next = tmp -> next ;
4392
4393
else
@@ -4544,7 +4545,7 @@ free_context_static_data_helper (gpointer key, gpointer value, gpointer user)
4544
4545
}
4545
4546
4546
4547
static void
4547
- do_free_special_slot (guint32 offset , guint32 size )
4548
+ do_free_special_slot (guint32 offset , guint32 size , gint32 align )
4548
4549
{
4549
4550
guint32 static_type = ACCESS_SPECIAL_STATIC_OFFSET (offset , type );
4550
4551
MonoBitSet * * sets ;
@@ -4577,6 +4578,7 @@ do_free_special_slot (guint32 offset, guint32 size)
4577
4578
4578
4579
item -> offset = offset ;
4579
4580
item -> size = size ;
4581
+ item -> align = align ;
4580
4582
4581
4583
item -> next = info -> freelist ;
4582
4584
info -> freelist = item ;
@@ -4591,7 +4593,7 @@ do_free_special (gpointer key, gpointer value, gpointer data)
4591
4593
gint32 align ;
4592
4594
guint32 size ;
4593
4595
size = mono_type_size (field -> type , & align );
4594
- do_free_special_slot (offset , size );
4596
+ do_free_special_slot (offset , size , align );
4595
4597
}
4596
4598
4597
4599
void
0 commit comments