From 9f61c5d4c3487aa8225d5271c798f5ebaafc398a Mon Sep 17 00:00:00 2001 From: David Smith Date: Mon, 2 Nov 2009 12:51:12 -0600 Subject: PR 6691 fixed by adding support for sys_accept4. * tapset/aux_syscalls.stp(_sock_type_str): Rewrote in embedded-C and added socket flags support. (_sock_flags_str): New function. * tapset/syscalls.stp: syscall.accept prefers to use sys_accept4 when it exists. Added support for sys_accept4's 'flag' parameter. * testsuite/systemtap.syscall/net1.c (main): Updated regular expression to handle the new 'flags' argument. --- tapset/syscalls.stp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'tapset/syscalls.stp') diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index 825842a6..dde0ca9f 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -27,17 +27,29 @@ # accept _____________________________________________________ # long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, -# int __user *upeer_addrlen) -probe syscall.accept = kernel.function("SyS_accept").call !, - kernel.function("sys_accept").call ? +# int __user *upeer_addrlen, int flags) +probe syscall.accept = _syscall.accept4 !, _syscall.accept { name = "accept" sockfd = $fd addr_uaddr = $upeer_sockaddr addrlen_uaddr = $upeer_addrlen - argstr = sprintf("%d, %p, %p", $fd, $upeer_sockaddr, $upeer_addrlen) + argstr = sprintf("%d, %p, %p, %s", $fd, $upeer_sockaddr, + $upeer_addrlen, flags_str) } -probe syscall.accept.return = kernel.function("SyS_accept").return !, +probe _syscall.accept4 = kernel.function("sys_accept4").call +{ + flags = $flags + flags_str = _sock_flags_str($flags) +} +probe _syscall.accept = kernel.function("SyS_accept").call !, + kernel.function("sys_accept").call ? +{ + flags = 0 + flags_str = "0" +} +probe syscall.accept.return = kernel.function("sys_accept4").return !, + kernel.function("SyS_accept").return !, kernel.function("sys_accept").return ? { name = "accept" -- cgit