xref: /netbsd-src/sys/gdbscripts/kernhist (revision 27dfcf5333803b82ddf8cdec198297e0c0d0897b)
1*27dfcf53Smrg#	$NetBSD: kernhist,v 1.2 2016/05/12 00:35:10 mrg Exp $
297e7e795Smrg
397e7e795Smrg# by mrg and skrll
497e7e795Smrg
597e7e795Smrgdefine kernhist
697e7e795Smrg	dont-repeat
797e7e795Smrg
897e7e795Smrg	set $hist = (struct kern_history *)&$arg0
997e7e795Smrg	set $histf = $hist->f
1097e7e795Smrg	set $histn = $hist->n
1197e7e795Smrg	set $lcv = $histf
1297e7e795Smrg
1397e7e795Smrg	printf "Kernel history %s has %d entries (next free %d)\n", $hist->name, $histn, $histf
1497e7e795Smrg	while (1)
15*27dfcf53Smrg		set $e = $hist->e[$lcv]
16*27dfcf53Smrg		set $fmt = $e.fmt
1797e7e795Smrg
1897e7e795Smrg		if ($fmt)
19*27dfcf53Smrg			printf "%06lx.%06d ", $e.tv.tv_sec, $e.tv.tv_usec
20*27dfcf53Smrg			printf "%s#%ld@%d: ", $e.fn, $e.call, $e.cpunum
21*27dfcf53Smrg			printf "%s: %lx %lx %lx %lx\n", $fmt, $e.v[0], $e.v[1], $e.v[2], $e.v[3]
2297e7e795Smrg			set $lcv = ($lcv + 1) % $histn
2397e7e795Smrg		else
2497e7e795Smrg			if ($histf == 0)
2597e7e795Smrg				printf "No entries\n"
2697e7e795Smrg				loop_break
2797e7e795Smrg			end
2897e7e795Smrg			# if fmt is NULL and hist->f isn't zero, skip back to
2997e7e795Smrg			# the start of the list since it hasn't looped yet.
3097e7e795Smrg			set $lcv = 0
3197e7e795Smrg		end
3297e7e795Smrg
3397e7e795Smrg		if ($lcv == $histf)
3497e7e795Smrg			loop_break
3597e7e795Smrg		end
3697e7e795Smrg	end
3797e7e795Smrgend
3897e7e795Smrgdocument kernhist
3997e7e795Smrgdump a kernel hist.  eg, "kernhist usbhist".  note that the format
4097e7e795Smrgis not expanded due to there being now way to pass a variable format
4197e7e795Smrgstring to gdb's printf.
4297e7e795Smrgend
43