#!/bin/sh
E() { echo 1>&2 "$@"; }
if ! [ $# -gt 0 ]; then
  E "Usage:"
  E "      " $0 "<PCT-FILE> [<PCT-FILE>...]"
  E "  generates an annotated disassembly file -- <PROGRAM>.s using the GNU"
  E "  binutils \"objdump\" program and the counts in PCT-FILE. Lines are"
  E "  shifted to make room for counts.  Lines with times are easily located"
  E "  by searching for the substring \"%@\" since prefixes are of the form"
  E "  <count>%@<cnt>.  Disassembly files are put in /tmp/pct/asm/PATH-TO-OB"
  E "  by default."
  exit 1
fi
tab='	'
nl='
'
OUT_BASE=/tmp/pct/asm
mkdir -p $OUT_BASE

case `objdump --version 2>&1` in
    *objdump*2.*)
	sedgen() {
	    pct-pr -t '' -O3 -o "s/^[ 	]*\(%s\)/%-4ld @@${tab}\1/${nl}" $1
	};;
    *) sedgen() {
	E "tailor sed script generation to this version of objdump"
	exit 1
    };;
esac

for pct in "$@"; do
    SD="$OUT_BASE/sd.$$.`basename $pct`"       # generate sed script w/pct-pr
    rm -f $SD

    sedgen $pct > "$SD"                        # also shift context lines
    echo "s/^  *\([0-9a-fA-F][0-9a-fA-F][^.]\)/${tab} \1/" >> $SD

    obj=`PCT_STAT_OBJ='' pct-stat $pct`        # apply script to objdump output
    dir=`dirname $obj`
    if [ "$PCT_ASM_BASE" = "true" ]; then
	out="${OUT_BASE}/`basename ${obj}`.s"
    else
	out="${OUT_BASE}${obj}.s"
    fi
    mkdir -p `dirname "$out"`

    echo Creating "$out"
    ${PCT_ASM_ODUMP:-objdump -l -d} "$obj" | sed -f $SD > "$out"

    rm -f $SD
done
