#!/bin/sh
#
# Execution trace logger script for GDB
#
# --author pancake <pancake@youterm.com>
#

PROGRAM="$1"
BREAKPOINT="$2"

if [ -z "$PROGRAM" ]; then
	echo "Usage: xtrace [program] [pc-addr]"
	exit 1
fi

if [ -z "${BREAKPOINT}" ]; then
	BREAKPOINT=`readelf -h ${PROGRAM} | grep Entry | awk '{print $4}'`
	if [ -z "${BREAKPOINT}" ]; then
		echo "ERROR: Cannot determine breakpoint.";
		exit 1
	fi
fi

#def gob

TMP=`mktemp -t gdb.XXXXXX`
S=$
cat > ${TMP} <<EOF

set height 0
set \$base=0x08040000
set \$mask=0xffff0000

break *${BREAKPOINT}

run

while(1)
	stepi
	if (((long)${S}eip & (long)${S}mask) == (long)${S}base)
	  disassemble ${S}eip ${S}eip+1
	end
end
quit
EOF

shift ; shift
cat ${TMP}
gdb -batch -n -q -x ${TMP} --args ${PROGRAM} $@ | grep : | grep -v Dump

rm ${TMP}
