xref: /linux/scripts/objdump-func (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
121e35023SJosh Poimboeuf#!/bin/bash
221e35023SJosh Poimboeuf# SPDX-License-Identifier: GPL-2.0
321e35023SJosh Poimboeuf#
421e35023SJosh Poimboeuf# Disassemble a single function.
521e35023SJosh Poimboeuf#
627d000d6SJosh Poimboeuf# usage: objdump-func <file> <func> [<func> ...]
721e35023SJosh Poimboeuf
821e35023SJosh Poimboeufset -o errexit
921e35023SJosh Poimboeufset -o nounset
1021e35023SJosh Poimboeuf
1121e35023SJosh PoimboeufOBJDUMP="${CROSS_COMPILE:-}objdump"
1221e35023SJosh Poimboeuf
1321e35023SJosh Poimboeufcommand -v gawk >/dev/null 2>&1 || die "gawk isn't installed"
1421e35023SJosh Poimboeuf
1521e35023SJosh Poimboeufusage() {
1627d000d6SJosh Poimboeuf	echo "usage: objdump-func <file> <func> [<func> ...]" >&2
1721e35023SJosh Poimboeuf	exit 1
1821e35023SJosh Poimboeuf}
1921e35023SJosh Poimboeuf
2021e35023SJosh Poimboeuf[[ $# -lt 2 ]] && usage
2121e35023SJosh Poimboeuf
2221e35023SJosh PoimboeufOBJ=$1; shift
2327d000d6SJosh PoimboeufFUNCS=("$@")
2421e35023SJosh Poimboeuf
2527d000d6SJosh Poimboeuf${OBJDUMP} -wdr $OBJ | gawk -M -v _funcs="${FUNCS[*]}" '
2627d000d6SJosh Poimboeuf	BEGIN { split(_funcs, funcs); }
2727d000d6SJosh Poimboeuf	/^$/ { func_match=0; }
2827d000d6SJosh Poimboeuf	/<.*>:/ {
2927d000d6SJosh Poimboeuf		f = gensub(/.*<(.*)>:/, "\\1", 1);
3027d000d6SJosh Poimboeuf		for (i in funcs) {
3127d000d6SJosh Poimboeuf			# match compiler-added suffixes like ".cold", etc
3227d000d6SJosh Poimboeuf			if (f ~ "^" funcs[i] "(\\..*)?") {
3327d000d6SJosh Poimboeuf				func_match = 1;
3427d000d6SJosh Poimboeuf				base = strtonum("0x" $1);
3527d000d6SJosh Poimboeuf				break;
3627d000d6SJosh Poimboeuf			}
3727d000d6SJosh Poimboeuf		}
3827d000d6SJosh Poimboeuf	}
3927d000d6SJosh Poimboeuf	{
4027d000d6SJosh Poimboeuf		if (func_match) {
4127d000d6SJosh Poimboeuf			addr = strtonum("0x" $1);
4227d000d6SJosh Poimboeuf			printf("%04x ", addr - base);
4327d000d6SJosh Poimboeuf			print;
4427d000d6SJosh Poimboeuf		}
4527d000d6SJosh Poimboeuf	}'
46