summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhien <hien>2006-02-16 00:28:50 +0000
committerhien <hien>2006-02-16 00:28:50 +0000
commitd487127ca05f400b1c4d244dde5f537118177a6c (patch)
tree454448c26d514f99ce571dc7900fcdb1ab0f1f19
parent13a9593fbcfe7e358f099dbb28d49166417ae09b (diff)
downloadsystemtap-steved-d487127ca05f400b1c4d244dde5f537118177a6c.tar.gz
systemtap-steved-d487127ca05f400b1c4d244dde5f537118177a6c.tar.xz
systemtap-steved-d487127ca05f400b1c4d244dde5f537118177a6c.zip
Added the following functions
_struct_rlimit_u _fildes_u _fd_set_u _semctl_cmd __sem_flags
-rw-r--r--tapset/aux_syscalls.stp117
1 files changed, 115 insertions, 2 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index 939ec5a9..ec7cf469 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -10,8 +10,8 @@ function _struct_timeval_u:string(uaddr:long)
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
- if(_stp_copy_from_user(&tv,ptr,sizeof(struct timeval)) == 0)
- snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d]", tv.tv_sec, tv.tv_usec);
+ if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct timeval)) == 0)
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", tv.tv_sec, tv.tv_usec);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
@@ -185,6 +185,119 @@ function _signal_name:string(sig:long)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%d", sig);
%}
+function _struct_rlimit_u:string(uaddr:long)
+%{
+ struct rlimit rl;
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if (_stp_copy_from_user(&rl, ptr, sizeof(struct rlimit)) == 0)
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld,%ld]",
+ rl.rlim_cur, rl.rlim_max);
+ else
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ }
+%}
+
+function _fildes_u(uaddr:long)
+%{
+ int fd[2];
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if (_stp_copy_from_user((char *)&fd, ptr, 2*sizeof(int)) == 0)
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d, %d]", fd[0], fd[1]);
+ else
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ }
+%}
+
+function _fd_set_u(uaddr:long)
+%{
+ fd_set fdset;
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if (_stp_copy_from_user((char *)&fdset, ptr, sizeof(fd_set)) == 0)
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld, %ld, ...", (long) fdset.fds_bits[0], fdset.fds_bits[1]);
+ else
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ }
+%}
+
+
+function _semctl_cmd:string(cmd:long)
+%{
+ int cmd = THIS->cmd;
+ char *res = 0;
+
+ switch(cmd) {
+ case IPC_INFO:
+ res = "IPC_INFO";
+ break;
+ case SEM_INFO:
+ res = "SEM_INFO";
+ break;
+ case SEM_STAT:
+ res = "SEM_STAT";
+ break;
+ case GETALL:
+ res = "GETALL";
+ break;
+ case GETVAL:
+ res = "GETVAL";
+ break;
+ case GETPID:
+ res = "GETPID";
+ break;
+ case GETNCNT:
+ res = "GETNCNT";
+ break;
+ case GETZCNT:
+ res = "GETZCNT";
+ break;
+ case IPC_STAT:
+ res = "IPC_STAT";
+ break;
+ case SETVAL:
+ res = "SETVAL";
+ break;
+ case SETALL:
+ res = "SETALL";
+ break;
+ case IPC_RMID:
+ res = "IPC_RMID";
+ break;
+ case IPC_SET:
+ res = "IPC_SET";
+ break;
+ }
+ if (res)
+ strlcpy (THIS->__retvalue, res, MAXSTRINGLEN);
+ else
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "%d", cmd);
+%}
+
+function __sem_flags:string(semflg:long)
+%{
+ long semflg = THIS->semflg;
+ char *str = THIS->__retvalue;
+
+ if (semflg & IPC_CREAT)
+ strlcat(str, "IPC_CREAT|", MAXSTRINGLEN);
+ if (semflg & IPC_EXCL)
+ strlcat(str, "IPC_EXCL|", MAXSTRINGLEN);
+
+ str[strlen(str)-1] = 0;
+%}
+
+
function __fork_flags:string(flags:long)
%{
long flags = THIS->flags;