Em Fri, May 24, 2019 at 03:15:06PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Wed, May 08, 2019 at 03:20:03PM +0200, Jiri Olsa escreveu: > > We mark the end of kernel based on the first module, > > but that could cover some bpf program maps. Reading > > _etext symbol if it's present to get precise kernel > > map end. > > Investigating... Have you run 'perf test' before hitting the send > button? :-)
<SNIP> > [root@quaco c]# perf test -v 1 > 1: vmlinux symtab matches kallsyms : <SNIP> > --- start --- > ERR : 0xffffffff8cc00e41: __indirect_thunk_end not on kallsyms <SNIP> > test child finished with -1 > ---- end ---- > vmlinux symtab matches kallsyms: FAILED! > [root@quaco c]# So... [root@quaco c]# grep __indirect_thunk_end /proc/kallsyms ffffffff8cc00e41 T __indirect_thunk_end [root@quaco c]# grep -w _etext /proc/kallsyms ffffffff8cc00e41 T _etext [root@quaco c]# [root@quaco c]# grep -w ffffffff8cc00e41 /proc/kallsyms ffffffff8cc00e41 T _etext ffffffff8cc00e41 T __indirect_thunk_end [root@quaco c]# Lemme try to fix this. - Arnaldo > [acme@quaco perf]$ git bisect good > 7d98e1a73bd7dae6cb321ec8b0b97b9fed7c0e1b is the first bad commit > commit 7d98e1a73bd7dae6cb321ec8b0b97b9fed7c0e1b > Author: Jiri Olsa <jo...@kernel.org> > Date: Wed May 8 15:20:03 2019 +0200 > > perf machine: Read also the end of the kernel > > We mark the end of kernel based on the first module, but that could > cover some bpf program maps. Reading _etext symbol if it's present to > get precise kernel map end. > > Signed-off-by: Jiri Olsa <jo...@kernel.org> > Acked-by: Song Liu <songliubrav...@fb.com> > Cc: Adrian Hunter <adrian.hun...@intel.com> > Cc: Alexander Shishkin <alexander.shish...@linux.intel.com> > Cc: Andi Kleen <a...@linux.intel.com> > Cc: Namhyung Kim <namhy...@kernel.org> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Stanislav Fomichev <s...@google.com> > Cc: Thomas Richter <tmri...@linux.ibm.com> > Link: http://lkml.kernel.org/r/20190508132010.14512-6-jo...@kernel.org > Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com> > > :040000 040000 4ca5fa4c6f15fd8cf9a0eee870efbd01e9fe309d > 8311b30f94e9cf9a863dc9619b0499863f64960e M tools > [acme@quaco perf]$ > > > Link: http://lkml.kernel.org/n/tip-ynut991ttyyhvo1sbhlm4...@git.kernel.org > > Signed-off-by: Jiri Olsa <jo...@kernel.org> > > --- > > tools/perf/util/machine.c | 27 ++++++++++++++++++--------- > > 1 file changed, 18 insertions(+), 9 deletions(-) > > > > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > > index 3c520baa198c..ad0205fbb506 100644 > > --- a/tools/perf/util/machine.c > > +++ b/tools/perf/util/machine.c > > @@ -924,7 +924,8 @@ const char *ref_reloc_sym_names[] = {"_text", "_stext", > > NULL}; > > * symbol_name if it's not that important. > > */ > > static int machine__get_running_kernel_start(struct machine *machine, > > - const char **symbol_name, u64 > > *start) > > + const char **symbol_name, > > + u64 *start, u64 *end) > > { > > char filename[PATH_MAX]; > > int i, err = -1; > > @@ -949,6 +950,11 @@ static int machine__get_running_kernel_start(struct > > machine *machine, > > *symbol_name = name; > > > > *start = addr; > > + > > + err = kallsyms__get_function_start(filename, "_etext", &addr); > > + if (!err) > > + *end = addr; > > + > > return 0; > > } > > > > @@ -1440,7 +1446,7 @@ int machine__create_kernel_maps(struct machine > > *machine) > > struct dso *kernel = machine__get_kernel(machine); > > const char *name = NULL; > > struct map *map; > > - u64 addr = 0; > > + u64 start = 0, end = ~0ULL; > > int ret; > > > > if (kernel == NULL) > > @@ -1459,9 +1465,9 @@ int machine__create_kernel_maps(struct machine > > *machine) > > "continuing anyway...\n", machine->pid); > > } > > > > - if (!machine__get_running_kernel_start(machine, &name, &addr)) { > > + if (!machine__get_running_kernel_start(machine, &name, &start, &end)) { > > if (name && > > - map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, > > addr)) { > > + map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, > > start)) { > > machine__destroy_kernel_maps(machine); > > ret = -1; > > goto out_put; > > @@ -1471,16 +1477,19 @@ int machine__create_kernel_maps(struct machine > > *machine) > > * we have a real start address now, so re-order the kmaps > > * assume it's the last in the kmaps > > */ > > - machine__update_kernel_mmap(machine, addr, ~0ULL); > > + machine__update_kernel_mmap(machine, start, end); > > } > > > > if (machine__create_extra_kernel_maps(machine, kernel)) > > pr_debug("Problems creating extra kernel maps, continuing > > anyway...\n"); > > > > - /* update end address of the kernel map using adjacent module address */ > > - map = map__next(machine__kernel_map(machine)); > > - if (map) > > - machine__set_kernel_mmap(machine, addr, map->start); > > + if (end == ~0ULL) { > > + /* update end address of the kernel map using adjacent module > > address */ > > + map = map__next(machine__kernel_map(machine)); > > + if (map) > > + machine__set_kernel_mmap(machine, start, map->start); > > + } > > + > > out_put: > > dso__put(kernel); > > return ret; > > -- > > 2.20.1 > > -- > > - Arnaldo -- - Arnaldo