Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/tools/addr2line.sh
4560 views
1
#!/usr/bin/env bash
2
# This script processes symbols output by Gallium using glibc to human-readable function names
3
4
lastbin=
5
i=-1
6
dir="$(mktemp -d)"
7
input="$1"
8
9
# Gather all unique addresses for each binary
10
sed -nre 's|([^ ]*/[^ ]*)\(\+0x([^)]*).*|\1 \2|p' "$input"|sort|uniq|while read bin addr; do
11
if test "$lastbin" != "$bin"; then
12
((++i))
13
lastbin="$bin"
14
echo "$bin" > "$dir/$i.addrs.bin"
15
fi
16
echo "$addr" >> "$dir/$i.addrs"
17
done
18
19
# Construct a sed script to convert hex address to human readable form, and apply it
20
for i in "$dir"/*.addrs; do
21
bin="$(<"$i.bin")"
22
addr2line -p -e "$bin" -a -f < "$i"|sed -nre 's@^0x0*([^:]*): ([^?]*)$@s|'"$bin"'(+0x\1)|\2|g@gp'
23
rm -f "$i" "$i.bin"
24
done|sed -f - "$input"
25
26
rmdir "$dir"
27
28