Module Name:    src
Committed By:   martin
Date:           Mon Apr 23 15:07:56 UTC 2012

Modified Files:
        src/tests/lib/libc/gen: t_siginfo.c

Log Message:
Revert previous, si_addr is expected to be the faulting *data* address
(mmm, consistent standards).
Add a few tweaks to prevent the compiler's optimizer outsmarting the test.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/tests/lib/libc/gen/t_siginfo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libc/gen/t_siginfo.c
diff -u src/tests/lib/libc/gen/t_siginfo.c:1.16 src/tests/lib/libc/gen/t_siginfo.c:1.17
--- src/tests/lib/libc/gen/t_siginfo.c:1.16	Sun Apr 22 08:52:26 2012
+++ src/tests/lib/libc/gen/t_siginfo.c	Mon Apr 23 15:07:56 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: t_siginfo.c,v 1.16 2012/04/22 08:52:26 martin Exp $ */
+/* $NetBSD: t_siginfo.c,v 1.17 2012/04/23 15:07:56 martin Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -49,7 +49,7 @@
 #endif
 
 /* for sigbus */
-char *addr;
+volatile char *addr;
 
 /* for sigchild */
 pid_t child;
@@ -412,31 +412,19 @@ static void
 sigbus_action(int signo, siginfo_t *info, void *ptr)
 {
 
+	printf("si_addr = %p\n", info->si_addr);
 	sig_debug(signo, info, (ucontext_t *)ptr);
 
 	ATF_REQUIRE_EQ(info->si_signo, SIGBUS);
 	ATF_REQUIRE_EQ(info->si_errno, 0);
 	ATF_REQUIRE_EQ(info->si_code, BUS_ADRALN);
 
-#if 0
 	if (strcmp(atf_config_get("atf_arch"), "i386") == 0 ||
 	    strcmp(atf_config_get("atf_arch"), "x86_64") == 0) {
 		atf_tc_expect_fail("x86 architecture does not correctly "
 		    "report the address where the unaligned access occured");
 	}
-
-	/*
-	 * XXX: This is bogus: si_addr is documented as the text address
-	 * where the fault occurs, addr is the faulting data address,
-	 * see TOG about siginfo_t:
-	 *
-	 *	void *	si_addr	Address of faulting instruction.
-	 *
-	 * Is there a portable way to get the accessed data address from
-	 * the handler?
-	 */
-	ATF_REQUIRE_EQ(info->si_addr, (void *)addr);
-#endif
+	ATF_REQUIRE_EQ(info->si_addr, (volatile void *)addr);
 
 	atf_tc_pass();
 	/* NOTREACHED */
@@ -480,6 +468,7 @@ ATF_TC_BODY(sigbus_adraln, tc)
 
 	/* Force an unaligned access */
 	addr++;
+	printf("now trying to access unaligned address %p\n", addr);
 	ATF_REQUIRE_EQ(*(volatile int *)addr, 0);
 
 	atf_tc_fail("Test did not fault as expected");

Reply via email to