Bug 27940

Summary: The /* pc=0x... */ is no longer printed by "stap -v -L 'kernel.function("*")'
Product: systemtap Reporter: William Cohen <wcohen>
Component: translatorAssignee: Di Chen <dichen>
Status: RESOLVED FIXED    
Severity: normal CC: dichen, fche, tbaeder
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description William Cohen 2021-06-01 17:09:47 UTC
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.
Comment 1 William Cohen 2021-06-03 22:38:27 UTC
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
Comment 2 Frank Ch. Eigler 2021-06-04 19:50:12 UTC
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.
Comment 3 William Cohen 2021-09-14 14:35:12 UTC
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 */
...