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 }'
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.