1 /* Frame unwinder for frames with DWARF Call Frame Information. 2 3 Copyright 2003, 2004 Free Software Foundation, Inc. 4 5 Contributed by Mark Kettenis. 6 7 This file is part of GDB. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 59 Temple Place - Suite 330, 22 Boston, MA 02111-1307, USA. */ 23 24 #ifndef DWARF2_FRAME_H 25 #define DWARF2_FRAME_H 1 26 27 struct gdbarch; 28 struct objfile; 29 struct frame_info; 30 31 /* Register rule. */ 32 33 enum dwarf2_frame_reg_rule 34 { 35 /* Make certain that 0 maps onto the correct enum value; the 36 corresponding structure is being initialized using memset zero. 37 This indicates that CFI didn't provide any information at all 38 about a register, leaving how to obtain its value totally 39 unspecified. */ 40 DWARF2_FRAME_REG_UNSPECIFIED = 0, 41 42 /* The term "undefined" comes from the DWARF2 CFI spec which this 43 code is moddeling; it indicates that the register's value is 44 "undefined". GCC uses the less formal term "unsaved". Its 45 definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED. 46 The failure to differentiate the two helps explain a few problems 47 with the CFI generated by GCC. */ 48 DWARF2_FRAME_REG_UNDEFINED, 49 DWARF2_FRAME_REG_SAVED_OFFSET, 50 DWARF2_FRAME_REG_SAVED_REG, 51 DWARF2_FRAME_REG_SAVED_EXP, 52 DWARF2_FRAME_REG_SAME_VALUE, 53 54 /* These aren't defined by the DWARF2 CFI specification, but are 55 used internally by GDB. */ 56 DWARF2_FRAME_REG_RA, /* Return Address. */ 57 DWARF2_FRAME_REG_CFA /* Call Frame Address. */ 58 }; 59 60 /* Register state. */ 61 62 struct dwarf2_frame_state_reg 63 { 64 /* Each register save state can be described in terms of a CFA slot, 65 another register, or a location expression. */ 66 union { 67 LONGEST offset; 68 ULONGEST reg; 69 unsigned char *exp; 70 } loc; 71 ULONGEST exp_len; 72 enum dwarf2_frame_reg_rule how; 73 }; 74 75 /* Set the architecture-specific register state initialization 76 function for GDBARCH to INIT_REG. */ 77 78 extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, 79 void (*init_reg) (struct gdbarch *, int, 80 struct dwarf2_frame_state_reg *)); 81 82 /* Return the frame unwind methods for the function that contains PC, 83 or NULL if it can't be handled by DWARF CFI frame unwinder. */ 84 85 extern const struct frame_unwind * 86 dwarf2_frame_sniffer (struct frame_info *next_frame); 87 88 /* Return the frame base methods for the function that contains PC, or 89 NULL if it can't be handled by the DWARF CFI frame unwinder. */ 90 91 extern const struct frame_base * 92 dwarf2_frame_base_sniffer (struct frame_info *next_frame); 93 94 /* Register the DWARF CFI for OBJFILE. */ 95 96 void dwarf2_frame_build_info (struct objfile *objfile); 97 98 #endif /* dwarf2-frame.h */ 99