1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms
5  * of the Common Development and Distribution License
6  * (the "License").  You may not use this file except
7  * in compliance with the License.
8  *
9  * You can obtain a copy of the license at
10  * src/OPENSOLARIS.LICENSE
11  * or http://www.opensolaris.org/os/licensing.
12  * See the License for the specific language governing
13  * permissions and limitations under the License.
14  *
15  * When distributing Covered Code, include this CDDL
16  * HEADER in each file and include the License file at
17  * usr/src/OPENSOLARIS.LICENSE.  If applicable,
18  * add the following below this CDDL HEADER, with the
19  * fields enclosed by brackets "[]" replaced with your
20  * own identifying information: Portions Copyright [yyyy]
21  * [name of copyright owner]
22  *
23  * CDDL HEADER END
24  */
25 
26 /*
27  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
28  * Use is subject to license terms.
29  */
30 
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <unistd.h>
34 #include <signal.h>
35 #include <ucontext.h>
36 
37 #include "libmicro.h"
38 
39 int
benchmark_init()40 benchmark_init()
41 {
42 
43 	(void) sprintf(lm_usage, "notes: measures setcontext()\n");
44 
45 	lm_tsdsize = 0;
46 
47 	return (0);
48 }
49 
50 /*ARGSUSED*/
51 int
benchmark(void * tsd,result_t * res)52 benchmark(void *tsd, result_t *res)
53 {
54 	volatile int		i;
55 
56 	ucontext_t uc;
57 
58 	i = 0;
59 
60 	(void) getcontext(&uc);
61 
62 	if (i++ < lm_optB)
63 		(void) setcontext(&uc);
64 
65 	res->re_count += lm_optB;
66 
67 	return (0);
68 }
69