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

Reply via email to