Home | History | Annotate | Line # | Download | only in gdbscripts
      1  1.6  skrll #	$NetBSD: lwps,v 1.6 2019/07/17 09:14:24 skrll 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 threadinfo
     38  1.5    mrg 	set $l = (struct lwp *)$arg0
     39  1.5    mrg 	set $pid = $arg1
     40  1.5    mrg 
     41  1.5    mrg 	set $j = 0
     42  1.5    mrg 	set $n = $l->l_name
     43  1.5    mrg 	#if ($n == 0)
     44  1.5    mrg 	#	set $n = (char *)""
     45  1.5    mrg 	#end
     46  1.5    mrg 	printf "           laddr   pid   lid     flag                 wchan\n"                       
     47  1.5    mrg 	printf "%16lx %5d %5d %8x      %16lx", \
     48  1.5    mrg 		$l, $pid, $l->l_lid, $l->l_flag, $l->l_wchan
     49  1.5    mrg 	if ($n != 0)
     50  1.5    mrg 		printf "  %16s", $n
     51  1.5    mrg 	end
     52  1.5    mrg         printf "\n\n"
     53  1.5    mrg         kvm proc $l
     54  1.5    mrg 	where
     55  1.5    mrg         printf "\n"
     56  1.5    mrg end
     57  1.5    mrg document threadinfo
     58  1.5    mrg Print out the stack and other data of a single thread.
     59  1.5    mrg end
     60  1.5    mrg 
     61  1.5    mrg define procthreadsaddr
     62  1.5    mrg 	set $p = (struct proc *)$arg0
     63  1.5    mrg 	set $l = $p->p_lwps.lh_first
     64  1.5    mrg 	set $nlwps = $p->p_nlwps
     65  1.5    mrg 	set $pid = $p->p_pid
     66  1.5    mrg 
     67  1.5    mrg 	printf "           paddr   pid     flag  stat    n         firstlwp          command\n"                       
     68  1.5    mrg 	printf "%16lx %5d %8x %4x %5d %16lx %16s\n\n", \
     69  1.5    mrg 		$p, $pid, $p->p_flag, $p->p_stat, \
     70  1.5    mrg 		$nlwps, $p->p_lwps.lh_first, \
     71  1.5    mrg 		(char *) $p->p_comm
     72  1.5    mrg 	while ($l)
     73  1.5    mrg 		threadinfo $l $pid
     74  1.5    mrg 		set $l = $l->l_sibling.le_next
     75  1.5    mrg 		set $j++
     76  1.5    mrg 	end
     77  1.5    mrg end
     78  1.5    mrg document procthreadsaddr
     79  1.5    mrg Print out the stack of all threads in a particular process,
     80  1.5    mrg found via struct proc * address.
     81  1.5    mrg end
     82  1.3    eeh 
     83  1.5    mrg define procthreadspid
     84  1.5    mrg 	set $pid = (unsigned)$arg0
     85  1.5    mrg 	set $p = allproc.lh_first
     86  1.5    mrg 	while ($p)
     87  1.5    mrg 		if ($pid == $p->p_pid)
     88  1.5    mrg 			procthreadsaddr $p
     89  1.5    mrg 			loop_break
     90  1.3    eeh 		end
     91  1.5    mrg 		set $p = $p->p_list.le_next
     92  1.5    mrg 	end
     93  1.5    mrg end
     94  1.5    mrg document procthreadspid
     95  1.5    mrg Print out the stack of all threads in a particular process,
     96  1.5    mrg found via PID.
     97  1.5    mrg end
     98  1.5    mrg 
     99  1.5    mrg define threadlist
    100  1.5    mrg 	set $p = allproc.lh_first
    101  1.5    mrg 	while ($p)
    102  1.5    mrg 		procthreadsaddr $p
    103  1.5    mrg 		set $p = $p->p_list.le_next
    104  1.3    eeh 	end
    105  1.3    eeh end
    106  1.3    eeh document threadlist
    107  1.3    eeh Print out the stack of all threads in the system.
    108  1.3    eeh end
    109  1.3    eeh 
    110  1.3    eeh define lock
    111  1.3    eeh 	set $ld = (struct lockdebug *)ld_rb_tree
    112  1.3    eeh 	set $a = $ld->ld_lock
    113  1.3    eeh 	set $b = (volatile void *)$arg0
    114  1.3    eeh 
    115  1.3    eeh 	while ($ld && $a != $b)
    116  1.3    eeh 		if ($a < $b) 
    117  1.3    eeh 			set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[1]
    118  1.3    eeh 		end
    119  1.3    eeh 		if ($a > $b) 
    120  1.3    eeh 			set $ld = (struct lockdebug *)$ld->ld_rb_node.rb_nodes[0]
    121  1.3    eeh 		end
    122  1.3    eeh 		if ($ld == 0)
    123  1.3    eeh 			loop_break
    124  1.3    eeh 		end
    125  1.3    eeh 		set $a = $ld->ld_lock
    126  1.3    eeh # printf "a=%lx b=%lx ld=%lx a<b %d a>b %d\n", $a, $b, $ld,  ($a < $b), ($a > $b)
    127  1.3    eeh 	end
    128  1.3    eeh 	if ($ld)
    129  1.3    eeh 		printf "lock address : %#018lx type     : ", \
    130  1.3    eeh 			(long)$ld->ld_lock
    131  1.3    eeh 		if ($ld->ld_flags & 0x2)
    132  1.3    eeh 			printf "sleep/adaptive\n"
    133  1.3    eeh 		else
    134  1.3    eeh 			printf "spin\n"
    135  1.3    eeh 		end
    136  1.3    eeh 		printf "initialized  : %#018lx", \
    137  1.3    eeh 			(long)$ld->ld_initaddr
    138  1.3    eeh 		if ($ld->ld_lockops->lo_type == 0x2)
    139  1.3    eeh 			printf " interlock: %#018lx\n", $ld->ld_locked
    140  1.3    eeh 		else
    141  1.3    eeh 			printf "\n"
    142  1.3    eeh 			printf "shared holds : %18u exclusive: ", \
    143  1.3    eeh 				$ld->ld_shares
    144  1.3    eeh 			if (($ld->ld_flags & 0x1) != 0)
    145  1.3    eeh 				printf "1\n"
    146  1.3    eeh 			else
    147  1.3    eeh 				printf "0\n"
    148  1.3    eeh 			end
    149  1.3    eeh 			printf "shares wanted: %18u exclusive: %18u\n", \
    150  1.3    eeh 				(unsigned)$ld->ld_shwant, (unsigned)$ld->ld_exwant
    151  1.3    eeh 			printf "cpu last held: %18u\n", \
    152  1.3    eeh 				(unsigned)$ld->ld_cpu
    153  1.3    eeh 			printf "current lwp  : %#018lx last held: %#018lx\n", \
    154  1.3    eeh 				(long)0, (long)$ld->ld_lwp
    155  1.3    eeh 			printf "last locked  : %#018lx unlocked : %#018lx\n", \
    156  1.3    eeh 				(long)$ld->ld_locked, (long)$ld->ld_unlocked
    157  1.3    eeh 		end
    158  1.3    eeh 	end
    159  1.3    eeh end
    160  1.3    eeh document lock
    161  1.3    eeh Print out lockdebug info like ddb does.
    162  1.3    eeh end
    163