1*fc2512cfSRobert Mustacchi /*
2*fc2512cfSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*fc2512cfSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*fc2512cfSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*fc2512cfSRobert Mustacchi  * 1.0 of the CDDL.
6*fc2512cfSRobert Mustacchi  *
7*fc2512cfSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*fc2512cfSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*fc2512cfSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*fc2512cfSRobert Mustacchi  */
11*fc2512cfSRobert Mustacchi 
12*fc2512cfSRobert Mustacchi /*
13*fc2512cfSRobert Mustacchi  * Copyright 2016 Joyent, Inc.
14*fc2512cfSRobert Mustacchi  */
15*fc2512cfSRobert Mustacchi 
16*fc2512cfSRobert Mustacchi /*
17*fc2512cfSRobert Mustacchi  * Register functions with quick_exit() and verify that we honor the expected
18*fc2512cfSRobert Mustacchi  * function call value. We facilitate this by having a global integer and
19*fc2512cfSRobert Mustacchi  * modifying it to various values in subsequent functions. If we're not called
20*fc2512cfSRobert Mustacchi  * in reverse order, we should spot the differences.
21*fc2512cfSRobert Mustacchi  */
22*fc2512cfSRobert Mustacchi 
23*fc2512cfSRobert Mustacchi #include <stdlib.h>
24*fc2512cfSRobert Mustacchi #include <sys/debug.h>
25*fc2512cfSRobert Mustacchi 
26*fc2512cfSRobert Mustacchi static int qeo_val = 5;
27*fc2512cfSRobert Mustacchi 
28*fc2512cfSRobert Mustacchi static void
qeo_fifth(void)29*fc2512cfSRobert Mustacchi qeo_fifth(void)
30*fc2512cfSRobert Mustacchi {
31*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 5);
32*fc2512cfSRobert Mustacchi 	qeo_val--;
33*fc2512cfSRobert Mustacchi }
34*fc2512cfSRobert Mustacchi 
35*fc2512cfSRobert Mustacchi static void
qeo_fourth(void)36*fc2512cfSRobert Mustacchi qeo_fourth(void)
37*fc2512cfSRobert Mustacchi {
38*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 4);
39*fc2512cfSRobert Mustacchi 	qeo_val--;
40*fc2512cfSRobert Mustacchi }
41*fc2512cfSRobert Mustacchi 
42*fc2512cfSRobert Mustacchi static void
qeo_third(void)43*fc2512cfSRobert Mustacchi qeo_third(void)
44*fc2512cfSRobert Mustacchi {
45*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 3);
46*fc2512cfSRobert Mustacchi 	qeo_val--;
47*fc2512cfSRobert Mustacchi }
48*fc2512cfSRobert Mustacchi 
49*fc2512cfSRobert Mustacchi static void
qeo_second(void)50*fc2512cfSRobert Mustacchi qeo_second(void)
51*fc2512cfSRobert Mustacchi {
52*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 2);
53*fc2512cfSRobert Mustacchi 	qeo_val--;
54*fc2512cfSRobert Mustacchi }
55*fc2512cfSRobert Mustacchi 
56*fc2512cfSRobert Mustacchi static void
qeo_first(void)57*fc2512cfSRobert Mustacchi qeo_first(void)
58*fc2512cfSRobert Mustacchi {
59*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 1);
60*fc2512cfSRobert Mustacchi 	qeo_val--;
61*fc2512cfSRobert Mustacchi }
62*fc2512cfSRobert Mustacchi 
63*fc2512cfSRobert Mustacchi static void
qeo_zero(void)64*fc2512cfSRobert Mustacchi qeo_zero(void)
65*fc2512cfSRobert Mustacchi {
66*fc2512cfSRobert Mustacchi 	VERIFY3S(qeo_val, ==, 0);
67*fc2512cfSRobert Mustacchi }
68*fc2512cfSRobert Mustacchi 
69*fc2512cfSRobert Mustacchi int
main(void)70*fc2512cfSRobert Mustacchi main(void)
71*fc2512cfSRobert Mustacchi {
72*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_zero));
73*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_first));
74*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_second));
75*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_third));
76*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_fourth));
77*fc2512cfSRobert Mustacchi 	VERIFY0(at_quick_exit(qeo_fifth));
78*fc2512cfSRobert Mustacchi 	quick_exit(0);
79*fc2512cfSRobert Mustacchi 	abort();
80*fc2512cfSRobert Mustacchi }
81