1 1.2 mrg # $NetBSD: kernhist,v 1.2 2016/05/12 00:35:10 mrg Exp $ 2 1.1 mrg 3 1.1 mrg # by mrg and skrll 4 1.1 mrg 5 1.1 mrg define kernhist 6 1.1 mrg dont-repeat 7 1.1 mrg 8 1.1 mrg set $hist = (struct kern_history *)&$arg0 9 1.1 mrg set $histf = $hist->f 10 1.1 mrg set $histn = $hist->n 11 1.1 mrg set $lcv = $histf 12 1.1 mrg 13 1.1 mrg printf "Kernel history %s has %d entries (next free %d)\n", $hist->name, $histn, $histf 14 1.1 mrg while (1) 15 1.2 mrg set $e = $hist->e[$lcv] 16 1.2 mrg set $fmt = $e.fmt 17 1.1 mrg 18 1.1 mrg if ($fmt) 19 1.2 mrg printf "%06lx.%06d ", $e.tv.tv_sec, $e.tv.tv_usec 20 1.2 mrg printf "%s#%ld@%d: ", $e.fn, $e.call, $e.cpunum 21 1.2 mrg printf "%s: %lx %lx %lx %lx\n", $fmt, $e.v[0], $e.v[1], $e.v[2], $e.v[3] 22 1.1 mrg set $lcv = ($lcv + 1) % $histn 23 1.1 mrg else 24 1.1 mrg if ($histf == 0) 25 1.1 mrg printf "No entries\n" 26 1.1 mrg loop_break 27 1.1 mrg end 28 1.1 mrg # if fmt is NULL and hist->f isn't zero, skip back to 29 1.1 mrg # the start of the list since it hasn't looped yet. 30 1.1 mrg set $lcv = 0 31 1.1 mrg end 32 1.1 mrg 33 1.1 mrg if ($lcv == $histf) 34 1.1 mrg loop_break 35 1.1 mrg end 36 1.1 mrg end 37 1.1 mrg end 38 1.1 mrg document kernhist 39 1.1 mrg dump a kernel hist. eg, "kernhist usbhist". note that the format 40 1.1 mrg is not expanded due to there being now way to pass a variable format 41 1.1 mrg string to gdb's printf. 42 1.1 mrg end 43