Bug 24812 - stapbpf: support order-parametrized begin/end probes
Summary: stapbpf: support order-parametrized begin/end probes
Status: RESOLVED FIXED
Alias: None
Product: systemtap
Classification: Unclassified
Component: bpf (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Sagar Patel
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-07-15 18:44 UTC by Serhei Makarov
Modified: 2019-10-25 18:51 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Serhei Makarov 2019-07-15 18:44:03 UTC
found this while trying to work around probe size requirement
-- so this will be important for complex bpf programs until/unless we bump the userspace interpreter's stack size

I want two end probes to run in a specific order. Normally begin/end probe order is unspecified but in fact you can constrain it with sequence numbers.
                                                                                 
global flag1 = 0                                                                         
global flag2 = 0                                                                         
                                                                                         
probe begin(1) {                                                                         
  printf("BEGIN\n")                                                                      
  flag1 = 2                                                                              
}                                                                                        
                                                                                         
probe begin(2) {                                                                         
  flag1 = 1                                                                              
  exit()                                                                                 
}                                                                                        
                                                                                         
probe end(1) {                                                                           
  flag2 = 2                                                                              
}                                                                                        
                                                                                         
probe end(2) {                                                                           
  flag2 = 1                                                                              
}                                                                                        
                                                                                         
probe end(3) {                                                                           
  printf("got flag1==%d flag2==%d\n", flag1, flag2)                                      
  if (flag1 == 1 && flag2 == 1)                                                          
    printf("END PASS\n")                                                                 
  else                                                                                   
    printf("END FAIL\n")                                                                 
}                                                                                        

but it doesn't work on bpf.
$ sudo ~/stap-install/bin/stap probe_order.stp 
BEGIN
got flag1==1 flag2==1
END PASS

$ sudo ~/stap-install/bin/stap --bpf probe_order.stp 
BEGIN
got flag1==1 flag2==0
END FAIL

Mirrors pr3624 for the kernel backend.
Comment 1 Sagar Patel 2019-10-25 18:51:15 UTC
Fixed in commit a8c7c8f11.