after gdb_run_cmd, gdb_expect -> gdb_test_multiple/gdb_test
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / sepdebug.exp
index 7bf91c43d217eaf83e6a113278648f14c93eb1cd..c5e019be3f6c48251cbb7ab74203ca1c42b61571 100644 (file)
@@ -1,6 +1,4 @@
-#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2002, 2003, 2004, 2007, 2008, 2009, 2010
-#   Free Software Foundation, Inc.
+#   Copyright 1988-2014 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
 # ".debug-id/ab/cdef.debug" file.
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
 
-set testfile "sepdebug"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}${EXEEXT}
+standard_testfile .c
 
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
     untested sepdebug.exp
@@ -46,7 +38,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 # Note: the procedure gdb_gnu_strip_debug will produce an executable called
 # ${binfile}, which is just like the executable ($binfile) but without
-# the debuginfo. Instead $binfile has a .gnudebuglink section which contains
+# the debuginfo. Instead $binfile has a .gnu_debuglink section which contains
 # the name of a debuginfo only file. This file will be stored in the
 # gdb.base/ subdirectory.
 
@@ -56,17 +48,32 @@ if [gdb_gnu_strip_debug $binfile] {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+#
+# PR gdb/9538.  Verify that symlinked executable still finds the separate
+# debuginfo.
+#
+set old_subdir $subdir
+set subdir [file join ${old_subdir} pr9538]
+
+# Cleanup any stale state.
+set new_name [standard_output_file ${testfile}${EXEEXT}]
+remote_exec build "rm -rf [file dirname $new_name]"
+
+remote_exec build "mkdir [file dirname $new_name]"
+remote_exec build "ln -s ${binfile} $new_name"
+clean_restart ${testfile}${EXEEXT}
 if { $gdb_file_cmd_debug_info != "debug" } then {
     fail "No debug information found."
 }
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
+# Restore subdir
+set subdir ${old_subdir}
+
+clean_restart ${testfile}${EXEEXT}
+if { $gdb_file_cmd_debug_info != "debug" } then {
+    fail "No debug information found."
 }
+
 #
 # test simple breakpoint setting commands
 #
@@ -141,17 +148,9 @@ gdb_test "break multi_line_while_conditional" \
     "Breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \
     "breakpoint at start of multi line while conditional"
 
-set bp_location5 [gdb_get_line_number "set breakpoint 5 here"]
 set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
 
-#
-# check to see what breakpoints are set
-#
-if [target_info exists gdb_stub] {
-    set main_line $bp_location5
-} else {
-    set main_line $bp_location6
-}
+set main_line $bp_location6
 
 set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
 set bp_location8 [gdb_get_line_number "set breakpoint 8 here"]
@@ -173,25 +172,14 @@ gdb_test "info break" \
 # handle arguments.
 # Huh? There doesn't *appear* to be anything that passes arguments
 # below.
-if [istarget "mips-idt-*"] then {
-    return
-}
 
 #
 # run until the breakpoint at main is hit. For non-stubs-using targets.
 #
 gdb_run_cmd
-gdb_expect {
-    -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
-       pass "run until function breakpoint"
-    }
-    -re "$gdb_prompt $" {
-       fail "run until function breakpoint"
-    }
-    timeout {
-       fail "run until function breakpoint (timeout)"
-    }
-}
+gdb_test "" \
+    "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*" \
+    "run until function breakpoint"
 
 #
 # run until the breakpoint at a line number
@@ -337,7 +325,8 @@ gdb_test_multiple "catch exec" $name {
 # on a nonexistent source line.
 #
 
-gdb_test "break 999" "No line 999 in file .*" \
+gdb_test_no_output "set breakpoint pending off"
+gdb_test "break 999" "No line 999 in the current file." \
     "break on non-existent source line"
 
 # Run to the desired default location. If not positioned here, the
@@ -379,16 +368,9 @@ gdb_test_multiple "break $bp_location1" \
        }
 }
 
-send_gdb "commands $expect_out(1,string)\n"
-send_gdb "silent\n"
-send_gdb "end\n"
-gdb_expect {
-  -re ".*$gdb_prompt $"\
-          {pass "set silent break bp_location1"}
-  timeout {fail "(timeout) set silent break bp_location1"}
-}
+gdb_test "commands $expect_out(1,string)\nsilent\nend" ">end" "set silent break bp_location1"
 
-gdb_test "info break $expect_out(1,string)\n" \
+gdb_test "info break $expect_out(1,string)" \
     "\[0-9\]*\[ \t\]*breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*" \
     "info silent break bp_location1"
 
@@ -416,7 +398,7 @@ gdb_test "break $bp_location12 thread foo" \
 #
 
 gdb_test "break $bp_location12 foo" \
-    "Junk at end of arguments.*" \
+    "malformed linespec error: unexpected string, \"foo\".*" \
     "breakpoint with trailing garbage disallowed"
 
 # Verify that GDB responds gracefully to a "clear" command that has
@@ -444,7 +426,7 @@ gdb_test "clear marker3" {Deleted breakpoints [0-9]+ [0-9]+.*}
 # Verify that a breakpoint can be set via a convenience variable.
 #
 
-gdb_test "set \$foo=$bp_location11" "" \
+gdb_test_no_output "set \$foo=$bp_location11" \
     "set convenience variable \$foo to bp_location11"
 
 gdb_test "break \$foo" \
@@ -584,14 +566,7 @@ proc test_next_with_recursion {} {
     # Run until we call factorial with 6
 
     gdb_run_cmd
-    gdb_expect {
-       -re "Break.* factorial .value=6. .*$gdb_prompt $" {}
-       -re ".*$gdb_prompt $" {
-           fail "run to factorial(6)";
-           gdb_suppress_tests;
-       }
-       timeout { fail "run to factorial(6) (timeout)" ; gdb_suppress_tests }
-    }
+    gdb_test "" "Break.* factorial .value=6. .*" "run to factorial(6)"
 
     # Continue until we call factorial recursively with 5.
 
@@ -649,7 +624,7 @@ proc test_next_with_recursion {} {
 
     if [target_info exists gdb,noresults] { gdb_suppress_tests }
   gdb_continue_to_end "recursive next test"
-   gdb_stop_suppressing_tests;
+   gdb_stop_suppressing_tests
 }
 
 test_next_with_recursion
@@ -658,118 +633,107 @@ test_next_with_recursion
 #********
 
 proc test_different_dir {type test_different_dir xfail} {
-    global srcdir subdir objdir binfile srcfile timeout gdb_prompt
-    global pf_prefix
-    global bp_location6 decimal hex
-
-    set old_pf_prefix $pf_prefix
-    append pf_prefix " $type:"
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_test "set debug-file-directory ${test_different_dir}" ".*" "set separate debug location"
-    gdb_load ${binfile}
-
-    if [target_info exists gdb_stub] {
-       gdb_step_for_stub;
-    }
-
-    #
-    # test break at function
-    #
-    if {$xfail} {
-       setup_xfail "*-*-*"
-    }
-    gdb_test "break main" \
-       "Breakpoint.*at.* file .*$srcfile, line.*" \
-       "breakpoint function, optimized file"
-
-    #
-    # test break at function
-    #
-    if {$xfail} {
-       setup_xfail "*-*-*"
-    }
-    gdb_test "break marker4" \
-       "Breakpoint.*at.* file .*$srcfile, line.*" \
-       "breakpoint small function, optimized file"
-
-    #
-    # run until the breakpoint at main is hit. For non-stubs-using targets.
-    #
-    gdb_run_cmd
-    if {$xfail} {
-       setup_xfail "*-*-*"
-    }
-    gdb_expect {
-       -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
-           pass "run until function breakpoint, optimized file"
+    with_test_prefix "$type" {
+       global srcdir subdir binfile srcfile timeout gdb_prompt
+       global bp_location6 decimal hex
+
+       gdb_exit
+       gdb_start
+       gdb_reinitialize_dir $srcdir/$subdir
+       gdb_test_no_output "set debug-file-directory ${test_different_dir}" \
+           "set separate debug location"
+       gdb_load ${binfile}
+
+       #
+       # test break at function
+       #
+       if {$xfail} {
+           setup_xfail "*-*-*"
        }
-       -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
-           pass "run until function breakpoint, optimized file (code motion)"
+       gdb_test "break main" \
+           "Breakpoint.*at.* file .*$srcfile, line.*" \
+           "breakpoint function, optimized file"
+
+       #
+       # test break at function
+       #
+       if {$xfail} {
+           setup_xfail "*-*-*"
        }
-       -re "$gdb_prompt $" {
-           fail "run until function breakpoint, optimized file"
+       gdb_test "break marker4" \
+           "Breakpoint.*at.* file .*$srcfile, line.*" \
+           "breakpoint small function, optimized file"
+
+       #
+       # run until the breakpoint at main is hit. For non-stubs-using targets.
+       #
+       gdb_run_cmd
+       if {$xfail} {
+           setup_xfail "*-*-*"
        }
-       timeout {
-           fail "run until function breakpoint, optimized file (timeout)"
+       set test "run until function breakpoint, optimized file"
+       gdb_test_multiple "" $test {
+           -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
+               pass $test
+           }
+           -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
+               pass "$test (code motion)"
+           }
        }
-    }
-
-    #
-    # run until the breakpoint at a small function
-    #
-
-    #
-    # Add a second pass pattern.  The behavior differs here between stabs
-    # and dwarf for one-line functions.  Stabs preserves two line symbols
-    # (one before the prologue and one after) with the same line number, 
-    # but dwarf regards these as duplicates and discards one of them.
-    # Therefore the address after the prologue (where the breakpoint is)
-    # has no exactly matching line symbol, and GDB reports the breakpoint
-    # as if it were in the middle of a line rather than at the beginning.
-
-    set bp_location13 [gdb_get_line_number "set breakpoint 13 here"]
-    set bp_location14 [gdb_get_line_number "set breakpoint 14 here"]
-    if {$xfail} {
-       setup_xfail "*-*-*"
-    }
 
-    gdb_test_multiple "continue" "run until breakpoint set at small function, optimized file" {
-       -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*$gdb_prompt $" {
-           pass "run until breakpoint set at small function, optimized file"
+       #
+       # run until the breakpoint at a small function
+       #
+
+       #
+       # Add a second pass pattern.  The behavior differs here between stabs
+       # and dwarf for one-line functions.  Stabs preserves two line symbols
+       # (one before the prologue and one after) with the same line number, 
+       # but dwarf regards these as duplicates and discards one of them.
+       # Therefore the address after the prologue (where the breakpoint is)
+       # has no exactly matching line symbol, and GDB reports the breakpoint
+       # as if it were in the middle of a line rather than at the beginning.
+
+       set bp_location13 [gdb_get_line_number "set breakpoint 13 here"]
+       set bp_location14 [gdb_get_line_number "set breakpoint 14 here"]
+       if {$xfail} {
+           setup_xfail "*-*-*"
        }
-       -re "Breakpoint $decimal, $hex in marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*$gdb_prompt $" {
-           pass "run until breakpoint set at small function, optimized file"
-       }
-       -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*$gdb_prompt $" {
-           # marker4() is defined at line 46 when compiled with -DPROTOTYPES
-           pass "run until breakpoint set at small function, optimized file (line bp_location14)"
+
+       gdb_test_multiple "continue" "run until breakpoint set at small function, optimized file" {
+           -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*$gdb_prompt $" {
+               pass "run until breakpoint set at small function, optimized file"
+           }
+           -re "Breakpoint $decimal, $hex in marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*$gdb_prompt $" {
+               pass "run until breakpoint set at small function, optimized file"
+           }
+           -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*$gdb_prompt $" {
+               # marker4() is defined at line 46 when compiled with -DPROTOTYPES
+               pass "run until breakpoint set at small function, optimized file (line bp_location14)"
+           }
        }
-    }
 
 
-    # Reset the default arguments for VxWorks
-    if [istarget "*-*-vxworks*"] {
-       set timeout 10
-       verbose "Timeout is now $timeout seconds" 2
-       gdb_test_no_output "set args main"
-    }
+       # Reset the default arguments for VxWorks
+       if [istarget "*-*-vxworks*"] {
+           set timeout 10
+           verbose "Timeout is now $timeout seconds" 2
+           gdb_test_no_output "set args main"
+       }
 
-    set pf_prefix $old_pf_prefix
-# proc test_different_dir
+       # proc test_different_dir
+    }
 }
 
 
 # now move the .debug file to a different location so that we can test
 # the "set debug-file-directory" command.
 
-set different_dir "${objdir}/${subdir}/${testfile}.dir"
-set debugfile "${different_dir}/${objdir}/${subdir}/${testfile}.debug"
+set different_dir [standard_output_file ${testfile}.dir]
+set debugfile "${different_dir}/[standard_output_file ${testfile}.debug]"
 remote_exec build "rm -rf $different_dir"
 remote_exec build "mkdir -p [file dirname $debugfile]"
-remote_exec build "mv -f ${objdir}/${subdir}/${testfile}.debug $debugfile"
+remote_exec build "mv -f [standard_output_file ${testfile}.debug] $debugfile"
 
 test_different_dir debuglink $different_dir 0
 
@@ -777,17 +741,17 @@ test_different_dir debuglink $different_dir 0
 # Test CRC mismatch is reported.
 
 if {[build_executable sepdebug.exp sepdebug2 sepdebug2.c debug] != -1
-    && ![gdb_gnu_strip_debug ${objdir}/${subdir}/sepdebug2]} {
+    && ![gdb_gnu_strip_debug [standard_output_file sepdebug2]]} {
 
-    remote_exec build "cp ${debugfile} ${objdir}/${subdir}/sepdebug2.debug"
+    remote_exec build "cp ${debugfile} [standard_output_file sepdebug2.debug]"
 
     gdb_exit
     gdb_start
     gdb_reinitialize_dir $srcdir/$subdir
 
-    set escapedobjdirsubdir [string_to_regexp ${objdir}/${subdir}]
+    set escapedobjdirsubdir [string_to_regexp [standard_output_file {}]]
 
-    gdb_test "file ${objdir}/${subdir}/sepdebug2" "warning: the debug information found in \"${escapedobjdirsubdir}/sepdebug2\\.debug\" does not match \"${escapedobjdirsubdir}/sepdebug2\" \\(CRC mismatch\\)\\..*\\(no debugging symbols found\\).*" "CRC mismatch is reported"
+    gdb_test "file [standard_output_file sepdebug2]" "warning: the debug information found in \"${escapedobjdirsubdir}/sepdebug2\\.debug\" does not match \"${escapedobjdirsubdir}/sepdebug2\" \\(CRC mismatch\\)\\..*\\(no debugging symbols found\\).*" "CRC mismatch is reported"
 }
 
 
@@ -812,17 +776,17 @@ if ![string compare $build_id_debug_filename ""] then {
        pass $test
     }
 
-    file mkdir [file dirname ${objdir}/${subdir}/${build_id_debug_filename}]
-    remote_exec build "mv $debugfile ${objdir}/${subdir}/${build_id_debug_filename}"
+    file mkdir [file dirname [standard_output_file ${build_id_debug_filename}]]
+    remote_exec build "mv $debugfile [standard_output_file ${build_id_debug_filename}]"
 
-    test_different_dir build-id "${objdir}/${subdir}" $xfail
+    test_different_dir build-id [standard_output_file {}] $xfail
 
     # Test also multiple directories can be specified.  Without the build-id
     # reference GDB would find the separate debug info just at the same
     # location as the executable file.
 
-    test_different_dir multiple-dirs "/doesnotexist:${objdir}/${subdir}" $xfail
+    test_different_dir multiple-dirs "/doesnotexist:[standard_output_file {}]" $xfail
 
     # Spare debug files may confuse testsuite runs in the future.
-    remote_exec build "rm -f ${objdir}/${subdir}/${build_id_debug_filename}"
+    remote_exec build "rm -f [standard_output_file ${build_id_debug_filename}]"
 }
This page took 0.043684 seconds and 4 git commands to generate.