1*61046927SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*61046927SAndroid Build Coastguard Worker# This script processes symbols output by Gallium using glibc to human-readable function names 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Workerlastbin= 5*61046927SAndroid Build Coastguard Workeri=-1 6*61046927SAndroid Build Coastguard Workerdir="$(mktemp -d)" 7*61046927SAndroid Build Coastguard Workerinput="$1" 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker# Gather all unique addresses for each binary 10*61046927SAndroid Build Coastguard Workersed -nre 's|([^ ]*/[^ ]*)\(\+0x([^)]*).*|\1 \2|p' "$input"|sort|uniq|while read bin addr; do 11*61046927SAndroid Build Coastguard Worker if test "$lastbin" != "$bin"; then 12*61046927SAndroid Build Coastguard Worker ((++i)) 13*61046927SAndroid Build Coastguard Worker lastbin="$bin" 14*61046927SAndroid Build Coastguard Worker echo "$bin" > "$dir/$i.addrs.bin" 15*61046927SAndroid Build Coastguard Worker fi 16*61046927SAndroid Build Coastguard Worker echo "$addr" >> "$dir/$i.addrs" 17*61046927SAndroid Build Coastguard Workerdone 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker# Construct a sed script to convert hex address to human readable form, and apply it 20*61046927SAndroid Build Coastguard Workerfor i in "$dir"/*.addrs; do 21*61046927SAndroid Build Coastguard Worker bin="$(<"$i.bin")" 22*61046927SAndroid Build Coastguard Worker addr2line -p -e "$bin" -a -f < "$i"|sed -nre 's@^0x0*([^:]*): ([^?]*)$@s|'"$bin"'(+0x\1)|\2|g@gp' 23*61046927SAndroid Build Coastguard Worker rm -f "$i" "$i.bin" 24*61046927SAndroid Build Coastguard Workerdone|sed -f - "$input" 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Workerrmdir "$dir" 27