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