]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* linux-nat.c (count_events_callback, select_event_lwp_callback): Only
authorDaniel Jacobowitz <drow@false.org>
Sun, 27 Jul 2008 21:05:37 +0000 (21:05 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sun, 27 Jul 2008 21:05:37 +0000 (21:05 +0000)
report events from resumed threads.

* gdb.threads/schedlock.exp (get_args): Update to work for any
value of NUM.
(Top level): Report the number of threads that did not resume.

gdb/ChangeLog
gdb/linux-nat.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/schedlock.exp

index e58b216a7bfc69cdb3a86c64d3b80500c5972d56..7cc48ef920103060d74ad99093cd79a61a4a1669 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-27  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * linux-nat.c (count_events_callback, select_event_lwp_callback): Only
+       report events from resumed threads.
+
 2008-07-27  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * mips-linux-tdep.c (mips_linux_syscall_next_pc): New function.
index 967beb4a9f85c94837120ff13330f15e80d847fe..5ccff504455f2c695e03b854edeaec390069bee7 100644 (file)
@@ -2319,8 +2319,8 @@ count_events_callback (struct lwp_info *lp, void *data)
 
   gdb_assert (count != NULL);
 
-  /* Count only LWPs that have a SIGTRAP event pending.  */
-  if (lp->status != 0
+  /* Count only resumed LWPs that have a SIGTRAP event pending.  */
+  if (lp->status != 0 && lp->resumed
       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
     (*count)++;
 
@@ -2347,8 +2347,8 @@ select_event_lwp_callback (struct lwp_info *lp, void *data)
 
   gdb_assert (selector != NULL);
 
-  /* Select only LWPs that have a SIGTRAP event pending. */
-  if (lp->status != 0
+  /* Select only resumed LWPs that have a SIGTRAP event pending. */
+  if (lp->status != 0 && lp->resumed
       && WIFSTOPPED (lp->status) && WSTOPSIG (lp->status) == SIGTRAP)
     if ((*selector)-- == 0)
       return 1;
index 867eff9e5133d6fa8cf19610ade951f620cefa5c..ae66c01762f8e533b598516294583a8821fe2dc2 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-27  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * gdb.threads/schedlock.exp (get_args): Update to work for any
+       value of NUM.
+       (Top level): Report the number of threads that did not resume.
+
 2008-07-27  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * gdb.dwarf2/dw2-compressed.S: Also define __start.
index f6b319cd7e8c71d04e5a90bdba092f153056fcec..8faee9fdb87bb27810fa443d109b38b4aad2a47f 100644 (file)
@@ -45,14 +45,25 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
 proc get_args { } {
   global list_count
   global gdb_prompt
+  global NUM
+
+  set pattern "(\[0-9\]+)"
+  for {set i 1} {[expr $i < $NUM]} {incr i} {
+    append pattern ", (\[0-9\]+)"
+  }
 
   send_gdb "print args\n"
   gdb_expect {
-    -re "\\\$\[0-9\]+ = {(\[0-9\]+), (\[0-9\]+)}.*$gdb_prompt"
+    -re "\\\$\[0-9\]+ = {$pattern}.*$gdb_prompt"
       {
        set list_count [expr $list_count + 1]
        pass "listed args ($list_count)"
-       return [list $expect_out(1,string) $expect_out(2,string)]
+
+       set result ""
+       for {set i 1} {[expr $i <= $NUM]} {incr i} {
+         lappend result $expect_out($i,string)
+       }
+       return $result
       }
     -re "$gdb_prompt"
       {
@@ -202,16 +213,16 @@ my_continue "initial"
 
 set cont_args [get_args]
 
-set ok 1
+set bad 0
 for {set i 0} {[expr $i < $NUM]} {set i [expr $i + 1]} {
   if {[lindex $start_args $i] == [lindex $cont_args $i]} {
-    set ok 0
+    incr bad
   }
 }
-if { $ok } {
+if { $bad == 0 } {
   pass "all threads alive"
 } else {
-  fail "all threads alive"
+  fail "all threads alive ($bad/$NUM did not run)"
 }
 
 # We can't change threads, unfortunately, in current GDB.  Use