2004-08-01 Andrew Cagney <cagney@gnu.org>
* frame.h (frame_save_as_regcache): Declare. * frame.c (frame_save_as_regcache): New function. (do_frame_read_register): Replace do_frame_unwind_register. (frame_pop): Use frame_save_as_regcache. * dummy-frame.c (generic_push_dummy_frame): Use frame_save_as_regcache.
This commit is contained in:
parent
8d394f983f
commit
a81dcb0537
4 changed files with 27 additions and 6 deletions
|
@ -1,3 +1,12 @@
|
|||
2004-08-01 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
* frame.h (frame_save_as_regcache): Declare.
|
||||
* frame.c (frame_save_as_regcache): New function.
|
||||
(do_frame_read_register): Replace do_frame_unwind_register.
|
||||
(frame_pop): Use frame_save_as_regcache.
|
||||
* dummy-frame.c (generic_push_dummy_frame): Use
|
||||
frame_save_as_regcache.
|
||||
|
||||
2004-08-01 Joel Brobecker <brobecker@gnat.com>
|
||||
|
||||
* dwarf2read.c (dwarf_decode_lines): Do not consider the current
|
||||
|
|
|
@ -161,12 +161,11 @@ generic_push_dummy_frame (void)
|
|||
dummy_frame = dummy_frame->next;
|
||||
|
||||
dummy_frame = xmalloc (sizeof (struct dummy_frame));
|
||||
dummy_frame->regcache = regcache_xmalloc (current_gdbarch);
|
||||
dummy_frame->regcache = frame_save_as_regcache (get_current_frame ());
|
||||
|
||||
dummy_frame->pc = read_pc ();
|
||||
dummy_frame->top = 0;
|
||||
dummy_frame->id = get_frame_id (get_current_frame ());
|
||||
regcache_cpy (dummy_frame->regcache, current_regcache);
|
||||
dummy_frame->next = dummy_frame_stack;
|
||||
dummy_frame_stack = dummy_frame;
|
||||
}
|
||||
|
|
18
gdb/frame.c
18
gdb/frame.c
|
@ -456,12 +456,22 @@ get_frame_func (struct frame_info *fi)
|
|||
}
|
||||
|
||||
static int
|
||||
do_frame_unwind_register (void *src, int regnum, void *buf)
|
||||
do_frame_register_read (void *src, int regnum, void *buf)
|
||||
{
|
||||
frame_unwind_register (src, regnum, buf);
|
||||
frame_register_read (src, regnum, buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct regcache *
|
||||
frame_save_as_regcache (struct frame_info *this_frame)
|
||||
{
|
||||
struct regcache *regcache = regcache_xmalloc (current_gdbarch);
|
||||
struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
|
||||
regcache_save (regcache, do_frame_register_read, this_frame);
|
||||
discard_cleanups (cleanups);
|
||||
return regcache;
|
||||
}
|
||||
|
||||
void
|
||||
frame_pop (struct frame_info *this_frame)
|
||||
{
|
||||
|
@ -469,9 +479,9 @@ frame_pop (struct frame_info *this_frame)
|
|||
Save them in a scratch buffer so that there isn't a race between
|
||||
trying to extract the old values from the current_regcache while
|
||||
at the same time writing new values into that same cache. */
|
||||
struct regcache *scratch = regcache_xmalloc (current_gdbarch);
|
||||
struct regcache *scratch
|
||||
= frame_save_as_regcache (get_prev_frame_1 (this_frame));
|
||||
struct cleanup *cleanups = make_cleanup_regcache_xfree (scratch);
|
||||
regcache_save (scratch, do_frame_unwind_register, this_frame);
|
||||
|
||||
/* FIXME: cagney/2003-03-16: It should be possible to tell the
|
||||
target's register cache that it is about to be hit with a burst
|
||||
|
|
|
@ -518,6 +518,9 @@ extern void *frame_obstack_zalloc (unsigned long size);
|
|||
#define FRAME_OBSTACK_ZALLOC(TYPE) ((TYPE *) frame_obstack_zalloc (sizeof (TYPE)))
|
||||
#define FRAME_OBSTACK_CALLOC(NUMBER,TYPE) ((TYPE *) frame_obstack_zalloc ((NUMBER) * sizeof (TYPE)))
|
||||
|
||||
/* Create a regcache, and copy the frame's registers into it. */
|
||||
struct regcache *frame_save_as_regcache (struct frame_info *this_frame);
|
||||
|
||||
extern void generic_save_dummy_frame_tos (CORE_ADDR sp);
|
||||
|
||||
extern struct block *get_frame_block (struct frame_info *,
|
||||
|
|
Loading…
Reference in a new issue