Module Name:    src
Committed By:   kamil
Date:           Wed May 23 13:18:09 UTC 2018

Modified Files:
        src/tests/lib/libc/sys: t_ptrace_wait.h

Log Message:
Add new auxiliary functions in ATF ptrace(2) tests

Introduce:
 - trigger_trap()
 - trigger_segv()
 - trigger_ill()
 - trigger_fpe()
 - trigger_bus()

These functions generate appropriate signals caused by crashes.

A debugger is required to collect the crashes regardless of signal masking,
catching or ignoring rules.

While there, append __used argument to can_we_set_dbregs().

Sponsored by <The NetBSD Foundation>


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/lib/libc/sys/t_ptrace_wait.h

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/sys/t_ptrace_wait.h
diff -u src/tests/lib/libc/sys/t_ptrace_wait.h:1.5 src/tests/lib/libc/sys/t_ptrace_wait.h:1.6
--- src/tests/lib/libc/sys/t_ptrace_wait.h:1.5	Sat May 19 05:04:09 2018
+++ src/tests/lib/libc/sys/t_ptrace_wait.h	Wed May 23 13:18:09 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_ptrace_wait.h,v 1.5 2018/05/19 05:04:09 kamil Exp $	*/
+/*	$NetBSD: t_ptrace_wait.h,v 1.6 2018/05/23 13:18:09 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -476,7 +476,7 @@ check_happy(unsigned n)
 }
 
 #if defined(HAVE_DBREGS)
-static bool
+static bool __used
 can_we_set_dbregs(void)
 {
 	static long euid = -1;
@@ -504,6 +504,70 @@ can_we_set_dbregs(void)
 }
 #endif
 
+static void __used
+trigger_trap(void)
+{
+
+	/* Software breakpoint causes CPU trap, translated to SIGTRAP */
+#ifdef PTRACE_BREAKPOINT_ASM
+	PTRACE_BREAKPOINT_ASM;
+#else
+	/* port me */
+#endif
+}
+
+static void __used
+trigger_segv(void)
+{
+	static volatile char *ptr = NULL;
+
+	/* Access to unmapped memory causes CPU trap, translated to SIGSEGV */
+	*ptr = 1;
+}
+
+static void __used
+trigger_ill(void)
+{
+
+	/* Illegal instruction causes CPU trap, translated to SIGILL */
+#ifdef PTRACE_ILLEGAL_ASM
+	PTRACE_ILLEGAL_ASM;
+#else
+	/* port me */
+#endif
+}
+
+static int __used
+trigger_fpe(void)
+{
+	static volatile int a = 1;
+	static volatile int b = 0;
+	static volatile int c;
+
+	/* Division by zero causes CPU trap, translated to SIGFPE */
+	c = a / b;
+
+	return c;
+}
+
+static void __used
+trigger_bus(void)
+{
+	FILE *fp;
+	char *p;
+
+	/* Open an empty file for writing. */
+	fp = tmpfile();
+	FORKEE_ASSERT_NEQ((uintmax_t)fp, (uintmax_t)NULL);
+
+	/* Map an empty file with mmap(2) to a pointer. */
+	p = mmap(0, 1, PROT_WRITE, MAP_PRIVATE, fileno(fp), 0);
+	FORKEE_ASSERT_NEQ((uintmax_t)p, (uintmax_t)MAP_FAILED);
+
+	/* Invalid memory access causes CPU trap, translated to SIGBUS */
+	*p = 'a';
+}
+
 #if defined(TWAIT_HAVE_PID)
 #define ATF_TP_ADD_TC_HAVE_PID(a,b)	ATF_TP_ADD_TC(a,b)
 #else

Reply via email to