xref: /dflybsd-src/contrib/gcc-4.7/libgcc/unwind-dw2.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* DWARF2 frame unwind data structure.
2*e4b17023SJohn Marino    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2009
3*e4b17023SJohn Marino    Free Software Foundation, Inc.
4*e4b17023SJohn Marino 
5*e4b17023SJohn Marino    This file is part of GCC.
6*e4b17023SJohn Marino 
7*e4b17023SJohn Marino    GCC is free software; you can redistribute it and/or modify it
8*e4b17023SJohn Marino    under the terms of the GNU General Public License as published by
9*e4b17023SJohn Marino    the Free Software Foundation; either version 3, or (at your option)
10*e4b17023SJohn Marino    any later version.
11*e4b17023SJohn Marino 
12*e4b17023SJohn Marino    GCC is distributed in the hope that it will be useful, but WITHOUT
13*e4b17023SJohn Marino    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14*e4b17023SJohn Marino    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15*e4b17023SJohn Marino    License for more details.
16*e4b17023SJohn Marino 
17*e4b17023SJohn Marino    Under Section 7 of GPL version 3, you are granted additional
18*e4b17023SJohn Marino    permissions described in the GCC Runtime Library Exception, version
19*e4b17023SJohn Marino    3.1, as published by the Free Software Foundation.
20*e4b17023SJohn Marino 
21*e4b17023SJohn Marino    You should have received a copy of the GNU General Public License and
22*e4b17023SJohn Marino    a copy of the GCC Runtime Library Exception along with this program;
23*e4b17023SJohn Marino    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24*e4b17023SJohn Marino    <http://www.gnu.org/licenses/>.  */
25*e4b17023SJohn Marino 
26*e4b17023SJohn Marino /* A target can override (perhaps for backward compatibility) how
27*e4b17023SJohn Marino    many dwarf2 columns are unwound.  */
28*e4b17023SJohn Marino #ifndef DWARF_FRAME_REGISTERS
29*e4b17023SJohn Marino #define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
30*e4b17023SJohn Marino #endif
31*e4b17023SJohn Marino 
32*e4b17023SJohn Marino /* The result of interpreting the frame unwind info for a frame.
33*e4b17023SJohn Marino    This is all symbolic at this point, as none of the values can
34*e4b17023SJohn Marino    be resolved until the target pc is located.  */
35*e4b17023SJohn Marino typedef struct
36*e4b17023SJohn Marino {
37*e4b17023SJohn Marino   /* Each register save state can be described in terms of a CFA slot,
38*e4b17023SJohn Marino      another register, or a location expression.  */
39*e4b17023SJohn Marino   struct frame_state_reg_info
40*e4b17023SJohn Marino   {
41*e4b17023SJohn Marino     struct {
42*e4b17023SJohn Marino       union {
43*e4b17023SJohn Marino 	_Unwind_Word reg;
44*e4b17023SJohn Marino 	_Unwind_Sword offset;
45*e4b17023SJohn Marino 	const unsigned char *exp;
46*e4b17023SJohn Marino       } loc;
47*e4b17023SJohn Marino       enum {
48*e4b17023SJohn Marino 	REG_UNSAVED,
49*e4b17023SJohn Marino 	REG_SAVED_OFFSET,
50*e4b17023SJohn Marino 	REG_SAVED_REG,
51*e4b17023SJohn Marino 	REG_SAVED_EXP,
52*e4b17023SJohn Marino 	REG_SAVED_VAL_OFFSET,
53*e4b17023SJohn Marino 	REG_SAVED_VAL_EXP,
54*e4b17023SJohn Marino 	REG_UNDEFINED
55*e4b17023SJohn Marino       } how;
56*e4b17023SJohn Marino     } reg[DWARF_FRAME_REGISTERS+1];
57*e4b17023SJohn Marino 
58*e4b17023SJohn Marino     /* Used to implement DW_CFA_remember_state.  */
59*e4b17023SJohn Marino     struct frame_state_reg_info *prev;
60*e4b17023SJohn Marino 
61*e4b17023SJohn Marino     /* The CFA can be described in terms of a reg+offset or a
62*e4b17023SJohn Marino        location expression.  */
63*e4b17023SJohn Marino     _Unwind_Sword cfa_offset;
64*e4b17023SJohn Marino     _Unwind_Word cfa_reg;
65*e4b17023SJohn Marino     const unsigned char *cfa_exp;
66*e4b17023SJohn Marino     enum {
67*e4b17023SJohn Marino       CFA_UNSET,
68*e4b17023SJohn Marino       CFA_REG_OFFSET,
69*e4b17023SJohn Marino       CFA_EXP
70*e4b17023SJohn Marino     } cfa_how;
71*e4b17023SJohn Marino   } regs;
72*e4b17023SJohn Marino 
73*e4b17023SJohn Marino   /* The PC described by the current frame state.  */
74*e4b17023SJohn Marino   void *pc;
75*e4b17023SJohn Marino 
76*e4b17023SJohn Marino   /* The information we care about from the CIE/FDE.  */
77*e4b17023SJohn Marino   _Unwind_Personality_Fn personality;
78*e4b17023SJohn Marino   _Unwind_Sword data_align;
79*e4b17023SJohn Marino   _Unwind_Word code_align;
80*e4b17023SJohn Marino   _Unwind_Word retaddr_column;
81*e4b17023SJohn Marino   unsigned char fde_encoding;
82*e4b17023SJohn Marino   unsigned char lsda_encoding;
83*e4b17023SJohn Marino   unsigned char saw_z;
84*e4b17023SJohn Marino   unsigned char signal_frame;
85*e4b17023SJohn Marino   void *eh_ptr;
86*e4b17023SJohn Marino } _Unwind_FrameState;
87*e4b17023SJohn Marino 
88