[Bug runtime/29832] probe python.function.entry does not get hits (while .return does)
mcermak at redhat dot com
sourceware-bugzilla@sourceware.org
Mon Dec 12 12:11:02 GMT 2022
https://sourceware.org/bugzilla/show_bug.cgi?id=29832
--- Comment #1 from Martin Cermak <mcermak at redhat dot com> ---
SystemTap static markers are present in the built binary:
38 x86_64 # readelf -S /usr/lib64/libpython3.11.so.1.0 | grep .note.stapsdt
[29] .note.stapsdt NOTE 0000000000000000 0051eeb8
38 x86_64 # readelf -n /usr/lib64/libpython3.11.so.1.0 | fgrep -B2 -A2
function__
fgrep: warning: fgrep is obsolescent; using grep -F
stapsdt 0x00000046 NT_STAPSDT (SystemTap probe
descriptors)
Provider: python
Name: function__return
Location: 0x0000000000184698, Base: 0x000000000035dce8, Semaphore:
0x000000000051eeb4
Arguments: 8@%rbp 8@%r12 -4@%eax
stapsdt 0x00000045 NT_STAPSDT (SystemTap probe
descriptors)
Provider: python
Name: function__entry
Location: 0x00000000001846d2, Base: 0x000000000035dce8, Semaphore:
0x000000000051eeb6
Arguments: 8@%rbp 8@%r12 -4@%eax
38 x86_64 #
Systemtap can see them:
38 x86_64 # stap -L 'process("/usr/lib*/libpython*.so*").mark("*")'
process("/usr/lib64/libpython3.11.so.1.0").mark("audit") $arg1:long $arg2:long
process("/usr/lib64/libpython3.11.so.1.0").mark("function__entry") $arg1:long
$arg2:long $arg3:long
process("/usr/lib64/libpython3.11.so.1.0").mark("function__return") $arg1:long
$arg2:long $arg3:long
process("/usr/lib64/libpython3.11.so.1.0").mark("gc__done") $arg1:long
process("/usr/lib64/libpython3.11.so.1.0").mark("gc__start") $arg1:long
process("/usr/lib64/libpython3.11.so.1.0").mark("import__find__load__done")
$arg1:long $arg2:long
process("/usr/lib64/libpython3.11.so.1.0").mark("import__find__load__start")
$arg1:long
process("/usr/lib64/libpython3.11.so.1.0").mark("line") $arg1:long $arg2:long
$arg3:long
38 x86_64 #
38 x86_64 #
Systemtap can hit them both
38 x86_64 #
38 x86_64 # stap -e 'probe
process("/usr/lib64/libpython3.11.so.1.0").mark("function__return") {log(pp())
exit()}' -c 'python3 ./test.py'
process("/usr/lib64/libpython3.11.so.1.0").statement(0x184698)
0.0052528132240494685
38 x86_64 # stap -e 'probe
process("/usr/lib64/libpython3.11.so.1.0").mark("function__entry") {log(pp())
exit()}' -c 'python3 ./test.py'
process("/usr/lib64/libpython3.11.so.1.0").statement(0x1846d2)
0.470956593448124
38 x86_64 #
The problem appears to be with arguments, specifically with filename =
user_string($arg1); which in case of the .mark("function__entry") probe seems
to give <frozen getpath> instead of the actual path
/usr/lib64/python3.11/random.py
38 x86_64 # stap -we 'probe
process("/usr/lib*/libpython*.so*").mark("function__entry") {filename =
user_string($arg1); println(filename)}' -c 'python3 ./test.py >/dev/null'
<frozen getpath>
<frozen getpath>
<frozen _collections_abc>
<frozen _collections_abc>
<frozen _collections_abc>
38 x86_64 #
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the Systemtap
mailing list