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