Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Nov 2014 12:44:19 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r275033 - head/contrib/netbsd-tests/lib/libc/sys
Message-ID:  <201411251244.sAPCiJ5U039987@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Tue Nov 25 12:44:18 2014
New Revision: 275033
URL: https://svnweb.freebsd.org/changeset/base/275033

Log:
  Only pass 6 arguments to the 'run' function on amd64.  amd64's
  makecontext on FreeBSD only supports a maximum of 6 arguments.  This
  fixes the setcontext_link test on amd64.
  
  PR:		194828

Modified:
  head/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c

Modified: head/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
==============================================================================
--- head/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c	Tue Nov 25 12:22:29 2014	(r275032)
+++ head/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c	Tue Nov 25 12:44:18 2014	(r275033)
@@ -51,7 +51,11 @@ run(int n, ...)
 	ATF_REQUIRE_EQ(n, DEPTH - calls - 1);
 
 	va_start(va, n);
+#if defined(__FreeBSD__) && defined(__amd64__)
+	for (i = 0; i < 5; i++) {
+#else
 	for (i = 0; i < 9; i++) {
+#endif
 		ia = va_arg(va, int);
 		ATF_REQUIRE_EQ(i, ia);
 	}
@@ -101,13 +105,6 @@ ATF_TC_BODY(setcontext_link, tc)
 	ucontext_t save;
 	volatile int i = 0; /* avoid longjmp clobbering */
 
-#ifdef __FreeBSD__
-#ifdef __amd64__
-	atf_tc_expect_fail("setcontext in this testcase fails on "
-	    "FreeBSD/amd64 with rc == -1/errno == EINVAL; see PR # 194828");
-#endif
-#endif
-
 	for (i = 0; i < DEPTH; ++i) {
 		ATF_REQUIRE_EQ(getcontext(&uc[i]), 0);
 
@@ -115,21 +112,20 @@ ATF_TC_BODY(setcontext_link, tc)
 		uc[i].uc_stack.ss_size = STACKSZ;
 		uc[i].uc_link = (i > 0) ? &uc[i - 1] : &save;
 
+#if defined(__FreeBSD__) && defined(__amd64__)
+		/* FreeBSD/amd64 only permits up to 6 arguments. */
+		makecontext(&uc[i], (void *)run, 6, i,
+			0, 1, 2, 3, 4);
+#else
 		makecontext(&uc[i], (void *)run, 10, i,
 			0, 1, 2, 3, 4, 5, 6, 7, 8);
+#endif
 	}
 
 	ATF_REQUIRE_EQ(getcontext(&save), 0);
 
-#ifdef __FreeBSD__
-	if (calls == 0) {
-		int rc = setcontext(&uc[DEPTH-1]);
-		ATF_REQUIRE_EQ_MSG(rc, 0, "%d != 0; (errno = %d)", rc, errno);
-	}
-#else
 	if (calls == 0)
 		ATF_REQUIRE_EQ(setcontext(&uc[DEPTH-1]), 0);
-#endif
 }
 
 ATF_TP_ADD_TCS(tp)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411251244.sAPCiJ5U039987>