#!/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=="cx_reset" {print $1}'| ./x2d`
add_ker=`ksyms | awk '$2=="cx_reset" {print $1}' | ./x2d`


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

x=`echo $X | ./x2d`

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
