+2000-10-18 Hans-Peter Nilsson <hp@axis.com>
+
+ * tm.texi (Exception Region Output): Document
+ DWARF_CIE_DATA_ALIGNMENT.
+ * dwarf2out.c (DWARF_CIE_DATA_ALIGNMENT): Wrap definition in
+ #ifndef.
+ [ENABLE_CHECKING] (reg_save): Abort if offset is not a multiple of
+ DWARF_CIE_DATA_ALIGNMENT.
+
2000-10-18 Michael Hayes <mhayes@cygnus.com>
* basic-block.h (struct loop): Delete fields pre_header_root
((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
/* Offsets recorded in opcodes are a multiple of this alignment factor. */
+#ifndef DWARF_CIE_DATA_ALIGNMENT
#ifdef STACK_GROWS_DOWNWARD
#define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
#else
#define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
#endif
+#endif /* not DWARF_CIE_DATA_ALIGNMENT */
/* A pointer to the base of a table that contains frame description
information for each routine. */
else
cfi->dw_cfi_opc = DW_CFA_offset;
+#ifdef ENABLE_CHECKING
+ {
+ /* If we get an offset that is not a multiple of
+ DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
+ definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
+ description. */
+ long check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
+
+ if (check_offset * DWARF_CIE_DATA_ALIGNMENT != offset)
+ abort ();
+ }
+#endif
offset /= DWARF_CIE_DATA_ALIGNMENT;
if (offset < 0)
{
If this macro is defined to anything, the DWARF 2 unwinder will be used
instead of inline unwinders and __unwind_function in the non-setjmp case.
+@findex DWARF_CIE_DATA_ALIGNMENT
+@item DWARF_CIE_DATA_ALIGNMENT
+This macro need only be defined if the target might save registers in the
+function prologue at an offset to the stack pointer that is not aligned to
+@code{UNITS_PER_WORD}. The definition should be the negative minimum
+alignment if @code{STACK_GROWS_DOWNWARD} is defined, and the positive
+minimum alignment otherwise. @xref{SDB and DWARF}. Only applicable if
+the target supports DWARF 2 frame unwind information.
+
@end table
@node Alignment Output