diff options
author | Mark Wielaard <mjw@redhat.com> | 2010-03-19 23:19:19 +0100 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2010-03-21 17:34:41 +0100 |
commit | 41877d526c4c864aa851bed5d405d6d197c0b39b (patch) | |
tree | 6af3702ed0f231d0c547a5bbe7f7458af90954e2 | |
parent | 08ee70c354131edccb0d1a73aa67abb9c65870fc (diff) | |
download | systemtap-steved-41877d526c4c864aa851bed5d405d6d197c0b39b.tar.gz systemtap-steved-41877d526c4c864aa851bed5d405d6d197c0b39b.tar.xz systemtap-steved-41877d526c4c864aa851bed5d405d6d197c0b39b.zip |
Support epoll_create1 syscall.
* tapset/aux_syscalls.stp (_epoll_create1_flag_str): New helper function.
* tapset/syscalls.stp (syscall.epoll_create[.return]): Match epoll_creat1
if available.
-rw-r--r-- | tapset/aux_syscalls.stp | 10 | ||||
-rw-r--r-- | tapset/syscalls.stp | 24 | ||||
-rw-r--r-- | testsuite/systemtap.syscall/poll.c | 5 |
3 files changed, 33 insertions, 6 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index 84342448..c101ae19 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -1632,6 +1632,16 @@ function _at_flag_str:string(f:long) _stp_lookup_str(_stp_atflag_list, THIS->f, THIS->__retvalue, MAXSTRINGLEN); %} +%{ +#include <linux/eventpoll.h> +%} +function _epoll_create1_flag_str:string(f:long) +%{ /* pure */ +#ifdef EPOLL_CLOEXEC + if (THIS->f == EPOLL_CLOEXEC) + strlcpy (THIS->__retvalue, "EPOLL_CLOEXEC", MAXSTRINGLEN); +#endif +%} %{ #include <linux/shm.h> diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index 0970df5b..743318b2 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -582,17 +582,29 @@ probe syscall.dup2.return = kernel.function("SyS_dup2").return !, # epoll_create _______________________________________________ # long sys_epoll_create(int size) -probe syscall.epoll_create = kernel.function("SyS_epoll_create").call !, +# SYSCALL_DEFINE1(epoll_create1, int, flags) +probe syscall.epoll_create = kernel.function("SyS_epoll_create1").call !, + kernel.function("sys_epoll_create1").call !, + kernel.function("SyS_epoll_create").call !, kernel.function("sys_epoll_create").call ? { - name = "epoll_create" - size = $size - argstr = sprint($size) + size = @defined($size) ? $size : 0; + flags = @defined($flags) ? $flags : 0; + if (flags == 0) { + name = "epoll_create"; + argstr = sprint(size); + } else { + name = "epoll_create1"; + argstr = _epoll_create1_flag_str(flags); + } } -probe syscall.epoll_create.return = kernel.function("SyS_epoll_create").return !, +probe syscall.epoll_create.return = kernel.function("SyS_epoll_create1").return !, + kernel.function("sys_epoll_create1").return !, + kernel.function("SyS_epoll_create").return !, kernel.function("sys_epoll_create").return ? { - name = "epoll_create" + flags = @defined($flags) ? $flags : 0; + name = (flags == 0) ? "epoll_create" : "epoll_create1"; retstr = returnstr(1) } diff --git a/testsuite/systemtap.syscall/poll.c b/testsuite/systemtap.syscall/poll.c index 3caa2b14..c34277b8 100644 --- a/testsuite/systemtap.syscall/poll.c +++ b/testsuite/systemtap.syscall/poll.c @@ -16,8 +16,13 @@ int main() sigemptyset(&sigs); sigaddset(&sigs,SIGUSR2); +#ifdef EPOLL_CLOEXEC + fd = epoll_create1(EPOLL_CLOEXEC); + //staptest// epoll_create1 (EPOLL_CLOEXEC) +#else fd = epoll_create(32); //staptest// epoll_create (32) +#endif epoll_ctl(fd, EPOLL_CTL_ADD, 13, &ev); //staptest// epoll_ctl (NNNN, EPOLL_CTL_ADD, 13, XXXX) |