View | Details | Raw Unified | Return to bug 194828 | Differences between
and this patch

Collapse All | Expand All

(-)b/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c (-14 / +10 lines)
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)

Return to bug 194828