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 Update for new LWP behavior -- as of 9.99...



details:   https://anonhg.NetBSD.org/src/rev/c88ff7fcbc7b
branches:  trunk
changeset: 971438:c88ff7fcbc7b
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Fri Apr 24 03:25:20 2020 +0000

description:
Update for new LWP behavior -- as of 9.99.59, the LWP ID of a single-LWP
process is the PID, not 1.

diffstat:

 tests/lib/libc/sys/t_ptrace_wait.c     |  45 +++++++++++++++++++++++++++------
 tests/lib/libc/sys/t_ptrace_x86_wait.h |   8 +++---
 2 files changed, 41 insertions(+), 12 deletions(-)

diffs (138 lines):

diff -r e70e4a875282 -r c88ff7fcbc7b tests/lib/libc/sys/t_ptrace_wait.c
--- a/tests/lib/libc/sys/t_ptrace_wait.c        Fri Apr 24 03:22:52 2020 +0000
+++ b/tests/lib/libc/sys/t_ptrace_wait.c        Fri Apr 24 03:25:20 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: t_ptrace_wait.c,v 1.171 2020/04/17 22:53:52 kamil Exp $        */
+/*     $NetBSD: t_ptrace_wait.c,v 1.172 2020/04/24 03:25:20 thorpej Exp $      */
 
 /*-
  * Copyright (c) 2016, 2017, 2018, 2019 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ptrace_wait.c,v 1.171 2020/04/17 22:53:52 kamil Exp $");
+__RCSID("$NetBSD: t_ptrace_wait.c,v 1.172 2020/04/24 03:25:20 thorpej Exp $");
 
 #define __LEGACY_PT_LWPINFO
 
@@ -7506,8 +7506,11 @@
        DPRINTF("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
        SYSCALL_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
 
+       /*
+        * N.B. 9.99.59 and later - single-LWP processes lwpid==pid.
+        */
        DPRINTF("Before checking siginfo_t and lwpid\n");
-       ATF_REQUIRE_EQ(info.psi_lwpid, 1);
+       ATF_REQUIRE(info.psi_lwpid == 1 || info.psi_lwpid == child);
        ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
        ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_SCE);
 
@@ -7549,8 +7552,13 @@
                            ptrace(PT_GET_SIGINFO, child, &info, sizeof(info))
                            != -1);
 
+                       /*
+                        * N.B. 9.99.59 and later - single-LWP processes
+                        * lwpid==pid.
+                        */
                        DPRINTF("Before checking siginfo_t and lwpid\n");
-                       ATF_REQUIRE_EQ(info.psi_lwpid, 1);
+                       ATF_REQUIRE(info.psi_lwpid == 1 ||
+                                   info.psi_lwpid == child);
                        ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
                        ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_SCX);
 
@@ -8502,6 +8510,13 @@
  * buf_len.  The actual length of the note is returned (which can be greater
  * than buf_len, indicating that it has been truncated).  If the note is not
  * found, -1 is returned.
+ *
+ * If the note_name ends in '*', then we find the first note that matches
+ * the note_name prefix up to the '*' character, e.g.:
+ *
+ *     NetBSD-CORE@*
+ *
+ * finds the first note whose name prefix matches "NetBSD-CORE@".
  */
 static ssize_t core_find_note(const char *core_path,
     const char *note_name, uint64_t note_type, void *buf, size_t buf_len)
@@ -8510,8 +8525,16 @@
        Elf *core_elf;
        size_t core_numhdr, i;
        ssize_t ret = -1;
-       /* note: we assume note name will be null-terminated */
-       size_t name_len = strlen(note_name) + 1;
+       size_t name_len = strlen(note_name);
+       bool prefix_match = false;
+
+       if (note_name[name_len - 1] == '*') {
+               prefix_match = true;
+               name_len--;
+       } else {
+               /* note: we assume note name will be null-terminated */
+               name_len++;
+       }
 
        SYSCALL_REQUIRE((core_fd = open(core_path, O_RDONLY)) != -1);
        SYSCALL_REQUIRE(elf_version(EV_CURRENT) != EV_NONE);
@@ -8554,7 +8577,10 @@
                        /* indicates end of notes */
                        if (note_hdr.n_namesz == 0 || note_hdr.n_descsz == 0)
                                break;
-                       if (note_hdr.n_namesz == name_len &&
+                       if (((prefix_match &&
+                             note_hdr.n_namesz > name_len) ||
+                            (!prefix_match &&
+                             note_hdr.n_namesz == name_len)) &&
                            note_hdr.n_namesz <= sizeof(name_buf)) {
                                SYSCALL_REQUIRE(pread(core_fd, name_buf,
                                    note_hdr.n_namesz, offset)
@@ -8652,7 +8678,10 @@
        ATF_CHECK_EQ(procinfo.cpi_rgid, getgid());
        ATF_CHECK_EQ(procinfo.cpi_egid, getegid());
        ATF_CHECK_EQ(procinfo.cpi_nlwps, 1);
-       ATF_CHECK_EQ(procinfo.cpi_siglwp, 1);
+       /*
+        * N.B. 9.99.59 and later - single-LWP processes lwpid==pid.
+        */
+       ATF_CHECK(procinfo.cpi_siglwp == 1 || procinfo.cpi_siglwp == child);
 
        unlink(core_path);
 
diff -r e70e4a875282 -r c88ff7fcbc7b tests/lib/libc/sys/t_ptrace_x86_wait.h
--- a/tests/lib/libc/sys/t_ptrace_x86_wait.h    Fri Apr 24 03:22:52 2020 +0000
+++ b/tests/lib/libc/sys/t_ptrace_x86_wait.h    Fri Apr 24 03:25:20 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: t_ptrace_x86_wait.h,v 1.24 2020/02/20 23:57:16 kamil Exp $     */
+/*     $NetBSD: t_ptrace_x86_wait.h,v 1.25 2020/04/24 03:25:20 thorpej Exp $   */
 
 /*-
  * Copyright (c) 2016, 2017, 2018, 2019 The NetBSD Foundation, Inc.
@@ -3050,7 +3050,7 @@
                        ATF_REQUIRE(regs < FPREGS_MM);
                        DPRINTF("Parse core file for PT_GETREGS\n");
                        ATF_REQUIRE_EQ(core_find_note(core_path,
-                           "NetBSD-CORE@1", PT_GETREGS, &gpr, sizeof(gpr)),
+                           "NetBSD-CORE@*", PT_GETREGS, &gpr, sizeof(gpr)),
                            sizeof(gpr));
                        break;
                case TEST_XMMREGS:
@@ -3071,14 +3071,14 @@
 #endif
                        DPRINTF("Parse core file for PT_GETFPREGS\n");
                        ATF_REQUIRE_EQ(core_find_note(core_path,
-                           "NetBSD-CORE@1", PT_GETFPREGS, &fpr, sizeof(fpr)),
+                           "NetBSD-CORE@*", PT_GETFPREGS, &fpr, sizeof(fpr)),
                            sizeof(fpr));
                        break;
                case TEST_XSTATE:
                        ATF_REQUIRE(regs >= FPREGS_MM);
                        DPRINTF("Parse core file for PT_GETXSTATE\n");
                        ATF_REQUIRE_EQ(core_find_note(core_path,
-                           "NetBSD-CORE@1", PT_GETXSTATE, &xst, sizeof(xst)),
+                           "NetBSD-CORE@*", PT_GETXSTATE, &xst, sizeof(xst)),
                            sizeof(xst));
                        ATF_REQUIRE((xst.xs_xstate_bv & xst_flags)
                            == xst_flags);



Home | Main Index | Thread Index | Old Index