This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: Queries on SystemTap - with focus on User Space debugging
- From: Josh Stone <jistone at redhat dot com>
- To: "Frank Ch. Eigler" <fche at redhat dot com>, Manjusha Ajay <manjusha dot ajay at gmail dot com>
- Cc: systemtap at sourceware dot org, adrien at kunysz dot be
- Date: Thu, 26 May 2011 09:39:05 -0700
- Subject: Re: Queries on SystemTap - with focus on User Space debugging
- References: <4ddc870c.c9cae30a.71aa.04da@mx.google.com> <OFC45DE291.D6E993B3-ON6525789C.00234213-6525789C.00324BA5@ibsplc.com> <BANLkTi=wWUbJkE0gVV+PqQnrCcFP3UTsBA@mail.gmail.com> <20110526102354.GA1330@redhat.com>
On 05/26/2011 03:23 AM, Frank Ch. Eigler wrote:
> Hi -
>
> On Thu, May 26, 2011 at 03:24:54PM +0530, Manjusha Ajay wrote:
>> [...]
>> probe kernel.function("send_sig") {
>> if ($sig == 11 && p && task_pid(p) == target()) {
>> print_ubacktrace()
>> }
>> }
>>
>> Also got a warning when I ran the above script
>>
>>> stap -c "./test_segfault' test.stp
>> WARNING: read-only local variable 'p' : identifier 'p' at test.stp:19:20
>
> Ah yes, an appropriate warning: I meant $p instead of p above,
> since we're trying to extract the p parameter from the context
> of the send_sig function call.
>
> It appears difficult to place an architecture-neutral kernel probe at
> the point where a page fault is about to be declared a SIGSEGV type
> error. Might try kernel.function("force_sig_info") instead,
> filtering on $sig==11.
We have a predefined tapset that is supposed to cover all the different
ways signals can be sent, documented thusly:
/**
* probe signal.send - Signal being sent to a process
* Arguments:
* @sig: The number of the signal
* @sig_name: A string representation of the signal
* @sig_pid: The PID of the process receiving the signal
* @pid_name: The name of the signal recipient
* @si_code: Indicates the signal type
* @task: A task handle to the signal recipient
* @sinfo: The address of siginfo struct
* @shared: Indicates whether the signal is shared by the thread group
* @send2queue: Indicates whether the signal is sent to an existing
* sigqueue
* @name: The name of the function used to send out the signal
*
* Context:
* The signal's sender.
*
*/
So try something like:
probe signal.send {
if (sig == 11 && sig_pid == target()) {
print_ubacktrace()
}
}