Lines 51-57
run(int n, ...)
Link Here
|
51 |
ATF_REQUIRE_EQ(n, DEPTH - calls - 1); |
51 |
ATF_REQUIRE_EQ(n, DEPTH - calls - 1); |
52 |
|
52 |
|
53 |
va_start(va, n); |
53 |
va_start(va, n); |
|
|
54 |
#if defined(__FreeBSD__) && defined(__amd64__) |
55 |
for (i = 0; i < 5; i++) { |
56 |
#else |
54 |
for (i = 0; i < 9; i++) { |
57 |
for (i = 0; i < 9; i++) { |
|
|
58 |
#endif |
55 |
ia = va_arg(va, int); |
59 |
ia = va_arg(va, int); |
56 |
ATF_REQUIRE_EQ(i, ia); |
60 |
ATF_REQUIRE_EQ(i, ia); |
57 |
} |
61 |
} |
Lines 101-113
ATF_TC_BODY(setcontext_link, tc)
Link Here
|
101 |
ucontext_t save; |
105 |
ucontext_t save; |
102 |
volatile int i = 0; /* avoid longjmp clobbering */ |
106 |
volatile int i = 0; /* avoid longjmp clobbering */ |
103 |
|
107 |
|
104 |
#ifdef __FreeBSD__ |
|
|
105 |
#ifdef __amd64__ |
106 |
atf_tc_expect_fail("setcontext in this testcase fails on " |
107 |
"FreeBSD/amd64 with rc == -1/errno == EINVAL; see PR # 194828"); |
108 |
#endif |
109 |
#endif |
110 |
|
111 |
for (i = 0; i < DEPTH; ++i) { |
108 |
for (i = 0; i < DEPTH; ++i) { |
112 |
ATF_REQUIRE_EQ(getcontext(&uc[i]), 0); |
109 |
ATF_REQUIRE_EQ(getcontext(&uc[i]), 0); |
113 |
|
110 |
|
Lines 115-135
ATF_TC_BODY(setcontext_link, tc)
Link Here
|
115 |
uc[i].uc_stack.ss_size = STACKSZ; |
112 |
uc[i].uc_stack.ss_size = STACKSZ; |
116 |
uc[i].uc_link = (i > 0) ? &uc[i - 1] : &save; |
113 |
uc[i].uc_link = (i > 0) ? &uc[i - 1] : &save; |
117 |
|
114 |
|
|
|
115 |
#if defined(__FreeBSD__) && defined(__amd64__) |
116 |
/* FreeBSD/amd64 only permits up to 6 arguments. */ |
117 |
makecontext(&uc[i], (void *)run, 6, i, |
118 |
0, 1, 2, 3, 4); |
119 |
#else |
118 |
makecontext(&uc[i], (void *)run, 10, i, |
120 |
makecontext(&uc[i], (void *)run, 10, i, |
119 |
0, 1, 2, 3, 4, 5, 6, 7, 8); |
121 |
0, 1, 2, 3, 4, 5, 6, 7, 8); |
|
|
122 |
#endif |
120 |
} |
123 |
} |
121 |
|
124 |
|
122 |
ATF_REQUIRE_EQ(getcontext(&save), 0); |
125 |
ATF_REQUIRE_EQ(getcontext(&save), 0); |
123 |
|
126 |
|
124 |
#ifdef __FreeBSD__ |
|
|
125 |
if (calls == 0) { |
126 |
int rc = setcontext(&uc[DEPTH-1]); |
127 |
ATF_REQUIRE_EQ_MSG(rc, 0, "%d != 0; (errno = %d)", rc, errno); |
128 |
} |
129 |
#else |
130 |
if (calls == 0) |
127 |
if (calls == 0) |
131 |
ATF_REQUIRE_EQ(setcontext(&uc[DEPTH-1]), 0); |
128 |
ATF_REQUIRE_EQ(setcontext(&uc[DEPTH-1]), 0); |
132 |
#endif |
|
|
133 |
} |
129 |
} |
134 |
|
130 |
|
135 |
ATF_TP_ADD_TCS(tp) |
131 |
ATF_TP_ADD_TCS(tp) |