aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-07-05 10:10:29 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-07-05 10:10:29 -0700
commitc2b40eba3ab707ce122464620bbdabf8b9044452 (patch)
tree7e0e70dc0bd43809617a7f54edac6ce2dc24cf2e
parent7d3c6cd8f4ea00b984ce11cc8aad3282da1b6408 (diff)
downloadgcc-c2b40eba3ab707ce122464620bbdabf8b9044452.zip
gcc-c2b40eba3ab707ce122464620bbdabf8b9044452.tar.gz
gcc-c2b40eba3ab707ce122464620bbdabf8b9044452.tar.bz2
ia64: Remove TARGET_DWARF_HANDLE_FRAME_UNSPEC hook.
Use an empty REG_FRAME_RELATED_EXPR instead. * config/ia64/ia64.c (ia64_dwarf_handle_frame_unspec): Remove. (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Remove. (ia64_expand_epilogue): Emit an empty FRAME_RELATED_EXPR for the alloc insn. From-SVN: r175875
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/ia64/ia64.c23
2 files changed, 14 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 079b95a..4ab0abf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-07-05 Richard Henderson <rth@redhat.com>
+ * config/ia64/ia64.c (ia64_dwarf_handle_frame_unspec): Remove.
+ (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Remove.
+ (ia64_expand_epilogue): Emit an empty FRAME_RELATED_EXPR for
+ the alloc insn.
+
* config/ia64/ia64.c (ia64_emit_deleted_label_after_insn): Remove.
(IA64_CHANGE_CFA_IN_EPILOGUE): Remove.
(process_epilogue): Don't call dwarf2out_def_cfa.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index bdabe82..2ebb225 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -319,7 +319,6 @@ static enum machine_mode ia64_promote_function_mode (const_tree,
static void ia64_trampoline_init (rtx, tree, rtx);
static void ia64_override_options_after_change (void);
-static void ia64_dwarf_handle_frame_unspec (const char *, rtx, int);
static tree ia64_builtin_decl (unsigned, bool);
static reg_class_t ia64_preferred_reload_class (rtx, reg_class_t);
@@ -551,8 +550,6 @@ static const struct attribute_spec ia64_attribute_table[] =
#undef TARGET_GIMPLIFY_VA_ARG_EXPR
#define TARGET_GIMPLIFY_VA_ARG_EXPR ia64_gimplify_va_arg
-#undef TARGET_DWARF_HANDLE_FRAME_UNSPEC
-#define TARGET_DWARF_HANDLE_FRAME_UNSPEC ia64_dwarf_handle_frame_unspec
#undef TARGET_ASM_UNWIND_EMIT
#define TARGET_ASM_UNWIND_EMIT ia64_asm_unwind_emit
#undef TARGET_ASM_EMIT_EXCEPT_PERSONALITY
@@ -3793,10 +3790,19 @@ ia64_expand_epilogue (int sibcall_p)
if (current_frame_info.n_input_regs != 0)
{
rtx n_inputs = GEN_INT (current_frame_info.n_input_regs);
+
insn = emit_insn (gen_alloc (gen_rtx_REG (DImode, fp),
const0_rtx, const0_rtx,
n_inputs, const0_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
+
+ /* ??? We need to mark the alloc as frame-related so that it gets
+ passed into ia64_asm_unwind_emit for ia64-specific unwinding.
+ But there's nothing dwarf2 related to be done wrt the register
+ windows. If we do nothing, dwarf2out will abort on the UNSPEC;
+ the empty parallel means dwarf2out will not see anything. */
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (0)));
}
}
}
@@ -9620,17 +9626,6 @@ static bool need_copy_state;
# define MAX_ARTIFICIAL_LABEL_BYTES 30
#endif
-/* All we need to do here is avoid a crash in the generic dwarf2
- processing. The real CFA definition is set up above. */
-
-static void
-ia64_dwarf_handle_frame_unspec (const char * ARG_UNUSED (label),
- rtx ARG_UNUSED (pattern),
- int index)
-{
- gcc_assert (index == UNSPECV_ALLOC);
-}
-
/* The function emits unwind directives for the start of an epilogue. */
static void