* 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_.
This commit is contained in:
Mark Kettenis
2004-02-07 14:44:50 +00:00
parent dd1abb8c9e
commit 05cbe71add
3 changed files with 142 additions and 100 deletions

View File

@ -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. */