objdump-func 848 B

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