1#! /usr/bin/ksh 2# 3# 4# This file and its contents are supplied under the terms of the 5# Common Development and Distribution License ("CDDL"), version 1.0. 6# You may only use this file in accordance with the terms of version 7# 1.0 of the CDDL. 8# 9# A full copy of the text of the CDDL should have accompanied this 10# source. A copy of the CDDL is also available via the Internet at 11# http://www.illumos.org/license/CDDL. 12# 13 14# 15# Copyright (c) 2013 Joyent, Inc. All rights reserved. 16# 17 18# 19# Simple test that if we manually use the userland keyword that it 20# works. 21# 22 23if [ $# != 1 ]; then 24 echo expected one argument: '<'dtrace-path'>' 25 exit 2 26fi 27 28dtrace=$1 29t="zelda_info_t" 30exe="tst.chasestrings.exe" 31 32elfdump "./$exe" | grep -q '.SUNW_ctf' 33if [[ $? -ne 0 ]]; then 34 echo "CTF does not exist in $exe, that's a bug" >&2 35 exit 1 36fi 37 38./$exe & 39pid=$! 40 41$dtrace -32 -qs /dev/stdin <<EOF 42typedef struct info { 43 char *zi_gamename; 44 int zi_ndungeons; 45 char *zi_villain; 46 int zi_haszelda; 47} info_t; 48 49pid$pid::has_princess:entry 50/next == 0/ 51{ 52 this->t = (userland info_t *)arg0; 53 printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n", 54 stringof(this->t->zi_gamename), this->t->zi_ndungeons, 55 stringof(this->t->zi_villain), this->t->zi_haszelda); 56 next = 1; 57} 58 59pid$pid::has_dungeons:entry 60/next == 1/ 61{ 62 this->t = (userland info_t *)arg0; 63 printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n", 64 stringof(this->t->zi_gamename), this->t->zi_ndungeons, 65 stringof(this->t->zi_villain), this->t->zi_haszelda); 66 next = 2; 67} 68 69pid$pid::has_villain:entry 70/next == 2/ 71{ 72 this->t = (userland info_t *)arg0; 73 printf("game: %s, dungeon: %d, villain: %s, zelda: %d\n", 74 stringof(this->t->zi_gamename), this->t->zi_ndungeons, 75 stringof(this->t->zi_villain), this->t->zi_haszelda); 76 exit(0); 77} 78EOF 79rc=$? 80 81kill -9 $pid 82 83exit $rc 84