| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- #
- # Disassemble a single function.
- #
- # usage: objdump-func <file> <func> [<func> ...]
- set -o errexit
- set -o nounset
- OBJDUMP="${CROSS_COMPILE:-}objdump"
- command -v gawk >/dev/null 2>&1 || die "gawk isn't installed"
- usage() {
- echo "usage: objdump-func <file> <func> [<func> ...]" >&2
- exit 1
- }
- [[ $# -lt 2 ]] && usage
- OBJ=$1; shift
- FUNCS=("$@")
- ${OBJDUMP} -wdr $OBJ | gawk -M -v _funcs="${FUNCS[*]}" '
- BEGIN { split(_funcs, funcs); }
- /^$/ { func_match=0; }
- /<.*>:/ {
- f = gensub(/.*<(.*)>:/, "\\1", 1);
- for (i in funcs) {
- # match compiler-added suffixes like ".cold", etc
- if (f ~ "^" funcs[i] "(\\..*)?") {
- func_match = 1;
- base = strtonum("0x" $1);
- break;
- }
- }
- }
- {
- if (func_match) {
- addr = strtonum("0x" $1);
- printf("%04x ", addr - base);
- print;
- }
- }'
|