From 220d204bf8991b718aa3e35e74c2965e1811a9a2 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 23 Mar 2000 00:29:55 +0000 Subject: Implement dwarf2 exception handling for the ARM. * config/arm/arm.h (INCOMING_RETURN_ADDR_RTX): Define. (DWARF_FRAME_RETURN_COLUMN): Define. * config/arm/arm.c (emit_multi_reg_push): Return rtx. Attach REG_FRAME_RELATED_EXPR note. (emit_sfm): Likewise. (arm_expand_prologue): Set RTX_FRAME_RELATED_P on everything. * dwarf2out.c (reg_save): Handle saving a register to itself. (dwarf2out_frame_debug_expr): Handle an intermediate cfa reg. * except.c (eh_regs): Don't use the static chain reg if it's callee-saved. * frame.h (frame_state): Add cfa_saved field. * frame.c (execute_cfa_insn): Set it. * libgcc2.c (throw_helper): Don't adjust sp if it's restored in the epilogue. * function.c (ARG_POINTER_CFA_OFFSET): Default to FIRST_PARM_OFFSET. Now takes a parm. (instantiate_virtual_regs): Adjust. * tm.texi: Adjust. * config/m68k/m68k.h (ARG_POINTER_CFA_OFFSET): Don't define. * config/ns32k/ns32k.h (ARG_POINTER_CFA_OFFSET): Don't define. * config/sparc/sparc.h (ARG_POINTER_CFA_OFFSET): Take a parm. * dwarf2out.c (reg_number): Refer to FIRST_PSEUDO_REGISTER. (initial_return_save): Use DWARF_FRAME_REGNUM, not reg_number. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32696 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/frame.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/frame.c') diff --git a/gcc/frame.c b/gcc/frame.c index 79ba78ac149..688355a970d 100644 --- a/gcc/frame.c +++ b/gcc/frame.c @@ -697,6 +697,8 @@ execute_cfa_insn (void *p, struct frame_state_internal *state, offset *= info->data_align; state->s.saved[reg] = REG_SAVED_OFFSET; state->s.reg_or_offset[reg] = offset; + if (reg == state->s.cfa_reg) + state->s.cfa_saved = 1; } else if (insn & DW_CFA_restore) { @@ -728,6 +730,8 @@ execute_cfa_insn (void *p, struct frame_state_internal *state, offset *= info->data_align; state->s.saved[reg] = REG_SAVED_OFFSET; state->s.reg_or_offset[reg] = offset; + if (reg == state->s.cfa_reg) + state->s.cfa_saved = 1; break; case DW_CFA_restore_extended: p = decode_uleb128 (p, ®); -- cgit v1.2.3