Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / scripts / objdump-func
blob7b15b873d0e2a2227ed3df72c16feb543a3f91f2
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # Disassemble a single function.
6 # usage: objdump-func <file> <func> [<func> ...]
8 set -o errexit
9 set -o nounset
11 OBJDUMP="${CROSS_COMPILE:-}objdump"
13 command -v gawk >/dev/null 2>&1 || die "gawk isn't installed"
15 usage() {
16 echo "usage: objdump-func <file> <func> [<func> ...]" >&2
17 exit 1
20 [[ $# -lt 2 ]] && usage
22 OBJ=$1; shift
23 FUNCS=("$@")
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;
40 if (func_match) {
41 addr = strtonum("0x" $1);
42 printf("%04x ", addr - base);
43 print;