mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 10:09:16 +08:00
* 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:
@ -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. */
|
||||
|
||||
|
Reference in New Issue
Block a user