* gdb.base/call-signal-resume.exp, gdb.base/unwindonsignal.exp: Skip
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / reread.exp
index 05fc0542238b36c1b0d2c3acb88c6c5ac263d761..0a40b4aae2530f2d9c2995551de9067502ce062d 100644 (file)
@@ -1,21 +1,18 @@
-# Copyright (C) 1998 Free Software Foundation, Inc.
+# Copyright 1998, 2000, 2001, 2007, 2008, 2009, 2010
+# 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.  
-
-# Please email any bugs, comments, and/or additions to this file to:
-# bug-gdb@prep.ai.mit.edu
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 if $tracelevel then {
        strace $tracelevel
@@ -30,26 +27,29 @@ set prototypes 1
 
 set testfile1 "reread1"
 set srcfile1 ${testfile1}.c
-set binfile1 ${objdir}/${subdir}/${testfile1}
+# Cygwin needs $EXEEXT.
+set binfile1 ${objdir}/${subdir}/${testfile1}$EXEEXT
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug additional_flags=-w}] != "" } {
-    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug nowarnings}] != "" } {
+    untested reread.exp
+    return -1
 }
 
 # build the second test case
 
 set testfile2 "reread2"
 set srcfile2 ${testfile2}.c
-set binfile2 ${objdir}/${subdir}/${testfile2}
+set binfile2 ${objdir}/${subdir}/${testfile2}$EXEEXT
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug additional_flags=-w}] != "" } {
-    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings}] != "" } {
+    untested reread.exp
+    return -1
 }
 
 # Start with a fresh gdb.
 
 set testfile "reread"
-set binfile ${objdir}/${subdir}/${testfile}
+set binfile ${objdir}/${subdir}/${testfile}$EXEEXT
 
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
@@ -85,27 +85,100 @@ gdb_expect {
 }
 
 # Restore first executable to its original name, and move
-# second executable into its place.
+# second executable into its place.  Ensure that the new
+# executable is at least a second newer than the old.
 
 gdb_test "shell mv ${binfile} ${binfile1}" "" ""
 gdb_test "shell mv ${binfile2} ${binfile}" "" ""
+gdb_test "shell sleep 1" "" ""
 gdb_test "shell touch ${binfile}" "" ""
 
 # Run a second time; GDB should detect that the executable has changed
 # and reset the breakpoints correctly.
 # Should see "Breakpoint 1, foo () at reread2.c:9"
 
-gdb_run_cmd
-gdb_expect {
-#    -re ".*re-reading symbols.*Breakpoint.* foo .* at .*$srcfile2:9.*$gdb_prompt $" {}
-    -re ".*Breakpoint.* foo .* at .*:9.*$gdb_prompt $" {
-       pass "run to foo() second time ";
+set prms_id 0
+
+if [is_remote target] {
+    unsupported "run to foo() second time ";
+} else {
+    gdb_run_cmd
+    gdb_expect {
+       #    -re ".*re-reading symbols.*Breakpoint.* foo .* at .*$srcfile2:9.*$gdb_prompt $" {}
+       -re ".*Breakpoint.* foo .* at .*:9.*$gdb_prompt $" {
+           pass "run to foo() second time ";
+       }
+       -re ".*$gdb_prompt $" {
+           fail "run to foo() second time";
+           gdb_suppress_tests;
+       }
+       timeout { 
+           fail "run to foo() second time (timeout)" ; 
+           gdb_suppress_tests 
+       }
     }
-    -re ".*$gdb_prompt $" {
-       fail "run to foo() second time";
-       gdb_suppress_tests;
+}
+
+
+### Second pass: verify that GDB checks the executable file's
+### timestamp when the program is *restarted*, not just when it exits.
+
+if [is_remote target] {
+    unsupported "second pass: GDB should check for changes before running"
+} else {
+
+    # Put the older executable back in place.
+    gdb_test "shell mv ${binfile} ${binfile2}" "" ""
+    gdb_test "shell mv ${binfile1} ${binfile}" "" ""
+
+    # Restart GDB entirely.
+    gdb_start
+    gdb_reinitialize_dir $srcdir/$subdir
+    gdb_load ${binfile}
+
+    # Set a breakpoint on foo and run to it.
+    gdb_test "break foo" \
+            "Breakpoint.*at.* file .*$srcfile1, line 14.*" \
+            "second pass: breakpoint foo in first file"
+    gdb_run_cmd
+    gdb_expect {
+        -re ".*Breakpoint.* foo .* at .*$srcfile1:14.*$gdb_prompt $"  {
+            pass "second pass: run to foo()";
+        }
+        -re ".*$gdb_prompt $" {
+            fail "second pass: run to foo()";
+            gdb_suppress_tests;
+        }
+        timeout {
+            fail "second pass: run to foo() (timeout)"
+            gdb_suppress_tests
+        }
+    }
+
+    # This time, let the program run to completion.  If GDB checks the
+    # executable file's timestamp now, it won't notice any change.
+    gdb_test "continue" ".*Program exited.*" \
+            "second pass: continue to completion"
+    
+    # Now move the newer executable into place, and re-run.  GDB
+    # should still notice that the executable file has changed,
+    # and still re-set the breakpoint appropriately.
+    gdb_test "shell mv ${binfile} ${binfile1}" "" ""
+    gdb_test "shell mv ${binfile2} ${binfile}" "" ""
+    gdb_run_cmd
+    gdb_expect {
+       -re ".*Breakpoint.* foo .* at .*:9.*$gdb_prompt $" {
+           pass "second pass: run to foo() second time ";
+       }
+       -re ".*$gdb_prompt $" {
+           fail "second pass: run to foo() second time";
+           gdb_suppress_tests;
+       }
+       timeout { 
+           fail "second pass: run to foo() second time (timeout)" ; 
+           gdb_suppress_tests 
+       }
     }
-    timeout { fail "run to foo() second time (timeout)" ; gdb_suppress_tests }
 }
 
 # End of tests.
This page took 0.067679 seconds and 4 git commands to generate.