diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-06-09 00:39:32 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-06-09 00:39:32 +0200 |
commit | 8845deabba0fa4aec0200e4ed310bf6b489ed1fc (patch) | |
tree | 7ac5e85a40154bc7de7adf18a3e5ce6751d8c9c9 /gcc | |
parent | d7f26adfaf11f7a0158a649980840e29c0e4d853 (diff) | |
download | gcc-8845deabba0fa4aec0200e4ed310bf6b489ed1fc.zip gcc-8845deabba0fa4aec0200e4ed310bf6b489ed1fc.tar.gz gcc-8845deabba0fa4aec0200e4ed310bf6b489ed1fc.tar.bz2 |
dwarf2out.c (emit_cfa_remember): New variable.
* dwarf2out.c (emit_cfa_remember): New variable.
(add_fde_cfi): If emit_cfa_remember, recurse to add
DW_CFA_remember_state first.
(dwarf2out_begin_epilogue): Don't add_fde_cfi DW_CFA_remember_state,
instead just set emit_cfa_remember.
From-SVN: r148298
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 24 |
2 files changed, 26 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 940e757..8c3c6f3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2009-06-08 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (emit_cfa_remember): New variable. + (add_fde_cfi): If emit_cfa_remember, recurse to add + DW_CFA_remember_state first. + (dwarf2out_begin_epilogue): Don't add_fde_cfi DW_CFA_remember_state, + instead just set emit_cfa_remember. + 2009-06-08 Jan Hubicka <jh@suse.cz> PR debug/40126 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index dc82799..2483a7b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -717,13 +717,29 @@ dwarf2out_cfi_label (bool force) return label; } +/* True if remember_state should be emitted before following CFI directive. */ +static bool emit_cfa_remember; + /* Add CFI to the current fde at the PC value indicated by LABEL if specified, or to the CIE if LABEL is NULL. */ static void add_fde_cfi (const char *label, dw_cfi_ref cfi) { - dw_cfi_ref *list_head = &cie_cfi_head; + dw_cfi_ref *list_head; + + if (emit_cfa_remember) + { + dw_cfi_ref cfi_remember; + + /* Emit the state save. */ + emit_cfa_remember = false; + cfi_remember = new_cfi (); + cfi_remember->dw_cfi_opc = DW_CFA_remember_state; + add_fde_cfi (label, cfi_remember); + } + + list_head = &cie_cfi_head; if (dwarf2out_do_cfi_asm ()) { @@ -2709,7 +2725,6 @@ dwarf2out_begin_epilogue (rtx insn) { bool saw_frp = false; rtx i; - dw_cfi_ref cfi; /* Scan forward to the return insn, noticing if there are possible frame related insns. */ @@ -2755,10 +2770,7 @@ dwarf2out_begin_epilogue (rtx insn) } emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i); - /* Emit the state save. */ - cfi = new_cfi (); - cfi->dw_cfi_opc = DW_CFA_remember_state; - add_fde_cfi (dwarf2out_cfi_label (false), cfi); + emit_cfa_remember = true; /* And emulate the state save. */ gcc_assert (!cfa_remember.in_use); |