gdb/testsuite/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 14 Jan 2010 21:12:00 +0000 (21:12 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 14 Jan 2010 21:12:00 +0000 (21:12 +0000)
* gdb.base/break-interp-lib.c: Include unistd.h, assert.h and stdio.h.
(libfunc): New parameter action.  Implement also selectable "sleep".
* gdb.base/break-interp-main.c: Include assert.h.
(libfunc): New parameter action.
(main): New parameters argc and argv.  Assert argc.  Pass argv.
* gdb.base/break-interp.exp (test_core): Pass the "segv" argument.
(test_attach): New proc.
(test_ld): Pass new "segv" exec parameter.  Call also test_attach.
* lib/gdb.exp (core_find): New parameter arg.  Pass it to $binfile.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/break-interp-lib.c
gdb/testsuite/gdb.base/break-interp-main.c
gdb/testsuite/gdb.base/break-interp.exp
gdb/testsuite/lib/gdb.exp

index 9a571ade133c522ed7b0b480b4e3533d9e31369c..57dc1aecf68cb521c7a29422b9c45495a933034d 100644 (file)
@@ -1,3 +1,15 @@
+2010-01-14  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.base/break-interp-lib.c: Include unistd.h, assert.h and stdio.h.
+       (libfunc): New parameter action.  Implement also selectable "sleep".
+       * gdb.base/break-interp-main.c: Include assert.h.
+       (libfunc): New parameter action.
+       (main): New parameters argc and argv.  Assert argc.  Pass argv.
+       * gdb.base/break-interp.exp (test_core): Pass the "segv" argument.
+       (test_attach): New proc.
+       (test_ld): Pass new "segv" exec parameter.  Call also test_attach.
+       * lib/gdb.exp (core_find): New parameter arg.  Pass it to $binfile.
+
 2010-01-14  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.base/break-interp.exp (test_core): New proc.
index c103da34626be50930ccb8355f00bbd3c9f413a3..9ca943e99886c78a611901838852ec4e4d839578 100644 (file)
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <signal.h>
+#include <unistd.h>
+#include <assert.h>
+#include <stdio.h>
 
 void
-libfunc (void)
+libfunc (const char *action)
 {
-  raise (SIGSEGV);
+  assert (action != NULL);
+
+  if (strcmp (action, "segv") == 0)
+    raise (SIGSEGV);
+
+  if (strcmp (action, "sleep") == 0)
+    {
+      puts ("sleeping");
+      fflush (stdout);
+
+      sleep (60);
+    }
+
+  assert (0);
 }
index 57b81f6ffa5128a620cf34118c5d7705f0365b10..e12ec2bd0881bb6338d1e830d425433f6e3495b9 100644 (file)
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-extern void libfunc (void);
+#include <assert.h>
+
+extern void libfunc (const char *action);
 
 int
-main (void)
+main (int argc, char **argv)
 {
-  libfunc ();
+  assert (argc == 2);
+
+  libfunc (argv[1]);
 
   return 0;
 }
index 553bbc6266c6784ce989ffb0b5644da25aa2de6e..d1c36ede4168e263fb60077bed439a9052ef60f5 100644 (file)
@@ -240,7 +240,7 @@ proc reach {func command} {
 proc test_core {file} {
     global srcdir subdir gdb_prompt
 
-    set corefile [core_find $file]
+    set corefile [core_find $file {} "segv"]
     if {$corefile == ""} {
        return
     }
@@ -258,6 +258,44 @@ proc test_core {file} {
     gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "core main bt"
 }
 
+proc test_attach {file} {
+    global board_info
+
+    gdb_exit
+
+    set test "sleep function started"
+
+    set command "${file} sleep"
+    set res [remote_spawn host $command];
+    if { $res < 0 || $res == "" } {
+       perror "Spawning $command failed."
+       fail $test
+       return
+    }
+    set pid [exp_pid -i $res]
+    gdb_expect {
+       -re "sleeping\r\n" {
+           pass $test
+       }
+       eof {
+           fail "$test (eof)"
+           return
+       }
+       timeout {
+           fail "$test (timeout)"
+           return
+       }
+    }
+
+    gdb_exit
+    gdb_start
+    gdb_test "attach $pid" "Attaching to process $pid\r\n.*" "attach"
+    gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "attach main bt"
+    gdb_exit
+
+    remote_exec host "kill -9 $pid"
+}
+
 proc test_ld {file ifmain trynosym} {
     global srcdir subdir gdb_prompt
 
@@ -270,7 +308,7 @@ proc test_ld {file ifmain trynosym} {
     gdb_reinitialize_dir $srcdir/$subdir
     gdb_load $file
 
-    reach "dl_main" run
+    reach "dl_main" "run segv"
 
     gdb_test "bt" "#0 +\[^\r\n\]*\\mdl_main\\M.*" "dl bt"
 
@@ -282,6 +320,8 @@ proc test_ld {file ifmain trynosym} {
        gdb_test "bt" "#0 +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#1 +\[^\r\n\]*\\mmain\\M.*" "main bt"
 
        test_core $file
+
+       test_attach $file
     }
 
     if !$trynosym {
index ee3061e1fae173a9fef586e66de869c8c4df5c4d..9b06a2f7503a33caef1e0c80284e7509d8d1ce28 100644 (file)
@@ -3121,7 +3121,7 @@ if {[info exists TRANSCRIPT]} {
   }
 }
 
-proc core_find {binfile {deletefiles {}}} {
+proc core_find {binfile {deletefiles {}} {arg ""}} {
     global objdir subdir
 
     set destcore "$binfile.core"
@@ -3143,7 +3143,7 @@ proc core_find {binfile {deletefiles {}}} {
     set found 0
     set coredir "${objdir}/${subdir}/coredir.[getpid]"
     file mkdir $coredir
-    catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile}; true) >/dev/null 2>&1\""
+    catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile} ${arg}; true) >/dev/null 2>&1\""
     #      remote_exec host "${binfile}"
     foreach i "${coredir}/core ${coredir}/core.coremaker.c ${binfile}.core" {
        if [remote_file build exists $i] {