|  | #!/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 |