> > Note that I had to make a few changes (fixes?) in the MI portions of
> > gcc to avoid problems I encountered, I don't know if these changes are
> > "correct" or if there are better ways to avoid those cases. Those
>
> In any case, they should best be posted in separate messages, each one
> with its own rationale.
Here's the second of those...
Index: dwarf2cfi.c
===================================================================
--- dwarf2cfi.c (revision 198591)
+++ dwarf2cfi.c (working copy)
@@ -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));
}