11.2Smrg#	$NetBSD: kernhist,v 1.2 2016/05/12 00:35:10 mrg Exp $
21.1Smrg
31.1Smrg# by mrg and skrll
41.1Smrg
51.1Smrgdefine kernhist
61.1Smrg	dont-repeat
71.1Smrg
81.1Smrg	set $hist = (struct kern_history *)&$arg0
91.1Smrg	set $histf = $hist->f
101.1Smrg	set $histn = $hist->n
111.1Smrg	set $lcv = $histf
121.1Smrg
131.1Smrg	printf "Kernel history %s has %d entries (next free %d)\n", $hist->name, $histn, $histf
141.1Smrg	while (1)
151.2Smrg		set $e = $hist->e[$lcv]
161.2Smrg		set $fmt = $e.fmt
171.1Smrg
181.1Smrg		if ($fmt)
191.2Smrg			printf "%06lx.%06d ", $e.tv.tv_sec, $e.tv.tv_usec
201.2Smrg			printf "%s#%ld@%d: ", $e.fn, $e.call, $e.cpunum
211.2Smrg			printf "%s: %lx %lx %lx %lx\n", $fmt, $e.v[0], $e.v[1], $e.v[2], $e.v[3]
221.1Smrg			set $lcv = ($lcv + 1) % $histn
231.1Smrg		else
241.1Smrg			if ($histf == 0)
251.1Smrg				printf "No entries\n"
261.1Smrg				loop_break
271.1Smrg			end
281.1Smrg			# if fmt is NULL and hist->f isn't zero, skip back to
291.1Smrg			# the start of the list since it hasn't looped yet.
301.1Smrg			set $lcv = 0
311.1Smrg		end
321.1Smrg
331.1Smrg		if ($lcv == $histf)
341.1Smrg			loop_break
351.1Smrg		end
361.1Smrg	end
371.1Smrgend
381.1Smrgdocument kernhist
391.1Smrgdump a kernel hist.  eg, "kernhist usbhist".  note that the format
401.1Smrgis not expanded due to there being now way to pass a variable format
411.1Smrgstring to gdb's printf.
421.1Smrgend
43