Messages in this thread | | | Date | Tue, 04 Feb 2014 18:49:57 +0900 | From | Masami Hiramatsu <> | Subject | Re: Re: [PATCH -tip v2 4/8] perf-probe: Use _stext based address instead of the symbol name |
| |
(2014/02/03 17:32), Masami Hiramatsu wrote: > (2014/02/03 16:49), Namhyung Kim wrote: >> On Wed, 29 Jan 2014 09:14:59 +0000, Masami Hiramatsu wrote: >>> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c >>> index 4a9f43b..120954b 100644 >>> --- a/tools/perf/util/probe-event.c >>> +++ b/tools/perf/util/probe-event.c >>> @@ -387,6 +387,44 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs, >>> return ret; >>> } >>> >>> +/* Post processing the probe events */ >>> +static int post_process_probe_trace_events(struct probe_trace_event *tevs, >>> + int ntevs, const char *module, >>> + bool uprobe) >>> +{ >>> + struct symbol *sym; >>> + struct map *map; >>> + unsigned long stext = 0; >>> + char *tmp; >>> + int i; >>> + >>> + if (uprobe) >>> + return add_exec_to_probe_trace_events(tevs, ntevs, module); >>> + >>> + /* Note that currently _stext based probe is not for drivers */ >>> + if (module) >>> + return add_module_to_probe_trace_events(tevs, ntevs, module); >>> + >>> + sym = __find_kernel_function_by_name("_stext", &map); >> >> Couldn't we just use kmap->ref_reloc_sym instead of the hard-coded >> "_stext"? You might want to check the Adrian's recent kaslr fixes (now >> in tip/perf/urgent). > > Yeah, I just found Adrian's work and this series must be updated for that, > because symbol's address is now based on the real (relocated) address. > OK, I'll try to use a symbol in ref_reloc_sym. ;) Thank you for pointed it out!
Hmm, I've tested using ref_reloc_sym for new version, setting probes was OK, but getting the address of "_text" always failed. It seems that the kmaps doesn't make a symbol for "_text", on the other hand, "_stext" seems always available. So I think there are two ways to fix this, use "_stext" as this version, or use "_text" and fix dso__load_sym to load "_text" as a function symbol if exist. I'm not sure why the "_text" is not loaded, is that a policy?
Note that as we need to show all the existing probes, I must use machine__get_kernel_function_by_name() even if the reference symbol is "_text", because user may set their own probes based on different symbols by hand.
Thank you,
-- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com
| |