Skip to content

Commit

Permalink
fix bug for inlined structures in strutures in nativecall code
Browse files Browse the repository at this point in the history
An inlined structure loaded from another precompiled compilation unit
errornously reported a wrong alignment, which caused a size increase
and probably a field misalignment in the outer structure.
This was caused by not serializing and deserializing the alignment
information to disk when precompiling a compilation unit.

This patch bumps the serialization format version to 17.
  • Loading branch information
FROGGS committed Feb 15, 2016
1 parent 3a38749 commit 38d9a8b
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/6model/reprs/CPPStruct.c
Expand Up @@ -696,6 +696,7 @@ static void serialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerializ
MVMint32 i, num_classes, num_slots;

MVM_serialization_write_varint(tc, writer, repr_data->struct_size);
MVM_serialization_write_varint(tc, writer, repr_data->struct_align);
MVM_serialization_write_varint(tc, writer, repr_data->num_attributes);
MVM_serialization_write_varint(tc, writer, repr_data->num_child_objs);
for(i = 0; i < repr_data->num_attributes; i++){
Expand Down Expand Up @@ -735,6 +736,9 @@ static void deserialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerial
MVMint32 i, num_classes, num_slots;

repr_data->struct_size = MVM_serialization_read_varint(tc, reader);
if (reader->root.version >= 17) {
repr_data->struct_align = MVM_serialization_read_varint(tc, reader);
}
repr_data->num_attributes = MVM_serialization_read_varint(tc, reader);
repr_data->num_child_objs = MVM_serialization_read_varint(tc, reader);

Expand Down
4 changes: 4 additions & 0 deletions src/6model/reprs/CStruct.c
Expand Up @@ -696,6 +696,7 @@ static void serialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerializ
MVMint32 i, num_classes, num_slots;

MVM_serialization_write_varint(tc, writer, repr_data->struct_size);
MVM_serialization_write_varint(tc, writer, repr_data->struct_align);
MVM_serialization_write_varint(tc, writer, repr_data->num_attributes);
MVM_serialization_write_varint(tc, writer, repr_data->num_child_objs);
for(i = 0; i < repr_data->num_attributes; i++){
Expand Down Expand Up @@ -735,6 +736,9 @@ static void deserialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerial
MVMint32 i, num_classes, num_slots;

repr_data->struct_size = MVM_serialization_read_varint(tc, reader);
if (reader->root.version >= 17) {
repr_data->struct_align = MVM_serialization_read_varint(tc, reader);
}
repr_data->num_attributes = MVM_serialization_read_varint(tc, reader);
repr_data->num_child_objs = MVM_serialization_read_varint(tc, reader);

Expand Down
4 changes: 4 additions & 0 deletions src/6model/reprs/CUnion.c
Expand Up @@ -683,6 +683,7 @@ static void serialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerializ
MVMint32 i, num_classes, num_slots;

MVM_serialization_write_varint(tc, writer, repr_data->struct_size);
MVM_serialization_write_varint(tc, writer, repr_data->struct_align);
MVM_serialization_write_varint(tc, writer, repr_data->num_attributes);
MVM_serialization_write_varint(tc, writer, repr_data->num_child_objs);
for(i = 0; i < repr_data->num_attributes; i++){
Expand Down Expand Up @@ -722,6 +723,9 @@ static void deserialize_repr_data(MVMThreadContext *tc, MVMSTable *st, MVMSerial
MVMint32 i, num_classes, num_slots;

repr_data->struct_size = MVM_serialization_read_varint(tc, reader);
if (reader->root.version >= 17) {
repr_data->struct_align = MVM_serialization_read_varint(tc, reader);
}
repr_data->num_attributes = MVM_serialization_read_varint(tc, reader);
repr_data->num_child_objs = MVM_serialization_read_varint(tc, reader);

Expand Down
2 changes: 1 addition & 1 deletion src/6model/serialization.c
Expand Up @@ -10,7 +10,7 @@

/* Version of the serialization format that we are currently at and lowest
* version we support. */
#define CURRENT_VERSION 16
#define CURRENT_VERSION 17
#define MIN_VERSION 16

/* Various sizes (in bytes). */
Expand Down

0 comments on commit 38d9a8b

Please sign in to comment.