On Mon, 22 Jun 2020 08:27:53 +0800 Ming Lei <ming.lei@xxxxxxxxxx> wrote: > I mean it isn't from user's viewpoint, and the binary code is usually a > black box for final kprobe user. > > IMO, all your and Steven's input are just from kprobe/trace developer's viewpoint. > Can you think about the issue from kprobe real/final user? > > Trace is very useful tools to observe system internal, and people often > relies on trace to understand system. However, missed probe often causes > trouble for us to understand the system correctly. Agreed. However, since kprobes related tracing tools are layered to provide different features (e.g. kprobes abstructs sw breakpoint, ftrace kprobe-events provides a minimum CUI, and perf-probe provides binary analysis, etc.), this issue should be solved by user-level binary analysis layer. (it is not good idea to analyze the optimized code in kernel) > > > 2) from implementation view, I understand exception should be trapped > > > on the entry of __blkdev_put(), looks it isn't done. > > > > No, it is correctly trapped the function entry address. The problem is > > that the gcc optimized the nested function call into jump to the > > beginning of function body (skip prologue). > > > > Usually, a function is compiled as below > > > > func() (1) the entry address (func:) > > { (2) the function prologue (setup stackframe) > > int a (3) the beginning of function body > > ... > > func() (4) the nested function call > > > > And in this case, the gcc optimized (4) into jump to (3) instead of > > actual function call instruction. Thus, for the nested case (1) and > > (2) are skipped. > > IOW, the code flow becomes > > (1)->(2)->(3)->(4)->(3) > > instead of > > (1)->(2)->(3)->(4)->(1)->(2)->(3) > > > > In this case, if we put a probe on (1) or (2), those are disappeared > > in the nested call. Thus if you put a probe on (3) ('perf probe __blkdev_put:2') > > you'll see the event twice. > > Thanks for your explanation. > > Can you kprobe guys improve the implementation for covering this case? > For example, put probe on 3) in case the above situation is recognized. OK, let me try to fix this in perf-probe since that is the simplest binary analysis part in user-space. Thank you, -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>