Sync usage with man page.
[netbsd-mini2440.git] / sys / gdbscripts / lwps
blob9f7459ec9e939f113129d95b5405087d6589cfec
1 #       $NetBSD: lwps,v 1.2 2009/07/28 10:38:20 skrll Exp $
3 define lwps
4         set $i = 0
6         while ($i < 2)
7                 if ($i == 0)
8                         set $p = allproc.lh_first
9                 end
10                 if ($p)
11                         printf "\t     lwp   pid   lid     flag            wchan\n"
12                 end
13                 while ($p)
14                         set $l = $p->p_lwps.lh_first
15                         set $j = 0
16                         while ($j < $p->p_nlwps)
17                                 printf "0x%16lx %5d %5d %8x 0x%16lx", \
18                                         $l, $p->p_pid, $l->l_lid, $l->l_flag, $l->l_wchan
19                                 if ($l->l_wmesg)
20                                         printf " (%s)", (char *)$l->l_wmesg
21 # If the preceding command cannot dereference the pointer, use this instead:
22 #                                       printf " (%lx)", $l->l_wmesg
23                                 end
24                                 set $l = $l->l_sibling.le_next
25                                 printf "\n"
26                                 set $j++
27                         end
28                         set $p = $p->p_list.le_next
29                 end
30                 set $i++
31         end
32 end
33 document lwps
34 ps for lwps
35 end
37 define threadlist
38         set $i = 0
40         while ($i < 2)
41                 if ($i == 0)
42                         set $p = allproc.lh_first
43                 end
44                 while ($p)
45                         set $l = $p->p_lwps.lh_first
46                         set $j = 0
47                         while ($j < $p->p_nlwps)
48                                 printf "\n"
49                         printf "proc: %16lx %5d %8x %4x %5d %16lx %s", \
50                                 $p, $p->p_pid, \
51                                 $p->p_flag, $p->p_stat, $p->p_nlwps, $p->p_lwps.lh_first, \
52                                 (char *) $p->p_comm
53                         printf "\n"
54                                 printf "Thread: %16lx %5d %5d %8x %16lx\n", \
55                                         $l, $p->p_pid, $l->l_lid, $l->l_flag, $l->l_wchan
56                                 kvm proc $l
57                                 where
58                                 printf "\n"
59                                 printf "\n"
60                                 set $l = $l->l_sibling.le_next
61                                 set $j++
62                 end
63                         set $p = $p->p_list.le_next
64                 end
65                 set $i++
66         end
67 end
68 document threadlist
69 Print out the stack of all threads in the system.
70 end
72 define lock
73         set $ld = (struct lockdebug *)ld_rb_tree
74         set $a = $ld->ld_lock
75         set $b = (volatile void *)$arg0
77         while ($ld && $a != $b)
78                 if ($a < $b) 
79                         set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[1]
80                 end
81                 if ($a > $b) 
82                         set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[0]
83                 end
84                 if ($ld == 0)
85                         loop_break
86                 end
87                 set $a = $ld->ld_lock
88 # printf "a=%lx b=%lx ld=%lx a<b %d a>b %d\n", $a, $b, $ld,  ($a < $b), ($a > $b)
89         end
90         if ($ld)
91                 printf "lock address : %#018lx type     : ", \
92                         (long)$ld->ld_lock
93                 if ($ld->ld_flags & 0x2)
94                         printf "sleep/adaptive\n"
95                 else
96                         printf "spin\n"
97                 end
98                 printf "initialized  : %#018lx", \
99                         (long)$ld->ld_initaddr
100                 if ($ld->ld_lockops->lo_type == 0x2)
101                         printf " interlock: %#018lx\n", $ld->ld_locked
102                 else
103                         printf "\n"
104                         printf "shared holds : %18u exclusive: ", \
105                                 $ld->ld_shares
106                         if (($ld->ld_flags & 0x1) != 0)
107                                 printf "1\n"
108                         else
109                                 printf "0\n"
110                         end
111                         printf "shares wanted: %18u exclusive: %18u\n", \
112                                 (unsigned)$ld->ld_shwant, (unsigned)$ld->ld_exwant
113                         printf "cpu last held: %18u\n", \
114                                 (unsigned)$ld->ld_cpu
115                         printf "current lwp  : %#018lx last held: %#018lx\n", \
116                                 (long)0, (long)$ld->ld_lwp
117                         printf "last locked  : %#018lx unlocked : %#018lx\n", \
118                                 (long)$ld->ld_locked, (long)$ld->ld_unlocked
119                 end
120         end
122 document lock
123 Print out lockdebug info like ddb does.