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