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 2007 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * ASSERTION: make sure fork(2) is okay 29 * 30 * SECTION: pid provider 31 */ 32 33 #pragma D option destructive 34 35 pid$1:a.out:waiting:entry 36 { 37 this->value = (int *)alloca(sizeof (int)); 38 *this->value = 1; 39 copyout(this->value, arg0, sizeof (int)); 40 } 41 42 proc:::create 43 /pid == $1/ 44 { 45 child = args[0]->pr_pid; 46 trace(pid); 47 } 48 49 pid$1:a.out:go: 50 /pid == child/ 51 { 52 trace("wrong pid"); 53 exit(1); 54 } 55 56 proc:::exit 57 /pid == $1 || pid == child/ 58 { 59 out++; 60 trace(pid); 61 } 62 63 proc:::exit 64 /out == 2/ 65 { 66 exit(0); 67 } 68 69 70 BEGIN 71 { 72 /* 73 * Let's just do this for 5 seconds. 74 */ 75 timeout = timestamp + 5000000000; 76 } 77 78 profile:::tick-4 79 /timestamp > timeout/ 80 { 81 trace("test timed out"); 82 exit(1); 83 } 84 85