Merge tag 'nfs-for-6.4-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
[linux-block.git] / scripts / objdump-func
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 #
4 # Disassemble a single function.
5 #
6 # usage: objdump-func <file> <func> [<func> ...]
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() {
16         echo "usage: objdump-func <file> <func> [<func> ...]" >&2
17         exit 1
18 }
19
20 [[ $# -lt 2 ]] && usage
21
22 OBJ=$1; shift
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         }'