Re: patches to actually use markers?

Mathieu Desnoyers <[email protected]> Fri, 16 Nov 2007 15:10:15 -0500
Newsgroups gmane.linux.systemtap,gmane.linux.kernel.tracing
Message-ID <20071116201015.GA29545@Krystal>
* Frank Ch. Eigler ([email protected]) wrote:
> Mathieu Desnoyers <[email protected]> writes:
> 
> > [...]
> >>   trace_mark(kernel_arch_syscall_entry, "syscall_id %d ip #p%ld",
> >> 			(int)regs->orig_eax, instruction_pointer(regs));
> >> [...]
> >> For systemtap use, we'd like to have more information than that.  On
> >> syscall entry, we'd like be able to get the arguments, [...]
> >
> > Well, the approach taken was to instrument each important system call in
> > the syscall specific function to be able to actually know what type of
> > information to record. For instance, if ebx points to a string, the
> > pointer is not very useful, but the string is.
> 
> How would this syscall specific function get ebx or the string,
> without ebx (or regs) being passed as marker arguments?
> 
That's the idea : in the syscall specific function (not in
syscall_trace()), we add another marker that takes the syscall specific
arguments as parameter. I think we use the same approach there.

What I was saying is that we can't extract the string from
syscall_trace() because we have no idea it is a string.


> For systemtap's purposes, we're prepared to have per-systemcall logic
> to decode arguments further, in particular to extract user-space
> strings.  But we need to know where to look for them!
> 
> 
> > You have a good point for the syscall exit instrumentation : adding the
> > return value is trivial and would be very useful.
> 
> (And an errno code if it's separate.)
> 

AFAIK, the errno code is generated by the userspace libraries using the
return value of the syscall, so it would be the same.

Mathieu

> 
> - FChE

-- 
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68