Queries on SystemTap - with focus on User Space debugging
Josh Stone
jistone@redhat.com
Thu May 26 17:56:00 GMT 2011
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()
}
}
More information about the Systemtap
mailing list