diff options
author | kevinrs <kevinrs> | 2005-09-29 00:10:45 +0000 |
---|---|---|
committer | kevinrs <kevinrs> | 2005-09-29 00:10:45 +0000 |
commit | 953064829b2fed48eda09ed69799b193df6f4aa9 (patch) | |
tree | b3c03f30c36fec2b9058edaee3cfe3a160d116b9 /tapset | |
parent | ed10c6397cc27ad161c7fcd5242c38efd89dc5ee (diff) | |
download | systemtap-steved-953064829b2fed48eda09ed69799b193df6f4aa9.tar.gz systemtap-steved-953064829b2fed48eda09ed69799b193df6f4aa9.tar.xz systemtap-steved-953064829b2fed48eda09ed69799b193df6f4aa9.zip |
mask_string.stp
function uses different algorithm to build symbolic
flag string from int. Now uses locals to do so. SMP
safe.
string.stp
add isinstr(s1,s2) - return 1 if s1 contains s2 else
return 0
Diffstat (limited to 'tapset')
-rw-r--r-- | tapset/mask_string.stp | 99 | ||||
-rw-r--r-- | tapset/string.stp | 7 | ||||
-rw-r--r-- | tapset/system_calls.stp | 169 |
3 files changed, 166 insertions, 109 deletions
diff --git a/tapset/mask_string.stp b/tapset/mask_string.stp index 47d609f6..db5eaef8 100644 --- a/tapset/mask_string.stp +++ b/tapset/mask_string.stp @@ -1,58 +1,51 @@ -global _name -global _bits +/* + These functions construct the bitwise-or'd symbolic string + representation of the f param, based on the function arg. +*/ +function __decf(f,mask){ return ((f-mask)>=0) ? (f-mask) : f } -function _bitstring:string(mask:long,sz:long,stop:long) { - /* derive bitwise-or'd mask string */ - for(i=sz;i>=0;i--) { - if(mask>=_bits[i]) { - mskstr=_name[i]."|".mskstr; - if(mask<stop) - break; - mask=mask-_bits[i]; - } - } - return substr(mskstr,0,(strlen(mskstr)-1)); +/* `man 2 open` for more information */ +function _sys_open_flag_str(f) { + if((f-8192)>=0 && (f=__decf(f,8192))>=0) bs="O_ASYNC|".bs + if((f-4096)>=0 && (f=__decf(f,4096))>=0) bs="O_SYNC|".bs + if((f-2048)>=0 && (f=__decf(f,2048))>=0) bs="O_NONBLOCK|".bs + if((f-1024)>=0 && (f=__decf(f,1024))>=0) bs="O_APPEND|".bs + if((f-512)>=0 && (f=__decf(f,512))>=0) bs="O_TRUNC|".bs + if((f-256)>=0 && (f=__decf(f,256))>=0) bs="O_NDCTTY|".bs + if((f-128)>=0 && (f=__decf(f,128))>=0) bs="O_EXCL|".bs + if((f-64)>=0 && (f=__decf(f,64))>=0) bs="O_CREAT|".bs + if((f-2)>=0 && (f=__decf(f,2))>=0) + return substr("O_RDWR|".bs,0,strlen("O_RDWR|".bs)-1) + if((f-1)>=0 && (f=__decf(f,1))>=0) + return substr("O_WRONLY|".bs,0,strlen("O_WRONLY|".bs)-1) + return substr("O_RDONLY|".bs,0,strlen("O_RDONLY|".bs)-1) } -function sys_adjtimex_mode_str:string(flags:long) { - _name[0]= "ADJ_OFFSET"; _bits[0]=1; - _name[1]= "ADJ_FREQUENCY"; _bits[1]=2; - _name[2]= "ADJ_MAXERROR"; _bits[2]=3; - _name[3]= "ADJ_ESTERROR"; _bits[3]=8; - _name[4]= "ADJ_STATUS"; _bits[4]=16; - _name[5]= "ADJ_TIMECONST"; _bits[5]=32; - _name[6]= "ADJ_TICK"; _bits[6]=16384; - _name[7]= "ADJ_OFFSET_SINGLESHOT"; _bits[7]=32769; - return _bitstring(flags,6,0); -} - -function sys_open_flag_str:string(flags:long) { - _name[0]= "O_RDONLY"; _bits[0]=0; - _name[1]= "O_WRONLY"; _bits[1]=1; - _name[2]= "O_RDWR"; _bits[2]=2; - _name[3]= "O_CREAT"; _bits[3]=64; - _name[4]= "O_EXCL"; _bits[4]=128; - _name[5]= "O_NDCTTY"; _bits[5]=256; - _name[6]= "O_TRUNC"; _bits[6]=512; - _name[7]= "O_APPEND"; _bits[7]=1024; - _name[8]= "O_NONBLOCK"; _bits[8]=2048; - _name[9]= "O_SYNC"; _bits[9]=4096; - _name[10]="O_ASYNC"; _bits[10]=8192; - return _bitstring(flags,10,64); -} +/* `man 2 open` for more information */ +function _sys_open_mode_str(f) { + if((f-448)>=0 && (f=__decf(f,448))>=0) bs="S_IRWXU|".bs + if((f-256)>=0 && (f=__decf(f,256))>=0) bs="S_IRUSR|".bs + if((f-128)>=0 && (f=__decf(f,128))>=0) bs="S_IWUSR|".bs + if((f-64)>=0 && (f=__decf(f,64))>=0) bs="S_IXUSR|".bs + if((f-56)>=0 && (f=__decf(f,56))>=0) bs="S_IRWXG|".bs + if((f-32)>=0 && (f=__decf(f,32))>=0) bs="S_IRGRP|".bs + if((f-16)>=0 && (f=__decf(f,16))>=0) bs="S_IWGRP|".bs + if((f-8)>=0 && (f=__decf(f,8))>=0) bs="S_IXGRP|".bs + if((f-7)>=0 && (f=__decf(f,7))>=0) bs="S_IRWXO|".bs + if((f-4)>=0 && (f=__decf(f,4))>=0) bs="S_IROTH|".bs + if((f-2)>=0 && (f=__decf(f,2))>=0) bs="S_IWOTH|".bs + if((f-1)>=0 && (f=__decf(f,1))>=0) bs="S_IXOTH|".bs + return substr(bs,0,strlen(bs)-1) -function sys_open_mode_umask_str:string(mode:long) { - _name[0]= "S_IXOTH"; _bits[0]=1; - _name[1]= "S_IWOTH"; _bits[1]=2; - _name[2]= "S_IROTH"; _bits[2]=4; - _name[3]= "S_IRWXO"; _bits[3]=7; - _name[4]= "S_IXGRP"; _bits[4]=8; - _name[5]= "S_IWGRP"; _bits[5]=16; - _name[6]= "S_IRGRP"; _bits[6]=32; - _name[7]= "S_IRWXG"; _bits[7]=56; - _name[8]= "S_IXUSR"; _bits[8]=64; - _name[9]= "S_IWUSR"; _bits[9]=128; - _name[10]="S_IRUSR"; _bits[10]=256; - _name[11]="S_IRWXU"; _bits[11]=448; - return _bitstring(mode,11,0); +/* `man adjtimex` for more information */ +function _sys_adjtimex_mode_str(f) { + if((f-32769)>=0 && (f=__decf(f,32769))>=0) bs="ADJ_OFFSET_SINGLESHOT|".bs + if((f-16384)>=0 && (f=__decf(f,16384))>=0) bs="ADJ_TICK|".bs + if((f-32)>=0 && (f=__decf(f,32))>=0) bs="ADJ_TIMECONST|".bs + if((f-16)>=0 && (f=__decf(f,16))>=0) bs="ADJ_STATUS|".bs + if((f-8)>=0 && (f=__decf(f,8))>=0) bs="ADJ_ESTERROR|".bs + if((f-3)>=0 && (f=__decf(f,3))>=0) bs="ADJ_MAXERROR|".bs + if((f-2)>=0 && (f=__decf(f,2))>=0) bs="ADJ_FREQUENCY|".bs + if((f-1)>=0 && (f=__decf(f,1))>=0) bs="ADJ_OFFSET|".bs + return substr(bs,0,strlen(bs)-1) } diff --git a/tapset/string.stp b/tapset/string.stp index f6933724..64ca8c5f 100644 --- a/tapset/string.stp +++ b/tapset/string.stp @@ -16,3 +16,10 @@ function substr:string(str:string,start:long,stop:long) %{ THIS->__retvalue[THIS->stop]='\0'; } %} + +function isinstr:long(s1:string,s2:string) %{ + if(strstr(THIS->s1,THIS->s2)!=NULL) + THIS->__retvalue = 1; + else + THIS->__retvalue = 0; +%} diff --git a/tapset/system_calls.stp b/tapset/system_calls.stp index 4b0665a8..b0fc1ac5 100644 --- a/tapset/system_calls.stp +++ b/tapset/system_calls.stp @@ -790,13 +790,7 @@ probe kernel.syscall.timer_create = kernel.function("sys_timer_create") { name = "timer_create" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* ...a little unsure about this... typedef struct sigevent { @@ -821,13 +815,7 @@ probe kernel.syscall.timer_create.return = kernel.function("sys_timer_create").return { name = "timer_create.return" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* ...a little unsure about this... typedef struct sigevent { @@ -929,13 +917,7 @@ probe kernel.syscall.clock_settime = kernel.function("sys_clock_settime") { name = "clock_settime" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* tp_tv_sec = $tp->tv_sec tp_tv_usec = $tp->tv_usec @@ -946,13 +928,7 @@ probe kernel.syscall.clock_settime.return = kernel.function("sys_clock_settime").return { name = "clock_settime.return" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* tp_tv_sec = $tp->tv_sec tp_tv_usec = $tp->tv_usec @@ -965,142 +941,199 @@ probe kernel.syscall.clock_gettime = kernel.function("sys_clock_gettime") { name = "clock_gettime" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) } probe kernel.syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return { name = "clock_gettime.return" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* tp_tv_sec = $tp->tv_sec tp_tv_usec = $tp->tv_usec */ } # clock_getres_____________________________________ +/* asmlinkage long sys_clock_getres(clockid_t which_clock, + struct timespec __user *tp) */ probe kernel.syscall.clock_getres = kernel.function("sys_clock_getres") { name = "clock_getres" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) } probe kernel.syscall.clock_getres.return = kernel.function("sys_clock_getres").return { name = "clock_getres.return" which_clock = $which_clock - which_clock_str = "" - if (how==0) how_str = "CLOCK_REALTIME" - if (how==1) how_str = "CLOCK_MONOTONIC" - if (how==2) how_str = "CLOCK_PROCESS_CPUTIME_ID" - if (how==3) how_str = "CLOCK_THREAD_CPUTIME_ID" - if (how==4) how_str = "CLOCK_REALTIME_HR" - if (how==5) how_str = "CLOCK_MONOTONIC_HR" + which_clock_str = _get_wc_str($which_clock) /* tp_tv_sec = $tp->tv_sec tp_tv_usec = $tp->tv_usec */ } # clock_nanosleep__________________________________ +/* asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags, + const struct timespec __user *rqtp, + struct timespec __user *rmtp) */ probe kernel.syscall.clock_nanosleep = kernel.function("sys_clock_nanosleep") { name = "clock_nanosleep" + which_clock = $which_clock + which_clock_str = _get_wc_str($which_clock) + flags = $flags + flag_str = "TIMER_ABSTIME" + /* + rqtp_tv_sec = $rqtp->tv_sec + rqtp_tv_usec = $rqtp->tv_usec + */ } probe kernel.syscall.clock_nanosleep.return = kernel.function("sys_clock_nanosleep").return { name = "clock_nanosleep.return" + which_clock = $which_clock + which_clock_str = _get_wc_str($which_clock) + flags = $flags + flag_str = "TIMER_ABSTIME" + /* + rqtp_tv_sec = $rqtp->tv_sec + rqtp_tv_usec = $rqtp->tv_usec + rmtp_tv_sec = $rmtp->tv_sec + rmtp_tv_usec = $rmtp->tv_usec + */ } # nice_____________________________________________ +/* asmlinkage long sys_nice(int increment) */ probe kernel.syscall.nice = kernel.function("sys_nice") { name = "nice" + inc = $increment } probe kernel.syscall.nice.return = kernel.function("sys_nice").return { name = "nice.return" + inc = $increment } # sched_setscheduler_______________________________ +/* asmlinkage long sys_sched_setscheduler(pid_t pid, int policy, + struct sched_param __user *param) */ probe kernel.syscall.sched_setscheduler = kernel.function("do_sched_setscheduler") { name = "sched_setscheduler" + pid = $pid + policy = $policy + policy_str = "" + if($policy==0) policy_str = "SCHED_OTHER" + if($policy==1) policy_str = "SCHED_FIFO" + if($policy==2) policy_str = "SCHED_RR" + /* + p_sched_priority = param->sched_parameter + */ } probe kernel.syscall.sched_setscheduler.return = kernel.function("do_sched_setscheduler").return { name = "sched_setscheduler.return" + pid = $pid + policy = $policy + policy_str = "" + if($policy==0) policy_str = "SCHED_OTHER" + if($policy==1) policy_str = "SCHED_FIFO" + if($policy==2) policy_str = "SCHED_RR" + /* + p_sched_priority = param->sched_parameter + */ } # sched_setparam___________________________________ +/* asmlinkage long sys_sched_setparam(pid_t pid, + struct sched_param __user *param) */ probe kernel.syscall.sched_setparam = kernel.function("do_sched_setscheduler") { name = "sched_setparam" + pid = $pid + /* + p_sched_priority = param->sched_parameter + */ } probe kernel.syscall.sched_setparam.return = kernel.function("do_sched_setscheduler").return { name = "sched_setparam.return" + pid = $pid + /* + p_sched_priority = param->sched_parameter + */ } # sched_getscheduler_______________________________ +/* asmlinkage long sys_sched_getscheduler(pid_t pid) */ probe kernel.syscall.sched_getscheduler = kernel.function("sys_sched_getscheduler") { name = "sched_getscheduler" + pid = $pid } probe kernel.syscall.sched_getscheduler.return = kernel.function("sys_sched_getscheduler").return { name = "sched_getscheduler.return" + pid = $pid } # sched_getparam___________________________________ +/* asmlinkage long sys_sched_getparam(pid_t pid, + struct sched_param __user *param) */ probe kernel.syscall.sched_getparam = kernel.function("sys_sched_getparam") { name = "sched_getparam" + pid = $pid } probe kernel.syscall.sched_getparam.return = kernel.function("sys_sched_getparam").return { name = "sched_getparam.return" + pid = $pid + /* + p_sched_priority = param->sched_parameter + */ } # sched_setaffinity________________________________ +/* long sched_setaffinity(pid_t pid, cpumask_t new_mask) */ probe kernel.syscall.sched_setaffinity = kernel.function("sys_sched_setaffinity") { name = "sched_setaffinity" + pid = $pid + mask = $new_mask } probe kernel.syscall.sched_setaffinity.return = kernel.function("sys_sched_setaffinity").return { name = "sched_setaffinity.return" + pid = $pid + mask = $new_mask } # sched_getaffinity________________________________ +/* asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, + unsigned long __user *user_mask_ptr) */ probe kernel.syscall.sched_getaffinity = kernel.function("sys_sched_getaffinity") { name = "sched_getaffinity" + pid = $pid + len = $len } probe kernel.syscall.sched_getaffinity.return = kernel.function("sys_sched_getaffinity").return { name = "sched_getaffinity.return" + pid = $pid + len = $len + /* + mask = $user_mask_ptr + */ } # sched_yield______________________________________ +/* asmlinkage long sys_sched_yield(void) */ probe kernel.syscall.sched_yield = kernel.function("sys_sched_yield") { name = "sched_yield" @@ -1111,34 +1144,48 @@ probe kernel.syscall.sched_yield.return = name = "sched_yield.return" } # sched_get_priority_max___________________________ +/* asmlinkage long sys_sched_get_priority_max(int policy) */ probe kernel.syscall.sched_get_priority_max = kernel.function("sys_sched_get_priority_max") { name = "sched_get_priority_max" + policy = $policy } probe kernel.syscall.sched_get_priority_max.return = kernel.function("sys_sched_get_priority_max").return { name = "sched_get_priority_max.return" + policy = $policy } # sched_get_priority_min___________________________ +/* asmlinkage long sys_sched_get_priority_min(int policy) */ probe kernel.syscall.sched_get_priority_min = kernel.function("sys_sched_get_priority_min") { name = "sched_get_priority_min" + policy = $policy } probe kernel.syscall.sched_get_priority_min.return = kernel.function("sys_sched_get_priority_min").return { name = "sched_get_priority_min.return" + policy = $policy } # sched_rr_get_interval____________________________ +/* asmlinkage long sys_sched_rr_get_interval(pid_t pid, + struct timespec __user *interval) */ probe kernel.syscall.sched_rr_get_interval = kernel.function("sys_sched_rr_get_interval") { name = "sched_rr_get_interval" + pid = $pid } probe kernel.syscall.sched_rr_get_interval.return = kernel.function("sys_sched_rr_get_interval").return { name = "sched_rr_get_interval.return" + pid = $pid + /* + tp_tv_sec = $tp->tv_sec + tp_tv_usec = $tp->tv_usec + */ } # setpriority______________________________________ probe kernel.syscall.setpriority = @@ -3350,3 +3397,13 @@ probe kernel.syscall.rt_sigaction.return = kernel.function("sys_rt_sigaction").return { name = "rt_sigaction.return" } +/* AUX_HELPER FUNCTIONS AUX_HELPER FUNCTIONS AUX_HELPER FUNCTIONS */ +_get_wc_str(wc) { + if (wc==0) return "CLOCK_REALTIME" + if (wc==1) return "CLOCK_MONOTONIC" + if (wc==2) return "CLOCK_PROCESS_CPUTIME_ID" + if (wc==3) return "CLOCK_THREAD_CPUTIME_ID" + if (wc==4) return "CLOCK_REALTIME_HR" + if (wc==5) return "CLOCK_MONOTONIC_HR" + return "" +} |