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

Configure Feed

Select the types of activity you want to include in your feed.

perf symbols: Add kallsyms__get_symbol_start()

The kallsyms__get_symbol_start() to get any symbol address from
kallsyms. The existing kallsyms__get_function_start() only allows text
symbols so create this to allow data symbols too.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20230725001929.368041-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Namhyung Kim and committed by
Arnaldo Carvalho de Melo
f9dd531c 4c11adff

+29 -3
+27 -3
tools/perf/util/event.c
··· 93 93 u64 start; 94 94 }; 95 95 96 - static int find_symbol_cb(void *arg, const char *name, char type, 97 - u64 start) 96 + static int find_func_symbol_cb(void *arg, const char *name, char type, 97 + u64 start) 98 98 { 99 99 struct process_symbol_args *args = arg; 100 100 ··· 110 110 return 1; 111 111 } 112 112 113 + static int find_any_symbol_cb(void *arg, const char *name, 114 + char type __maybe_unused, u64 start) 115 + { 116 + struct process_symbol_args *args = arg; 117 + 118 + if (strcmp(name, args->name)) 119 + return 0; 120 + 121 + args->start = start; 122 + return 1; 123 + } 124 + 113 125 int kallsyms__get_function_start(const char *kallsyms_filename, 114 126 const char *symbol_name, u64 *addr) 115 127 { 116 128 struct process_symbol_args args = { .name = symbol_name, }; 117 129 118 - if (kallsyms__parse(kallsyms_filename, &args, find_symbol_cb) <= 0) 130 + if (kallsyms__parse(kallsyms_filename, &args, find_func_symbol_cb) <= 0) 131 + return -1; 132 + 133 + *addr = args.start; 134 + return 0; 135 + } 136 + 137 + int kallsyms__get_symbol_start(const char *kallsyms_filename, 138 + const char *symbol_name, u64 *addr) 139 + { 140 + struct process_symbol_args args = { .name = symbol_name, }; 141 + 142 + if (kallsyms__parse(kallsyms_filename, &args, find_any_symbol_cb) <= 0) 119 143 return -1; 120 144 121 145 *addr = args.start;
+2
tools/perf/util/event.h
··· 360 360 361 361 int kallsyms__get_function_start(const char *kallsyms_filename, 362 362 const char *symbol_name, u64 *addr); 363 + int kallsyms__get_symbol_start(const char *kallsyms_filename, 364 + const char *symbol_name, u64 *addr); 363 365 364 366 void event_attr_init(struct perf_event_attr *attr); 365 367