===================================================================
@@ -277,12 +277,19 @@ expand_builtin_init_dwarf_reg_sizes (tre
{
if (save_mode == VOIDmode)
continue;
wrote_return_column = true;
}
size = GET_MODE_SIZE (save_mode);
+
+ /* Entries in the dwarf_reg_size_table must be big enough to hold an _Unwind_Word
+ even if this is bigger than reg_raw_mode. This can happen on targets where the
+ pointer size is larger than the integer size, and not a power-of-two. (Eg MSP430). */
+ if (size < GET_MODE_SIZE (targetm.unwind_word_mode ()))
+ size = GET_MODE_SIZE (targetm.unwind_word_mode ());
+
if (offset < 0)
continue;
emit_move_insn (adjust_address (mem, mode, offset),
gen_int_mode (size, mode));
}