summaryrefslogtreecommitdiffstats
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-26 19:21:16 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-26 19:21:16 +0000
commitd15ee1a58e26a69d4a56e58f6930e13e686a6c8a (patch)
treec465f270ce510064453ef668b699763e5cde22f5 /gcc/dwarf2out.c
parent99a104182e185e02aa1104076ed836fe54db3efc (diff)
downloadppe42-gcc-d15ee1a58e26a69d4a56e58f6930e13e686a6c8a.tar.gz
ppe42-gcc-d15ee1a58e26a69d4a56e58f6930e13e686a6c8a.zip
* target.h (struct gcc_target): New field 'dwarf_handle_frame_unspec'.
* target_def.h (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to 0. (TARGET_INITIALIZER): Add TARGET_DWARF_HANDLE_FRAME_UNSPEC. * dwarf2out.c (dwarf2out_frame_debug_expr): Allow REG->REG move to a fixed reg if the source is the Return Address register. Implement new Rule 15. * doc/tm.texi (Frame Layout): Document TARGET_DWARF_HANDLE_FRAME_UNSPEC. * config/sparc/sparc.c (TARGET_DWARF_HANDLE_FRAME_UNSPEC): Define to sparc_dwarf_handle_frame_unspec. (gen_save_register_window): New function. (emit_stack_pointer_increment): Rename into gen_stack_pointer_inc. (emit_stack_pointer_decrement): Rename into gen_stack_pointer_dec. (expand_prologue): Adjust calls to emit_stack_pointer_{in,de}crement. Set RTX_FRAME_RELATED_P on the appropriate insns and members of insns. (sparc_asm_function_prologue): Do not emit call frame debugging info. (emit_and_preserve): Adjust calls to emit_stack_pointer_{in,de}crement. (sparc_expand_epilogue): Likewise. (sparc_dwarf_handle_frame_unspec): New function. * config/sparc/sparc.md (save_register_window): Remove. (save_register_windowdi): Rewrite modelled on the callframe debug info. (save_register_windowsi): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91346 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index bd2650480b0..96351c4c0ba 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -1441,7 +1441,11 @@ static dw_cfa_location cfa_temp;
(set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
effects: cfa.reg = <reg1>
cfa.base_offset = -cfa_temp.offset
- cfa_temp.offset -= mode_size(mem) */
+ cfa_temp.offset -= mode_size(mem)
+
+  Rule 15:
+  (set <reg> {unspec, unspec_volatile})
+  effects: target-dependent */
static void
dwarf2out_frame_debug_expr (rtx expr, const char *label)
@@ -1505,7 +1509,10 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label)
{
/* Saving a register in a register. */
gcc_assert (call_used_regs [REGNO (dest)]
- && !fixed_regs [REGNO (dest)]);
+ && (!fixed_regs [REGNO (dest)]
+ /* For the SPARC and its register window. */
+ || DWARF_FRAME_REGNUM (REGNO (src))
+ == DWARF_FRAME_RETURN_COLUMN));
queue_reg_save (label, src, dest, 0);
}
break;
@@ -1632,6 +1639,13 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label)
case HIGH:
break;
+ /* Rule 15 */
+ case UNSPEC:
+ case UNSPEC_VOLATILE:
+ gcc_assert (targetm.dwarf_handle_frame_unspec);
+ targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
+ break;
+
default:
gcc_unreachable ();
}
OpenPOWER on IntegriCloud