Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1486314 > unrolled thread

failed to add c++ probe

Started byJiri Olsa <jolsa@redhat.com>
First post2016-09-19 12:00 +0200
Last post2016-09-22 11:00 +0200
Articles 6 — 4 participants

Back to article view | Back to linux.kernel


Contents

  failed to add c++ probe Jiri Olsa <jolsa@redhat.com> - 2016-09-19 12:00 +0200
    Re: failed to add c++ probe Masami Hiramatsu <mhiramat@kernel.org> - 2016-09-20 01:10 +0200
      Re: failed to add c++ probe Thomas Gleixner <tglx@linutronix.de> - 2016-09-20 01:40 +0200
        Re: failed to add c++ probe Masami Hiramatsu <mhiramat@kernel.org> - 2016-09-21 05:40 +0200
          Re: failed to add c++ probe Masami Hiramatsu <mhiramat@kernel.org> - 2016-09-21 06:50 +0200
            Re: failed to add c++ probe Peter Zijlstra <peterz@infradead.org> - 2016-09-22 11:00 +0200

#1486314 — failed to add c++ probe

FromJiri Olsa <jolsa@redhat.com>
Date2016-09-19 12:00 +0200
Subjectfailed to add c++ probe
Message-ID<sj3wJ-3KO-15@gated-at.bofh.it>
hi,
Thomas reported failure to add an uprobe on libstdc++.so.6 like:

[jolsa@krava perf]$ sudo ./perf probe -x /usr/lib64/libstdc++.so.6 'std::ostream::flush'
Semantic error :There is non-digit char in line number.
  Error: Command Parse Error.

it does not work also if I use the mangled name like:

[jolsa@krava perf]$ sudo ./perf probe -x /usr/lib64/libstdc++.so.6 '_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_'
Probe point '_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_' not found.
  Error: Failed to add events.

thanks,
jirka

[toc] | [next] | [standalone]


#1486937

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2016-09-20 01:10 +0200
Message-ID<sjfRf-3tA-11@gated-at.bofh.it>
In reply to#1486314
On Mon, 19 Sep 2016 11:54:02 +0200
Jiri Olsa <jolsa@redhat.com> wrote:

> hi,
> Thomas reported failure to add an uprobe on libstdc++.so.6 like:
> 
> [jolsa@krava perf]$ sudo ./perf probe -x /usr/lib64/libstdc++.so.6 'std::ostream::flush'
> Semantic error :There is non-digit char in line number.
>   Error: Command Parse Error.

Ah, I should start adding mangling support on perf probe...


> it does not work also if I use the mangled name like:
> 
> [jolsa@krava perf]$ sudo ./perf probe -x /usr/lib64/libstdc++.so.6 '_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_'
> Probe point '_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_' not found.
>   Error: Failed to add events.

Hmm, could you try to find mangled symbol from the library as below?

./perf probe -x /usr/lib64/libstdc++.so.6 -F \*

And also try to do adding probe with -v option again?

In my case, I could find the mangled symbol, but failed to setup the probe...

$ sudo ./perf probe -x /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -v _ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_
probe-definition(0): _ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_ 
symbol:_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_ file:(null) line:0 offset:0 return:0 lazy:(null)
0 arguments
symbol:catch file:(null) line:0 offset:0 return:0 lazy:(null)
symbol:throw file:(null) line:0 offset:0 return:0 lazy:(null)
symbol:rethrow file:(null) line:0 offset:0 return:0 lazy:(null)
Could not open debuginfo. Try to use symbols.
Opening /sys/kernel/debug/tracing//uprobe_events write=1
Writing event: p:probe_libstdc++/_ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_ /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21:0x1114c0
Failed to write event: Invalid argument
  Error: Failed to add events. Reason: Invalid argument (Code: -22)

dmsg -k said;

[143725.339609] Failed to allocate trace_uprobe.(-22)
[143725.339612] Failed to parse address or file.

It seems we need to fix trace_uprobe.c at least.

Thank you!

-- 
Masami Hiramatsu <mhiramat@kernel.org>

[toc] | [prev] | [next] | [standalone]


#1486954

FromThomas Gleixner <tglx@linutronix.de>
Date2016-09-20 01:40 +0200
Message-ID<sjgkh-3D7-3@gated-at.bofh.it>
In reply to#1486937
Masami,

On Tue, 20 Sep 2016, Masami Hiramatsu wrote:
> Hmm, could you try to find mangled symbol from the library as below?
> 
> ./perf probe -x /usr/lib64/libstdc++.so.6 -F \*
> 
> And also try to do adding probe with -v option again?
> 
> In my case, I could find the mangled symbol, but failed to setup the probe...

./perf probe -x /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -v _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
probe-definition(0): _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv 
symbol:_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv file:(null) line:0 offset:0 return:0 lazy:(null)
0 arguments
symbol:catch file:(null) line:0 offset:0 return:0 lazy:(null)
symbol:throw file:(null) line:0 offset:0 return:0 lazy:(null)
symbol:rethrow file:(null) line:0 offset:0 return:0 lazy:(null)
Open Debuginfo file: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
Try to find probe point from debuginfo.
Symbol _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv address found : 8c620
Matched function: is_open
found inline addr: 0x8cad0
Probe point found: is_open+0
found inline addr: 0x8cac0
Probe point found: is_open+0
found inline addr: 0x8cab0
Probe point found: is_open+0
Matched function: is_open
An error occurred in debuginfo analysis (-2).
Trying to use symbols.
Opening /sys/kernel/tracing//uprobe_events write=1
Writing event: p:probe_libstdc++/_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22:0x8c620
Failed to write event: Invalid argument
  Error: Failed to add events. Reason: Invalid argument (Code: -22)

[16568.176464] Failed to allocate trace_uprobe.(-22)
[16568.176468] Failed to parse address or file.

Aside of that mangled symbols with a @plt suffix do not work at all.

Thanks,

	tglx

[toc] | [prev] | [next] | [standalone]


#1487782

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2016-09-21 05:40 +0200
Message-ID<sjGy6-3Gi-9@gated-at.bofh.it>
In reply to#1486954
On Tue, 20 Sep 2016 01:32:04 +0200 (CEST)
Thomas Gleixner <tglx@linutronix.de> wrote:

> Masami,
> 
> On Tue, 20 Sep 2016, Masami Hiramatsu wrote:
> > Hmm, could you try to find mangled symbol from the library as below?
> > 
> > ./perf probe -x /usr/lib64/libstdc++.so.6 -F \*
> > 
> > And also try to do adding probe with -v option again?
> > 
> > In my case, I could find the mangled symbol, but failed to setup the probe...
> 
> ./perf probe -x /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -v _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
> probe-definition(0): _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv 
> symbol:_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv file:(null) line:0 offset:0 return:0 lazy:(null)
> 0 arguments
> symbol:catch file:(null) line:0 offset:0 return:0 lazy:(null)
> symbol:throw file:(null) line:0 offset:0 return:0 lazy:(null)
> symbol:rethrow file:(null) line:0 offset:0 return:0 lazy:(null)
> Open Debuginfo file: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
> Try to find probe point from debuginfo.
> Symbol _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv address found : 8c620
> Matched function: is_open
> found inline addr: 0x8cad0
> Probe point found: is_open+0
> found inline addr: 0x8cac0
> Probe point found: is_open+0
> found inline addr: 0x8cab0
> Probe point found: is_open+0
> Matched function: is_open
> An error occurred in debuginfo analysis (-2).
> Trying to use symbols.
> Opening /sys/kernel/tracing//uprobe_events write=1
> Writing event: p:probe_libstdc++/_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22:0x8c620
> Failed to write event: Invalid argument
>   Error: Failed to add events. Reason: Invalid argument (Code: -22)
> 
> [16568.176464] Failed to allocate trace_uprobe.(-22)
> [16568.176468] Failed to parse address or file.
> 
> Aside of that mangled symbols with a @plt suffix do not work at all.

Oh, OK. I could reproduce it. I'll investigate it. :)

Thank you,


-- 
Masami Hiramatsu <mhiramat@kernel.org>

[toc] | [prev] | [next] | [standalone]


#1487804

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2016-09-21 06:50 +0200
Message-ID<sjHDP-4m6-9@gated-at.bofh.it>
In reply to#1487782
On Wed, 21 Sep 2016 12:37:59 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:

> On Tue, 20 Sep 2016 01:32:04 +0200 (CEST)
> Thomas Gleixner <tglx@linutronix.de> wrote:
> 
> > Masami,
> > 
> > On Tue, 20 Sep 2016, Masami Hiramatsu wrote:
> > > Hmm, could you try to find mangled symbol from the library as below?
> > > 
> > > ./perf probe -x /usr/lib64/libstdc++.so.6 -F \*
> > > 
> > > And also try to do adding probe with -v option again?
> > > 
> > > In my case, I could find the mangled symbol, but failed to setup the probe...
> > 
> > ./perf probe -x /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -v _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
> > probe-definition(0): _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv 
> > symbol:_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv file:(null) line:0 offset:0 return:0 lazy:(null)
> > 0 arguments
> > symbol:catch file:(null) line:0 offset:0 return:0 lazy:(null)
> > symbol:throw file:(null) line:0 offset:0 return:0 lazy:(null)
> > symbol:rethrow file:(null) line:0 offset:0 return:0 lazy:(null)
> > Open Debuginfo file: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
> > Try to find probe point from debuginfo.
> > Symbol _X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv address found : 8c620
> > Matched function: is_open
> > found inline addr: 0x8cad0
> > Probe point found: is_open+0
> > found inline addr: 0x8cac0
> > Probe point found: is_open+0
> > found inline addr: 0x8cab0
> > Probe point found: is_open+0
> > Matched function: is_open
> > An error occurred in debuginfo analysis (-2).
> > Trying to use symbols.
> > Opening /sys/kernel/tracing//uprobe_events write=1
> > Writing event: p:probe_libstdc++/_X_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22:0x8c620
> > Failed to write event: Invalid argument
> >   Error: Failed to add events. Reason: Invalid argument (Code: -22)
> > 
> > [16568.176464] Failed to allocate trace_uprobe.(-22)
> > [16568.176468] Failed to parse address or file.
> > 
> > Aside of that mangled symbols with a @plt suffix do not work at all.
> 
> Oh, OK. I could reproduce it. I'll investigate it. :)
> 

Hmm, I found there are 3 issues in perf-probe to define event on C++ libs.

1) No mangle/demangle symbol support. This needs a) fix option parser to
   accept C++ method name correctly, b) mangle that method, and c) demangle
   it when we show the probe point.

2) @plt symbol should be skipped since the real function will be called(jumped)
   from plt, when searching probe point.

3) Event group name is including some characters which can not be used (e.g. "++").
   Thus we have to remove it or replace it with '_' or other alphabet.("PP"?)

Thank you,

-- 
Masami Hiramatsu <mhiramat@kernel.org>

[toc] | [prev] | [next] | [standalone]


#1488668

FromPeter Zijlstra <peterz@infradead.org>
Date2016-09-22 11:00 +0200
Message-ID<sk81k-45n-17@gated-at.bofh.it>
In reply to#1487804
On Wed, Sep 21, 2016 at 01:43:24PM +0900, Masami Hiramatsu wrote:
> On Wed, 21 Sep 2016 12:37:59 +0900
> Masami Hiramatsu <mhiramat@kernel.org> wrote:

> Hmm, I found there are 3 issues in perf-probe to define event on C++ libs.
> 
> 1) No mangle/demangle symbol support. This needs a) fix option parser to
>    accept C++ method name correctly, b) mangle that method, and c) demangle
>    it when we show the probe point.

I think we should also allow using the mangled name, supporting (de)mangling
is of course nice, but not required per-se. Esp. since there's more than
just C++ mangling. Having the mangling stuff as optional makes it a
convenience but still allows using this on other languages for which we
do not support the mangling.

> 2) @plt symbol should be skipped since the real function will be called(jumped)
>    from plt, when searching probe point.
> 
> 3) Event group name is including some characters which can not be used (e.g. "++").
>    Thus we have to remove it or replace it with '_' or other alphabet.("PP"?)

What is the problem with the '+' character? Why cannot this be used? 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web