Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/lib/libc/sys Add new auxiliary functions in ATF ptrace...



details:   https://anonhg.NetBSD.org/src/rev/b56b7ecd447b
branches:  trunk
changeset: 322920:b56b7ecd447b
user:      kamil <kamil%NetBSD.org@localhost>
date:      Wed May 23 13:18:09 2018 +0000

description:
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>

diffstat:

 tests/lib/libc/sys/t_ptrace_wait.h |  68 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 66 insertions(+), 2 deletions(-)

diffs (89 lines):

diff -r f40156c48530 -r b56b7ecd447b tests/lib/libc/sys/t_ptrace_wait.h
--- a/tests/lib/libc/sys/t_ptrace_wait.h        Wed May 23 11:16:13 2018 +0000
+++ b/tests/lib/libc/sys/t_ptrace_wait.h        Wed May 23 13:18:09 2018 +0000
@@ -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 @@
 }
 
 #if defined(HAVE_DBREGS)
-static bool
+static bool __used
 can_we_set_dbregs(void)
 {
        static long euid = -1;
@@ -504,6 +504,70 @@
 }
 #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



Home | Main Index | Thread Index | Old Index