]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - scripts/objdump-func
Merge tag 'nfsd-6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
[thirdparty/kernel/linux.git] / scripts / objdump-func
CommitLineData
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
8set -o errexit
9set -o nounset
10
11OBJDUMP="${CROSS_COMPILE:-}objdump"
12
13command -v gawk >/dev/null 2>&1 || die "gawk isn't installed"
14
15usage() {
27d000d6 16 echo "usage: objdump-func <file> <func> [<func> ...]" >&2
21e35023
JP
17 exit 1
18}
19
20[[ $# -lt 2 ]] && usage
21
22OBJ=$1; shift
27d000d6
JP
23FUNCS=("$@")
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 }'