Re: [PATCH tracing/kprobes v2 1/5] tracing/kprobes: Rename specialvariables syntax

From: Masami Hiramatsu
Date: Mon Oct 05 2009 - 12:57:04 EST


Masami Hiramatsu wrote:
Frederic Weisbecker wrote:
On Fri, Oct 02, 2009 at 05:48:42PM -0400, Masami Hiramatsu wrote:
FETCHARGS : Arguments. Each probe can have up to 128 args.
%REG : Fetch register REG
- sN : Fetch Nth entry of stack (N>= 0)
- sa : Fetch stack address.
@ADDR : Fetch memory at ADDR (ADDR should be in kernel)
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
- aN : Fetch function argument. (N>= 0)(*)
- rv : Fetch return value.(**)
- ra : Fetch return address.(**)
+ $sN : Fetch Nth entry of stack (N>= 0)
+ $sa : Fetch stack address.
+ $aN : Fetch function argument. (N>= 0)(*)
+ $rv : Fetch return value.(**)
+ $ra : Fetch return address.(**)



I feel uncomfortable with that, because of bash scripts that
may use it and always need to escape it with antislashes or
use single quotes for it to not be replaced by a random variable
value. If one uses double quotes without antislashes to protect
the command line, the result is unpredictable, depending of
the current set of variables...

May be we can use # instead of $ ? That's a kind of pity because
$ suggested a variable whereas # suggests a constant, we are then
losing this self-explainable characteristic for kprobes
"specific variable fetchs". But that will work without ambiguity.

Hmm, # is widely used for comment, including some kernel pseudo
file interfaces, kprobe_events too. Comments are useful if a
probe list is restored from a file.

For accessing local variables, kprobe-tracer needs to support *at least*
below variables:
- Registers
- Stack address (if a register points stack address, this isn't needed)

Below special vars are complementary aliases.
- Function arguments
- Return value
- Return address

and I'd like perf-probe to have a transparent syntax with kprobe-tracer.

This means, if we can remove special vars except registers, or rename it
non-conflictable name with registers, we just need to separate name spaces
of
- Regsiters
- Local variables

Here, local variables will support fields of data structs, and it will
use '->' expression. Since'>' means redirection in bash, local variables
need to be *escaped* in this case. Thus, I think we can use '$' prefix
for it. (I'm OK, because this is similar syntax to systemtap:-).

So, if you don't like %regs, $svars and locals, we can use regs and $locals :-)

As far as I can see in arch/*/include/asm/ptrace.h, all registers start with
alphabets :-). So, I'd like to suggest renaming sp-vars to '_sp-vars'.

Then, we will have;
- $local-vars
- @global-symbol
- regs
- _sp-vars
- +|-Offs(ARG)

Thank you,

--
Masami Hiramatsu

Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division

e-mail: mhiramat@xxxxxxxxxx

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/