access pointer and global variables
Stone, Joshua I
joshua.i.stone@intel.com
Thu Jun 7 18:56:00 GMT 2007
David Smith wrote:
> Hmm. What you are asking for is this:
>
> probe kernel.function("schedule") {
> printf("pid is %d\n", $prev->pid)
> prev_copy = $prev
> printf("pid is still %d\n", prev_copy->pid)
> }
>
> That is going to be tricky to implement.
That's not really what I meant. If you figure out how to do that,
awesome, but that certainly adds a lot of complication to SystemTap types.
Let me try to rephrase. In an entry probe, we see $prev->pid and we
know how to generate code to dereference it. When we're generating code
for the return probe, wouldn't you still know what the type looked like?
I suppose it depends on how you generate that code. But when I see this:
probe kernel.function("schedule").return {
printf("pid is %d\n", $prev->pid)
}
I expect that the translator could produce one of these options:
probe kernel.function("schedule") {
cache[...] = $prev
}
probe kernel.function("schedule").return {
printf("pid is %d\n", cache[...]->pid)
// The dereference happens using the same loc2c
// generated function that the entry would have used.
}
OR
probe kernel.function("schedule") {
cache[...] = $prev->pid
}
probe kernel.function("schedule").return {
printf("pid is %d\n", cache[...])
}
The former works if you're immediately generating code, so you don't
have to remember the extra type information for long. But I expect the
latter should be a lot easier to do, at the expense of more caching
memory if many fields are dereferenced.
> David "Grumble - dang users never satisfied. Give them parameters in
> return probes, and they are happy for a moment. Then they want more,
> always more. I can remember when we only had toggle switches on the
> front of the vax and were happy to have them..." Smith
I only ask because you're so good about providing. :)
Josh
More information about the Systemtap
mailing list