| #!/bin/bash | 
 | # This script processes symbols output by Gallium using glibc to human-readable function names | 
 |  | 
 | lastbin= | 
 | i=-1 | 
 | dir="$(mktemp -d)" | 
 | input="$1" | 
 |  | 
 | # Gather all unique addresses for each binary | 
 | sed -nre 's|([^ ]*/[^ ]*)\(\+0x([^)]*).*|\1 \2|p' "$input"|sort|uniq|while read bin addr; do | 
 | 	if test "$lastbin" != "$bin"; then | 
 | 		((++i)) | 
 | 		lastbin="$bin" | 
 | 		echo "$bin" > "$dir/$i.addrs.bin" | 
 | 	fi | 
 | 	echo "$addr" >> "$dir/$i.addrs" | 
 | done | 
 |  | 
 | # Construct a sed script to convert hex address to human readable form, and apply it | 
 | for i in "$dir"/*.addrs; do | 
 | 	bin="$(<"$i.bin")" | 
 | 	addr2line -p -e "$bin" -a -f < "$i"|sed -nre 's@^0x0*([^:]*): ([^?]*)$@s|'"$bin"'(+0x\1)|\2|g@gp' | 
 | 	rm -f "$i" "$i.bin" | 
 | done|sed -f - "$input" | 
 |  | 
 | rmdir "$dir" |