Linux Perf
builtin-kallsyms.c
Go to the documentation of this file.
1 /*
2  * builtin-kallsyms.c
3  *
4  * Builtin command: Look for a symbol in the running kernel and its modules
5  *
6  * Copyright (C) 2017, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
7  *
8  * Released under the GPL v2. (and only v2, not any later version)
9  */
10 #include <inttypes.h>
11 #include "builtin.h"
12 #include <linux/compiler.h>
13 #include <subcmd/parse-options.h>
14 #include "debug.h"
15 #include "machine.h"
16 #include "symbol.h"
17 
18 static int __cmd_kallsyms(int argc, const char **argv)
19 {
20  int i;
22 
23  if (machine == NULL) {
24  pr_err("Couldn't read /proc/kallsyms\n");
25  return -1;
26  }
27 
28  for (i = 0; i < argc; ++i) {
29  struct map *map;
30  struct symbol *symbol = machine__find_kernel_symbol_by_name(machine, argv[i], &map);
31 
32  if (symbol == NULL) {
33  printf("%s: not found\n", argv[i]);
34  continue;
35  }
36 
37  printf("%s: %s %s %#" PRIx64 "-%#" PRIx64 " (%#" PRIx64 "-%#" PRIx64")\n",
38  symbol->name, map->dso->short_name, map->dso->long_name,
39  map->unmap_ip(map, symbol->start), map->unmap_ip(map, symbol->end),
40  symbol->start, symbol->end);
41  }
42 
43  machine__delete(machine);
44  return 0;
45 }
46 
47 int cmd_kallsyms(int argc, const char **argv)
48 {
49  const struct option options[] = {
50  OPT_INCR('v', "verbose", &verbose, "be more verbose (show counter open errors, etc)"),
51  OPT_END()
52  };
53  const char * const kallsyms_usage[] = {
54  "perf kallsyms [<options>] symbol_name",
55  NULL
56  };
57 
58  argc = parse_options(argc, argv, options, kallsyms_usage, 0);
59  if (argc < 1)
60  usage_with_options(kallsyms_usage, options);
61 
64  if (symbol__init(NULL) < 0)
65  return -1;
66 
67  return __cmd_kallsyms(argc, argv);
68 }
const char * vmlinux_name
Definition: symbol.h:123
bool try_vmlinux_path
Definition: symbol.h:93
const char * long_name
Definition: dso.h:173
u64 end
Definition: symbol.h:58
#define pr_err(fmt,...)
Definition: json.h:21
static struct symbol * machine__find_kernel_symbol_by_name(struct machine *machine, const char *name, struct map **mapp)
Definition: machine.h:210
u64 start
Definition: symbol.h:57
struct dso * dso
Definition: map.h:45
char name[0]
Definition: symbol.h:66
Definition: jevents.c:228
bool sort_by_name
Definition: symbol.h:93
void machine__delete(struct machine *machine)
Definition: machine.c:214
int symbol__init(struct perf_env *env)
Definition: symbol.c:2112
int verbose
Definition: jevents.c:53
u64(* unmap_ip)(struct map *, u64)
Definition: map.h:43
Definition: symbol.h:55
int cmd_kallsyms(int argc, const char **argv)
const char * short_name
Definition: dso.h:172
static int __cmd_kallsyms(int argc, const char **argv)
struct machine * machine__new_kallsyms(void)
Definition: machine.c:135