Thread (18 messages) 18 messages, 4 authors, 2020-06-23

Re: kprobe: __blkdev_put probe is missed

From: Masami Hiramatsu <mhiramat@kernel.org>
Date: 2020-06-22 23:47:22
Also in: lkml

On Mon, 22 Jun 2020 09:01:48 -0400
Steven Rostedt [off-list ref] wrote:
On Mon, 22 Jun 2020 08:27:53 +0800
Ming Lei [off-list ref] wrote:
quoted
Can you kprobe guys improve the implementation for covering this case?
For example, put probe on 3) in case the above situation is recognized.
To do so would require solving the halting problem.

  https://en.wikipedia.org/wiki/Halting_problem

Or perhaps reading the DWARF output of the compiler to determine if it
optimized the location you are looking for.
As far as I can see, gcc-9.3 doesn't generate this information :(
Maybe the optimizer forgot to push the tail-call callsite information
to dwarf generator when making a recursive tail-call to a loop.
The first case is impossible to solve, the second would take a lot of
work, (are you going to fund it?)
What I can provide is "--skip-prologue" option for the perf-probe
which will be similar to the "-P" option. If the compiler correctly
generates the information, we can enable it automatically. But
as far as I can see, it doesn't.

[OT] DWARF has its option(and GNU extension) but it seems not correctly
implemented yet.
 
http://www.dwarfstd.org/ShowIssue.php?issue=100909.2

What I found on __blkdev_put and the callers, the "tail-call to other
function" were recorded as a call-site DIE with DW_AT_tail_call. But
if the "tail-call to itself (recursive call)" was expanded as a loop,
it was just disappeared. No call-site information, nor the DW_AT_tail_call.

Thank you,

-- 
Masami Hiramatsu [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help