aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2-frame.h
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-02-07 14:44:50 +0000
committerMark Kettenis <kettenis@gnu.org>2004-02-07 14:44:50 +0000
commit05cbe71add4ea89679340baff1a51f3680492c1c (patch)
tree59e94dac190c3dc19dbee6987d2a6416e6f48fff /gdb/dwarf2-frame.h
parentdd1abb8c9ec3fa79e36e4e14033f4309741442c1 (diff)
downloadgdb-05cbe71add4ea89679340baff1a51f3680492c1c.zip
gdb-05cbe71add4ea89679340baff1a51f3680492c1c.tar.gz
gdb-05cbe71add4ea89679340baff1a51f3680492c1c.tar.bz2
* dwarf2-frame.h: Update copyright.
(enum dwarf2_frame_reg_rule): New. (struct dwarf2_frame_state_reg): New. (dwarf2_frame_sniffer, dwarf2_frame_base_sniffer): Make extern. * dwarf2-frame.c: Update copyright. (enum dwarf2_reg_rule): Remove. (struct dwarf2_frame_state): Remove defenition of `struct dwarf2_frame_state_reg'. (read_reg): Call get_frame_arch to get the architecture instead of using CURRENT_GDBARCH. (execute_cfa_program): Prefix old `enum dwarf2_reg_rule' tags with DWARF2_FRAME_. (dwarf2_frame_init_reg): New function. (dwarf2_frame_cache): Call get_frame_arch to get the architecture instead of using CURRENT_GDBARCH. Call dwarf2_frame_init_reg to initialize the register state. Prefix old `enum dwarf2_reg_rule' tags with DWARF2_FRAME_. (dwarf2_frame_prev_register): Call get_frame_arch to get the architecture instead of using CURRENT_GDBARCH. Prefix old `enum dwarf2_reg_rule' tags with DWARF2_FRAME_.
Diffstat (limited to 'gdb/dwarf2-frame.h')
-rw-r--r--gdb/dwarf2-frame.h52
1 files changed, 49 insertions, 3 deletions
diff --git a/gdb/dwarf2-frame.h b/gdb/dwarf2-frame.h
index c9c106f..b650a84 100644
--- a/gdb/dwarf2-frame.h
+++ b/gdb/dwarf2-frame.h
@@ -1,6 +1,6 @@
/* Frame unwinder for frames with DWARF Call Frame Information.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2004 Free Software Foundation, Inc.
Contributed by Mark Kettenis.
@@ -27,15 +27,61 @@
struct objfile;
struct frame_info;
+/* Register rule. */
+
+enum dwarf2_frame_reg_rule
+{
+ /* Make certain that 0 maps onto the correct enum value; the
+ corresponding structure is being initialized using memset zero.
+ This indicates that CFI didn't provide any information at all
+ about a register, leaving how to obtain its value totally
+ unspecified. */
+ DWARF2_FRAME_REG_UNSPECIFIED = 0,
+
+ /* The term "undefined" comes from the DWARF2 CFI spec which this
+ code is moddeling; it indicates that the register's value is
+ "undefined". GCC uses the less formal term "unsaved". Its
+ definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED.
+ The failure to differentiate the two helps explain a few problems
+ with the CFI generated by GCC. */
+ DWARF2_FRAME_REG_UNDEFINED,
+ DWARF2_FRAME_REG_SAVED_OFFSET,
+ DWARF2_FRAME_REG_SAVED_REG,
+ DWARF2_FRAME_REG_SAVED_EXP,
+ DWARF2_FRAME_REG_SAME_VALUE,
+
+ /* These aren't defined by the DWARF2 CFI specification, but are
+ used internally by GDB. */
+ DWARF2_FRAME_REG_RA, /* Return Address. */
+ DWARF2_FRAME_REG_CFA /* Call Frame Address. */
+};
+
+/* Register state. */
+
+struct dwarf2_frame_state_reg
+{
+ /* Each register save state can be described in terms of a CFA slot,
+ another register, or a location expression. */
+ union {
+ LONGEST offset;
+ ULONGEST reg;
+ unsigned char *exp;
+ } loc;
+ ULONGEST exp_len;
+ enum dwarf2_frame_reg_rule how;
+};
+
/* Return the frame unwind methods for the function that contains PC,
or NULL if it can't be handled by DWARF CFI frame unwinder. */
-const struct frame_unwind *dwarf2_frame_sniffer (struct frame_info *next_frame);
+extern const struct frame_unwind *
+ dwarf2_frame_sniffer (struct frame_info *next_frame);
/* Return the frame base methods for the function that contains PC, or
NULL if it can't be handled by the DWARF CFI frame unwinder. */
-const struct frame_base *dwarf2_frame_base_sniffer (struct frame_info *next_frame);
+extern const struct frame_base *
+ dwarf2_frame_base_sniffer (struct frame_info *next_frame);
/* Register the DWARF CFI for OBJFILE. */