1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 * Copyright 2024 Oxide Computer Company 26 */ 27 28 /* 29 * ASSERTION: Verify that argN (1..7) variables are properly remapped if the 30 * probe is a tail call. 31 */ 32 33 BEGIN 34 { 35 /* Timeout after 5 seconds */ 36 timeout = timestamp + 5000000000; 37 ignore = $1; 38 pass = 0; 39 } 40 41 ERROR 42 { 43 printf("sdt::sdt_test_args_tail_call:test failed.\n"); 44 exit(1); 45 } 46 47 sdt::sdt_test_args_tail_call:test 48 /arg0 != 1 || arg1 != 2 || arg2 != 3 || arg3 != 4 || arg4 != 5 || arg5 != 6 || 49 arg6 != 7/ 50 { 51 printf("sdt arg mismatch\n\n"); 52 printf("args are : %d, %d, %d, %d, %d, %d, %d\n", arg0, arg1, arg2, 53 arg3, arg4, arg5, arg6); 54 printf("should be : 1, 2, 3, 4, 5, 6, 7\n"); 55 exit(1); 56 } 57 58 sdt::sdt_test_args_tail_call:test 59 { 60 pass = 1; 61 } 62 63 /* 64 * Since this is a tail call, on-disk there's no RET instruction. We rely 65 * on krtld patching one in which should allow us to register a probe here. 66 */ 67 fbt::sdt_test_args_tail_call:return 68 /pass/ 69 { 70 exit(0); 71 } 72 73 profile:::tick-1 74 /timestamp > timeout/ 75 { 76 trace("test timed out"); 77 exit(1); 78 } 79