Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Jun 2014 01:24:52 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r266989 - vendor-sys/illumos/dist/uts/common/dtrace vendor-sys/illumos/dist/uts/common/sys vendor/illumos/dist/cmd/dtrace vendor/illumos/dist/cmd/dtrace/test/tst/common/pid vendor/illum...
Message-ID:  <201406030124.s531OqdV043228@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Tue Jun  3 01:24:46 2014
New Revision: 266989
URL: http://svnweb.freebsd.org/changeset/base/266989

Log:
  4474 DTrace Userland CTF Support
  4475 DTrace userland Keyword
  4476 DTrace tests should be better citizens
  4479 pid provider types
  4480 dof emulation is missing checks
  
  illumos/illumos-gate@a386cc11a86ecb60f5a48078d22c1500e2ad003e

Modified:
  vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c
  vendor-sys/illumos/dist/uts/common/sys/ctf_api.h
  vendor-sys/illumos/dist/uts/common/sys/dtrace.h

Changes in other areas also in this revision:
Added:
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.invalidpid.d   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.invalidpid2.d   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.invalidpid3.d   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.invalidtype.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.invalidtype2.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/err.user64mode.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.aouttype.c   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.aouttype.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.chasestrings.c   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.chasestrings.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.chasestrings.ksh.out
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.libtype.c   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.libtype.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.linkmap.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.pidprint.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.pidprinttarg.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.printtype.c   (contents, props changed)
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.printtype.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.printtype.ksh.out
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.printtypetarg.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.userlandkey.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.userlandkey.ksh.out
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.userstrings.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/uctf/tst.userstrings.ksh.out
Modified:
  vendor/illumos/dist/cmd/dtrace/dtrace.c
  vendor/illumos/dist/cmd/dtrace/test/tst/common/pid/tst.provregex1.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/pid/tst.provregex2.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/pid/tst.provregex3.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/pid/tst.provregex4.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/printa/tst.largeusersym.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.corruptenv.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.dlclose1.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.dlclose2.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.dlclose3.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.eliminate.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.enabled.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.enabled2.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.entryreturn.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.fork.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.header.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.linkpriv.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.linkunpriv.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.multiple.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.multiprov.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.noprobes.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.noreap.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.noreapring.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.onlyenabled.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.reap.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.reeval.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.static.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.static2.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/common/usdt/tst.user.ksh
  vendor/illumos/dist/cmd/dtrace/test/tst/sparc/usdt/tst.tailcall.ksh
  vendor/illumos/dist/common/ctf/ctf_open.c
  vendor/illumos/dist/common/ctf/ctf_types.c
  vendor/illumos/dist/lib/libdtrace/common/dt_as.c
  vendor/illumos/dist/lib/libdtrace/common/dt_cc.c
  vendor/illumos/dist/lib/libdtrace/common/dt_decl.c
  vendor/illumos/dist/lib/libdtrace/common/dt_decl.h
  vendor/illumos/dist/lib/libdtrace/common/dt_dis.c
  vendor/illumos/dist/lib/libdtrace/common/dt_error.c
  vendor/illumos/dist/lib/libdtrace/common/dt_grammar.y
  vendor/illumos/dist/lib/libdtrace/common/dt_ident.c
  vendor/illumos/dist/lib/libdtrace/common/dt_impl.h
  vendor/illumos/dist/lib/libdtrace/common/dt_lex.l
  vendor/illumos/dist/lib/libdtrace/common/dt_module.c
  vendor/illumos/dist/lib/libdtrace/common/dt_module.h
  vendor/illumos/dist/lib/libdtrace/common/dt_open.c
  vendor/illumos/dist/lib/libdtrace/common/dt_parser.c
  vendor/illumos/dist/lib/libdtrace/common/dt_parser.h
  vendor/illumos/dist/lib/libdtrace/common/dt_pid.c
  vendor/illumos/dist/lib/libdtrace/common/dt_pid.h
  vendor/illumos/dist/lib/libdtrace/common/dt_print.c
  vendor/illumos/dist/lib/libdtrace/common/dt_printf.c
  vendor/illumos/dist/lib/libdtrace/common/dt_provider.c
  vendor/illumos/dist/lib/libdtrace/common/dt_xlator.c
  vendor/illumos/dist/lib/libdtrace/common/dtrace.h

Modified: vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c	Tue Jun  3 01:16:11 2014	(r266988)
+++ vendor-sys/illumos/dist/uts/common/dtrace/dtrace.c	Tue Jun  3 01:24:46 2014	(r266989)
@@ -5719,32 +5719,46 @@ dtrace_dif_emulate(dtrace_difo_t *difo, 
 			regs[rd] = dtrace_load64(regs[r1]);
 			break;
 		case DIF_OP_ULDSB:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] = (int8_t)
 			    dtrace_fuword8((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDSH:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] = (int16_t)
 			    dtrace_fuword16((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDSW:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] = (int32_t)
 			    dtrace_fuword32((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDUB:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] =
 			    dtrace_fuword8((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDUH:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] =
 			    dtrace_fuword16((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDUW:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] =
 			    dtrace_fuword32((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_ULDX:
+			DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
 			regs[rd] =
 			    dtrace_fuword64((void *)(uintptr_t)regs[r1]);
+			DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
 			break;
 		case DIF_OP_RET:
 			rval = regs[rd];
@@ -6552,6 +6566,63 @@ out:
 	mstate->dtms_scratch_ptr = old;
 }
 
+static void
+dtrace_store_by_ref(dtrace_difo_t *dp, caddr_t tomax, size_t size,
+    size_t *valoffsp, uint64_t *valp, uint64_t end, int intuple, int dtkind)
+{
+	volatile uint16_t *flags;
+	uint64_t val = *valp;
+	size_t valoffs = *valoffsp;
+
+	flags = (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+	ASSERT(dtkind == DIF_TF_BYREF || dtkind == DIF_TF_BYUREF);
+
+	/*
+	 * If this is a string, we're going to only load until we find the zero
+	 * byte -- after which we'll store zero bytes.
+	 */
+	if (dp->dtdo_rtype.dtdt_kind == DIF_TYPE_STRING) {
+		char c = '\0' + 1;
+		size_t s;
+
+		for (s = 0; s < size; s++) {
+			if (c != '\0' && dtkind == DIF_TF_BYREF) {
+				c = dtrace_load8(val++);
+			} else if (c != '\0' && dtkind == DIF_TF_BYUREF) {
+				DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
+				c = dtrace_fuword8((void *)(uintptr_t)val++);
+				DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
+				if (*flags & CPU_DTRACE_FAULT)
+					break;
+			}
+
+			DTRACE_STORE(uint8_t, tomax, valoffs++, c);
+
+			if (c == '\0' && intuple)
+				break;
+		}
+	} else {
+		uint8_t c;
+		while (valoffs < end) {
+			if (dtkind == DIF_TF_BYREF) {
+				c = dtrace_load8(val++);
+			} else if (dtkind == DIF_TF_BYUREF) {
+				DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
+				c = dtrace_fuword8((void *)(uintptr_t)val++);
+				DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
+				if (*flags & CPU_DTRACE_FAULT)
+					break;
+			}
+
+			DTRACE_STORE(uint8_t, tomax,
+			    valoffs++, c);
+		}
+	}
+
+	*valp = val;
+	*valoffsp = valoffs;
+}
+
 /*
  * If you're looking for the epicenter of DTrace, you just found it.  This
  * is the function called by the provider to fire a probe -- from which all
@@ -7043,7 +7114,8 @@ dtrace_probe(dtrace_id_t id, uintptr_t a
 				ASSERT(0);
 			}
 
-			if (dp->dtdo_rtype.dtdt_flags & DIF_TF_BYREF) {
+			if (dp->dtdo_rtype.dtdt_flags & DIF_TF_BYREF ||
+			    dp->dtdo_rtype.dtdt_flags & DIF_TF_BYUREF) {
 				uintptr_t end = valoffs + size;
 
 				if (tracememsize != 0 &&
@@ -7052,40 +7124,15 @@ dtrace_probe(dtrace_id_t id, uintptr_t a
 					tracememsize = 0;
 				}
 
-				if (!dtrace_vcanload((void *)(uintptr_t)val,
+				if (dp->dtdo_rtype.dtdt_flags & DIF_TF_BYREF &&
+				    !dtrace_vcanload((void *)(uintptr_t)val,
 				    &dp->dtdo_rtype, &mstate, vstate))
 					continue;
 
-				/*
-				 * If this is a string, we're going to only
-				 * load until we find the zero byte -- after
-				 * which we'll store zero bytes.
-				 */
-				if (dp->dtdo_rtype.dtdt_kind ==
-				    DIF_TYPE_STRING) {
-					char c = '\0' + 1;
-					int intuple = act->dta_intuple;
-					size_t s;
-
-					for (s = 0; s < size; s++) {
-						if (c != '\0')
-							c = dtrace_load8(val++);
-
-						DTRACE_STORE(uint8_t, tomax,
-						    valoffs++, c);
-
-						if (c == '\0' && intuple)
-							break;
-					}
-
-					continue;
-				}
-
-				while (valoffs < end) {
-					DTRACE_STORE(uint8_t, tomax, valoffs++,
-					    dtrace_load8(val++));
-				}
-
+				dtrace_store_by_ref(dp, tomax, size, &valoffs,
+				    &val, end, act->dta_intuple,
+				    dp->dtdo_rtype.dtdt_flags & DIF_TF_BYREF ?
+				    DIF_TF_BYREF: DIF_TF_BYUREF);
 				continue;
 			}
 
@@ -9203,7 +9250,7 @@ dtrace_difo_validate(dtrace_difo_t *dp, 
 		    "expected 'ret' as last DIF instruction\n");
 	}
 
-	if (!(dp->dtdo_rtype.dtdt_flags & DIF_TF_BYREF)) {
+	if (!(dp->dtdo_rtype.dtdt_flags & (DIF_TF_BYREF | DIF_TF_BYUREF))) {
 		/*
 		 * If we're not returning by reference, the size must be either
 		 * 0 or the size of one of the base types.

Modified: vendor-sys/illumos/dist/uts/common/sys/ctf_api.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/sys/ctf_api.h	Tue Jun  3 01:16:11 2014	(r266988)
+++ vendor-sys/illumos/dist/uts/common/sys/ctf_api.h	Tue Jun  3 01:24:46 2014	(r266989)
@@ -24,7 +24,7 @@
  * Use is subject to license terms.
  */
 /*
- * Copyright (c) 2012, Joyent, Inc.  All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc.  All rights reserved.
  */
 
 /*
@@ -151,6 +151,7 @@ extern ctf_file_t *ctf_bufopen(const ctf
 extern ctf_file_t *ctf_fdopen(int, int *);
 extern ctf_file_t *ctf_open(const char *, int *);
 extern ctf_file_t *ctf_create(int *);
+extern ctf_file_t *ctf_dup(ctf_file_t *);
 extern void ctf_close(ctf_file_t *);
 
 extern ctf_file_t *ctf_parent_file(ctf_file_t *);
@@ -176,6 +177,8 @@ extern ctf_id_t ctf_lookup_by_symbol(ctf
 extern ctf_id_t ctf_type_resolve(ctf_file_t *, ctf_id_t);
 extern ssize_t ctf_type_lname(ctf_file_t *, ctf_id_t, char *, size_t);
 extern char *ctf_type_name(ctf_file_t *, ctf_id_t, char *, size_t);
+extern char *ctf_type_qname(ctf_file_t *, ctf_id_t, char *, size_t,
+    const char *);
 extern ssize_t ctf_type_size(ctf_file_t *, ctf_id_t);
 extern ssize_t ctf_type_align(ctf_file_t *, ctf_id_t);
 extern int ctf_type_kind(ctf_file_t *, ctf_id_t);

Modified: vendor-sys/illumos/dist/uts/common/sys/dtrace.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/sys/dtrace.h	Tue Jun  3 01:16:11 2014	(r266988)
+++ vendor-sys/illumos/dist/uts/common/sys/dtrace.h	Tue Jun  3 01:24:46 2014	(r266989)
@@ -25,8 +25,8 @@
  */
 
 /*
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
  */
 
 #ifndef _SYS_DTRACE_H
@@ -354,6 +354,7 @@ typedef struct dtrace_diftype {
 #define	DIF_TYPE_STRING		1	/* type is a D string */
 
 #define	DIF_TF_BYREF		0x1	/* type is passed by reference */
+#define	DIF_TF_BYUREF		0x2	/* user type is passed by reference */
 
 /*
  * A DTrace Intermediate Format variable record is used to describe each of the



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