#!/bin/sh LC_ALL=C export LC_ALL if test $# -lt 1; then exit 5 fi exefile="$1" shift tmp_file=`mktemp /tmp/do-syms.XXXXXX` test $? || exit 1 tmp_file1=`mktemp /tmp/do-syms.XXXXXX` test $? || exit 2 tmp_file2=`mktemp /tmp/do-syms.XXXXXX` test $? || exit 3 trap 'rm -f $tmp_file $tmp_file1 $tmp_file2' 0 1 2 3 15 cat "$@" > "$tmp_file" awk ' /\[0x[0-9a-fA-F]+\]/ { match($0, /\[0x[0-9a-fA-F]+\]/) print substr($0, RSTART + 1, RLENGTH - 2) }' "$tmp_file" | sort | uniq | tee $tmp_file1 | xargs addr2line -e "$exefile" > $tmp_file2 awk -v tmp1=$tmp_file1 -v tmp2=$tmp_file2 ' BEGIN { while (0 < getline addr < tmp1 && 0 < getline src < tmp2){ h [addr] = src # print addr, h [addr] } } { match($0, /\[0x[0-9a-fA-F]+\]/) if (RSTART > 0){ addr = substr($0, RSTART + 1, RLENGTH - 2) print substr($0, 1, RSTART - 1), h [addr] }else{ print $0 } }'