aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2009-02-05 17:28:21 +0000
committerPedro Alves <palves@redhat.com>2009-02-05 17:28:21 +0000
commit9d49bdc28ad672f6e23e9f33759f73968d6885ff (patch)
tree6bdaf0312e8701db011376578e7b6022e72231e4 /gdb/frame.c
parent12453b93bd8de559235835300eac68118c4ade70 (diff)
downloadgdb-9d49bdc28ad672f6e23e9f33759f73968d6885ff.zip
gdb-9d49bdc28ad672f6e23e9f33759f73968d6885ff.tar.gz
gdb-9d49bdc28ad672f6e23e9f33759f73968d6885ff.tar.bz2
* frame.c (has_stack_frames): Make public.
(get_prev_frame): Don't allow a NULL this_frame anymore. * frame.h (has_stack_frames): Declare. * varobj.c (find_frame_addr_in_frame_chain): Don't ever pass NULL to get_prev_frame, instead start at get_current_frame. (varobj_create): Check has_stack_frames before getting any frame; eliminate one usage of deprecated_safe_get_selected_frame.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r--gdb/frame.c38
1 files changed, 1 insertions, 37 deletions
diff --git a/gdb/frame.c b/gdb/frame.c
index 7f67d2e..f0aefb5 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -997,7 +997,7 @@ get_current_frame (void)
static struct frame_info *selected_frame;
-static int
+int
has_stack_frames (void)
{
if (!target_has_registers || !target_has_stack || !target_has_memory)
@@ -1458,42 +1458,6 @@ get_prev_frame (struct frame_info *this_frame)
{
struct frame_info *prev_frame;
- /* Return the inner-most frame, when the caller passes in NULL. */
- /* NOTE: cagney/2002-11-09: Not sure how this would happen. The
- caller should have previously obtained a valid frame using
- get_selected_frame() and then called this code - only possibility
- I can think of is code behaving badly.
-
- NOTE: cagney/2003-01-10: Talk about code behaving badly. Check
- block_innermost_frame(). It does the sequence: frame = NULL;
- while (1) { frame = get_prev_frame (frame); .... }. Ulgh! Why
- it couldn't be written better, I don't know.
-
- NOTE: cagney/2003-01-11: I suspect what is happening in
- block_innermost_frame() is, when the target has no state
- (registers, memory, ...), it is still calling this function. The
- assumption being that this function will return NULL indicating
- that a frame isn't possible, rather than checking that the target
- has state and then calling get_current_frame() and
- get_prev_frame(). This is a guess mind. */
- if (this_frame == NULL)
- {
- /* NOTE: cagney/2002-11-09: There was a code segment here that
- would error out when CURRENT_FRAME was NULL. The comment
- that went with it made the claim ...
-
- ``This screws value_of_variable, which just wants a nice
- clean NULL return from block_innermost_frame if there are no
- frames. I don't think I've ever seen this message happen
- otherwise. And returning NULL here is a perfectly legitimate
- thing to do.''
-
- Per the above, this code shouldn't even be called with a NULL
- THIS_FRAME. */
- frame_debug_got_null_frame (this_frame, "this_frame NULL");
- return current_frame;
- }
-
/* There is always a frame. If this assertion fails, suspect that
something should be calling get_selected_frame() or
get_current_frame(). */