mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-16 12:24:19 +08:00
2002-11-23 Andrew Cagney <ac131313@redhat.com>
* blockframe.c (find_frame_addr_in_frame_chain): Move function from here ... * varobj.c (find_frame_addr_in_frame_chain): ... to here. (varobj_create): Note that frame ID should be used. * frame.h (find_frame_addr_in_frame_chain): Delete declaration.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2002-11-23 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
|
* blockframe.c (find_frame_addr_in_frame_chain): Move function
|
||||||
|
from here ...
|
||||||
|
* varobj.c (find_frame_addr_in_frame_chain): ... to here.
|
||||||
|
(varobj_create): Note that frame ID should be used.
|
||||||
|
* frame.h (find_frame_addr_in_frame_chain): Delete declaration.
|
||||||
|
|
||||||
2002-11-23 Andrew Cagney <ac131313@redhat.com>
|
2002-11-23 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
* breakpoint.c: Include "gdb_assert.h".
|
* breakpoint.c: Include "gdb_assert.h".
|
||||||
|
@ -643,27 +643,6 @@ block_innermost_frame (struct block *block)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the full FRAME which corresponds to the given CORE_ADDR
|
|
||||||
or NULL if no FRAME on the chain corresponds to CORE_ADDR. */
|
|
||||||
|
|
||||||
struct frame_info *
|
|
||||||
find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
|
|
||||||
{
|
|
||||||
struct frame_info *frame = NULL;
|
|
||||||
|
|
||||||
if (frame_addr == (CORE_ADDR) 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
frame = get_prev_frame (frame);
|
|
||||||
if (frame == NULL)
|
|
||||||
return NULL;
|
|
||||||
if (FRAME_FP (frame) == frame_addr)
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK
|
/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK
|
||||||
below is for infrun.c, which may give the macro a pc without that
|
below is for infrun.c, which may give the macro a pc without that
|
||||||
subtracted out. */
|
subtracted out. */
|
||||||
|
@ -412,8 +412,6 @@ extern void show_frame_info (struct frame_info *, int, int, int);
|
|||||||
|
|
||||||
extern struct frame_info *block_innermost_frame (struct block *);
|
extern struct frame_info *block_innermost_frame (struct block *);
|
||||||
|
|
||||||
extern struct frame_info *find_frame_addr_in_frame_chain (CORE_ADDR);
|
|
||||||
|
|
||||||
/* NOTE: cagney/2002-09-13: There is no need for this function.
|
/* NOTE: cagney/2002-09-13: There is no need for this function.
|
||||||
Instead either of frame_unwind_signed_register() or
|
Instead either of frame_unwind_signed_register() or
|
||||||
frame_unwind_unsigned_register() can be used. */
|
frame_unwind_unsigned_register() can be used. */
|
||||||
|
27
gdb/varobj.c
27
gdb/varobj.c
@ -396,6 +396,27 @@ static struct vlist **varobj_table;
|
|||||||
|
|
||||||
/* Creates a varobj (not its children) */
|
/* Creates a varobj (not its children) */
|
||||||
|
|
||||||
|
/* Return the full FRAME which corresponds to the given CORE_ADDR
|
||||||
|
or NULL if no FRAME on the chain corresponds to CORE_ADDR. */
|
||||||
|
|
||||||
|
static struct frame_info *
|
||||||
|
find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
|
||||||
|
{
|
||||||
|
struct frame_info *frame = NULL;
|
||||||
|
|
||||||
|
if (frame_addr == (CORE_ADDR) 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
frame = get_prev_frame (frame);
|
||||||
|
if (frame == NULL)
|
||||||
|
return NULL;
|
||||||
|
if (FRAME_FP (frame) == frame_addr)
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct varobj *
|
struct varobj *
|
||||||
varobj_create (char *objname,
|
varobj_create (char *objname,
|
||||||
char *expression, CORE_ADDR frame, enum varobj_type type)
|
char *expression, CORE_ADDR frame, enum varobj_type type)
|
||||||
@ -422,6 +443,12 @@ varobj_create (char *objname,
|
|||||||
if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME))
|
if ((type == USE_CURRENT_FRAME) || (type == USE_SELECTED_FRAME))
|
||||||
fi = selected_frame;
|
fi = selected_frame;
|
||||||
else
|
else
|
||||||
|
/* FIXME: cagney/2002-11-23: This code should be doing a
|
||||||
|
lookup using the frame ID and not just the frame's
|
||||||
|
``address''. This, of course, means an interface change.
|
||||||
|
However, with out that interface change ISAs, such as the
|
||||||
|
ia64 with its two stacks, won't work. Similar goes for the
|
||||||
|
case where there is a frameless function. */
|
||||||
fi = find_frame_addr_in_frame_chain (frame);
|
fi = find_frame_addr_in_frame_chain (frame);
|
||||||
|
|
||||||
/* frame = -2 means always use selected frame */
|
/* frame = -2 means always use selected frame */
|
||||||
|
Reference in New Issue
Block a user