Reviewed and approved by Jim Blandy
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / reread.exp
index ccdabd5306a464b5a8c347535c634adad1196b4f..5e17e11df7b909bcff0d9ab29c980874339467ab 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1998 Free Software Foundation, Inc.
+# Copyright 1998, 2000, 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
@@ -30,7 +30,8 @@ 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."
@@ -40,7 +41,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {d
 
 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."
@@ -49,7 +50,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {d
 # 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
@@ -86,7 +87,7 @@ gdb_expect {
 
 # Restore first executable to its original name, and move
 # second executable into its place.  Ensure that the new
-# executable is at least a second older than the old.
+# executable is at least a second newer than the old.
 
 gdb_test "shell mv ${binfile} ${binfile1}" "" ""
 gdb_test "shell mv ${binfile2} ${binfile}" "" ""
@@ -97,17 +98,88 @@ gdb_test "shell touch ${binfile}" "" ""
 # 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.025313 seconds and 4 git commands to generate.