diff options
author | Daniel Jacobowitz <drow@false.org> | 2003-09-08 18:56:03 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2003-09-08 18:56:03 +0000 |
commit | 7dd889867037abfa8f239f9f65f9606294e0be8d (patch) | |
tree | 26f82f5b8170f23254243c62fcc2c7e9df1a913e /gdb | |
parent | a6fc177898b33d6eb3154e93ace5d24272a9eb70 (diff) | |
download | binutils-7dd889867037abfa8f239f9f65f9606294e0be8d.zip binutils-7dd889867037abfa8f239f9f65f9606294e0be8d.tar.gz binutils-7dd889867037abfa8f239f9f65f9606294e0be8d.tar.bz2 |
* frame.c (deprecated_safe_get_selected_frame): New function.
* frame.h (deprecated_safe_get_selected_frame): Add prototype.
* findvar.c (read_var_value): Call it.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/findvar.c | 5 | ||||
-rw-r--r-- | gdb/frame.c | 12 | ||||
-rw-r--r-- | gdb/frame.h | 13 |
4 files changed, 35 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c284f9c..75c9e68 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2003-09-08 Daniel Jacobowitz <drow@mvista.com> + + * frame.c (deprecated_safe_get_selected_frame): New function. + * frame.h (deprecated_safe_get_selected_frame): Add prototype. + * findvar.c (read_var_value): Call it. + 2003-09-08 Corinna Vinschen <vinschen@redhat.com> * Makefile.in (ALLDEPFILES): Add sh64-tdep.c. diff --git a/gdb/findvar.c b/gdb/findvar.c index 7b6191c..a64ddfb 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -404,8 +404,11 @@ read_var_value (register struct symbol *var, struct frame_info *frame) len = TYPE_LENGTH (type); + + /* FIXME drow/2003-09-06: this call to the selected frame should be + pushed upwards to the callers. */ if (frame == NULL) - frame = deprecated_selected_frame; + frame = deprecated_safe_get_selected_frame (); switch (SYMBOL_CLASS (var)) { diff --git a/gdb/frame.c b/gdb/frame.c index efcee75..31cb6c5 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -917,6 +917,18 @@ get_selected_frame (void) return deprecated_selected_frame; } +/* This is a variant of get_selected_frame which can be called when + the inferior does not have a frame; in that case it will return + NULL instead of calling error (). */ + +struct frame_info * +deprecated_safe_get_selected_frame (void) +{ + if (!target_has_registers || !target_has_stack || !target_has_memory) + return NULL; + return get_selected_frame (); +} + /* Select frame FI (or NULL - to invalidate the current frame). */ void diff --git a/gdb/frame.h b/gdb/frame.h index 8851b3a..afbde74 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -639,6 +639,19 @@ extern void return_command (char *, int); extern struct frame_info *deprecated_selected_frame; +/* NOTE: drow/2003-09-06: + + This function is "a step sideways" for uses of deprecated_selected_frame. + They should be fixed as above, but meanwhile, we needed a solution for + cases where functions are called with a NULL frame meaning either "the + program is not running" or "use the selected frame". Lazy building of + deprecated_selected_frame confuses the situation, because now + deprecated_selected_frame can be NULL even when the inferior is running. + + This function calls get_selected_frame if the inferior should have a + frame, or returns NULL otherwise. */ + +extern struct frame_info *deprecated_safe_get_selected_frame (void); /* Create a frame using the specified BASE and PC. */ |