MINI SHELL

Server : Apache/2.2.2 (Fedora)
System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686
User : apache ( 48)
PHP Version : 5.2.9
Disable Function : NONE
Directory :  /usr/share/systemtap/tapset/LKET/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/systemtap/tapset/LKET/signal.stp
// signal trace hooks
// Copyright (C) 2006 IBM Corp.
//
// This file is part of systemtap, and is free software.  You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.

probe never 
{
	printf("%d", GROUP_SIGNAL)
}

probe addevent.signal
	= addevent.signal.entry,
	addevent.signal.return
{}

probe addevent.signal.entry
	=
	addevent.signal.send.entry,
	addevent.signal.syskill.entry,
	addevent.signal.systgkill.entry,
	addevent.signal.systkill.entry,
	addevent.signal.pending.entry,
	addevent.signal.do_action.entry,
	addevent.signal.procmask.entry,
	addevent.signal.flush.entry
{}

probe addevent.signal.return
	=
	addevent.signal.send.return,
	addevent.signal.syskill.return,
	addevent.signal.systgkill.return,
	addevent.signal.systkill.return,
	addevent.signal.pending.return,
	addevent.signal.do_action.return,
	addevent.signal.procmask.return
{}

/* Fires when a signal is sent to a process */
probe addevent.signal.send.entry
	+= _addevent.signal.send.entry
{
	update_record()
}

probe _addevent.signal.send.entry
	= signal.send
{
	log_signal_send(sig, sig_pid, shared, send2queue)
}

function log_signal_send(sig:long, pid:long, shared:long, send2queue:long)
%{
	/* sig | shared | send2queue | pid 
		shared: indicate whether the signal is send to a process
			group or to a single process
		send2queue: indicate whether the event is triggered by 
			send_group_sigqueue or send_sigqueue
	*/
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SEND_ENTRY, "%1b%1b%1b%4b", 
		THIS->sig, THIS->shared, THIS->send2queue, THIS->pid);
%}

probe addevent.signal.send.return
	+= _addevent.signal.send.return
{
	update_record()
}
probe _addevent.signal.send.return
	= signal.send.return
{
	log_signal_send_return($return)
}

function log_signal_send_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SEND_RETURN, "%1b", THIS->ret);
%}


/* Triggered by calling kill() from user app */
probe addevent.signal.syskill.entry
	+= _addevent.signal.syskill.entry
{
	update_record()
}

probe _addevent.signal.syskill.entry = signal.syskill
{
	log_signal_syskill(pid, sig)
}

function log_signal_syskill(pid:long, sig:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSKILL_ENTRY,
		"%4b%1b", THIS->pid, THIS->sig);
%}

probe addevent.signal.syskill.return
	+= _addevent.signal.syskill.return
{
	update_record()
}

probe _addevent.signal.syskill.return 
	= signal.syskill.return
{
	log_signal_syskill_return($return)
}

function log_signal_syskill_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSKILL_RETURN,
		"%1b", THIS->ret);
%}

/* triggered by calling sys_tgkill() from user app */
probe addevent.signal.systgkill.entry
	+= _addevent.signal.systgkill.entry
{
	update_record()
}

probe _addevent.signal.systgkill.entry = signal.systgkill
{
	log_signal_systgkill(pid, tgid, sig)
}

function log_signal_systgkill(pid:long, tgid:long, sig:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSTGKILL_ENTRY,
		"%4b%4b%1b", THIS->pid, THIS->tgid, THIS->sig);
%}

probe addevent.signal.systgkill.return
	+= _addevent.signal.systgkill.return
{
	update_record()
}

probe _addevent.signal.systgkill.return 
	= signal.systgkill.return
{
	log_signal_systgkill_return($return)
}

function log_signal_systgkill_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSTGKILL_RETURN,
		"%1b", THIS->ret);
%}

/* Triggered by calling tkill() from user app */
probe addevent.signal.systkill.entry
	+= _addevent.signal.systkill.entry
{
	update_record()
}

probe _addevent.signal.systkill.entry = signal.systkill
{
	log_signal_systkill(pid, sig)
}

function log_signal_systkill(pid:long, sig:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSTKILL_ENTRY,
		"%4b%1b", THIS->pid, THIS->sig);
%}

probe addevent.signal.systkill.return
	+= _addevent.signal.systkill.return
{
	update_record()
}

probe _addevent.signal.systkill.return 
	= signal.systkill.return
{
	log_signal_systkill_return($return)
}

function log_signal_systkill_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_SYSTKILL_RETURN,
		"%1b", THIS->ret);
%}

/* Fires when examining current pending signals */
probe addevent.signal.pending.entry
	+= _addevent.signal.pending.entry
{
	update_record()
}

probe _addevent.signal.pending.entry = signal.pending
{
	log_signal_pending(sigset_add, sigset_size)
}

function log_signal_pending(sigset_addr:long, setsize:long)
%{
	/* sigset_addr | setsize */
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_PENDING_ENTRY,
		"%8b%8b", THIS->sigset_addr, THIS->setsize);
%}

probe addevent.signal.pending.return
	+= _addevent.signal.pending.return
{
	update_record()
}

probe _addevent.signal.pending.return = signal.pending.return
{
	log_signal_pending_return($return)
}

function log_signal_pending_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_PENDING_RETURN,
		"%1b", THIS->ret);
%}

/* probe signal.handle
 *
 * Used to invoke signals
 *
 * static int handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
 *					sigset_t *oldset, struct pt_regs * regs)
 * Argument :-
 *  sig    : Signal number
 *  info   : address of siginfo table.
 *  ka     : Address of the k_sigaction table associated with the signal
 *  oldset : Address of a bit mask array of blocked signals
 *  regs   : Address in the Kernel Mode stack area 
 *  
 */
/*
probe signal.handle = kernel.function("handle_signal")?,
        kernel.inline("handle_signal")?
{
    sig = $sig
    sig_name = _signal_name($sig)
    sinfo_addr = $info
    sig_code = $info->si_code
    sig_stack_add=$ka
    bitmask_add=$oldset
    kernmode_stack_add=$regs

    // Check whether the signal is a User Mode or Kernel mode Signal.
    
    if (sinfo_addr == 0 && sig_code <= 0)
        sig_mode = "User Mode Signal"
    else if (sinfo_addr >=  1)
        sig_mode = "Kernel Mode Signal"
}

probe signal.handle.return = kernel.function("handle_signal").return
{
    retstr = returnstr(1)
}
*/

/* Fires when examing and change a signal action */
probe addevent.signal.do_action.entry
	+= _addevent.signal.do_action.entry
{
	update_record()
}

probe _addevent.signal.do_action.entry = signal.do_action
{
	log_signal_doaction(sig, sa_handler)
}

function log_signal_doaction(sig:long, handler:long)
%{
	/* sig | sa_handler | sa_mask */
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_DOACTION_ENTRY,
		"%1b%8b", THIS->sig, THIS->handler);
%}


probe addevent.signal.do_action.return
	+= _addevent.signal.do_action.return
{
	update_record()
}

probe _addevent.signal.do_action.return = signal.do_action.return
{
	log_signal_doaction_return($return)
}

function log_signal_doaction_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_DOACTION_RETURN,
		"%2b", THIS->ret);
%}

/* Fires when examine and change blocked signals */

probe addevent.signal.procmask.entry
	+= _addevent.signal.procmask.entry
{
	update_record()
}

probe _addevent.signal.procmask.entry = signal.procmask
{
	log_signal_procmask($how, sigset)
}

function log_signal_procmask(how:long, set:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_PROC_MASK_ENTRY,
		"%1b%8b", THIS->how, THIS->set);
%}
	
probe addevent.signal.procmask.return
	+= _addevent.signal.procmask.return
{
	update_record()
}

probe _addevent.signal.procmask.return = signal.procmask.return
{
	log_signal_procmask_return($return)
}

function log_signal_procmask_return(ret:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_PROC_MASK_RETURN,
		"%1b", THIS->ret);
%}

/* Flush all pending signals for a task */
probe addevent.signal.flush.entry
	+= _addevent.signal.flush.entry
{
	update_record()
}

probe _addevent.signal.flush.entry = signal.flush
{
	log_signal_flush(sig_pid)
}

function log_signal_flush(pid:long)
%{
	_lket_trace(_GROUP_SIGNAL, _HOOKID_SIGNAL_FLUSH_ENTRY,
		"%4b", THIS->pid);
%}


Anon7 - 2021