summaryrefslogtreecommitdiffstats
path: root/tapset
diff options
context:
space:
mode:
authorkevinrs <kevinrs>2005-09-29 00:10:45 +0000
committerkevinrs <kevinrs>2005-09-29 00:10:45 +0000
commit953064829b2fed48eda09ed69799b193df6f4aa9 (patch)
treeb3c03f30c36fec2b9058edaee3cfe3a160d116b9 /tapset
parented10c6397cc27ad161c7fcd5242c38efd89dc5ee (diff)
downloadsystemtap-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.stp99
-rw-r--r--tapset/string.stp7
-rw-r--r--tapset/system_calls.stp169
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 ""
+}