Print this page
4474 DTrace Userland CTF Support
4475 DTrace userland Keyword
4476 DTrace tests should be better citizens
4479 pid provider types
4480 dof emulation missing checks
Reviewed by: Bryan Cantrill <bryan@joyent.com>

@@ -19,10 +19,12 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2013 Joyent, Inc. All rights reserved.
  */
 
 #include <sys/sysmacros.h>
 #include <strings.h>
 #include <stdlib.h>

@@ -93,11 +95,11 @@
                             iskey ? "key" : "argument",
                             dt_node_type_name(args, n2, sizeof (n2)));
                 }
         }
 
-        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type);
+        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type, B_FALSE);
 }
 
 /*
  * Cook an associative array identifier.  If this is the first time we are
  * cooking this array, create its signature based on the argument list.

@@ -152,11 +154,11 @@
                 }
 
                 if (argc != 0)
                         isp->dis_args[argc - 1].dn_list = NULL;
 
-                dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type);
+                dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type, B_FALSE);
 
         } else {
                 dt_idcook_sign(dnp, idp, argc, args,
                     idp->di_kind == DT_IDENT_AGG ? "@" : "", "[ ]");
         }

@@ -292,11 +294,11 @@
                                     "%s arg#%d (%s): %s\n", idp->di_name, i + 1,
                                     p1, dtrace_errmsg(dtp, dtrace_errno(dtp)));
                         }
 
                         dt_node_type_assign(&isp->dis_args[i],
-                            dtt.dtt_ctfp, dtt.dtt_type);
+                            dtt.dtt_ctfp, dtt.dtt_type, B_FALSE);
                 }
         }
 
         dt_idcook_sign(dnp, idp, argc, args, "", "( )");
 }

@@ -379,11 +381,13 @@
                 if (dnp->dn_ident == NULL)
                         longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM);
 
                 dt_node_type_assign(dnp,
                     prp->pr_argv[ap->dn_value].dtt_ctfp,
-                    prp->pr_argv[ap->dn_value].dtt_type);
+                    prp->pr_argv[ap->dn_value].dtt_type,
+                    prp->pr_argv[ap->dn_value].dtt_flags & DTT_FL_USER ?
+                    B_TRUE : B_FALSE);
 
         } else if ((dxp = dt_xlator_lookup(dtp,
             nnp, xnp, DT_XLATE_FUZZY)) != NULL || (
             dxp = dt_xlator_lookup(dtp, dt_probe_tag(prp, ap->dn_value, &tag),
             xnp, DT_XLATE_EXACT | DT_XLATE_EXTERN)) != NULL) {

@@ -407,11 +411,12 @@
                  */
                 dnp->dn_ident->di_data = xidp->di_data;
                 dnp->dn_ident->di_ctfp = xidp->di_ctfp;
                 dnp->dn_ident->di_type = xidp->di_type;
 
-                dt_node_type_assign(dnp, DT_DYN_CTFP(dtp), DT_DYN_TYPE(dtp));
+                dt_node_type_assign(dnp, DT_DYN_CTFP(dtp), DT_DYN_TYPE(dtp),
+                    B_FALSE);
 
         } else {
                 xyerror(D_ARGS_XLATOR, "translator for %s[%lld] from %s to %s "
                     "is not defined\n", idp->di_name, (longlong_t)ap->dn_value,
                     dt_node_type_name(nnp, n1, sizeof (n1)),

@@ -453,11 +458,11 @@
         }
 
         idp->di_ctfp = dtt.dtt_ctfp;
         idp->di_type = dtt.dtt_type;
 
-        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type);
+        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type, B_FALSE);
 }
 
 /*ARGSUSED*/
 static void
 dt_idcook_type(dt_node_t *dnp, dt_ident_t *idp, int argc, dt_node_t *args)

@@ -475,19 +480,19 @@
 
                 idp->di_ctfp = dtt.dtt_ctfp;
                 idp->di_type = dtt.dtt_type;
         }
 
-        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type);
+        dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type, B_FALSE);
 }
 
 /*ARGSUSED*/
 static void
 dt_idcook_thaw(dt_node_t *dnp, dt_ident_t *idp, int argc, dt_node_t *args)
 {
         if (idp->di_ctfp != NULL && idp->di_type != CTF_ERR)
-                dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type);
+                dt_node_type_assign(dnp, idp->di_ctfp, idp->di_type, B_FALSE);
 }
 
 static void
 dt_idcook_inline(dt_node_t *dnp, dt_ident_t *idp, int argc, dt_node_t *args)
 {