+2004-08-27 Michael Chastain <mec.gnu@mindspring.com>
+
+ With code from Manoj Iyer <manjo@austin.ibm.com>:
+ * 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.
+
2004-08-27 Joel Brobecker <brobecker@gnat.com>
* gdb.threads/bp_in_thread.exp: New testcase.
-# Copyright 1999, 2001 Free Software Foundation, Inc.
+# 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
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 }
+ if { [lindex $result 0] != "" } then {
+ fail "$test - loading executable"
+ return
+ }
verbose "$test - time [expr ($load_end_time - $load_begin_time) / 1000] ms"
pass $test
}
-# Copyright 2002
-# Free Software Foundation, Inc.
+# 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
# 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).
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 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.*" \
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 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.*" \
# 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 {
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 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.*" \
-# Copyright 2002, 2003
-# Free Software Foundation, Inc.
+# 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
# 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.
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 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.*" \
if [target_info exists gdb,do_reload_on_run] {
# Specifying no file, defaults to the executable
# currently being debugged.
- if { [gdb_load ""] < 0 } {
+ set status [gdb_load ""]
+ if { [lindex $status 0] != "" } {
return;
}
send_gdb "continue\n";
send_gdb "y\n"
}
-re "The program is not being run.*$gdb_prompt $" {
- if { [gdb_load ""] < 0 } {
+ set status [gdb_load ""]
+ if { [lindex $status 0] != ""] } {
return;
}
send_gdb "jump *$start\n";
}
if [target_info exists gdb,do_reload_on_run] {
- if { [gdb_load ""] < 0 } {
+ set status [gdb_load ""]
+ if { [lindex $status 0] != "" } {
return;
}
}
unset gdb_spawn_id
}
+# Load a file into the debugger.
+# The return value is a list with the following information:
#
-# load a file into the debugger.
-# return a -1 if anything goes wrong.
+# { 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 loadpath
- global loadfile
global GDB
- global gdb_prompt
- upvar timeout timeout
if [is_remote host] {
- set arg [remote_download host $arg];
+ set arg [remote_download host $arg]
if { $arg == "" } {
- error "download failed"
- return -1;
+ 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 0
- }
- -re "has no symbol-table.*$gdb_prompt $" {
- perror "$arg wasn't compiled with \"-g\""
- return -1
+ return { "" }
}
-re "A program is being debugged already.*Kill it.*y or n. $" {
send_gdb "y\n"
gdb_expect 120 {
-re "Reading symbols from.*done.*$gdb_prompt $" {
verbose "\t\tLoaded $arg with new symbol table into $GDB"
- return 0
+ return { "" }
}
timeout {
- perror "(timeout) Couldn't load $arg, other program already loaded."
- return -1
+ set message "(timeout) Couldn't load $arg, other program already loaded."
+ perror $message
+ return { $message }
}
}
}
-re "No such file or directory.*$gdb_prompt $" {
- perror "($arg) No such file or directory\n"
- return -1
+ set message "($arg) No such file or directory"
+ perror $message
+ return { $message }
}
-re "$gdb_prompt $" {
- perror "couldn't load $arg into $GDB."
- return -1
+ set message "couldn't load $arg into $GDB."
+ perror $message
+ return { $message }
}
timeout {
- perror "couldn't load $arg into $GDB (timed out)."
- return -1
+ 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.
- perror "couldn't load $arg into $GDB (end of file)."
- return -1
+ set message "couldn't load $arg into $GDB (end of file)."
+ perror $message
+ return { $message }
}
}
}
#
# gdb_load -- load a file into the debugger.
-# return a -1 if anything goes wrong.
#
proc gdb_load { arg } {
return [gdb_file_cmd $arg]