Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 May 2018 06:23:31 +0000 (UTC)
From:      Devin Teske <dteske@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r333519 - head/cddl/usr.sbin/dwatch/libexec
Message-ID:  <201805120623.w4C6NVKO051206@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dteske
Date: Sat May 12 06:23:30 2018
New Revision: 333519
URL: https://svnweb.freebsd.org/changeset/base/333519

Log:
  dwatch(1): Refactor sendrecv profile
  
  The profile for send(2)/recv(2) observation has been refactored to
  eliminate alloca() in favor of translations available in HEAD.
  
  Sponsored by:	Smule, Inc.

Modified:
  head/cddl/usr.sbin/dwatch/libexec/sendrecv

Modified: head/cddl/usr.sbin/dwatch/libexec/sendrecv
==============================================================================
--- head/cddl/usr.sbin/dwatch/libexec/sendrecv	Sat May 12 06:18:15 2018	(r333518)
+++ head/cddl/usr.sbin/dwatch/libexec/sendrecv	Sat May 12 06:23:30 2018	(r333519)
@@ -27,8 +27,10 @@ recv)
 	: ${PROBE:=$( echo \
 		syscall::recvfrom:return, \
 		syscall::recvmsg:return )} ;;
+recv*)
+	: ${PROBE:=syscall::$PROFILE:return} ;;
 *)
-	: ${PROBE:=syscall::$PROFILE}
+	: ${PROBE:=syscall::$PROFILE:entry}
 esac
 
 ############################################################ EVENT ACTION
@@ -98,6 +100,8 @@ inline string address_family_string[sa_family_t af] =
 
 #pragma D binding "1.13" sa_data_size
 inline int sa_data_size = 14;
+#pragma D binding "1.13" sa_dummy_data
+inline char *sa_dummy_data = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
 
 #pragma D binding "1.13" sa_data_addr
 inline string sa_data_addr[sa_family_t af, char data[sa_data_size]] =
@@ -117,10 +121,14 @@ inline uint16_t sa_data_port[sa_family_t af, char data
 
 #pragma D binding "1.13" translator
 translator sainfo_t < struct sockaddr *SA > {
-	sa_family = SA->sa_family;
-	family = address_family_string[SA->sa_family];
-	addr = sa_data_addr[SA->sa_family, SA->sa_data];
-	port = sa_data_port[SA->sa_family, SA->sa_data];
+	sa_family =	SA == NULL ? 0 : SA->sa_family;
+	family =	address_family_string[SA == NULL ? 0 : SA->sa_family];
+	addr =		SA == NULL ?
+	    sa_data_addr[0, sa_dummy_data] :
+	    sa_data_addr[SA->sa_family, SA->sa_data];
+	port =		SA == NULL ?
+	    sa_data_port[0, sa_dummy_data] :
+	    sa_data_port[SA->sa_family, SA->sa_data];
 };
 
 this sainfo_t		sainfo;
@@ -150,10 +158,8 @@ $PROBE /* probe ID $ID */
 syscall::recvfrom:entry /* probe ID $(( $ID + 1 )) */
 {${TRACE:+
 	printf("<$(( $ID + 1 ))>");}
-	this->sa = args[4] == NULL ?
-		(struct sockaddr *)alloca(sizeof(struct sockaddr)) :
-		(struct sockaddr *)copyin(arg4, sizeof(struct sockaddr));
-	this->sainfo = xlate <sainfo_t> ((struct sockaddr *)this->sa);
+	this->sainfo = xlate <sainfo_t> ((struct sockaddr *)(args[4] == NULL ?
+		NULL : copyin(arg4, sizeof(struct sockaddr))));
 }
 
 syscall::recvfrom:return /* probe ID $(( $ID + 2 )) */
@@ -166,10 +172,18 @@ syscall::recvfrom:return /* probe ID $(( $ID + 2 )) */
 			this->sainfo.addr, this->sainfo.port]));
 }
 
-syscall::recvmsg:return /* probe ID $(( $ID + 3 )) */
+syscall::recvmsg:entry /* probe ID $(( $ID + 3 )) */
 {${TRACE:+
 	printf("<$(( $ID + 3 ))>");}
+	this->sockaddr = (struct sockaddr *)arg1;
+}
+
+syscall::recvmsg:return /this->sockaddr != NULL/ /* probe ID $(( $ID + 4 )) */
+{${TRACE:+
+	printf("<$(( $ID + 4 ))>");}
 	this->nbytes = arg0;
+	this->sainfo = xlate <sainfo_t> ((struct sockaddr *)this->sockaddr);
+	this->details = strjoin("sainfo=[", "]");
 }
 
 syscall::sendmsg:entry /* probe ID $(( $ID + 5 )) */
@@ -178,14 +192,12 @@ syscall::sendmsg:entry /* probe ID $(( $ID + 5 )) */
 	this->nbytes = arg2;
 }
 
-syscall::sendto:entry /* probe ID $(( $ID + 4 )) */
+syscall::sendto:entry /* probe ID $(( $ID + 6 )) */
 {${TRACE:+
-	printf("<$(( $ID + 4 ))>");}
+	printf("<$(( $ID + 6 ))>");}
 	this->nbytes = arg2;
-	this->sa = arg4 == NULL ?
-		(struct sockaddr *)alloca(sizeof(struct sockaddr)) :
-		(struct sockaddr *)copyin(arg4, sizeof(struct sockaddr));
-	this->sainfo = xlate <sainfo_t> ((struct sockaddr *)this->sa);
+	this->sainfo = xlate <sainfo_t> ((struct sockaddr *)(arg4 == NULL ?
+		NULL : copyin(arg4, sizeof(struct sockaddr))));
 	this->details = strjoin("to ", strjoin(
 		strjoin(this->sainfo.family, " "),
 		af_details[this->sainfo.sa_family,
@@ -193,7 +205,7 @@ syscall::sendto:entry /* probe ID $(( $ID + 4 )) */
 }
 EOF
 ACTIONS=$( cat <&9 )
-ID=$(( $ID + 5 ))
+ID=$(( $ID + 7 ))
 
 ############################################################ EVENT DETAILS
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805120623.w4C6NVKO051206>