1#!/usr/sbin/dtrace -Fs
2
3
4/*
5 * CDDL HEADER START
6 *
7 * The contents of this file are subject to the terms of the
8 * Common Development and Distribution License (the "License").
9 * You may not use this file except in compliance with the License.
10 *
11 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
12 * or http://www.opensolaris.org/os/licensing.
13 * See the License for the specific language governing permissions
14 * and limitations under the License.
15 *
16 * When distributing Covered Code, include this CDDL HEADER in each
17 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
18 * If applicable, add the following below this CDDL HEADER, with the
19 * fields enclosed by brackets "[]" replaced with your own identifying
20 * information: Portions Copyright [yyyy] [name of copyright owner]
21 *
22 * CDDL HEADER END
23 */
24
25/*
26 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
27 * Use is subject to license terms.
28 */
29
30#pragma	ident	"%Z%%M%	%I%	%E% SMI"
31
32/*
33 * ASSERTION:
34 *	Verify doc example 13-1
35 *
36 * SECTION:
37 *	DocExamples/specopen
38 */
39
40syscall::open:entry,
41syscall::open64:entry
42{
43	self->spec = speculation();
44	speculate(self->spec);
45
46	printf("%s", stringof(copyinstr(arg0)));
47}
48
49fbt:::
50/self->spec/
51{
52	speculate(self->spec);
53}
54
55syscall::open:return,
56syscall::open64:return
57/self->spec/
58{
59	speculate(self->spec);
60	trace(errno);
61}
62
63syscall::open:return,
64syscall::open64:return
65/self->spec && errno != 0/
66{
67	commit(self->spec);
68	self->spec = 0;
69}
70
71syscall::open:return,
72syscall::open64:return
73/self->spec && errno == 0/
74{
75	discard(self->spec);
76	self->spec = 0;
77}
78
79
80