diff options
author | geoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-01 04:09:07 +0000 |
---|---|---|
committer | geoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-01 04:09:07 +0000 |
commit | 60ea93bb72e070f6830453db1cfe3a39714de467 (patch) | |
tree | c06b7ba921908103e7b86d67bed62ad6003088e2 /gcc/unwind-dw2.h | |
parent | 3cd6c7c47222b1fa97bfe365853adb7ee297e86a (diff) | |
download | gcc-60ea93bb72e070f6830453db1cfe3a39714de467.tar.gz |
Index: gcc/ChangeLog
2004-06-28 Geoffrey Keating <geoffk@apple.com>
Andreas Tobler <a.tobler@schweiz.ch>
PR 15813
* dwarf2out.c (reg_save): Output DW_CFA_same_value when a
register is saved in itself.
(initial_return_save): If the return address is a register,
it's already there, don't bother to mention it in the CFI.
(struct queued_reg_save): Add field saved_reg.
(struct reg_saved_in_data): New.
(regs_saved_in_regs): New.
(num_regs_saved_in_regs): New.
(queue_reg_save): Add extra parameter to specify register saved
in register. Remove duplicate entries from queue. Add comment
for function.
(flush_queued_reg_saves): Handle registers saved in registers.
Update regs_saved_in_regs. Add comment for function.
(clobbers_queued_reg_save): Add comment for function. Allow
for regs_saved_in_regs.
(reg_saved_in): New.
(dwarf2out_frame_debug_expr): Handle saving registers in other
registers.
(dwarf2out_frame_debug): Reset regs_saved_in_regs.
* unwind-dw2.c (execute_cfa_program): Correct handling of
DW_CFA_same_value. Add FIXME comment about incorrect implementation
of DW_CFA_restore_extended.
* config/rs6000/rs6000.c (rs6000_emit_prologue): Let
dwarf2out_frame_debug_expr see instructions that save registers
in other registers or save those other registers in memory.
* unwind-dw2.c (DWARF_FRAME_REGISTERS): Move to unwind-dw2.h.
(_Unwind_FrameState): Likewise.
* unwind-dw2.h: New.
* Makefile.in (LIB2ADDEHDEP): Add unwind-dw2.h.
* config/rs6000/darwin-fallback.c: New file.
* config/rs6000/darwin.h (MD_FALLBACK_FRAME_STATE_FOR): Define.
* config/rs6000/t-darwin (LIB2FUNCS_EXTRA): Add darwin-fallback.o.
Index: gcc/testsuite/ChangeLog
2004-06-26 Geoffrey Keating <geoffk@apple.com>
Andreas Tobler <a.tobler@schweiz.ch>
* gcc.dg/cleanup-10.c: Run on all Linux platforms and powerpc-darwin.
Use SA_RESETHAND rather than SA_ONESHOT. Trap SIGBUS as well
as SIGSEGV.
* gcc.dg/cleanup-11.c: Likewise.
* gcc.dg/cleanup-8.c: Likewise.
* gcc.dg/cleanup-9.c: Likewise.
* gcc.dg/cleanup-5.c: Run on all platforms.
Index: libjava/ChangeLog
2004-06-26 Geoffrey Keating <geoffk@apple.com>
Andreas Tobler <a.tobler@schweiz.ch>
* configure.host (powerpc-*-darwin*): New case, define
can_unwind_signal.
* configure.in (*-*-darwin*): New case, point to darwin-signal.h.
* configure: Regenerate.
* include/darwin-signal.h: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83953 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2.h')
-rw-r--r-- | gcc/unwind-dw2.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/gcc/unwind-dw2.h b/gcc/unwind-dw2.h new file mode 100644 index 00000000000..77563e74414 --- /dev/null +++ b/gcc/unwind-dw2.h @@ -0,0 +1,88 @@ +/* DWARF2 frame unwind data structure. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combined + executable.) + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +/* A target can override (perhaps for backward compatibility) how + many dwarf2 columns are unwound. */ +#ifndef DWARF_FRAME_REGISTERS +#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER +#endif + +/* The result of interpreting the frame unwind info for a frame. + This is all symbolic at this point, as none of the values can + be resolved until the target pc is located. */ +typedef struct +{ + /* Each register save state can be described in terms of a CFA slot, + another register, or a location expression. */ + struct frame_state_reg_info + { + struct { + union { + _Unwind_Word reg; + _Unwind_Sword offset; + const unsigned char *exp; + } loc; + enum { + REG_UNSAVED, + REG_SAVED_OFFSET, + REG_SAVED_REG, + REG_SAVED_EXP + } how; + } reg[DWARF_FRAME_REGISTERS+1]; + + /* Used to implement DW_CFA_remember_state. */ + struct frame_state_reg_info *prev; + } regs; + + /* The CFA can be described in terms of a reg+offset or a + location expression. */ + _Unwind_Sword cfa_offset; + _Unwind_Word cfa_reg; + const unsigned char *cfa_exp; + enum { + CFA_UNSET, + CFA_REG_OFFSET, + CFA_EXP + } cfa_how; + + /* The PC described by the current frame state. */ + void *pc; + + /* The information we care about from the CIE/FDE. */ + _Unwind_Personality_Fn personality; + _Unwind_Sword data_align; + _Unwind_Word code_align; + _Unwind_Word retaddr_column; + unsigned char fde_encoding; + unsigned char lsda_encoding; + unsigned char saw_z; + void *eh_ptr; +} _Unwind_FrameState; + |