Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: regs_query_register_offset() infrastructure

regs_query_register_offset() is a helper function which converts
register name like "%rax" to offset of a register in 'struct pt_regs',
which is required by BPF prologue generator.

PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET indicates an architecture
supports converting name of a register to its offset in 'struct
pt_regs'.

HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET is introduced as the corresponding
CFLAGS of PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kaixu Xia <xiakaixu@huawei.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1441523623-152703-19-git-send-email-wangnan0@huawei.com
Signed-off-by: He Kuang <hekuang@huawei.com>
[ Extracted from eBPF patches ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Wang Nan and committed by
Arnaldo Carvalho de Melo
63ab024a 19658171

+12
+4
tools/perf/config/Makefile
··· 109 109 # include ARCH specific config 110 110 -include $(src-perf)/arch/$(ARCH)/Makefile 111 111 112 + ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET 113 + CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET 114 + endif 115 + 112 116 include $(src-perf)/config/utilities.mak 113 117 114 118 ifeq ($(call get-executable,$(FLEX)),)
+8
tools/perf/util/include/dwarf-regs.h
··· 5 5 const char *get_arch_regstr(unsigned int n); 6 6 #endif 7 7 8 + #ifdef HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET 9 + /* 10 + * Arch should support fetching the offset of a register in pt_regs 11 + * by its name. See kernel's regs_query_register_offset in 12 + * arch/xxx/kernel/ptrace.c. 13 + */ 14 + int regs_query_register_offset(const char *name); 15 + #endif 8 16 #endif