Commit | Line | Data |
---|---|---|
21e35023 JP |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0 | |
3 | # | |
4 | # Disassemble a single function. | |
5 | # | |
27d000d6 | 6 | # usage: objdump-func <file> <func> [<func> ...] |
21e35023 JP |
7 | |
8 | set -o errexit | |
9 | set -o nounset | |
10 | ||
11 | OBJDUMP="${CROSS_COMPILE:-}objdump" | |
12 | ||
13 | command -v gawk >/dev/null 2>&1 || die "gawk isn't installed" | |
14 | ||
15 | usage() { | |
27d000d6 | 16 | echo "usage: objdump-func <file> <func> [<func> ...]" >&2 |
21e35023 JP |
17 | exit 1 |
18 | } | |
19 | ||
20 | [[ $# -lt 2 ]] && usage | |
21 | ||
22 | OBJ=$1; shift | |
27d000d6 JP |
23 | FUNCS=("$@") |
24 | ||
25 | ${OBJDUMP} -wdr $OBJ | gawk -M -v _funcs="${FUNCS[*]}" ' | |
26 | BEGIN { split(_funcs, funcs); } | |
27 | /^$/ { func_match=0; } | |
28 | /<.*>:/ { | |
29 | f = gensub(/.*<(.*)>:/, "\\1", 1); | |
30 | for (i in funcs) { | |
31 | # match compiler-added suffixes like ".cold", etc | |
32 | if (f ~ "^" funcs[i] "(\\..*)?") { | |
33 | func_match = 1; | |
34 | base = strtonum("0x" $1); | |
35 | break; | |
36 | } | |
37 | } | |
38 | } | |
39 | { | |
40 | if (func_match) { | |
41 | addr = strtonum("0x" $1); | |
42 | printf("%04x ", addr - base); | |
43 | print; | |
44 | } | |
45 | }' |