From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8462 invoked by alias); 1 Aug 2003 19:29:52 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 8454 invoked from network); 1 Aug 2003 19:29:52 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 1 Aug 2003 19:29:52 -0000 Received: from drow by nevyn.them.org with local (Exim 4.20 #1 (Debian)) id 19ifb5-0000eg-P1 for ; Fri, 01 Aug 2003 15:29:51 -0400 Date: Fri, 01 Aug 2003 19:29:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: RFC: selected frame in read_var_value Message-ID: <20030801192951.GA2109@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i X-SW-Source: 2003-08/txt/msg00005.txt.bz2 Thoughts on this? I observed one case where the selected frame hadn't been initialized yet: when checking watchpoint values. Oops! The condition matches the case in which get_current_frame () can be reasonably expected to succeed. There are a couple other places that need this same check, mostly functions which will work on globals as well as locals. An alternative would be to create a lifeless_frame and have get_current_frame return that when there is no running target; have it call error if a register is read, its base is requested, et cetera. I suspect that would require some serious surgery. We'd also need to pass lifeless_frame everywhere we could be passing a NULL frame now. For instance, several callers of read_var_value will give it no frame. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2003-08-01 Daniel Jacobowitz * findvar.c (read_var_value): If the target is running, call get_selected_frame instead of checking deprecated_selected_frame. --- gdb-5.3.20030801/gdb/findvar.c.orig 2003-08-01 14:46:12.000000000 -0400 +++ gdb-5.3.20030801/gdb/findvar.c 2003-08-01 14:50:27.000000000 -0400 @@ -388,7 +388,7 @@ symbol_read_needs_frame (struct symbol * and a stack frame id, read the value of the variable and return a (pointer to a) struct value containing the value. If the variable cannot be found, return a zero pointer. - If FRAME is NULL, use the deprecated_selected_frame. */ + If FRAME is NULL, use the selected frame. */ struct value * read_var_value (register struct symbol *var, struct frame_info *frame) @@ -404,8 +404,9 @@ read_var_value (register struct symbol * len = TYPE_LENGTH (type); - if (frame == NULL) - frame = deprecated_selected_frame; + if (frame == NULL && target_has_registers && target_has_stack + && target_has_memory) + frame = get_selected_frame (); switch (SYMBOL_CLASS (var)) {