19512fe85Sahl# 29512fe85Sahl# CDDL HEADER START 39512fe85Sahl# 49512fe85Sahl# The contents of this file are subject to the terms of the 59512fe85Sahl# Common Development and Distribution License (the "License"). 69512fe85Sahl# You may not use this file except in compliance with the License. 79512fe85Sahl# 89512fe85Sahl# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 99512fe85Sahl# or http://www.opensolaris.org/os/licensing. 109512fe85Sahl# See the License for the specific language governing permissions 119512fe85Sahl# and limitations under the License. 129512fe85Sahl# 139512fe85Sahl# When distributing Covered Code, include this CDDL HEADER in each 149512fe85Sahl# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 159512fe85Sahl# If applicable, add the following below this CDDL HEADER, with the 169512fe85Sahl# fields enclosed by brackets "[]" replaced with your own identifying 179512fe85Sahl# information: Portions Copyright [yyyy] [name of copyright owner] 189512fe85Sahl# 199512fe85Sahl# CDDL HEADER END 209512fe85Sahl# 219512fe85Sahl 229512fe85Sahl# 23bd0f52d7Sjhaslam# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 249512fe85Sahl# Use is subject to license terms. 259512fe85Sahl# 269512fe85Sahl 279512fe85Sahl# 289512fe85Sahl# This script tests that the proc:::exit probe fires with the correct argument 299512fe85Sahl# when the process core dumps. The problematic bit here is making sure that 309512fe85Sahl# a process _can_ dump core -- if core dumps are disabled on both a global 319512fe85Sahl# and per-process basis, this test will fail. Rather than having this test 32*bbf21555SRichard Lowe# muck with coreadm(8) settings, it will fail explicitly in this case and 339512fe85Sahl# provide a hint as to the problem. In general, machines should never be 349512fe85Sahl# running with both per-process and global core dumps disabled -- so this 359512fe85Sahl# should be a non-issue in practice. 369512fe85Sahl# 379512fe85Sahl# If this fails, the script will run indefinitely; it relies on the harness 389512fe85Sahl# to time it out. 399512fe85Sahl# 409512fe85Sahlscript() 419512fe85Sahl{ 429512fe85Sahl $dtrace -s /dev/stdin <<EOF 439512fe85Sahl proc:::exit 449512fe85Sahl /curpsinfo->pr_ppid == $child && 459512fe85Sahl curpsinfo->pr_psargs == "$longsleep" && args[0] == CLD_DUMPED/ 469512fe85Sahl { 479512fe85Sahl exit(0); 489512fe85Sahl } 499512fe85Sahl 509512fe85Sahl proc:::exit 519512fe85Sahl /curpsinfo->pr_ppid == $child && 529512fe85Sahl curpsinfo->pr_psargs == "$longsleep" && args[0] != CLD_DUMPED/ 539512fe85Sahl { 54*bbf21555SRichard Lowe printf("Child process could not dump core. Check coreadm(8)"); 559512fe85Sahl printf(" settings; either per-process or global core dumps "); 569512fe85Sahl printf("must be enabled for this test to work properly."); 579512fe85Sahl exit(1); 589512fe85Sahl } 599512fe85SahlEOF 609512fe85Sahl} 619512fe85Sahl 629512fe85Sahlsleeper() 639512fe85Sahl{ 649512fe85Sahl /usr/bin/coreadm -p $corefile 659512fe85Sahl while true; do 669512fe85Sahl $longsleep & 679512fe85Sahl /usr/bin/sleep 1 689512fe85Sahl kill -SEGV $! 699512fe85Sahl done 709512fe85Sahl /usr/bin/rm -f $corefile 719512fe85Sahl} 729512fe85Sahl 7323b5c241Stomeeif [ $# != 1 ]; then 7423b5c241Stomee echo expected one argument: '<'dtrace-path'>' 7523b5c241Stomee exit 2 7623b5c241Stomeefi 7723b5c241Stomee 7823b5c241Stomeedtrace=$1 799512fe85Sahllongsleep="/usr/bin/sleep 10000" 809512fe85Sahlcorefile=/tmp/core.$$ 819512fe85Sahl 829512fe85Sahlsleeper & 839512fe85Sahlchild=$! 849512fe85Sahl 859512fe85Sahlscript 869512fe85Sahlstatus=$? 879512fe85Sahl 889512fe85Sahlpstop $child 899512fe85Sahlpkill -P $child 909512fe85Sahlkill $child 919512fe85Sahlprun $child 929512fe85Sahl 939512fe85Sahl/usr/bin/rm -f $corefile 949512fe85Sahlexit $status 95