diff options
author | Mark Kettenis <kettenis@gnu.org> | 2004-02-07 14:44:50 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2004-02-07 14:44:50 +0000 |
commit | 05cbe71add4ea89679340baff1a51f3680492c1c (patch) | |
tree | 59e94dac190c3dc19dbee6987d2a6416e6f48fff /gdb/dwarf2-frame.h | |
parent | dd1abb8c9ec3fa79e36e4e14033f4309741442c1 (diff) | |
download | gdb-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.h | 52 |
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. */ |