blob: 97ce8c92b964f02fa7f07c7361df152518709ab9 [file] [log] [blame]
#!/bin/bash
# Barret Rhoden (brho@cs.berkeley.edu)
#
# Resolves functions from an Akaros user backtrace.
# Pipe a backtrace (echo "huge-copy-paste" | ./thisfile.sh) to it.
#
# Be sure to set your environment paths for the SOLIBS and BIN, or use the
# defaults, which require AKAROS_ROOT.
: ${SOLIBS_PREFIX:=$AKAROS_ROOT/kern/kfs/lib/}
: ${SO_REGEX:=.*so$}
: ${BIN_PREFIX:=$AKAROS_ROOT/kern/kfs/bin/}
# takes the path to the binary and offset (offset in hex), prints name of the
# function where the offset is in the binary. basically a wrapper for
# addr2line.
function print_func()
{
addr2line -e $1 -fC $2 | xargs
}
while read line
do
binary=`echo $line | cut -f 6 -d ' '`
lib_off=`echo $line | cut -f 9 -d ' '`
app_off=`echo $line | cut -f 3 -d ' '`
if [[ $binary == "" ]]
then
break
fi
echo -n $line " "
if [[ $binary =~ $SO_REGEX ]]
then
# could also do addr=$(print_func $lib $off)
print_func $SOLIBS_PREFIX/$binary $lib_off
else
print_func $BIN_PREFIX/$binary $app_off
fi
done