Home | History | Annotate | Line # | Download | only in gdbscripts
lwps revision 1.5
      1  1.5    mrg #	$NetBSD: lwps,v 1.5 2019/05/30 07:17:35 mrg Exp $
      2  1.1     ad 
      3  1.1     ad define lwps
      4  1.1     ad 	set $i = 0
      5  1.1     ad 
      6  1.1     ad 	while ($i < 2)
      7  1.1     ad 		if ($i == 0)
      8  1.1     ad 			set $p = allproc.lh_first
      9  1.1     ad 		end
     10  1.1     ad 		if ($p)
     11  1.5    mrg 			printf "\t       lwp   pid   lid     flag              wchan\n"
     12  1.1     ad 		end
     13  1.1     ad 		while ($p)
     14  1.1     ad 			set $l = $p->p_lwps.lh_first
     15  1.1     ad 			set $j = 0
     16  1.1     ad 			while ($j < $p->p_nlwps)
     17  1.4   yamt 				printf "0x%016lx %5d %5d %8x 0x%016lx", \
     18  1.1     ad 					$l, $p->p_pid, $l->l_lid, $l->l_flag, $l->l_wchan
     19  1.1     ad 				if ($l->l_wmesg)
     20  1.1     ad 					printf " (%s)", (char *)$l->l_wmesg
     21  1.3    eeh # If the preceding command cannot dereference the pointer, use this instead:
     22  1.3    eeh #					printf " (%lx)", $l->l_wmesg
     23  1.1     ad 				end
     24  1.2  skrll 				set $l = $l->l_sibling.le_next
     25  1.1     ad 				printf "\n"
     26  1.1     ad 				set $j++
     27  1.1     ad 			end
     28  1.1     ad 			set $p = $p->p_list.le_next
     29  1.1     ad 		end
     30  1.1     ad 		set $i++
     31  1.1     ad 	end
     32  1.1     ad end
     33  1.3    eeh document lwps
     34  1.3    eeh ps for lwps
     35  1.3    eeh end
     36  1.3    eeh 
     37  1.5    mrg define procs
     38  1.5    mrg 	set $p = allproc.lh_first
     39  1.5    mrg 
     40  1.5    mrg 	printf "           paddr   pid     flag  stat    n         firstlwp          command\n"                       
     41  1.5    mrg 	while ($p)
     42  1.5    mrg 		printf "%16lx %5d %8x %4x %5d %16lx %16s\n", \
     43  1.5    mrg 			$p, $p->p_pid, $p->p_flag, $p->p_stat, \
     44  1.5    mrg 			$nlwps, $p->p_lwps.lh_first, \
     45  1.5    mrg 			(char *) $p->p_comm
     46  1.5    mrg 		set $p = $p->p_list.le_next
     47  1.5    mrg 	end
     48  1.5    mrg end
     49  1.5    mrg document procs
     50  1.5    mrg Show one line summary of all processes (ps)
     51  1.5    mrg end
     52  1.5    mrg 
     53  1.5    mrg define threadinfo
     54  1.5    mrg 	set $l = (struct lwp *)$arg0
     55  1.5    mrg 	set $pid = $arg1
     56  1.5    mrg 
     57  1.5    mrg 	set $j = 0
     58  1.5    mrg 	set $n = $l->l_name
     59  1.5    mrg 	#if ($n == 0)
     60  1.5    mrg 	#	set $n = (char *)""
     61  1.5    mrg 	#end
     62  1.5    mrg 	printf "           laddr   pid   lid     flag                 wchan\n"                       
     63  1.5    mrg 	printf "%16lx %5d %5d %8x      %16lx", \
     64  1.5    mrg 		$l, $pid, $l->l_lid, $l->l_flag, $l->l_wchan
     65  1.5    mrg 	if ($n != 0)
     66  1.5    mrg 		printf "  %16s", $n
     67  1.5    mrg 	end
     68  1.5    mrg         printf "\n\n"
     69  1.5    mrg         kvm proc $l
     70  1.5    mrg 	where
     71  1.5    mrg         printf "\n"
     72  1.5    mrg end
     73  1.5    mrg document threadinfo
     74  1.5    mrg Print out the stack and other data of a single thread.
     75  1.5    mrg end
     76  1.5    mrg 
     77  1.5    mrg define procthreadsaddr
     78  1.5    mrg 	set $p = (struct proc *)$arg0
     79  1.5    mrg 	set $l = $p->p_lwps.lh_first
     80  1.5    mrg 	set $nlwps = $p->p_nlwps
     81  1.5    mrg 	set $pid = $p->p_pid
     82  1.5    mrg 
     83  1.5    mrg 	printf "           paddr   pid     flag  stat    n         firstlwp          command\n"                       
     84  1.5    mrg 	printf "%16lx %5d %8x %4x %5d %16lx %16s\n\n", \
     85  1.5    mrg 		$p, $pid, $p->p_flag, $p->p_stat, \
     86  1.5    mrg 		$nlwps, $p->p_lwps.lh_first, \
     87  1.5    mrg 		(char *) $p->p_comm
     88  1.5    mrg 	while ($l)
     89  1.5    mrg 		threadinfo $l $pid
     90  1.5    mrg 		set $l = $l->l_sibling.le_next
     91  1.5    mrg 		set $j++
     92  1.5    mrg 	end
     93  1.5    mrg end
     94  1.5    mrg document procthreadsaddr
     95  1.5    mrg Print out the stack of all threads in a particular process,
     96  1.5    mrg found via struct proc * address.
     97  1.5    mrg end
     98  1.3    eeh 
     99  1.5    mrg define procthreadspid
    100  1.5    mrg 	set $pid = (unsigned)$arg0
    101  1.5    mrg 	set $p = allproc.lh_first
    102  1.5    mrg 	while ($p)
    103  1.5    mrg 		if ($pid == $p->p_pid)
    104  1.5    mrg 			procthreadsaddr $p
    105  1.5    mrg 			loop_break
    106  1.3    eeh 		end
    107  1.5    mrg 		set $p = $p->p_list.le_next
    108  1.5    mrg 	end
    109  1.5    mrg end
    110  1.5    mrg document procthreadspid
    111  1.5    mrg Print out the stack of all threads in a particular process,
    112  1.5    mrg found via PID.
    113  1.5    mrg end
    114  1.5    mrg 
    115  1.5    mrg define threadlist
    116  1.5    mrg 	set $p = allproc.lh_first
    117  1.5    mrg 	while ($p)
    118  1.5    mrg 		procthreadsaddr $p
    119  1.5    mrg 		set $p = $p->p_list.le_next
    120  1.3    eeh 	end
    121  1.3    eeh end
    122  1.3    eeh document threadlist
    123  1.3    eeh Print out the stack of all threads in the system.
    124  1.3    eeh end
    125  1.3    eeh 
    126  1.3    eeh define lock
    127  1.3    eeh 	set $ld = (struct lockdebug *)ld_rb_tree
    128  1.3    eeh 	set $a = $ld->ld_lock
    129  1.3    eeh 	set $b = (volatile void *)$arg0
    130  1.3    eeh 
    131  1.3    eeh 	while ($ld && $a != $b)
    132  1.3    eeh 		if ($a < $b) 
    133  1.3    eeh 			set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[1]
    134  1.3    eeh 		end
    135  1.3    eeh 		if ($a > $b) 
    136  1.3    eeh 			set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[0]
    137  1.3    eeh 		end
    138  1.3    eeh 		if ($ld == 0)
    139  1.3    eeh 			loop_break
    140  1.3    eeh 		end
    141  1.3    eeh 		set $a = $ld->ld_lock
    142  1.3    eeh # printf "a=%lx b=%lx ld=%lx a<b %d a>b %d\n", $a, $b, $ld,  ($a < $b), ($a > $b)
    143  1.3    eeh 	end
    144  1.3    eeh 	if ($ld)
    145  1.3    eeh 		printf "lock address : %#018lx type     : ", \
    146  1.3    eeh 			(long)$ld->ld_lock
    147  1.3    eeh 		if ($ld->ld_flags & 0x2)
    148  1.3    eeh 			printf "sleep/adaptive\n"
    149  1.3    eeh 		else
    150  1.3    eeh 			printf "spin\n"
    151  1.3    eeh 		end
    152  1.3    eeh 		printf "initialized  : %#018lx", \
    153  1.3    eeh 			(long)$ld->ld_initaddr
    154  1.3    eeh 		if ($ld->ld_lockops->lo_type == 0x2)
    155  1.3    eeh 			printf " interlock: %#018lx\n", $ld->ld_locked
    156  1.3    eeh 		else
    157  1.3    eeh 			printf "\n"
    158  1.3    eeh 			printf "shared holds : %18u exclusive: ", \
    159  1.3    eeh 				$ld->ld_shares
    160  1.3    eeh 			if (($ld->ld_flags & 0x1) != 0)
    161  1.3    eeh 				printf "1\n"
    162  1.3    eeh 			else
    163  1.3    eeh 				printf "0\n"
    164  1.3    eeh 			end
    165  1.3    eeh 			printf "shares wanted: %18u exclusive: %18u\n", \
    166  1.3    eeh 				(unsigned)$ld->ld_shwant, (unsigned)$ld->ld_exwant
    167  1.3    eeh 			printf "cpu last held: %18u\n", \
    168  1.3    eeh 				(unsigned)$ld->ld_cpu
    169  1.3    eeh 			printf "current lwp  : %#018lx last held: %#018lx\n", \
    170  1.3    eeh 				(long)0, (long)$ld->ld_lwp
    171  1.3    eeh 			printf "last locked  : %#018lx unlocked : %#018lx\n", \
    172  1.3    eeh 				(long)$ld->ld_locked, (long)$ld->ld_unlocked
    173  1.3    eeh 		end
    174  1.3    eeh 	end
    175  1.3    eeh end
    176  1.3    eeh document lock
    177  1.3    eeh Print out lockdebug info like ddb does.
    178  1.3    eeh end
    179