> > 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)); }