diff options
Diffstat (limited to 'tapset/LKET/iosyscall.stp')
-rwxr-xr-x | tapset/LKET/iosyscall.stp | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/tapset/LKET/iosyscall.stp b/tapset/LKET/iosyscall.stp new file mode 100755 index 00000000..527aaeeb --- /dev/null +++ b/tapset/LKET/iosyscall.stp @@ -0,0 +1,383 @@ +// 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 addevent.iosyscall + = addevent.iosyscall.entry, + addevent.iosyscall.return +{} + +probe addevent.iosyscall.entry + += _addevent.iosyscall.entry +{ + update_record() +} + +probe addevent.iosyscall.return + += _addevent.iosyscall.return +{ + update_record() +} + + +probe _addevent.iosyscall.entry + = syscall.open, + syscall.close, + syscall.read, + syscall.write, + syscall.readv, + syscall.writev, + syscall.pread64, + syscall.pwrite64, + syscall.readahead, + syscall.sendfile, + syscall.lseek, + syscall.llseek, + syscall.sync, + syscall.fsync, + syscall.fdatasync, + syscall.flock +{ + dummy_c_function() /* used to prevent over-optimization */ +} + +probe _addevent.iosyscall.return + = syscall.open.return, + syscall.close.return, + syscall.read.return, + syscall.write.return, + syscall.readv.return, + syscall.writev.return, + syscall.pread64.return, + syscall.pwrite64.return, + syscall.readahead.return, + syscall.sendfile.return, + syscall.lseek.return, + syscall.llseek.return, + syscall.sync.return, + syscall.fsync.return, + syscall.fdatasync.return, + syscall.flock.return +{ + dummy_c_function() /* used to prevent over-optimization */ +} + + +function dummy_c_function() +%{ +%} + +probe syscall.open +{ + if(filter_by_pid() == 1 ) + log_iosyscall_open(filename, flags, mode) +} + +probe syscall.open.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_OPEN_RETURN, retstr) +} + +function log_iosyscall_open(filename:string, flags:long, mode:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_OPEN_ENTRY, + "%0s%4b%4b", THIS->filename, THIS->flags, + THIS->mode); +%} + +function log_iosyscall_return(var_id:long, retstr:string) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%0s", THIS->retstr); +%} + +probe syscall.close +{ + if(filter_by_pid() == 1 ) + log_iosyscall_close(fd) +} + +probe syscall.close.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_CLOSE_RETURN, retstr) +} + + +function log_iosyscall_close(fd:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_CLOSE_ENTRY, + "%8b", THIS->fd); +%} + +probe syscall.read +{ + if(filter_by_pid() == 1 ) + log_iosyscall_read_write(HOOKID_IOSYSCALL_READ_ENTRY, fd, + buf_uaddr, count) +} + +probe syscall.read.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_READ_RETURN, retstr) +} + +probe syscall.write +{ + if(filter_by_pid() == 1 ) + log_iosyscall_read_write(HOOKID_IOSYSCALL_WRITE_ENTRY, fd, + buf_uaddr, count) +} + +probe syscall.write.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_WRITE_RETURN, retstr) +} + +function log_iosyscall_read_write(var_id:long, fd:long, buf_uaddr:long, + count:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%8b%8b%8b", + THIS->fd, THIS->buf_uaddr, THIS->count); +%} + +probe syscall.readv +{ + if(filter_by_pid() == 1 ) + log_iosyscall_readv_writev(HOOKID_IOSYSCALL_READV_ENTRY, + fd, vector_uaddr, count) +} + +probe syscall.readv.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_READV_RETURN, retstr) +} + +probe syscall.writev +{ + if(filter_by_pid() == 1 ) + log_iosyscall_readv_writev(HOOKID_IOSYSCALL_WRITEV_ENTRY, + fd, vector_uaddr, count) +} + +probe syscall.writev.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_WRITEV_RETURN, retstr) +} + +function log_iosyscall_readv_writev(var_id:long, fd:long, + vector_uaddr:long, count:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%8b%8b%8b", + THIS->fd, THIS->vector_uaddr, THIS->count); +%} + +probe syscall.pread64 +{ + if(filter_by_pid() == 1 ) + log_iosyscall_pread64_pwrite64(HOOKID_IOSYSCALL_PREAD64_ENTRY, + fd, buf_uaddr, count, offset) +} + +probe syscall.pread64.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_PREAD64_RETURN, retstr) +} + +probe syscall.pwrite64 +{ + if(filter_by_pid() == 1 ) + log_iosyscall_pread64_pwrite64(HOOKID_IOSYSCALL_PWRITE64_ENTRY, + fd, buf_uaddr, count, offset); +} + +probe syscall.pwrite64.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_PWRITE64_RETURN, retstr) +} + +function log_iosyscall_pread64_pwrite64(var_id:long, fd:long, + buf_uaddr:long, count:long, offset:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%8b%8b%8b%8b", + THIS->fd, THIS->buf_uaddr, THIS->count, THIS->offset); +%} + +probe syscall.readahead +{ + if(filter_by_pid() == 1 ) + log_iosyscall_readahead(fd, offset, count) +} + +probe syscall.readahead.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_READAHEAD_RETURN, retstr) +} + + +function log_iosyscall_readahead(fd:long, offset:long,count:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_READAHEAD_ENTRY, + "%8b%8b%8b", THIS->fd, THIS->offset, THIS->count); +%} + +probe syscall.sendfile +{ + if(filter_by_pid() == 1 ) + log_iosyscall_sendfile(HOOKID_IOSYSCALL_SENDFILE_ENTRY, + out_fd, in_fd, offset_uaddr, count) +} + +probe syscall.sendfile.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_SENDFILE_RETURN, retstr) +} + +function log_iosyscall_sendfile(var_id:long, out_fd:long, in_fd:long, + offset_uaddr:long, count:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%8b%8b%8b%8b", + THIS->out_fd, THIS->in_fd, THIS->offset_uaddr, + THIS->count); +%} + +probe syscall.lseek +{ + if(filter_by_pid() == 1 ) + log_iosyscall_lseek(fildes, offset, whence) +} + +probe syscall.lseek.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_LSEEK_RETURN, retstr) +} + +function log_iosyscall_lseek(fd:long, offset:long, whence:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_LSEEK_ENTRY, + "%8b%8b%1b", THIS->fd, THIS->offset, THIS->whence); +%} + +probe syscall.llseek +{ + if(filter_by_pid() == 1 ) + log_iosyscall_llseek(fd, offset_high, offset_low, result_uaddr, + whence) +} + +probe syscall.llseek.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_LLSEEK_RETURN, retstr) +} + +function log_iosyscall_llseek(fd:long, offset_high:long, offset_low:long, + result_uaddr:long, whence:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_LLSEEK_ENTRY, + "%8b%8b%8b%8b%1b", THIS->fd, THIS->offset_high, + THIS->offset_low, THIS->result_uaddr, THIS->whence); +%} + +probe syscall.sync +{ + if(filter_by_pid() == 1 ) + log_iosyscall_sync() +} + +probe syscall.sync.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_SYNC_RETURN, retstr) +} + +function log_iosyscall_sync() +%{ + struct timeval tv; + do_gettimeofday(&tv); +#if defined(ASCII_TRACE) + _stp_printf("%d%d%d%d%d%d%d%d", _GROUP_IOSYSCALL, + _HOOKID_IOSYSCALL_SYNC_ENTRY, tv.tv_sec, tv.tv_usec, + current->tgid, current->parent->pid, current->pid, + current->thread_info->cpu); + +#else + _stp_printf("%2b%2n%1b%1b%4b%4b%4b%4b%4b%1b", (_FMT_)0, + (_FMT_)_GROUP_IOSYSCALL, (_FMT_)_HOOKID_IOSYSCALL_SYNC_ENTRY, + (_FMT_)tv.tv_sec, (_FMT_)tv.tv_usec, (_FMT_)current->tgid, + (_FMT_)current->parent->pid, (_FMT_)current->pid, + (_FMT_)current->thread_info->cpu); +#endif + +%} + +probe syscall.fsync +{ + if(filter_by_pid() == 1 ) + log_iosyscall_fsync(HOOKID_IOSYSCALL_FSYNC_ENTRY, fd) +} + +probe syscall.fsync.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_FSYNC_RETURN, retstr) +} + +probe syscall.fdatasync +{ + if(filter_by_pid() == 1 ) + log_iosyscall_fsync(HOOKID_IOSYSCALL_FDATASYNC_ENTRY, fd) +} + +probe syscall.fdatasync.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_FDATASYNC_RETURN, retstr) +} + +function log_iosyscall_fsync(var_id:long, fd:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, THIS->var_id, "%8b", THIS->fd); +%} + +probe syscall.flock +{ + if(filter_by_pid() == 1 ) + log_iosyscall_flock(fd, operation) +} + +probe syscall.flock.return +{ + if(filter_by_pid() == 1 ) + log_iosyscall_return(HOOKID_IOSYSCALL_FLOCK_RETURN, retstr) +} + +function log_iosyscall_flock(fd:long, operation:long) +%{ + _lket_trace(_GROUP_IOSYSCALL, _HOOKID_IOSYSCALL_FLOCK_ENTRY, + "%8b%4b", THIS->fd, THIS->operation); +%} + +/* + +fs: +newfstat, newlstat, newstat,pipe,poll,select,readlink,rename,rmdir,symlink,, +truncate,ftruncate,unlink,chmod,chown,dup,dup2,fchdir,fchmod,fchown,fcntl, +fstatfs,link,mkdir, + +aio: +io_cancel,io_destroy,io_getevents,io_setup,io_submit, + +*/ |