1 #
   2 # CDDL HEADER START
   3 #
   4 # The contents of this file are subject to the terms of the
   5 # Common Development and Distribution License (the "License").
   6 # You may not use this file except in compliance with the License.
   7 #
   8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9 # or http://www.opensolaris.org/os/licensing.
  10 # See the License for the specific language governing permissions
  11 # and limitations under the License.
  12 #
  13 # When distributing Covered Code, include this CDDL HEADER in each
  14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15 # If applicable, add the following below this CDDL HEADER, with the
  16 # fields enclosed by brackets "[]" replaced with your own identifying
  17 # information: Portions Copyright [yyyy] [name of copyright owner]
  18 #
  19 # CDDL HEADER END
  20 #
  21 
  22 #
  23 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  24 # Use is subject to license terms.
  25 # Copyright (c) 2012, Joyent, Inc. All rights reserved.
  26 #
  27 
  28 ppriv -s A=basic,dtrace_proc,dtrace_user $$
  29 
  30 /usr/sbin/dtrace -q -s /dev/stdin <<"EOF"
  31 
  32 BEGIN {
  33         errorcount = 0;
  34         expected_errorcount = 27;
  35 }
  36 
  37 BEGIN { trace(mutex_owned(&`pidlock)); }
  38 BEGIN { trace(mutex_owner(&`pidlock)); }
  39 BEGIN { trace(mutex_type_adaptive(&`pidlock)); }
  40 BEGIN { trace(mutex_type_spin(&`pidlock)); }
  41 
  42 BEGIN { trace(rw_read_held(&`ksyms_lock)); }
  43 BEGIN { trace(rw_write_held(&`ksyms_lock)); }
  44 BEGIN { trace(rw_iswriter(&`ksyms_lock)); }
  45 
  46 BEGIN { x = alloca(10); bcopy(`initname, x, 10); trace(stringof(x)); }
  47 /* We have no reliable way to test msgsize */
  48 
  49 BEGIN { trace(strlen(`initname)); }
  50 BEGIN { trace(strchr(`initname, 0x69)); }
  51 BEGIN { trace(strrchr(`initname, 0x69)); }
  52 BEGIN { trace(strstr("/sbin/init/foo", `initname)); }
  53 BEGIN { trace(strstr(`initname, "in")); }
  54 BEGIN { trace(strtok(`initname, "/")); }
  55 BEGIN { trace(strtok(NULL, "/")); }
  56 BEGIN { trace(strtok("foo/bar", `initname)); }
  57 BEGIN { trace(strtok(NULL, `initname)); }
  58 BEGIN { trace(strtoll(`initname)); }
  59 BEGIN { trace(strtoll(`initname, 10)); }
  60 BEGIN { trace(substr(`initname, 2, 3)); }
  61 
  62 BEGIN { trace(ddi_pathname(`top_devinfo, 1)); }
  63 BEGIN { trace(strjoin(`initname, "foo")); }
  64 BEGIN { trace(strjoin("foo", `initname)); }
  65 BEGIN { trace(dirname(`initname)); }
  66 BEGIN { trace(cleanpath(`initname)); }
  67 
  68 BEGIN { j = "{\"/sbin/init\":\"uh oh\"}"; trace(json(j, `initname)); }
  69 BEGIN { trace(json(`initname, "x")); }
  70 
  71 ERROR {
  72         errorcount++;
  73 }
  74 
  75 BEGIN /errorcount == expected_errorcount/ {
  76         trace("test passed");
  77         exit(0);
  78 }
  79 
  80 BEGIN /errorcount != expected_errorcount/ {
  81         printf("fail: expected %d.  saw %d.", expected_errorcount, errorcount);
  82         exit(1);
  83 }
  84 EOF
  85 
  86 
  87 exit $?