Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Jan 2017 05:36:09 +0000 (UTC)
From:      Ngie Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r312372 - in projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests: kernel/arch/amd64 lib/libpthread
Message-ID:  <201701180536.v0I5a9w4053995@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Wed Jan 18 05:36:09 2017
New Revision: 312372
URL: https://svnweb.freebsd.org/changeset/base/312372

Log:
  Merge ^/vendor/NetBSD/tests/dist@r312370

Modified:
  projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/kernel/arch/amd64/t_ptrace_wait.c
  projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/lib/libpthread/h_common.h
Directory Properties:
  projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/   (props changed)

Modified: projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/kernel/arch/amd64/t_ptrace_wait.c
==============================================================================
--- projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/kernel/arch/amd64/t_ptrace_wait.c	Wed Jan 18 05:35:34 2017	(r312371)
+++ projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/kernel/arch/amd64/t_ptrace_wait.c	Wed Jan 18 05:36:09 2017	(r312372)
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_ptrace_wait.c,v 1.9 2017/01/13 21:30:41 christos Exp $	*/
+/*	$NetBSD: t_ptrace_wait.c,v 1.11 2017/01/18 05:14:34 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ptrace_wait.c,v 1.9 2017/01/13 21:30:41 christos Exp $");
+__RCSID("$NetBSD: t_ptrace_wait.c,v 1.11 2017/01/18 05:14:34 kamil Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -247,6 +247,7 @@ ATF_TC_BODY(watchpoint_read, tc)
 		printf("struct ptrace {\n");
 		printf("\t.pw_index=%d\n", pw.pw_index);
 		printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+		printf("\t.pw_type=%#x\n", pw.pw_type);
 		printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 		printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 		printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -320,6 +321,7 @@ ATF_TC_BODY(watchpoint_write_unmodified,
 		printf("struct ptrace {\n");
 		printf("\t.pw_index=%d\n", pw.pw_index);
 		printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+		printf("\t.pw_type=%#x\n", pw.pw_type);
 		printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 		printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 		printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -364,6 +366,8 @@ ATF_TC_BODY(watchpoint_trap_code0, tc)
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -390,6 +394,7 @@ ATF_TC_BODY(watchpoint_trap_code0, tc)
 
 	pw.pw_index = i;
 	pw.pw_lwpid = 0;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = (void *)check_happy;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_EXECUTION;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -397,6 +402,7 @@ ATF_TC_BODY(watchpoint_trap_code0, tc)
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -414,6 +420,20 @@ ATF_TC_BODY(watchpoint_trap_code0, tc)
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 0);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	pw.pw_md.md_address = NULL;
 	printf("Before writing watchpoint %d (disable it)\n", i);
 	ATF_REQUIRE(ptrace(PT_WRITE_WATCHPOINT, child, &pw, len) != -1);
@@ -452,6 +472,8 @@ ATF_TC_BODY(watchpoint_trap_code1, tc)
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -478,6 +500,7 @@ ATF_TC_BODY(watchpoint_trap_code1, tc)
 
 	pw.pw_index = i;
 	pw.pw_lwpid = 0;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = (void *)check_happy;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_EXECUTION;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -485,6 +508,7 @@ ATF_TC_BODY(watchpoint_trap_code1, tc)
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%d\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -502,6 +526,20 @@ ATF_TC_BODY(watchpoint_trap_code1, tc)
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 1);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	pw.pw_md.md_address = NULL;
 	printf("Before writing watchpoint %d (disable it)\n", i);
 	ATF_REQUIRE(ptrace(PT_WRITE_WATCHPOINT, child, &pw, len) != -1);
@@ -540,6 +578,8 @@ ATF_TC_BODY(watchpoint_trap_code2, tc)
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -566,6 +606,7 @@ ATF_TC_BODY(watchpoint_trap_code2, tc)
 
 	pw.pw_index = i;
 	pw.pw_lwpid = 0;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = (void *)check_happy;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_EXECUTION;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -573,6 +614,7 @@ ATF_TC_BODY(watchpoint_trap_code2, tc)
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -590,6 +632,20 @@ ATF_TC_BODY(watchpoint_trap_code2, tc)
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 2);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	pw.pw_md.md_address = NULL;
 	printf("Before writing watchpoint %d (disable it)\n", i);
 	ATF_REQUIRE(ptrace(PT_WRITE_WATCHPOINT, child, &pw, len) != -1);
@@ -628,6 +684,8 @@ ATF_TC_BODY(watchpoint_trap_code3, tc)
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -654,6 +712,7 @@ ATF_TC_BODY(watchpoint_trap_code3, tc)
 
 	pw.pw_index = i;
 	pw.pw_lwpid = 0;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = (void *)check_happy;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_EXECUTION;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -661,6 +720,7 @@ ATF_TC_BODY(watchpoint_trap_code3, tc)
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -678,6 +738,20 @@ ATF_TC_BODY(watchpoint_trap_code3, tc)
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 3);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	pw.pw_md.md_address = NULL;
 	printf("Before writing watchpoint %d (disable it)\n", i);
 	ATF_REQUIRE(ptrace(PT_WRITE_WATCHPOINT, child, &pw, len) != -1);
@@ -716,6 +790,8 @@ ATF_TC_BODY(watchpoint_trap_data_write0,
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -741,6 +817,7 @@ ATF_TC_BODY(watchpoint_trap_data_write0,
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = 0;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_WRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -748,6 +825,7 @@ ATF_TC_BODY(watchpoint_trap_data_write0,
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -765,6 +843,20 @@ ATF_TC_BODY(watchpoint_trap_data_write0,
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 0);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -799,6 +891,8 @@ ATF_TC_BODY(watchpoint_trap_data_write1,
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -824,6 +918,7 @@ ATF_TC_BODY(watchpoint_trap_data_write1,
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_WRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -831,6 +926,7 @@ ATF_TC_BODY(watchpoint_trap_data_write1,
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -848,6 +944,20 @@ ATF_TC_BODY(watchpoint_trap_data_write1,
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 1);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -882,6 +992,8 @@ ATF_TC_BODY(watchpoint_trap_data_write2,
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -907,6 +1019,7 @@ ATF_TC_BODY(watchpoint_trap_data_write2,
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_WRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -914,6 +1027,7 @@ ATF_TC_BODY(watchpoint_trap_data_write2,
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -931,6 +1045,20 @@ ATF_TC_BODY(watchpoint_trap_data_write2,
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 2);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -966,6 +1094,8 @@ ATF_TC_BODY(watchpoint_trap_data_write3,
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -991,6 +1121,7 @@ ATF_TC_BODY(watchpoint_trap_data_write3,
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_WRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -998,6 +1129,7 @@ ATF_TC_BODY(watchpoint_trap_data_write3,
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -1015,6 +1147,20 @@ ATF_TC_BODY(watchpoint_trap_data_write3,
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 3);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -1049,6 +1195,8 @@ ATF_TC_BODY(watchpoint_trap_data_rw0, tc
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -1074,6 +1222,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw0, tc
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_READWRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -1081,6 +1230,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw0, tc
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -1098,6 +1248,20 @@ ATF_TC_BODY(watchpoint_trap_data_rw0, tc
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 0);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -1132,6 +1296,8 @@ ATF_TC_BODY(watchpoint_trap_data_rw1, tc
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -1157,6 +1323,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw1, tc
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_READWRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -1164,6 +1331,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw1, tc
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -1181,6 +1349,20 @@ ATF_TC_BODY(watchpoint_trap_data_rw1, tc
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 1);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -1215,6 +1397,8 @@ ATF_TC_BODY(watchpoint_trap_data_rw2, tc
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -1240,6 +1424,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw2, tc
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_READWRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -1247,6 +1432,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw2, tc
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -1264,6 +1450,20 @@ ATF_TC_BODY(watchpoint_trap_data_rw2, tc
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 2);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
@@ -1298,6 +1498,8 @@ ATF_TC_BODY(watchpoint_trap_data_rw3, tc
 	struct ptrace_watchpoint pw;
 	int len = sizeof(pw);
 	int watchme = 1234;
+	struct ptrace_siginfo info;
+	memset(&info, 0, sizeof(info));
 
 	printf("Before forking process PID=%d\n", getpid());
 	ATF_REQUIRE((child = fork()) != -1);
@@ -1323,6 +1525,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw3, tc
 	printf("Preparing code watchpoint trap %d\n", i);
 
 	pw.pw_index = i;
+	pw.pw_type = PTRACE_PW_TYPE_DBREGS;
 	pw.pw_md.md_address = &watchme;
 	pw.pw_md.md_condition = X86_HW_WATCHPOINT_DR7_CONDITION_DATA_READWRITE;
 	pw.pw_md.md_length = X86_HW_WATCHPOINT_DR7_LENGTH_BYTE;
@@ -1330,6 +1533,7 @@ ATF_TC_BODY(watchpoint_trap_data_rw3, tc
 	printf("struct ptrace {\n");
 	printf("\t.pw_index=%d\n", pw.pw_index);
 	printf("\t.pw_lwpid=%d\n", pw.pw_lwpid);
+	printf("\t.pw_type=%#x\n", pw.pw_type);
 	printf("\t.pw_md.md_address=%p\n", pw.pw_md.md_address);
 	printf("\t.pw_md.md_condition=%#x\n", pw.pw_md.md_condition);
 	printf("\t.pw_md.md_length=%#x\n", pw.pw_md.md_length);
@@ -1347,6 +1551,20 @@ ATF_TC_BODY(watchpoint_trap_data_rw3, tc
 
 	validate_status_stopped(status, SIGTRAP);
 
+	printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+	ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+	printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+	printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+	    info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+	    info.psi_siginfo.si_errno);
+
+	printf("Before checking siginfo_t\n");
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_HWWPT);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap2, 3);
+	ATF_REQUIRE_EQ(info.psi_siginfo.si_trap3, X86_HW_WATCHPOINT_EVENT_FIRED);
+
 	printf("Before resuming the child process where it left off and "
 	    "without signal to be sent\n");
 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);

Modified: projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/lib/libpthread/h_common.h
==============================================================================
--- projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/lib/libpthread/h_common.h	Wed Jan 18 05:35:34 2017	(r312371)
+++ projects/netbsd-tests-upstream-01-2017/contrib/netbsd-tests/lib/libpthread/h_common.h	Wed Jan 18 05:36:09 2017	(r312372)
@@ -5,14 +5,14 @@
 
 #define PTHREAD_REQUIRE(x) \
     do { \
-        int ret = (x); \
-        ATF_REQUIRE_MSG(ret == 0, "%s: %s", #x, strerror(ret)); \
+        int _ret = (x); \
+        ATF_REQUIRE_MSG(_ret == 0, "%s: %s", #x, strerror(_ret)); \
     } while (0)
 
 #define PTHREAD_REQUIRE_STATUS(x, v) \
     do { \
-        int ret = (x); \
-        ATF_REQUIRE_MSG(ret == (v), "%s: %s", #x, strerror(ret)); \
+        int _ret = (x); \
+        ATF_REQUIRE_MSG(_ret == (v), "%s: %s", #x, strerror(_ret)); \
     } while (0)
 
 #endif // H_COMMON_H



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