tst.userlandkey.ksh revision 266989
1241236Sbrooks#! /usr/bin/ksh
2241236Sbrooks#
3241236Sbrooks#
4241236Sbrooks# This file and its contents are supplied under the terms of the
5241236Sbrooks# Common Development and Distribution License ("CDDL"), version 1.0.
6241236Sbrooks# You may only use this file in accordance with the terms of version
7241236Sbrooks# 1.0 of the CDDL.
8241236Sbrooks#
9241236Sbrooks# A full copy of the text of the CDDL should have accompanied this
10241236Sbrooks# source.  A copy of the CDDL is also available via the Internet at
11241236Sbrooks# http://www.illumos.org/license/CDDL.
12241236Sbrooks#
13241236Sbrooks
14241236Sbrooks#
15241236Sbrooks# Copyright (c) 2013 Joyent, Inc. All rights reserved.
16241236Sbrooks#
17241236Sbrooks
18241236Sbrooks#
19241236Sbrooks# Simple test that if we manually use the userland keyword that it
20241236Sbrooks# works.
21241236Sbrooks#
22241236Sbrooks
23241236Sbrooksif [ $# != 1 ]; then
24241236Sbrooks        echo expected one argument: '<'dtrace-path'>'
25241236Sbrooks        exit 2
26241236Sbrooksfi
27241236Sbrooks
28241236Sbrooksdtrace=$1
29241236Sbrookst="zelda_info_t"
30241236Sbrooksexe="tst.chasestrings.exe"
31241236Sbrooks
32241236Sbrookselfdump "./$exe" | grep -q '.SUNW_ctf' 
33241236Sbrooksif [[ $? -ne 0 ]]; then
34241236Sbrooks	echo "CTF does not exist in $exe, that's a bug" >&2
35241236Sbrooks	exit 1
36241236Sbrooksfi
37241236Sbrooks
38241236Sbrooks./$exe &
39241236Sbrookspid=$!
40241236Sbrooks
41241236Sbrooks$dtrace -32 -qs /dev/stdin <<EOF
42241236Sbrookstypedef struct info {
43241236Sbrooks        char    *zi_gamename;
44241236Sbrooks        int     zi_ndungeons;
45241236Sbrooks        char    *zi_villain;
46241236Sbrooks        int     zi_haszelda;
47241236Sbrooks} info_t;
48241236Sbrooks
49241236Sbrookspid$pid::has_princess:entry
50241236Sbrooks/next == 0/
51241236Sbrooks{
52241236Sbrooks	this->t = (userland info_t *)arg0;
53241236Sbrooks	printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n",
54241236Sbrooks	    stringof(this->t->zi_gamename), this->t->zi_ndungeons,
55241236Sbrooks	    stringof(this->t->zi_villain), this->t->zi_haszelda);
56241236Sbrooks	next = 1;
57241236Sbrooks}
58241236Sbrooks
59241236Sbrookspid$pid::has_dungeons:entry
60241236Sbrooks/next == 1/
61241236Sbrooks{
62241236Sbrooks	this->t = (userland info_t *)arg0;
63241236Sbrooks	printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n",
64241236Sbrooks	    stringof(this->t->zi_gamename), this->t->zi_ndungeons,
65241236Sbrooks	    stringof(this->t->zi_villain), this->t->zi_haszelda);
66241236Sbrooks	next = 2;
67241236Sbrooks}
68241236Sbrooks
69241236Sbrookspid$pid::has_villain:entry
70241236Sbrooks/next == 2/
71241236Sbrooks{
72241236Sbrooks	this->t = (userland info_t *)arg0;
73241236Sbrooks	printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n",
74241236Sbrooks	    stringof(this->t->zi_gamename), this->t->zi_ndungeons,
75241236Sbrooks	    stringof(this->t->zi_villain), this->t->zi_haszelda);
76241236Sbrooks	exit(0);
77241236Sbrooks}
78241236SbrooksEOF
79241236Sbrooksrc=$?
80241236Sbrooks
81241236Sbrookskill -9 $pid
82241236Sbrooks
83241236Sbrooksexit $rc
84241236Sbrooks