From: Daniel Jacobowitz Date: Mon, 8 Sep 2003 18:58:13 +0000 (+0000) Subject: * frame.c (deprecated_safe_get_selected_frame): New function. X-Git-Tag: gdb_6_0-2003-10-04-release~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=34b934343cb4675bacc40b4b978b211af8ff17ec;p=thirdparty%2Fbinutils-gdb.git * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cbb7fa47cde..fa77d50e124 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2003-09-08 Daniel Jacobowitz + + * 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-02 GDB Administrator * version.in: Bump to version 5.3.91. diff --git a/gdb/findvar.c b/gdb/findvar.c index 6602c39b7fe..61639ccbe39 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 da721335940..4504dd24fd5 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -944,6 +944,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 bb2eb6e62cc..0e97a91fbbd 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -641,6 +641,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. */