00001 /* DWARF2 frame unwind data structure. 00002 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 00003 Free Software Foundation, Inc. 00004 00005 This file is part of GCC. 00006 00007 GCC is free software; you can redistribute it and/or modify it 00008 under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 2, or (at your option) 00010 any later version. 00011 00012 In addition to the permissions in the GNU General Public License, the 00013 Free Software Foundation gives you unlimited permission to link the 00014 compiled version of this file into combinations with other programs, 00015 and to distribute those combinations without any restriction coming 00016 from the use of this file. (The General Public License restrictions 00017 do apply in other respects; for example, they cover modification of 00018 the file, and distribution when not linked into a combined 00019 executable.) 00020 00021 GCC is distributed in the hope that it will be useful, but WITHOUT 00022 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 00023 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 00024 License for more details. 00025 00026 You should have received a copy of the GNU General Public License 00027 along with GCC; see the file COPYING. If not, write to the Free 00028 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 00029 02110-1301, USA. */ 00030 00031 /* A target can override (perhaps for backward compatibility) how 00032 many dwarf2 columns are unwound. */ 00033 #ifndef DWARF_FRAME_REGISTERS 00034 #define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER 00035 #endif 00036 00037 /* The result of interpreting the frame unwind info for a frame. 00038 This is all symbolic at this point, as none of the values can 00039 be resolved until the target pc is located. */ 00040 typedef struct 00041 { 00042 /* Each register save state can be described in terms of a CFA slot, 00043 another register, or a location expression. */ 00044 struct frame_state_reg_info 00045 { 00046 struct { 00047 union { 00048 _Unwind_Word reg; 00049 _Unwind_Sword offset; 00050 const unsigned char *exp; 00051 } loc; 00052 enum { 00053 REG_UNSAVED, 00054 REG_SAVED_OFFSET, 00055 REG_SAVED_REG, 00056 REG_SAVED_EXP, 00057 REG_SAVED_VAL_OFFSET, 00058 REG_SAVED_VAL_EXP 00059 } how; 00060 } reg[DWARF_FRAME_REGISTERS+1]; 00061 00062 /* Used to implement DW_CFA_remember_state. */ 00063 struct frame_state_reg_info *prev; 00064 } regs; 00065 00066 /* The CFA can be described in terms of a reg+offset or a 00067 location expression. */ 00068 _Unwind_Sword cfa_offset; 00069 _Unwind_Word cfa_reg; 00070 const unsigned char *cfa_exp; 00071 enum { 00072 CFA_UNSET, 00073 CFA_REG_OFFSET, 00074 CFA_EXP 00075 } cfa_how; 00076 00077 /* The PC described by the current frame state. */ 00078 void *pc; 00079 00080 /* The information we care about from the CIE/FDE. */ 00081 _Unwind_Personality_Fn personality; 00082 _Unwind_Sword data_align; 00083 _Unwind_Word code_align; 00084 _Unwind_Word retaddr_column; 00085 unsigned char fde_encoding; 00086 unsigned char lsda_encoding; 00087 unsigned char saw_z; 00088 unsigned char signal_frame; 00089 void *eh_ptr; 00090 } _Unwind_FrameState; 00091
1.5.6