Many of the probes in DT_Logger print the arguments, context,
and return values of system calls. The code that prints the
context and return values tends to be the same, so the only
real difference is in the number and type of arguments being
printed.
If I could find a way to use the same code for most argument
types, I could fold a lot of probes together, saving quite a
bit of space in the kernel.
Currently, my argument-printing code looks vaguely like this:
/* bar(int a_num, char *a_str); */
printf("a_num=%d\n", self->arg0);
this->str = copyinstr(self->arg1);
this->len = strlen(this->str);
printf("a_str=%d''%s''\n", this->len,
this->str);
yielding output (for the argument vector) of the form:
av={
a_num=42
a_str=3''foo''
}
Although I like the fact that the argument names are printed
and that numbers are distinguishable from strings, these are
both niceties. I would be quite willing to have the output
look like this:
av={
a0=2''42''
a1=3''foo''
}
if this allowed me to handle all two-argument system calls
with the same probe. However, looking at the docs, I don''t
see any way to do this. Am I missing something?
That is, is there a way to accept both numeric and string
arguments, convert them to strings, and print them out
(using the same code for both)?
-r
--
http://www.cfcl.com/rdm Rich Morin
http://www.cfcl.com/rdm/resume rdm at cfcl.com
http://www.cfcl.com/rdm/weblog +1 650-873-7841
Technical editing and writing, programming, and web development