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 DWARF2_FRAME_REG_SAVED_VAL_EXP, 54 55 /* These aren't defined by the DWARF2 CFI specification, but are 56 used internally by GDB. */ 57 DWARF2_FRAME_REG_RA, /* Return Address. */ 58 DWARF2_FRAME_REG_CFA /* Call Frame Address. */ 59 }; 60 61 /* Register state. */ 62 63 struct dwarf2_frame_state_reg 64 { 65 /* Each register save state can be described in terms of a CFA slot, 66 another register, or a location expression. */ 67 union { 68 LONGEST offset; 69 ULONGEST reg; 70 unsigned char *exp; 71 } loc; 72 ULONGEST exp_len; 73 enum dwarf2_frame_reg_rule how; 74 }; 75 76 /* Set the architecture-specific register state initialization 77 function for GDBARCH to INIT_REG. */ 78 79 extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, 80 void (*init_reg) (struct gdbarch *, int, 81 struct dwarf2_frame_state_reg *)); 82 83 /* Return the frame unwind methods for the function that contains PC, 84 or NULL if it can't be handled by DWARF CFI frame unwinder. */ 85 86 extern const struct frame_unwind * 87 dwarf2_frame_sniffer (struct frame_info *next_frame); 88 89 /* Return the frame base methods for the function that contains PC, or 90 NULL if it can't be handled by the DWARF CFI frame unwinder. */ 91 92 extern const struct frame_base * 93 dwarf2_frame_base_sniffer (struct frame_info *next_frame); 94 95 /* Register the DWARF CFI for OBJFILE. */ 96 97 void dwarf2_frame_build_info (struct objfile *objfile); 98 99 #endif /* dwarf2-frame.h */ 100