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 /* 23*bd0f52d7Sjhaslam * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 249512fe85Sahl * Use is subject to license terms. 259512fe85Sahl */ 269512fe85Sahl 279512fe85Sahl /* 289512fe85Sahl * ASSERTION: 299512fe85Sahl * Can call discard on an already discarded buffer. 309512fe85Sahl * 319512fe85Sahl * SECTION: Speculative Tracing/Discarding a Speculation; 329512fe85Sahl * Options and Tunables/cleanrate 339512fe85Sahl * 349512fe85Sahl */ 359512fe85Sahl #pragma D option quiet 36*bd0f52d7Sjhaslam #pragma D option cleanrate=3000hz 379512fe85Sahl 389512fe85Sahl BEGIN 399512fe85Sahl { 409512fe85Sahl self->i = 0; 419512fe85Sahl self->discard1 = 0; 429512fe85Sahl self->discard2 = 0; 439512fe85Sahl var1 = speculation(); 449512fe85Sahl printf("Speculation ID: %d\n", var1); 459512fe85Sahl } 469512fe85Sahl 479512fe85Sahl BEGIN 489512fe85Sahl /var1/ 499512fe85Sahl { 509512fe85Sahl speculate(var1); 519512fe85Sahl printf("This statement and the following are speculative!!\n"); 529512fe85Sahl printf("Speculating on id: %d\n", var1); 539512fe85Sahl self->i++; 549512fe85Sahl } 559512fe85Sahl 569512fe85Sahl BEGIN 579512fe85Sahl /(self->i)/ 589512fe85Sahl { 599512fe85Sahl discard(var1); 609512fe85Sahl self->discard1++; 619512fe85Sahl discard(var1); 629512fe85Sahl self->discard2++; 639512fe85Sahl } 649512fe85Sahl 659512fe85Sahl BEGIN 669512fe85Sahl /(self->discard2) && (self->discard1)/ 679512fe85Sahl { 689512fe85Sahl printf("Discarded a discarded buffer\n"); 699512fe85Sahl exit(0); 709512fe85Sahl } 719512fe85Sahl 729512fe85Sahl 739512fe85Sahl BEGIN 749512fe85Sahl /(!self->discard2) || (!self->discard1)/ 759512fe85Sahl { 769512fe85Sahl printf("Couldnt discard a discarded buffer\n"); 779512fe85Sahl exit(1); 789512fe85Sahl } 799512fe85Sahl 809512fe85Sahl ERROR 819512fe85Sahl { 829512fe85Sahl exit(1); 839512fe85Sahl } 84