Skip to content

Instantly share code, notes, and snippets.

@rolfbjarne
Created January 6, 2016 13:11
Show Gist options
  • Save rolfbjarne/b53a25d4fe048114efb5 to your computer and use it in GitHub Desktop.
Save rolfbjarne/b53a25d4fe048114efb5 to your computer and use it in GitHub Desktop.
commit 1cbbb44782e2eef3aa5901deb3d8d9c12f046a24
Author: Rolf Bjarne Kvinge <[email protected]>
Date: Wed Jan 6 13:56:43 2016 +0100
[aot] Fix emission of external aot data by aligning tables in the file.
The table reading code depends on data being aligned, so make sure it is.
diff --git a/mono/mini/aot-compiler.c b/mono/mini/aot-compiler.c
index 3c803ae..dbf906a 100644
--- a/mono/mini/aot-compiler.c
+++ b/mono/mini/aot-compiler.c
@@ -2335,6 +2335,12 @@ emit_aot_data (MonoAotCompile *acfg, MonoAotFileTable table, const char *symbol,
acfg->table_offsets [(int)table] = acfg->datafile_offset;
fwrite (data,1, size, acfg->data_outfile);
acfg->datafile_offset += size;
+ // align the data to 8 bytes. Put zeros in the file (so that every build results in consistent output).
+ int align = 8 - size % 8;
+ acfg->datafile_offset += align;
+ guint8 align_buf [16];
+ memset (&align_buf, 0, sizeof (align_buf));
+ fwrite (align_buf, align, 1, acfg->data_outfile);
} else if (acfg->llvm) {
mono_llvm_emit_aot_data (symbol, data, size);
} else {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment