4.4BSD/usr/src/sys/hp300/scripts/xbt

# hp300 version of the script to dump out the kernel stack of
# a process
#
# usage: xbt procp
#
#	@(#)xbt	8.1 (Berkeley) 6/10/93

set $maxargs = 4

define xbt

	set $usrstack = (unsigned long *) &kstack

	set $p = (struct proc *) $arg0
	set $paddr = $p->p_addr
	set $fix = (unsigned long *) $paddr - $usrstack
	set $paddr = (struct user *)$paddr
	set $xfp = (unsigned long *) $paddr->u_pcb.pcb_regs[10]
	set $xpc = (unsigned long *) $paddr->u_pcb.pcb_regs[11]

	printf "Process %s\n", &($p->p_comm[0])
	while ($xfp > $usrstack)

		set $xfp += $fix
		printf "Function:\t"
		p/a $xpc

		set $i = 0
		printf "\tArgs:\t"
		while ($i < $maxargs)
			set $arg = (unsigned long *) $xfp[$i + 2]
			if ($arg > $usrstack)
				set $arg += $fix
			end
			printf "%#x\t", (unsigned long) $arg
			set $i++
		end
		printf "\n"

		set $xpc = $xfp[1]
		set $xfp = (unsigned long *) $xfp[0]

	end
end