When using a current checkout of systemtap from the git repository I found that the following no longer included the pc address of the probe point: $ ../install/bin/stap -v -L 'kernel.function("BTRFS_I")' Pass 1: parsed user script and 792 library scripts using 3480940virt/3246072res/12984shr/3233236data kb, in 7720usr/700sys/8499real ms. kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") With the recently released systemtap-4.5 on fedora 34 see: $ stap -v -L 'kernel.function("BTRFS_I")' Pass 1: parsed user script and 791 library scripts using 3479644virt/3245148res/12412shr/3232604data kb, in 7840usr/660sys/8549real ms. kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") /* pc=_stext+0x53a068 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") /* pc=_stext+0x539ff8 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") /* pc=_stext+0x539f83 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:231") /* pc=_stext+0x5373d3 */ ... Did a binary bisect and tracked the problem down to git commit 545535f8238fe2493dd7b2d415dfa12174284581: Author: Timm Bäder <tbaeder@redhat.com> 2021-05-19 16:38:30 Committer: Aaron Merey <amerey@redhat.com> 2021-05-19 16:38:30 Parent: 0f4bd3219711e8918eac77c77a1de521832d3dbe (set2: Return this from assignment operator) Child: b3a3929751695310b93ff35f41e68775804cee00 (Fix -Wformat-nonliteral and -Wformat warnings with clang) Branches: master, remotes/origin/master Follows: release-4.5 Precedes: Fix -Woverloaded-virtual warnings when building with clang Satisfy clang by removing option for non-nested signature printing from implementations of printsig and declare derived_probe::printsig with 'override'. Add function derived_probe::printsig_nonest to perform non-nested signature printing.
Before the commit was made printscript in main.cxx:180 was: p->printsig(sig, false); This would end up calling the following method in tapsets.cxx where p is type (derived_probe *): dwarf_derived_probe::printsig (ostream& o, bool nest) const However, after the commit the main.cxx:180 becomes: p->printsig_nonest(sig); The code in printscript ends up calling the following method in staptree.cxx: void probe::printsig (ostream& o) const
Yeah it looks like the conversion to fork into _nest and _nonest was not complete/accurate. Unless Tim might want to have a second go at it, we'd need to revert this patch.
Commit f463f6053e6d28da2095d5b4b9da0cbac3d522af addresses this issue. With this commit the /* pc=... info is there: $ ../install/bin/stap -v -L 'kernel.function("BTRFS_I")' Pass 1: parsed user script and 792 library scripts using 3480720virt/3245652res/12488shr/3233364data kb, in 7050usr/730sys/8069real ms. kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x544c68 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x544bf3 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x53fdf5 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x544cd8 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x53fe24 */ kernel.function("BTRFS_I@fs/btrfs/btrfs_inode.h:232") /* pc=_stext+0x53fdfe */ ...