#!/bin/sh
#set -v

# A simple tool to disassemble a whole function of the module.
#
# Uses: ./exe ./x2d /var/adm/messages


add_exe=`nm exe | awk '$3=="kmouse_dispatch" {print $1}'| ./x2d`
add_ker=`ksyms | awk '$2=="kmouse_dispatch" {print $1}' | ./x2d`


if [ "$1" != "" ]; then
   X=$1
fi
if [ "$X" = "" ]; then
   X=`tail -1000 /var/adm/messages | awk -F: '/EIP:.*0010:/ {print $6}' | \
	tail -1 | sed -e 's/\[<//' -e 's/>]//'`
fi
echo $X

x=`echo $X | ./x2d`
echo $add_exe - $add_ker + $x

look=`echo $add_exe - $add_ker + $x | bc | awk '{printf "%08x\n",$1}'`
loo2=`echo $add_exe - $add_ker + $x | bc | awk '{printf "%x\n",$1}'`

range=`(nm exe; echo "$look X Hmmm...") | sort | grep -1 "X Hmm" | \
	awk 'NR==1 || NR==3 {printf "0x%s ",$1}'`

set -v
echo $loo2
echo "disass $range" | gdb exe | grep -v '^[^0]' | \
   awk "/^0x${loo2}/ {printf \"####\n\";print;printf \"####\n\";next} {print}" \
   | less
