1b8e80941Smrg#!/usr/bin/env bash 2848b8605Smrg# This script processes symbols output by Gallium using glibc to human-readable function names 3848b8605Smrg 4848b8605Smrglastbin= 5848b8605Smrgi=-1 6848b8605Smrgdir="$(mktemp -d)" 7848b8605Smrginput="$1" 8848b8605Smrg 9848b8605Smrg# Gather all unique addresses for each binary 10848b8605Smrgsed -nre 's|([^ ]*/[^ ]*)\(\+0x([^)]*).*|\1 \2|p' "$input"|sort|uniq|while read bin addr; do 11848b8605Smrg if test "$lastbin" != "$bin"; then 12848b8605Smrg ((++i)) 13848b8605Smrg lastbin="$bin" 14848b8605Smrg echo "$bin" > "$dir/$i.addrs.bin" 15848b8605Smrg fi 16848b8605Smrg echo "$addr" >> "$dir/$i.addrs" 17848b8605Smrgdone 18848b8605Smrg 19848b8605Smrg# Construct a sed script to convert hex address to human readable form, and apply it 20848b8605Smrgfor i in "$dir"/*.addrs; do 21848b8605Smrg bin="$(<"$i.bin")" 22848b8605Smrg addr2line -p -e "$bin" -a -f < "$i"|sed -nre 's@^0x0*([^:]*): ([^?]*)$@s|'"$bin"'(+0x\1)|\2|g@gp' 23848b8605Smrg rm -f "$i" "$i.bin" 24848b8605Smrgdone|sed -f - "$input" 25848b8605Smrg 26848b8605Smrgrmdir "$dir" 27