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/iosyscall.stp
// 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.

/*
 although addevent.syscall.* will trace all syscalls for you,
 but addevent.iosyscall* will log more detail about those
 io related syscalls instead of logging only the syscall name
*/
 
probe addevent.iosyscall
	= addevent.iosyscall.entry,
	addevent.iosyscall.return
{}

probe addevent.iosyscall.entry
	= 
	addevent.iosyscall.open.entry,
	addevent.iosyscall.close.entry,
	addevent.iosyscall.read.entry,
	addevent.iosyscall.write.entry,
	addevent.iosyscall.readv.entry,
	addevent.iosyscall.writev.entry,
	addevent.iosyscall.pread64.entry,
	addevent.iosyscall.pwrite64.entry,
	addevent.iosyscall.readahead.entry,
	addevent.iosyscall.sendfile.entry,
	addevent.iosyscall.lseek.entry,
	addevent.iosyscall.llseek.entry,
	addevent.iosyscall.sync.entry,
	addevent.iosyscall.fsync.entry,
	addevent.iosyscall.fdatasync.entry,
	addevent.iosyscall.flock.entry
{}

probe addevent.iosyscall.return
	= 
	addevent.iosyscall.open.return,
	addevent.iosyscall.close.return,
	addevent.iosyscall.read.return,
	addevent.iosyscall.write.return,
	addevent.iosyscall.readv.return,
	addevent.iosyscall.writev.return,
	addevent.iosyscall.pread64.return,
	addevent.iosyscall.pwrite64.return,
	addevent.iosyscall.readahead.return,
	addevent.iosyscall.sendfile.return,
	addevent.iosyscall.lseek.return,
	addevent.iosyscall.llseek.return,
	addevent.iosyscall.sync.return,
	addevent.iosyscall.fsync.return,
	addevent.iosyscall.fdatasync.return,
	addevent.iosyscall.flock.return
{}


/*
  addevent.iosyscall.open.{entry,return}
*/
probe addevent.iosyscall.open.entry
	+= _addevent.iosyscall.open.entry
{
	update_record()
}

probe _addevent.iosyscall.open.entry 
	= syscall.open
{
	log_iosyscall_open(HOOKID_IOSYSCALL_OPEN_ENTRY, filename, flags, mode)
}

probe addevent.iosyscall.open.return
	+= _addevent.iosyscall.open.return
{
	update_record()
}

probe _addevent.iosyscall.open.return 
	= syscall.open.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_OPEN_RETURN, $return)
}

function log_iosyscall_open(hookid:long, filename:string, flags:long, mode:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, 
		"%0s%4b%4b", THIS->filename, THIS->flags, THIS->mode);
%}

function log_iosyscall_return(hookid:long, ret_val:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b", (_FMT_)THIS->ret_val);
%}

/*
  addevent.iosyscall.close.{entry,return}
*/ 	
probe addevent.iosyscall.close.entry
	+= _addevent.iosyscall.close.entry
{
	update_record()
}

probe _addevent.iosyscall.close.entry 
	= syscall.close
{
	log_iosyscall_close(HOOKID_IOSYSCALL_CLOSE_ENTRY,fd)
}

probe addevent.iosyscall.close.return
	+= _addevent.iosyscall.close.return
{
	update_record()
}

probe _addevent.iosyscall.close.return 
	= syscall.close.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_CLOSE_RETURN, $return)
}

function log_iosyscall_close(hookid:long, fd:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b", THIS->fd);
%}

/*
  addevent.iosyscall.read.{entry,return}
*/
probe addevent.iosyscall.read.entry
	+= _addevent.iosyscall.read.entry
{
	update_record()
}

probe _addevent.iosyscall.read.entry
	= syscall.read
{
	log_iosyscall_read_write(HOOKID_IOSYSCALL_READ_ENTRY, fd, buf_uaddr, count)
}

probe addevent.iosyscall.read.return
	+= _addevent.iosyscall.read.return
{
	update_record()
}

probe _addevent.iosyscall.read.return
	= syscall.read.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_READ_RETURN, $return)
}

/*
  addevent.iosyscall.write.{entry,return}
*/	
probe addevent.iosyscall.write.entry
	+= _addevent.iosyscall.write.entry
{
	update_record()
}

probe _addevent.iosyscall.write.entry
	= syscall.write
{
	log_iosyscall_read_write(HOOKID_IOSYSCALL_WRITE_ENTRY, fd, buf_uaddr, count)
}

probe addevent.iosyscall.write.return
	+= _addevent.iosyscall.write.return
{
	update_record()
}

probe _addevent.iosyscall.write.return
	= syscall.write.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_WRITE_RETURN, $return)
}
	
function log_iosyscall_read_write(hookid:long, fd:long, buf_uaddr:long,
		count:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b%8b%8b",
		THIS->fd, THIS->buf_uaddr, THIS->count);
%}

/*
  addevent.iosyscall.readv.{entry,return}
*/
probe addevent.iosyscall.readv.entry
	+= _addevent.iosyscall.readv.entry
{
	update_record()
}

probe _addevent.iosyscall.readv.entry
	= syscall.readv
{
	log_iosyscall_readv_writev(HOOKID_IOSYSCALL_READV_ENTRY, fd, vector_uaddr, count)
}

probe addevent.iosyscall.readv.return
	+= _addevent.iosyscall.readv.return
{
	update_record()
}

probe _addevent.iosyscall.readv.return
	= syscall.readv.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_READV_RETURN, $return)
}
	
/*
  addevent.iosyscall.writev.{entry,return}
*/
probe addevent.iosyscall.writev.entry
	+= _addevent.iosyscall.writev.entry
{
	update_record()
}

probe _addevent.iosyscall.writev.entry
	= syscall.writev
{
	log_iosyscall_readv_writev(HOOKID_IOSYSCALL_WRITEV_ENTRY, fd, vector_uaddr, count)
}

probe addevent.iosyscall.writev.return
	+= _addevent.iosyscall.writev.return
{
	update_record()
}

probe _addevent.iosyscall.writev.return
	= syscall.writev.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_WRITEV_RETURN, $return)
}
	
function log_iosyscall_readv_writev(hookid:long, fd:long, 
		vector_uaddr:long, count:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b%8b%8b",
		THIS->fd, THIS->vector_uaddr, THIS->count);
%}

/*
  addevent.iosyscall.pread64.{entry,return}
*/
probe addevent.iosyscall.pread64.entry
	+= _addevent.iosyscall.pread64.entry
{
	update_record()
}

probe _addevent.iosyscall.pread64.entry
	= syscall.pread64
{
	log_iosyscall_pread64_pwrite64(HOOKID_IOSYSCALL_PREAD64_ENTRY, 
		fd, buf_uaddr, count, offset)
}

probe addevent.iosyscall.pread64.return
	+= _addevent.iosyscall.pread64.return
{
	update_record()
}

probe _addevent.iosyscall.pread64.return
	= syscall.pread64.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_PREAD64_RETURN, $return)
}

/*
  addevent.iosyscall.pwrite64.{entry,return}
*/
probe addevent.iosyscall.pwrite64.entry
	+= _addevent.iosyscall.pwrite64.entry
{
	update_record()
}

probe _addevent.iosyscall.pwrite64.entry
	= syscall.pwrite64
{
	log_iosyscall_pread64_pwrite64(HOOKID_IOSYSCALL_PWRITE64_ENTRY,
		fd, buf_uaddr, count, offset);
}

probe addevent.iosyscall.pwrite64.return
	+= _addevent.iosyscall.pwrite64.return
{
	update_record()
}

probe _addevent.iosyscall.pwrite64.return
	= syscall.pwrite64.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_PWRITE64_RETURN, $return)
}

function log_iosyscall_pread64_pwrite64(hookid:long, fd:long, 
		buf_uaddr:long, count:long, offset:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b%8b%8b%8b",
		THIS->fd, THIS->buf_uaddr, THIS->count, THIS->offset);
%}

/*
  addevent.iosyscall.readahead.{entry,return}
*/
probe addevent.iosyscall.readahead.entry
	+= _addevent.iosyscall.readahead.entry
{
	update_record()
}

probe _addevent.iosyscall.readahead.entry
	= syscall.readahead
{
	log_iosyscall_readahead(HOOKID_IOSYSCALL_READAHEAD_ENTRY, fd, offset, count)
}

probe addevent.iosyscall.readahead.return
	+= _addevent.iosyscall.readahead.return
{
	update_record()
}

probe _addevent.iosyscall.readahead.return
	= syscall.readahead.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_READAHEAD_RETURN, $return)
}


function log_iosyscall_readahead(hookid:long, fd:long, offset:long,count:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid,
		"%8b%8b%8b", THIS->fd, THIS->offset, THIS->count);
%}

/*
  addevent.iosyscall.sendfile.{entry,return}
*/
probe addevent.iosyscall.sendfile.entry
	+= _addevent.iosyscall.sendfile.entry
{
	update_record()
}

probe _addevent.iosyscall.sendfile.entry
	= syscall.sendfile
{
	log_iosyscall_sendfile(HOOKID_IOSYSCALL_SENDFILE_ENTRY,
		out_fd, in_fd, offset_uaddr, count)
}

probe addevent.iosyscall.sendfile.return
	+= _addevent.iosyscall.sendfile.return
{
	update_record()
}

probe _addevent.iosyscall.sendfile.return
	= syscall.sendfile.return
{
	 log_iosyscall_return(HOOKID_IOSYSCALL_SENDFILE_RETURN, $return)
}
	
function log_iosyscall_sendfile(hookid:long, out_fd:long, in_fd:long,
		offset_uaddr:long, count:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b%8b%8b%8b",
		THIS->out_fd, THIS->in_fd, THIS->offset_uaddr,
		THIS->count);
%}

/*
  addevent.iosyscall.lseek.{entry,return}
*/

probe addevent.iosyscall.lseek.entry
	+= _addevent.iosyscall.lseek.entry
{
	update_record()
}

probe _addevent.iosyscall.lseek.entry
	= syscall.lseek
{
	log_iosyscall_lseek(HOOKID_IOSYSCALL_LSEEK_ENTRY, fildes, offset, whence)
}

probe addevent.iosyscall.lseek.return
	+= _addevent.iosyscall.lseek.return
{
	update_record()
}

probe _addevent.iosyscall.lseek.return
	= syscall.lseek.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_LSEEK_RETURN, $return)
}

function log_iosyscall_lseek(hookid:long, fd:long, offset:long, whence:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid,
		"%8b%8b%1b", THIS->fd, THIS->offset, THIS->whence);
%}

/*
  addevent.iosyscall.llseek.{entry,return}
*/
probe addevent.iosyscall.llseek.entry
	+= _addevent.iosyscall.llseek.entry
{
	update_record()
}

probe _addevent.iosyscall.llseek.entry
	= syscall.llseek
{
	log_iosyscall_llseek(HOOKID_IOSYSCALL_LLSEEK_ENTRY, 
		fd, offset_high, offset_low, result_uaddr, whence)
}

probe addevent.iosyscall.llseek.return
	+= _addevent.iosyscall.llseek.return
{
	update_record()
}

probe _addevent.iosyscall.llseek.return
	= syscall.llseek.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_LLSEEK_RETURN, $return)
}

function log_iosyscall_llseek(hookid:long, fd:long, offset_high:long, 
		offset_low:long, result_uaddr:long, whence:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid,
		"%8b%8b%8b%8b%1b", THIS->fd, THIS->offset_high,
		THIS->offset_low, THIS->result_uaddr, THIS->whence);
%}

/*
  addevent.iosyscall.sync.{entry,return}
*/

probe addevent.iosyscall.sync.entry
	+= _addevent.iosyscall.sync.entry
{
	update_record()
}

probe _addevent.iosyscall.sync.entry
	= syscall.sync
{
	log_iosyscall_sync(HOOKID_IOSYSCALL_SYNC_ENTRY)
}

probe addevent.iosyscall.sync.return
	+= _addevent.iosyscall.sync.return
{
	update_record()
}

probe _addevent.iosyscall.sync.return
	= syscall.sync.return
{
	 log_iosyscall_return(HOOKID_IOSYSCALL_SYNC_RETURN, $return)
}

function log_iosyscall_sync(hookid:long)
%{
	int GroupID = _GROUP_IOSYSCALL;
	int hookID = _HOOKID_IOSYSCALL_SYNC_ENTRY;
        struct timeval tv; 
        do_gettimeofday(&tv); 
#if defined(ASCII_TRACE)
	_stp_printf("%d%d%d%d%d%d%d%d", _GROUP_IOSYSCALL,
		THIS->hookid, tv.tv_sec, tv.tv_usec,
		current->tgid, current->parent->pid, current->pid,
                current->thread_info->cpu);

#else

        if(timing_method == TIMING_GETCYCLES) { 
                _stp_printf("%2b%2n%8b%8b", (_FMT_)0, 
                        (_FMT_)get_cycles(),
                        (_FMT_)((int64_t)current->pid << 32 |
                                (int32_t)GroupID << 24 | (int32_t)hookID << 16 |
                                (int16_t)current->thread_info->cpu << 8));
        } 
        else if(timing_method == TIMING_GETTIMEOFDAY) {
                struct timeval tv;
                do_gettimeofday (&tv);
                _stp_printf("%2b%2n%8b%8b", (_FMT_)0,
                        (_FMT_)(tv.tv_sec*1000000LL + tv.tv_usec),
                        (_FMT_)((int64_t)current->pid << 32 |
                                (int32_t)GroupID << 24 | (int32_t)hookID << 16 |
                                (int16_t)current->thread_info->cpu << 8));
        } 
        else {
                _stp_printf("%2b%2n%8b%8b", (_FMT_)0,
                        (_FMT_)pfn_schedclock(),
                        (_FMT_)((int64_t)current->pid << 32 |
                                (int32_t)GroupID << 24 | (int32_t)hookID << 16 |
                                (int16_t)current->thread_info->cpu << 8));
	}
#endif

%}

/*
  addevent.iosyscall.fsync.{entry,return}
*/

probe addevent.iosyscall.fsync.entry
	+= _addevent.iosyscall.fsync.entry
{
	update_record()
}

probe _addevent.iosyscall.fsync.entry
	= syscall.fsync
{
	log_iosyscall_fsync(HOOKID_IOSYSCALL_FSYNC_ENTRY, fd)
}

probe addevent.iosyscall.fsync.return
	+= _addevent.iosyscall.fsync.return
{
	update_record()
}

probe _addevent.iosyscall.fsync.return
	= syscall.fsync.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_FSYNC_RETURN, $return)
}
	
/*
  addevent.iosyscall.fdatasync.{entry,return}
*/

probe addevent.iosyscall.fdatasync.entry
	+= _addevent.iosyscall.fdatasync.entry
{
	update_record()
}

probe _addevent.iosyscall.fdatasync.entry
	= syscall.fdatasync
{
	log_iosyscall_fsync(HOOKID_IOSYSCALL_FDATASYNC_ENTRY, fd)
}

probe addevent.iosyscall.fdatasync.return
	+= _addevent.iosyscall.fdatasync.return
{
	update_record()
}

probe _addevent.iosyscall.fdatasync.return
	= syscall.fdatasync.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_FDATASYNC_RETURN, $return)
}

function log_iosyscall_fsync(hookid:long, fd:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid, "%8b", THIS->fd);
%}

/*
  addevent.iosyscall.flock.{entry,return}
*/

probe addevent.iosyscall.flock.entry
	+= _addevent.iosyscall.flock.entry
{
	update_record()
}

probe _addevent.iosyscall.flock.entry
	= syscall.flock
{
	log_iosyscall_flock(HOOKID_IOSYSCALL_FLOCK_ENTRY, fd, operation)
}

probe addevent.iosyscall.flock.return
	+= _addevent.iosyscall.flock.return
{
	update_record()
}

probe _addevent.iosyscall.flock.return
	= syscall.flock.return
{
	log_iosyscall_return(HOOKID_IOSYSCALL_FLOCK_RETURN, $return)
}

function log_iosyscall_flock(hookid:long, fd:long, operation:long)
%{
	_lket_trace(_GROUP_IOSYSCALL, THIS->hookid,
		"%8b%4b", THIS->fd, THIS->operation);
%}

Anon7 - 2021