linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* perf probe: adding probe on C++ member/namespace function or versioned symbols
@ 2021-12-08 20:08 Milian Wolff
  2021-12-09 10:47 ` James Clark
  0 siblings, 1 reply; 4+ messages in thread
From: Milian Wolff @ 2021-12-08 20:08 UTC (permalink / raw)
  To: linux-perf-users; +Cc: Arnaldo Carvalho de Melo

[-- Attachment #1: Type: text/plain, Size: 1017 bytes --]

Hey there,

how can one escape function names for `perf probe`? It seems like the current 
parser is confused by the `:` which is common in C++ symbol names.

```
$ perf probe -F --exec /usr/lib/libQt5Widgets.so | grep syncBacking
QWidgetPrivate::syncBackingStore
QWidgetPrivate::syncBackingStore

$ perf probe --exec /usr/lib/libQt5Widgets.so --add 
QWidgetPrivate::syncBackingStore
Semantic error :There is non-digit char in line number.
...
```

Additionally, it is also not possible to pass a versioned symbol either:
```
$ nm -aD /usr/lib/libQt5Widgets.so | grep syncBacking
0000000000197480 T 
_ZN14QWidgetPrivate16syncBackingStoreERK7QRegion@@Qt_5_PRIVATE_API
00000000001973b0 T _ZN14QWidgetPrivate16syncBackingStoreEv@@Qt_5_PRIVATE_API
Semantic error :SRC@SRC is not allowed.
...
```

Is there a workaround available for this?

Thanks

-- 
Milian Wolff | milian.wolff@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt, C++ and OpenGL Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5272 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: perf probe: adding probe on C++ member/namespace function or versioned symbols
  2021-12-08 20:08 perf probe: adding probe on C++ member/namespace function or versioned symbols Milian Wolff
@ 2021-12-09 10:47 ` James Clark
  2021-12-15 13:10   ` Milian Wolff
  0 siblings, 1 reply; 4+ messages in thread
From: James Clark @ 2021-12-09 10:47 UTC (permalink / raw)
  To: Milian Wolff, linux-perf-users; +Cc: Arnaldo Carvalho de Melo



On 08/12/2021 20:08, Milian Wolff wrote:
> Hey there,
> 
> how can one escape function names for `perf probe`? It seems like the current 
> parser is confused by the `:` which is common in C++ symbol names.
> 
> ```
> $ perf probe -F --exec /usr/lib/libQt5Widgets.so | grep syncBacking
> QWidgetPrivate::syncBackingStore
> QWidgetPrivate::syncBackingStore

It might not be obvious, but you have to get the mangled name with 'nm -D',
and then pass the mangled name with --no-demangle to perf and then it works:

  sudo ./perf probe --no-demangle --exec libQt5Widgets.so.5 --add '_ZN14QWidgetPrivate16syncBackingStoreEv'

Maybe the docs could be updated to make it clearer, or print a warning message, or
get perf to output mangled symbols in addition to demangled with -F.


> 
> $ perf probe --exec /usr/lib/libQt5Widgets.so --add 
> QWidgetPrivate::syncBackingStore
> Semantic error :There is non-digit char in line number.
> ...
> ```
> 
> Additionally, it is also not possible to pass a versioned symbol either:
> ```
> $ nm -aD /usr/lib/libQt5Widgets.so | grep syncBacking
> 0000000000197480 T 
> _ZN14QWidgetPrivate16syncBackingStoreERK7QRegion@@Qt_5_PRIVATE_API
> 00000000001973b0 T _ZN14QWidgetPrivate16syncBackingStoreEv@@Qt_5_PRIVATE_API
> Semantic error :SRC@SRC is not allowed.

If adding mangling fix doesn't work for this one, you could try removing some of
the name processing in probe-event.c like:

	/* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes */
	p = strpbrk(nbase, ".@");
	if (p && p != nbase)
		*p = '\0';

> ...
> ```
> 
> Is there a workaround available for this?
> 
> Thanks
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: perf probe: adding probe on C++ member/namespace function or versioned symbols
  2021-12-09 10:47 ` James Clark
@ 2021-12-15 13:10   ` Milian Wolff
  2021-12-15 14:59     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 4+ messages in thread
From: Milian Wolff @ 2021-12-15 13:10 UTC (permalink / raw)
  To: linux-perf-users, James Clark; +Cc: Arnaldo Carvalho de Melo

[-- Attachment #1: Type: text/plain, Size: 2403 bytes --]

On Donnerstag, 9. Dezember 2021 11:47:52 CET James Clark wrote:
> On 08/12/2021 20:08, Milian Wolff wrote:
> > Hey there,
> > 
> > how can one escape function names for `perf probe`? It seems like the
> > current parser is confused by the `:` which is common in C++ symbol
> > names.
> > 
> > ```
> > $ perf probe -F --exec /usr/lib/libQt5Widgets.so | grep syncBacking
> > QWidgetPrivate::syncBackingStore
> > QWidgetPrivate::syncBackingStore
> 
> It might not be obvious, but you have to get the mangled name with 'nm -D',
> and then pass the mangled name with --no-demangle to perf and then it works:
> 
>   sudo ./perf probe --no-demangle --exec libQt5Widgets.so.5 --add
> '_ZN14QWidgetPrivate16syncBackingStoreEv'
> 
> Maybe the docs could be updated to make it clearer, or print a warning
> message, or get perf to output mangled symbols in addition to demangled
> with -F.

Thank you, that indeed works. But it's _very_ unintuitive. Generally, I think 
there are many languages out there which produce demangled names containing 
colons - could we come up with a way to allow specifying a demangled symbol 
including colons (and maybe even @@), that does not conflict with the existing 
`:` for the line suffix? For C++ (and Rust?) at least, we could handle two 
colons differently from just one. What do you think?

> > $ perf probe --exec /usr/lib/libQt5Widgets.so --add
> > QWidgetPrivate::syncBackingStore
> > Semantic error :There is non-digit char in line number.
> > ...
> > ```
> > 
> > Additionally, it is also not possible to pass a versioned symbol either:
> > ```
> > $ nm -aD /usr/lib/libQt5Widgets.so | grep syncBacking
> > 0000000000197480 T
> > _ZN14QWidgetPrivate16syncBackingStoreERK7QRegion@@Qt_5_PRIVATE_API
> > 00000000001973b0 T
> > _ZN14QWidgetPrivate16syncBackingStoreEv@@Qt_5_PRIVATE_API Semantic error
> > :SRC@SRC is not allowed.
> 
> If adding mangling fix doesn't work for this one, you could try removing
> some of the name processing in probe-event.c like:
> 
> 	/* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes 
*/
> 	p = strpbrk(nbase, ".@");
> 	if (p && p != nbase)
> 		*p = '\0';
> 
> > ...
> > ```
> > 
> > Is there a workaround available for this?
> > 
> > Thanks


-- 
Milian Wolff | milian.wolff@kdab.com | Senior Software Engineer
KDAB (Deutschland) GmbH, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt, C++ and OpenGL Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5272 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: perf probe: adding probe on C++ member/namespace function or versioned symbols
  2021-12-15 13:10   ` Milian Wolff
@ 2021-12-15 14:59     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-12-15 14:59 UTC (permalink / raw)
  To: Milian Wolff; +Cc: linux-perf-users, James Clark, Arnaldo Carvalho de Melo

Em Wed, Dec 15, 2021 at 02:10:33PM +0100, Milian Wolff escreveu:
> On Donnerstag, 9. Dezember 2021 11:47:52 CET James Clark wrote:
> > On 08/12/2021 20:08, Milian Wolff wrote:
> > > Hey there,
> > > 
> > > how can one escape function names for `perf probe`? It seems like the
> > > current parser is confused by the `:` which is common in C++ symbol
> > > names.
> > > 
> > > ```
> > > $ perf probe -F --exec /usr/lib/libQt5Widgets.so | grep syncBacking
> > > QWidgetPrivate::syncBackingStore
> > > QWidgetPrivate::syncBackingStore
> > 
> > It might not be obvious, but you have to get the mangled name with 'nm -D',
> > and then pass the mangled name with --no-demangle to perf and then it works:
> > 
> >   sudo ./perf probe --no-demangle --exec libQt5Widgets.so.5 --add
> > '_ZN14QWidgetPrivate16syncBackingStoreEv'
> > 
> > Maybe the docs could be updated to make it clearer, or print a warning
> > message, or get perf to output mangled symbols in addition to demangled
> > with -F.
> 
> Thank you, that indeed works. But it's _very_ unintuitive. Generally, I think 
> there are many languages out there which produce demangled names containing 
> colons - could we come up with a way to allow specifying a demangled symbol 
> including colons (and maybe even @@), that does not conflict with the existing 
> `:` for the line suffix? For C++ (and Rust?) at least, we could handle two 
> colons differently from just one. What do you think?

I agree, we need to lift this limitation.

- Arnaldo
 
> > > $ perf probe --exec /usr/lib/libQt5Widgets.so --add
> > > QWidgetPrivate::syncBackingStore
> > > Semantic error :There is non-digit char in line number.
> > > ...
> > > ```
> > > 
> > > Additionally, it is also not possible to pass a versioned symbol either:
> > > ```
> > > $ nm -aD /usr/lib/libQt5Widgets.so | grep syncBacking
> > > 0000000000197480 T
> > > _ZN14QWidgetPrivate16syncBackingStoreERK7QRegion@@Qt_5_PRIVATE_API
> > > 00000000001973b0 T
> > > _ZN14QWidgetPrivate16syncBackingStoreEv@@Qt_5_PRIVATE_API Semantic error
> > > :SRC@SRC is not allowed.
> > 
> > If adding mangling fix doesn't work for this one, you could try removing
> > some of the name processing in probe-event.c like:
> > 
> > 	/* Cut off the dot suffixes (e.g. .const, .isra) and version suffixes 
> */
> > 	p = strpbrk(nbase, ".@");
> > 	if (p && p != nbase)
> > 		*p = '\0';
> > 
> > > ...
> > > ```
> > > 
> > > Is there a workaround available for this?
> > > 
> > > Thanks
> 
> 
> -- 
> Milian Wolff | milian.wolff@kdab.com | Senior Software Engineer
> KDAB (Deutschland) GmbH, a KDAB Group company
> Tel: +49-30-521325470
> KDAB - The Qt, C++ and OpenGL Experts



-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-12-15 14:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-08 20:08 perf probe: adding probe on C++ member/namespace function or versioned symbols Milian Wolff
2021-12-09 10:47 ` James Clark
2021-12-15 13:10   ` Milian Wolff
2021-12-15 14:59     ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).