[DTrace-devel] curious backtrace

david.mclean at oracle.com david.mclean at oracle.com
Mon Nov 30 22:02:33 PST 2020


Running my latest incarnation of dt_cg_agg_stddev_impl() yields a BPF 
backtrace:
   ...
+BPF: 100: (77) r5 >>= 4
+BPF: 101: frame1: R0_w=map_value(id=0,off=0,ks=4,vs=136,imm=0) R1=fp-40 
R5_w=invP(id=0,umax_value=1152921504606846975,var_off=({ptr}; {ptr})) 
R6_w=invP(id=0,umax_value=15,var_off=({ptr}; {ptr})) 
R7_w=map_value(id=0,off=0,ks=4,vs=136,umin_value=8,umax_value=40,var_off=({ptr}; 
{ptr})) R8_w=invP5000000000 
R9_w=map_value(id=0,off=120,ks=4,vs=136,imm=0) R10=fp0 fp-40_w=fp
+BPF: 101: (bf) r4 = r1
+BPF: 102: frame1: R0_w=map_value(id=0,off=0,ks=4,vs=136,imm=0) R1=fp-40 
R4_w=fp-40 R5_w=invP(id=0,umax_value=1152921504606846975,var_off=({ptr}; 
{ptr})) R6_w=invP(id=0,umax_value=15,var_off=({ptr}; {ptr})) 
R7_w=map_value(id=0,off=0,ks=4,vs=136,umin_value=8,umax_value=40,var_off=({ptr}; 
{ptr})) R8_w=invP5000000000 
R9_w=map_value(id=0,off=120,ks=4,vs=136,imm=0) R10=fp0 fp-40_w=fp
+BPF: 102: (77) r4 >>= 60
+BPF: R4 pointer arithmetic with >>= operator prohibited
+BPF: verification time 518 usec
+BPF: stack depth 56+40
+BPF: processed 93 insns (limit 1000000) max_states_per_insn 0 
total_states 4 peak_states 4 mark_read 3
+dtrace: could not enable tracing: BPF program load for 'dtrace:::BEGIN' 
failed: Permission denied

The offending line appears to be:
BPFCODE(BPF_ALU64_IMM(BPF_RSH, nibreg, 60))

though I seem to run fine with
BPFCODE(BPF_ALU64_IMM(BPF_RSH, accreg, 60))
a handful of lines before.

I'll look at it with fresh eyes in the morning.




More information about the DTrace-devel mailing list