0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# CDDL HEADER START
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# The contents of this file are subject to the terms of the
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# Common Development and Distribution License (the "License").
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# You may not use this file except in compliance with the License.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# or http://www.opensolaris.org/os/licensing.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# See the License for the specific language governing permissions
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# and limitations under the License.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# When distributing Covered Code, include this CDDL HEADER in each
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# If applicable, add the following below this CDDL HEADER, with the
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# fields enclosed by brackets "[]" replaced with your own identifying
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# information: Portions Copyright [yyyy] [name of copyright owner]
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# CDDL HEADER END
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# Use is subject to license terms.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# This test is primarily intended to verify a fix for SPARC, but there's no
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# harm in running it on other platforms. Here, we verify that is-enabled
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl# probes don't interfere with return values from previously invoked functions.
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlif [ $# != 1 ]; then
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl echo expected one argument: '<'dtrace-path'>'
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl exit 2
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfi
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahldtrace=$1
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlDIR=/var/tmp/dtest.$$
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlmkdir $DIR
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlcd $DIR
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlcat > prov.d <<EOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlprovider test_prov {
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl probe go();
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl};
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlEOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl$dtrace -h -s prov.d
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlif [ $? -ne 0 ]; then
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl print -u2 "failed to generate header file"
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl exit 1
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfi
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlcat > test.c <<EOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#include <stdio.h>
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl#include "prov.h"
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlint
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfoo(void)
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl{
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl return (24);
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl}
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlint
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlmain(int argc, char **argv)
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl{
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl int a = foo();
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl if (TEST_PROV_GO_ENABLED()) {
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl TEST_PROV_GO();
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl }
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl (void) printf("%d %d %d\n", a, a, a);
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl return (0);
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl}
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlEOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
a386cc11a86ecb60f5a48078d22c1500e2ad003eRobert Mustacchigcc -m32 -c test.c
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlif [ $? -ne 0 ]; then
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl print -u2 "failed to compile test.c"
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl exit 1
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfi
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl$dtrace -G -32 -s prov.d test.o
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlif [ $? -ne 0 ]; then
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl print -u2 "failed to create DOF"
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl exit 1
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfi
a386cc11a86ecb60f5a48078d22c1500e2ad003eRobert Mustacchi
a386cc11a86ecb60f5a48078d22c1500e2ad003eRobert Mustacchigcc -m32 -o test test.o prov.o
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlif [ $? -ne 0 ]; then
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl print -u2 "failed to link final executable"
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl exit 1
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlfi
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlscript()
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl{
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl ./test
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl $dtrace -c ./test -qs /dev/stdin <<EOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl test_prov\$target:::
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl {
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl }
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlEOF
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl}
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlscript
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlstatus=$?
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlcd /
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl/usr/bin/rm -rf $DIR
0bac14eade9833ce4aa56566ecf962fb5688cce0ahl
0bac14eade9833ce4aa56566ecf962fb5688cce0ahlexit $status