From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5015 invoked by alias); 27 Aug 2004 23:40:26 -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 5001 invoked from network); 27 Aug 2004 23:40:22 -0000 Received: from unknown (HELO tisch.mail.mindspring.net) (207.69.200.157) by sourceware.org with SMTP; 27 Aug 2004 23:40:22 -0000 Received: from user-119a90a.biz.mindspring.com ([66.149.36.10] helo=berman.michael-chastain.com) by tisch.mail.mindspring.net with esmtp (Exim 3.33 #1) id 1C0qKO-0004Od-00; Fri, 27 Aug 2004 19:40:16 -0400 Received: from mindspring.com (localhost [127.0.0.1]) by berman.michael-chastain.com (Postfix) with SMTP id 510174B102; Fri, 27 Aug 2004 19:40:25 -0400 (EDT) Date: Fri, 27 Aug 2004 23:40:00 -0000 From: Michael Chastain To: manjo@austin.ibm.com, gdb-patches@sources.redhat.com Subject: [patch/testsuite] gdb_file_cmd: enhance return value Message-ID: <412FC668.nailENL1TNTCG@mindspring.com> User-Agent: nail 10.8 6/28/04 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2004-08/txt/msg00760.txt.bz2 This patch changes gdb_file_cmd to return more information in its return value. The new information will be used in gdb.gdb/*.exp to distinguish the case where the new file has no debugging symbols. Old return value: 0 success -1 failure New return value: { "" } success { "" nodebug } success, and the new file has no debug info { "..." } failure, the string is an error message Very few callers check the return value of gdb_file_cmd, so very little change is needed for this. Tested on native i686-pc-linux-gnu with the usual four gcc's (2.95.3 3.3.3 3.4.1 HEAD) and dwarf-2/stabs+. Manoj, I used your test for "no debugging symbols found", but did not add any caller code to gdb.gdb/*.exp. I'll leave this up for comments for 24 hours and then commit it. 2004-08-27 Michael Chastain With code from Manoj Iyer : * lib/gdb.exp (gdb_file_cmd): Return more information in the return value. Add an arm for "no debugging symbols found". Change a stray "error" to "perror". (gdb_run_cmd): Adapt to new return value. * gdb.base/remote.exp: Adapt to new return value. * gdb.gdb/complaints.exp: Likewise. * gdb.gdb/observer.exp: Likewise. * gdb.gdb/selftest.exp: Likewise. * gdb.gdb/xfullpath.exp: Likewise. Index: lib/gdb.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v retrieving revision 1.56 diff -c -3 -p -r1.56 gdb.exp *** lib/gdb.exp 23 Aug 2004 13:43:15 -0000 1.56 --- lib/gdb.exp 27 Aug 2004 23:36:10 -0000 *************** proc gdb_run_cmd {args} { *** 180,186 **** if [target_info exists gdb,do_reload_on_run] { # Specifying no file, defaults to the executable # currently being debugged. ! if { [gdb_load ""] < 0 } { return; } send_gdb "continue\n"; --- 180,187 ---- if [target_info exists gdb,do_reload_on_run] { # Specifying no file, defaults to the executable # currently being debugged. ! set status [gdb_load ""] ! if { [lindex $status 0] != "" } { return; } send_gdb "continue\n"; *************** proc gdb_run_cmd {args} { *** 225,231 **** send_gdb "y\n" } -re "The program is not being run.*$gdb_prompt $" { ! if { [gdb_load ""] < 0 } { return; } send_gdb "jump *$start\n"; --- 226,233 ---- send_gdb "y\n" } -re "The program is not being run.*$gdb_prompt $" { ! set status [gdb_load ""] ! if { [lindex $status 0] != ""] } { return; } send_gdb "jump *$start\n"; *************** proc gdb_run_cmd {args} { *** 247,253 **** } if [target_info exists gdb,do_reload_on_run] { ! if { [gdb_load ""] < 0 } { return; } } --- 249,256 ---- } if [target_info exists gdb,do_reload_on_run] { ! set status [gdb_load ""] ! if { [lindex $status 0] != "" } { return; } } *************** proc default_gdb_exit {} { *** 953,987 **** unset gdb_spawn_id } # ! # load a file into the debugger. ! # return a -1 if anything goes wrong. # proc gdb_file_cmd { arg } { global verbose - global loadpath - global loadfile global GDB - global gdb_prompt - upvar timeout timeout if [is_remote host] { ! set arg [remote_download host $arg]; if { $arg == "" } { ! error "download failed" ! return -1; } } send_gdb "file $arg\n" gdb_expect 120 { -re "Reading symbols from.*done.*$gdb_prompt $" { verbose "\t\tLoaded $arg into the $GDB" ! return 0 ! } ! -re "has no symbol-table.*$gdb_prompt $" { ! perror "$arg wasn't compiled with \"-g\"" ! return -1 } -re "A program is being debugged already.*Kill it.*y or n. $" { send_gdb "y\n" --- 956,1004 ---- unset gdb_spawn_id } + # Load a file into the debugger. + # The return value is a list with the following information: # ! # { message word ... } ! # ! # MESSAGE has the following values: ! # ! # "" file was loaded successfully ! # "..." file was not loaded successfully. ! # A perror has been generated with MESSAGE. ! # ! # If the MESSAGE is "", then there is an optional set of words. ! # The words may be: # + # nodebug this file does not contain debug information + # + # TODO: gdb.base/sepdebug.exp and gdb.stabs/weird.exp might + # be able to use this if they can get more information + # in the return value. + proc gdb_file_cmd { arg } { + global gdb_prompt global verbose global GDB if [is_remote host] { ! set arg [remote_download host $arg] if { $arg == "" } { ! set message "download failed" ! perror $message ! return { $message } } } send_gdb "file $arg\n" gdb_expect 120 { + -re "Reading symbols from.*no debugging symbols found.*done.*$gdb_prompt $" { + verbose "\t\tLoaded $arg into the $GDB with no debugging symbols" + return { "" nodebug } + } -re "Reading symbols from.*done.*$gdb_prompt $" { verbose "\t\tLoaded $arg into the $GDB" ! return { "" } } -re "A program is being debugged already.*Kill it.*y or n. $" { send_gdb "y\n" *************** proc gdb_file_cmd { arg } { *** 993,1024 **** gdb_expect 120 { -re "Reading symbols from.*done.*$gdb_prompt $" { verbose "\t\tLoaded $arg with new symbol table into $GDB" ! return 0 } timeout { ! perror "(timeout) Couldn't load $arg, other program already loaded." ! return -1 } } } -re "No such file or directory.*$gdb_prompt $" { ! perror "($arg) No such file or directory\n" ! return -1 } -re "$gdb_prompt $" { ! perror "couldn't load $arg into $GDB." ! return -1 } timeout { ! perror "couldn't load $arg into $GDB (timed out)." ! return -1 } eof { # This is an attempt to detect a core dump, but seems not to # work. Perhaps we need to match .* followed by eof, in which # gdb_expect does not seem to have a way to do that. ! perror "couldn't load $arg into $GDB (end of file)." ! return -1 } } } --- 1010,1046 ---- gdb_expect 120 { -re "Reading symbols from.*done.*$gdb_prompt $" { verbose "\t\tLoaded $arg with new symbol table into $GDB" ! return { "" } } timeout { ! set message "(timeout) Couldn't load $arg, other program already loaded." ! perror $message ! return { $message } } } } -re "No such file or directory.*$gdb_prompt $" { ! set message "($arg) No such file or directory" ! perror $message ! return { $message } } -re "$gdb_prompt $" { ! set message "couldn't load $arg into $GDB." ! perror $message ! return { $message } } timeout { ! set message "couldn't load $arg into $GDB (timed out)." ! perror $message ! return { $message } } eof { # This is an attempt to detect a core dump, but seems not to # work. Perhaps we need to match .* followed by eof, in which # gdb_expect does not seem to have a way to do that. ! set message "couldn't load $arg into $GDB (end of file)." ! perror $message ! return { $message } } } } *************** proc gdb_exit { } { *** 1633,1639 **** # # gdb_load -- load a file into the debugger. - # return a -1 if anything goes wrong. # proc gdb_load { arg } { return [gdb_file_cmd $arg] --- 1655,1660 ---- Index: gdb.base/remote.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/remote.exp,v retrieving revision 1.3 diff -c -3 -p -r1.3 remote.exp *** gdb.base/remote.exp 17 Jul 2001 21:47:19 -0000 1.3 --- gdb.base/remote.exp 27 Aug 2004 23:36:10 -0000 *************** *** 1,4 **** ! # Copyright 1999, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by --- 1,4 ---- ! # Copyright 1999, 2001, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by *************** proc gdb_load_timed {executable download *** 119,125 **** set load_begin_time [clock clicks] set result [gdb_load $executable] set load_end_time [clock clicks] ! if {$result < 0} then { fail "$test - loading executable"; return } verbose "$test - time [expr ($load_end_time - $load_begin_time) / 1000] ms" pass $test } --- 119,128 ---- set load_begin_time [clock clicks] set result [gdb_load $executable] set load_end_time [clock clicks] ! if { [lindex $result 0] != "" } then { ! fail "$test - loading executable" ! return ! } verbose "$test - time [expr ($load_end_time - $load_begin_time) / 1000] ms" pass $test } Index: gdb.gdb/complaints.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.gdb/complaints.exp,v retrieving revision 1.2 diff -c -3 -p -r1.2 complaints.exp *** gdb.gdb/complaints.exp 24 Sep 2002 16:07:42 -0000 1.2 --- gdb.gdb/complaints.exp 27 Aug 2004 23:36:10 -0000 *************** *** 1,5 **** ! # Copyright 2002 ! # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by --- 1,5 ---- ! # Copyright 2002, 2004 ! # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by *************** *** 15,23 **** # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # Please email any bugs, comments, and/or additions to this file to: - # bug-gdb@prep.ai.mit.edu - # This file was written by Andrew Cagney (cagney at redhat dot com), # derived from xfullpath.exp (written by Joel Brobecker), derived from # selftest.exp (written by Rob Savoye). --- 15,20 ---- *************** proc setup_test { executable } { *** 51,64 **** set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! if {[gdb_load $executable] <0} then { ! set timeout $oldtimeout ! verbose "Timeout is now $timeout seconds" 2 ! return -1 ! } set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 # Set a breakpoint at main gdb_test "break captured_command_loop" \ "Breakpoint.*at.* file.*, line.*" \ --- 48,62 ---- set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! ! set result [gdb_load $executable] set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 + if { [lindex $result 0] != "" } then { + return -1 + } + # Set a breakpoint at main gdb_test "break captured_command_loop" \ "Breakpoint.*at.* file.*, line.*" \ Index: gdb.gdb/observer.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.gdb/observer.exp,v retrieving revision 1.4 diff -c -3 -p -r1.4 observer.exp *** gdb.gdb/observer.exp 13 Jul 2004 14:36:44 -0000 1.4 --- gdb.gdb/observer.exp 27 Aug 2004 23:36:10 -0000 *************** proc setup_test { executable } { *** 46,59 **** set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! if {[gdb_load $executable] <0} then { ! set timeout $oldtimeout ! verbose "Timeout is now $timeout seconds" 2 ! return -1 ! } set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 # Set a breakpoint at main gdb_test "break captured_main" \ "Breakpoint.*at.* file.*, line.*" \ --- 46,60 ---- set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! ! set result [gdb_load $executable] set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 + if { [lindex $result 0] != "" } then { + return -1 + } + # Set a breakpoint at main gdb_test "break captured_main" \ "Breakpoint.*at.* file.*, line.*" \ Index: gdb.gdb/selftest.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.gdb/selftest.exp,v retrieving revision 1.3 diff -c -3 -p -r1.3 selftest.exp *** gdb.gdb/selftest.exp 13 Aug 2004 10:43:20 -0000 1.3 --- gdb.gdb/selftest.exp 27 Aug 2004 23:36:10 -0000 *************** *** 15,23 **** # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # Please email any bugs, comments, and/or additions to this file to: - # bug-gdb@prep.ai.mit.edu - # This file was written by Rob Savoye. (rob@cygnus.com) if $tracelevel then { --- 15,20 ---- *************** proc test_with_self { executable } { *** 243,256 **** set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! if {[gdb_load $executable] <0} then { ! set timeout $oldtimeout ! verbose "Timeout is now $timeout seconds" 2 ! return -1 ! } set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 # disassemble yourself gdb_test "x/10i main" \ "x/10i.*main.*main.$decimal.*main.$decimal.*" \ --- 240,254 ---- set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! ! set result [gdb_load $executable] set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 + if { [lindex $result 0] != "" } then { + return -1 + } + # disassemble yourself gdb_test "x/10i main" \ "x/10i.*main.*main.$decimal.*main.$decimal.*" \ Index: gdb.gdb/xfullpath.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.gdb/xfullpath.exp,v retrieving revision 1.2 diff -c -3 -p -r1.2 xfullpath.exp *** gdb.gdb/xfullpath.exp 30 Aug 2003 04:58:21 -0000 1.2 --- gdb.gdb/xfullpath.exp 27 Aug 2004 23:36:10 -0000 *************** *** 1,5 **** ! # Copyright 2002, 2003 ! # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by --- 1,5 ---- ! # Copyright 2002, 2003, 2004 ! # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by *************** *** 15,23 **** # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # Please email any bugs, comments, and/or additions to this file to: - # bug-gdb@prep.ai.mit.edu - # This file was written by Joel Brobecker. (brobecker@gnat.com), derived # from selftest.exp, written by Rob Savoye. --- 15,20 ---- *************** proc setup_test { executable } { *** 50,63 **** set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! if {[gdb_load $executable] <0} then { ! set timeout $oldtimeout ! verbose "Timeout is now $timeout seconds" 2 ! return -1 ! } set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 # Set a breakpoint at main gdb_test "break captured_main" \ "Breakpoint.*at.* file.*, line.*" \ --- 47,61 ---- set oldtimeout $timeout set timeout 600 verbose "Timeout is now $timeout seconds" 2 ! ! set result [gdb_load $executable] set timeout $oldtimeout verbose "Timeout is now $timeout seconds" 2 + if { [lindex $result 0] != "" } then { + return -1 + } + # Set a breakpoint at main gdb_test "break captured_main" \ "Breakpoint.*at.* file.*, line.*" \