Commit e85bff0b authored by Paul Eggert's avatar Paul Eggert

Fix drain_reloc_list alignment bug

* src/pdumper.c (dump_charset): Use alignof (struct charset),
not alignof (int), since struct charset might be more strictly
aligned than int.  I think this is just a minor performance
issue, but we might as well use the correct alignment.
(drain_reloc_list): Use an alignment instead of a size for the
output alignment.  This prevents undefined behavior when
alignof (struct emacs_reloc) == 8 and sizeof (dump_off) == 4
when building on x86-64 with gcc -fsanitize=undefined.
parent 4a5ed6b0
Pipeline #1393 failed with stage
in 52 minutes and 32 seconds
......@@ -3167,7 +3167,7 @@ dump_charset (struct dump_context *ctx, int cs_i)
#if CHECK_STRUCTS && !defined (HASH_charset_317C49E291)
# error "charset changed. See CHECK_STRUCTS comment."
dump_align_output (ctx, alignof (int));
dump_align_output (ctx, alignof (struct charset));
const struct charset *cs = charset_table + cs_i;
struct charset out;
dump_object_start (ctx, &out, sizeof (out));
......@@ -3816,7 +3816,8 @@ drain_reloc_list (struct dump_context *ctx,
Lisp_Object relocs = Fsort (Fnreverse (*reloc_list),
*reloc_list = Qnil;
dump_align_output (ctx, sizeof (dump_off));
dump_align_output (ctx, max (alignof (struct dump_reloc),
alignof (struct emacs_reloc)));
struct dump_table_locator locator;
memset (&locator, 0, sizeof (locator));
locator.offset = ctx->offset;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment