xref: /netbsd-src/tests/lib/libc/sys/t_ucontext.c (revision 5198f250f534f78bf1c006f034f21208578b0760)
1*5198f250Skamil /* $NetBSD: t_ucontext.c,v 1.5 2018/02/27 12:20:35 kamil Exp $ */
2d7cfdec1Sjruoho 
3d7cfdec1Sjruoho /*
4d7cfdec1Sjruoho  * Copyright (c) 2008 The NetBSD Foundation, Inc.
5d7cfdec1Sjruoho  * All rights reserved.
6d7cfdec1Sjruoho  *
7d7cfdec1Sjruoho  * Redistribution and use in source and binary forms, with or without
8d7cfdec1Sjruoho  * modification, are permitted provided that the following conditions
9d7cfdec1Sjruoho  * are met:
10d7cfdec1Sjruoho  * 1. Redistributions of source code must retain the above copyright
11d7cfdec1Sjruoho  *    notice, this list of conditions and the following disclaimer.
12d7cfdec1Sjruoho  * 2. Redistributions in binary form must reproduce the above copyright
13d7cfdec1Sjruoho  *    notice, this list of conditions and the following disclaimer in the
14d7cfdec1Sjruoho  *    documentation and/or other materials provided with the distribution.
15d7cfdec1Sjruoho  *
16d7cfdec1Sjruoho  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17d7cfdec1Sjruoho  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18d7cfdec1Sjruoho  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19d7cfdec1Sjruoho  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20d7cfdec1Sjruoho  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21d7cfdec1Sjruoho  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22d7cfdec1Sjruoho  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23d7cfdec1Sjruoho  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24d7cfdec1Sjruoho  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25d7cfdec1Sjruoho  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26d7cfdec1Sjruoho  * POSSIBILITY OF SUCH DAMAGE.
27d7cfdec1Sjruoho  */
28d7cfdec1Sjruoho 
29d7cfdec1Sjruoho #include <sys/cdefs.h>
30d7cfdec1Sjruoho __COPYRIGHT("@(#) Copyright (c) 2008\
31d7cfdec1Sjruoho  The NetBSD Foundation, inc. All rights reserved.");
32*5198f250Skamil __RCSID("$NetBSD: t_ucontext.c,v 1.5 2018/02/27 12:20:35 kamil Exp $");
33d7cfdec1Sjruoho 
34d7cfdec1Sjruoho #include <atf-c.h>
35d7cfdec1Sjruoho #include <stdio.h>
36d7cfdec1Sjruoho #include <ucontext.h>
37*5198f250Skamil #include <inttypes.h>
38d7cfdec1Sjruoho 
39d7cfdec1Sjruoho ATF_TC(ucontext_basic);
ATF_TC_HEAD(ucontext_basic,tc)40d7cfdec1Sjruoho ATF_TC_HEAD(ucontext_basic, tc)
41d7cfdec1Sjruoho {
42d7cfdec1Sjruoho 	atf_tc_set_md_var(tc, "descr", "Checks {get,set}context(2)");
43d7cfdec1Sjruoho }
44d7cfdec1Sjruoho 
ATF_TC_BODY(ucontext_basic,tc)45d7cfdec1Sjruoho ATF_TC_BODY(ucontext_basic, tc)
46d7cfdec1Sjruoho {
47d7cfdec1Sjruoho 	ucontext_t u, v, w;
48d7cfdec1Sjruoho 	volatile int x, y;
49d7cfdec1Sjruoho 
50d7cfdec1Sjruoho 	x = 0;
51d7cfdec1Sjruoho 	y = 0;
52d7cfdec1Sjruoho 
53d7cfdec1Sjruoho 	printf("Start\n");
54d7cfdec1Sjruoho 
55d7cfdec1Sjruoho 	getcontext(&u);
56d7cfdec1Sjruoho 	y++;
57d7cfdec1Sjruoho 
58d7cfdec1Sjruoho 	printf("x == %d\n", x);
59d7cfdec1Sjruoho 
60d7cfdec1Sjruoho 	getcontext(&v);
61d7cfdec1Sjruoho 
62d7cfdec1Sjruoho 	if ( x < 20 ) {
63d7cfdec1Sjruoho 		x++;
64d7cfdec1Sjruoho 		getcontext(&w);
65d7cfdec1Sjruoho 		setcontext(&u);
66d7cfdec1Sjruoho 	}
67d7cfdec1Sjruoho 
68d7cfdec1Sjruoho 	printf("End, y = %d\n", y);
69d7cfdec1Sjruoho 	ATF_REQUIRE_EQ(y, 21);
70d7cfdec1Sjruoho }
71d7cfdec1Sjruoho 
7216ed2914Skamil ATF_TC(ucontext_sp);
ATF_TC_HEAD(ucontext_sp,tc)7316ed2914Skamil ATF_TC_HEAD(ucontext_sp, tc)
7416ed2914Skamil {
756f17b07fSchristos 	atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_SP()");
7616ed2914Skamil }
7716ed2914Skamil 
ATF_TC_BODY(ucontext_sp,tc)7816ed2914Skamil ATF_TC_BODY(ucontext_sp, tc)
7916ed2914Skamil {
8016ed2914Skamil 	ucontext_t u;
8116ed2914Skamil 
8216ed2914Skamil 	getcontext(&u);
8316ed2914Skamil 
84c3018cf2Skamil 	printf("_UC_MACHINE_SP(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_SP(&u));
8516ed2914Skamil }
8616ed2914Skamil 
8716ed2914Skamil ATF_TC(ucontext_fp);
ATF_TC_HEAD(ucontext_fp,tc)8816ed2914Skamil ATF_TC_HEAD(ucontext_fp, tc)
8916ed2914Skamil {
906f17b07fSchristos 	atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_FP()");
9116ed2914Skamil }
9216ed2914Skamil 
ATF_TC_BODY(ucontext_fp,tc)9316ed2914Skamil ATF_TC_BODY(ucontext_fp, tc)
9416ed2914Skamil {
9516ed2914Skamil 	ucontext_t u;
9616ed2914Skamil 
9716ed2914Skamil 	getcontext(&u);
9816ed2914Skamil 
99c3018cf2Skamil 	printf("_UC_MACHINE_FP(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_FP(&u));
10016ed2914Skamil }
10116ed2914Skamil 
10216ed2914Skamil ATF_TC(ucontext_pc);
ATF_TC_HEAD(ucontext_pc,tc)10316ed2914Skamil ATF_TC_HEAD(ucontext_pc, tc)
10416ed2914Skamil {
1056f17b07fSchristos 	atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_PC()");
10616ed2914Skamil }
10716ed2914Skamil 
ATF_TC_BODY(ucontext_pc,tc)10816ed2914Skamil ATF_TC_BODY(ucontext_pc, tc)
10916ed2914Skamil {
11016ed2914Skamil 	ucontext_t u;
11116ed2914Skamil 
11216ed2914Skamil 	getcontext(&u);
11316ed2914Skamil 
114c3018cf2Skamil 	printf("_UC_MACHINE_PC(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_PC(&u));
11516ed2914Skamil }
11616ed2914Skamil 
11716ed2914Skamil ATF_TC(ucontext_intrv);
ATF_TC_HEAD(ucontext_intrv,tc)11816ed2914Skamil ATF_TC_HEAD(ucontext_intrv, tc)
11916ed2914Skamil {
1206f17b07fSchristos 	atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_INTRV()");
12116ed2914Skamil }
12216ed2914Skamil 
ATF_TC_BODY(ucontext_intrv,tc)12316ed2914Skamil ATF_TC_BODY(ucontext_intrv, tc)
12416ed2914Skamil {
12516ed2914Skamil 	ucontext_t u;
12616ed2914Skamil 
12716ed2914Skamil 	getcontext(&u);
12816ed2914Skamil 
129c3018cf2Skamil 	printf("_UC_MACHINE_INTRV(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_INTRV(&u));
13016ed2914Skamil }
13116ed2914Skamil 
ATF_TP_ADD_TCS(tp)132d7cfdec1Sjruoho ATF_TP_ADD_TCS(tp)
133d7cfdec1Sjruoho {
134d7cfdec1Sjruoho 	ATF_TP_ADD_TC(tp, ucontext_basic);
13516ed2914Skamil 	ATF_TP_ADD_TC(tp, ucontext_sp);
13616ed2914Skamil 	ATF_TP_ADD_TC(tp, ucontext_fp);
13716ed2914Skamil 	ATF_TP_ADD_TC(tp, ucontext_pc);
13816ed2914Skamil 	ATF_TP_ADD_TC(tp, ucontext_intrv);
139d7cfdec1Sjruoho 
140d7cfdec1Sjruoho 	return atf_no_error();
141d7cfdec1Sjruoho }
142