Revert "Sync readline/ to version 7.0 alpha"
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.gdb / selftest.exp
index 4fdc70bf02860b5ef4d7ba9596d3e4b950cbb76d..9f25a48bae2d7e4c8381d4fa8c471e4ac1aaa411 100644 (file)
@@ -1,28 +1,21 @@
-# Copyright 1988, 1990, 1991, 1992, 1994, 1997, 1999, 2000, 2002, 2003, 2004,
-# 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright 1988-2015 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
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # This file was written by Rob Savoye. (rob@cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
-set prms_id 0
-set bug_id 0
+load_lib selftest-support.exp
 
 # are we on a target board
 if { [is_remote target] || ![isnative] } then {
@@ -42,12 +35,11 @@ proc do_steps_and_nexts {} {
 
     set unlikely_line 0
     for {set count 0} {$count < 32} {incr count} {
-       send_gdb "list\n"
        # NOTE: carlton/2002-12-11: The "initial brace" and
        # "current_directory initialization" possibilities happen to
        # me with GCC 3.1 on i686-pc-linux-gnu when I compile with
        # optimization.
-       gdb_expect {
+       gdb_test_multiple "list" "list" {
            -re ".*context = data.*$gdb_prompt $" {
                set description "step over context initialization"
                set command "step"
@@ -76,10 +68,18 @@ proc do_steps_and_nexts {} {
                set description "step over execarg initialization"
                set command "step"
            }
+           -re ".*pidarg = NULL.*$gdb_prompt $" {
+               set description "step over pidarg initialization"
+               set command "step"
+           }
            -re ".*corearg = NULL.*$gdb_prompt $" {
                set description "step over corearg initialization"
                set command "step"
            }
+           -re ".*pid_or_core_arg = NULL.*$gdb_prompt $" {
+               set description "step over pid_or_core_arg initialization"
+               set command "step"
+           }
            -re ".*cdarg = NULL.*$gdb_prompt $" {
                set description "step over cdarg initialization"
                set command "step"
@@ -88,8 +88,12 @@ proc do_steps_and_nexts {} {
                set description "step over ttyarg initialization"
                set command "step"
            }
-           -re ".*time_at_startup = get_run_time.*$gdb_prompt $" {
-               set description "next over get_run_time and everything it calls"
+           -re ".*cmdarg_vec = NULL.*$gdb_prompt $" {
+               set description "step over cmdarg_vec initialization"
+               set command "step"
+           }
+           -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" {
+               set description "next over make_command_stats_cleanup and everything it calls"
                set command "next"
            }
            -re ".*START_PROGRESS.*$gdb_prompt $" {
@@ -124,18 +128,6 @@ proc do_steps_and_nexts {} {
                set description "next over conditional stack alignment alloca"
                set command "next"
            }
-           -re ".*cmdsize = 1.*$gdb_prompt $" {
-               set description "step over cmdsize initialization"
-               set command "next"
-           }
-           -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
-               set description "next over cmdarg initialization via xmalloc"
-               set command "next"
-           }
-           -re ".*ncmd = 0.*$gdb_prompt $" {
-               set description "next over ncmd initialization"
-               set command "next"
-           }
            -re ".*dirsize = 1.*$gdb_prompt $" {
                set description "next over dirsize initialization"
                set command "next"
@@ -159,7 +151,19 @@ proc do_steps_and_nexts {} {
                set description "next over textdomain PACKAGE"
                set command "next"
            }
-           -re "\[0-9\]*\t\{\r\n$gdb_prompt $" {
+           -re ".*bfd_init ..;.*$gdb_prompt $" {
+               set description "next over bfd_init"
+               set command "next"
+           }
+           -re ".*notice_open_fds ..;.*$gdb_prompt $" {
+               set description "next over notice_open_fds"
+               set command "next"
+           }
+           -re ".*VEC_cleanup .cmdarg_s.*$gdb_prompt $" {
+               set description "next over cmdarg_s VEC_cleanup"
+               set command "next"
+           }
+           -re "\[0-9\]+\[\t \]+\{\r\n$gdb_prompt $" {
                set description "step over initial brace"
                set command "step"
            }
@@ -181,13 +185,25 @@ proc do_steps_and_nexts {} {
                set description "step over instream initialization"
                set command "step"
            }
-           -re ".*getcwd .gdb_dirbuf, sizeof .gdb_dirbuf..;.*$gdb_prompt $" {
+           -re ".*getcwd .gdb_dirbuf, sizeof .gdb_dirbuf.*$gdb_prompt $" {
                set description "next over getcwd"
                set command "next"
            }
-           -re "\[ \t\]+\{\r\n$gdb_prompt $" {
-               setup_xfail "mips-*-irix5*"
-               fail "$description ended up at odd location"
+           -re ".*gdb_program_name = xstrdup.*$gdb_prompt $" {
+                set description "next over xstrdup"
+                set command "next"
+            } 
+            -re ".*quit_flag = 0.*$gdb_prompt $" {
+               set description "step over quit_flag initialization"
+               set command "step"
+           }
+           -re ".*gdb_stdout = stdio_fileopen .stdout.;.*$gdb_prompt $" {
+               set description "step over gdb_stdout initialization"
+               set command "step"
+           }
+           -re ".*gdb_stderr = stdio_fileopen .stderr.;.*$gdb_prompt $" {
+               set description "step over gdb_stderr initialization"
+               set command "step"
            }
            -re ".*main.c.*No such file or directory.*$gdb_prompt $" {
                setup_xfail "rs6000-*-aix3*"
@@ -206,7 +222,13 @@ proc do_steps_and_nexts {} {
                set command "next"
            }
            -re ".*$gdb_prompt $" {
-               fail "unknown source line after $description"
+               # If $description hasn't been set yet, it's likely the file
+               # has been edited but gdb hasn't been recompiled.
+               if [info exists description] {
+                   fail "unknown source line (after $description)"
+               } else {
+                   fail "unknown source line"
+               }
                return
            }
            default {
@@ -214,8 +236,7 @@ proc do_steps_and_nexts {} {
                return
            }
        }
-       send_gdb "$command\n"
-       gdb_expect {
+       gdb_test_multiple "$command" "$description" {
            -re ".*No such file or directory.\r\n$gdb_prompt $" {
                fail "$description (no source available)"
            }
@@ -225,9 +246,6 @@ proc do_steps_and_nexts {} {
            -re ".*$gdb_prompt $" {
                pass "$description"
            }
-           timeout {
-               fail "$description (timeout)"
-           }
        }
     }
 }
@@ -238,6 +256,7 @@ proc test_with_self { executable } {
     global det_file
     global decimal
     global timeout
+    global INTERNAL_GDBFLAGS
 
     # load yourself into the debugger
     # This can take a relatively long time, particularly for testing where
@@ -269,9 +288,13 @@ proc test_with_self { executable } {
        return -1
     }
 
+    # When GDB is built as a C++ program, disassemble shows the full
+    # prototype.
+    set cxx_main_args_re [string_to_regexp "(int, char**)"]
+
     # disassemble yourself
     gdb_test "x/10i main" \
-           "x/10i.*main.*main.$decimal.*main.$decimal.*" \
+           "x/10i.*main.*main($cxx_main_args_re)?.$decimal.*main($cxx_main_args_re)?.$decimal.*" \
            "Disassemble main"
 
     # Set a breakpoint at main
@@ -281,17 +304,13 @@ proc test_with_self { executable } {
 
     # We'll need this when we send a ^C to GDB.  Need to do it before we
     # run the program and gdb starts saving and restoring tty states.
-    # On Ultrix, we don't need it and it is really slow (because shell_escape
-    # doesn't use vfork).
-    if ![istarget "*-*-ultrix*"] then {
-       gdb_test "shell stty intr '^C'" "" \
-           "set interrupt character in test_with_self"
-    }
+    gdb_test "shell stty intr '^C'" ".*" \
+       "set interrupt character in test_with_self"
 
     # FIXME: If we put this after the run to main, the first list
     # command doesn't print the same line as the current line where
     # gdb is stopped.
-    gdb_test "set listsize 1" "" "set listsize to 1"
+    gdb_test_no_output "set listsize 1" "set listsize to 1"
 
     # run yourself
     # It may take a very long time for the inferior gdb to start (lynx),
@@ -299,8 +318,7 @@ proc test_with_self { executable } {
     set timeout 600
 
     set description "run until breakpoint at captured_main"
-    send_gdb "run -nw\n"
-    gdb_expect {
+    gdb_test_multiple "run $INTERNAL_GDBFLAGS" "$description" {
        -re "Starting program.*Breakpoint \[0-9\]+,.*captured_main .data.* at .*main.c:.*$gdb_prompt $" {
            pass "$description"
        }
@@ -319,17 +337,13 @@ proc test_with_self { executable } {
            verbose "Timeout is now $timeout seconds" 2
            return -1
        }
-       timeout {
-           fail "$description (timeout)"
-       }
     }
 
     set timeout $oldtimeout
     verbose "Timeout is now $timeout seconds" 2
 
     # do we have a version number ?
-    send_gdb "print version\n"
-    gdb_expect {
+    gdb_test_multiple "print version" "printed version" {
        -re ".\[0-9\]+ = .\[0-9.\]+.*$gdb_prompt $" {
            pass "printed version as string"
        }
@@ -339,8 +353,6 @@ proc test_with_self { executable } {
        -re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" {
            pass "printed version with cast"
        }
-       -re ".*$gdb_prompt $"   { fail "printed version" }
-       timeout         { fail "(timeout) printed version" }
     }
 
     do_steps_and_nexts
@@ -357,8 +369,7 @@ proc test_with_self { executable } {
     set stepped_back 0
     setup_xfail "alpha-*-*" "mips-*-*"
     set description "step into xmalloc call"
-    send_gdb "step\n"
-    gdb_expect {
+    gdb_test_multiple "step" "$description" {
        -re "ncmd = 0;.*$gdb_prompt $" {
            set stepped_back 1
            send_gdb "step\n"
@@ -391,42 +402,32 @@ proc test_with_self { executable } {
        -re "A file or directory .* does not exist..\r\n$gdb_prompt $" {
            pass "$description (no source available)"
        }
-       -re ".*$gdb_prompt $" {
-           fail "$description"
-       }
-       timeout {
-           fail "$description (timeout)"
-       }
     }
 
     # start the "xgdb" process
-    send_gdb "continue\n"
-    gdb_expect {
-       -re "GNU gdb \[0-9\.\]*.*
-Copyright \\(C\\) \[0-9\]* Free Software Foundation, Inc.*
-GDB is free software, covered by the GNU General Public License, and you are.*
-welcome to change it and/or distribute copies of it under certain conditions.*
-Type \"show copying\" to see the conditions.*
-There is absolutely no warranty for GDB.  Type \"show warranty\" for details.*
-This GDB was configured as .*$gdb_prompt $"\
-           { pass "xgdb is at prompt" }
-       -re "GDB is free software and you are welcome to distribute copies of it.*
- under certain conditions; type \"show copying\" to see the conditions..*
-There is absolutely no warranty for GDB; type \"show warranty\" for details..*
-GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$gdb_prompt $"\
-           { pass "xgdb is at prompt (obsolescent gdb)" }
-       -re ".*$gdb_prompt $"       { fail "xgdb is at prompt" }
-       timeout             { fail "(timeout) xgdb is at prompt" }
-    }
-    
-    # set xgdb prompt so we can tell which is which
-    send_gdb "set prompt (xgdb) \n"
-    gdb_expect {
-       -re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $"  { pass "Set xgdb prompt" }
-       -re ".*$gdb_prompt $"           { fail "Set xgdb prompt" }
-       default                         { fail "(timeout) Set xgdb prompt" }
+    if [target_info exists gdb,noinferiorio] {
+       # Maybe testing with a local extended-remote gdbserver.  With
+       # no way to interact with inferior GDB, all we can do is let
+       # it run.
+       send_gdb "continue\n"
+       # Wait a bit while the inferior gdb gets to its prompt.
+       sleep 1
+    } else {
+       set test "xgdb is at prompt"
+       gdb_test_multiple "continue" $test {
+           -re "GNU gdb \[0-9\.\]*.*Copyright \\(C\\) \[0-9\]* Free Software Foundation, Inc.*License GPLv3\\+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.*This is free software: you are free to change and redistribute it.*There is NO WARRANTY, to the extent permitted by law.  Type \"show copying\".*and \"show warranty\" for details.*This GDB was configured as .*$gdb_prompt $" {
+               pass $test
+           }
+       }
+
+       # set xgdb prompt so we can tell which is which
+       gdb_test_multiple "set prompt (xgdb) " "Set xgdb_prompt" {
+           -re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $" {
+               pass "Set xgdb prompt"
+           }
+       }
     }
-    
+
     # kill the xgdb process
     set description "send ^C to child process"
     send_gdb "\003"
@@ -443,18 +444,9 @@ GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$gdb_prompt $"\
     }
     
     set description "send SIGINT signal to child process"
-    send_gdb "signal SIGINT\n"
-    gdb_expect {
-       -re "Continuing with signal SIGINT.*$gdb_prompt $" {
-           pass "$description"
-       }
-       -re ".*$gdb_prompt $" {
-           fail "$description"
-       }
-       timeout {
-           fail "$description (timeout)"
-       }
-    }
+    gdb_test "signal SIGINT" \
+       "Continuing with signal SIGINT.*" \
+       "$description"
     
     # get a stack trace
     #
@@ -463,23 +455,10 @@ GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$gdb_prompt $"\
     # The testsuite failures may not be limited to just aout systems.
     setup_xfail "i*86-pc-linuxaout-gnu"
     set description "backtrace through signal handler"
-    send_gdb "backtrace\n"
-    gdb_expect {
+    gdb_test_multiple "backtrace" "$description" {
        -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
            pass "$description"
        }
-       -re ".*$gdb_prompt $" {
-           # On the alpha, we hit the infamous problem about gdb
-           # being unable to get the frame pointer (mentioned in
-           # gdb/README).  As it is intermittent, there is no way to
-           # XFAIL it which will give us an XPASS if the problem goes
-           # away.
-           setup_xfail "alpha*-*-osf*"
-           fail "$description"
-       }
-       timeout {
-           fail "$description (timeout)"
-       }
     }
 
 
@@ -491,43 +470,26 @@ GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$gdb_prompt $"\
     return 0
 }
 
-# Find a pathname to a file that we would execute if the shell was asked
-# to run $arg using the current PATH.
-
-proc find_gdb { arg } {
-
-    # If the arg directly specifies an existing executable file, then
-    # simply use it.
-
-    if [file executable $arg] then {
-       return $arg
-    }
-
-    set result [which $arg]
-    if [string match "/" [ string range $result 0 0 ]] then {
-       return $result
-    }
-
-    # If everything fails, just return the unqualified pathname as default
-    # and hope for best.
-
-    return $arg
-}
-
 # Run the test with self.
 # Copy the file executable file in case this OS doesn't like to edit its own
 # text space.
 
 set GDB_FULLPATH [find_gdb $GDB]
 
+if {[is_remote host]} {
+    set xgdb x$tool
+} else {
+    set xgdb [standard_output_file x$tool]
+}
+
 # Remove any old copy lying around.
-remote_file host delete x$tool
+remote_file host delete $xgdb
 
 gdb_start
-set file [remote_download host $GDB_FULLPATH x$tool]
-set result [test_with_self $file];
-gdb_exit;
-catch "remote_file host delete $file";
+set file [remote_download host $GDB_FULLPATH $xgdb]
+set result [test_with_self $file]
+gdb_exit
+catch "remote_file host delete $file"
 
 if {$result <0} then {
     warning "Couldn't test self"
This page took 0.029252 seconds and 4 git commands to generate.