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