Re: Re: [PATCH -tip v2 4/8] perf-probe: Use _stext based addressinstead of the symbol name

From: Masami Hiramatsu
Date: Tue Feb 04 2014 - 04:50:21 EST


(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@xxxxxxxxxxx


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/