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