The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d95657a1a758e8d993a0eb92259f8c860a309207

commit d95657a1a758e8d993a0eb92259f8c860a309207
Author:     John Baldwin <[email protected]>
AuthorDate: 2022-06-30 17:04:19 +0000
Commit:     John Baldwin <[email protected]>
CommitDate: 2022-06-30 17:05:02 +0000

    gcore: Use PT_GETREGSET for NT_THRMISC and NT_PTLWPINFO.
    
    This avoids the need for dealing with converting lwpinfo for alternate
    ABIs in gcore itself.
    
    Reviewed by:    markj
    MFC after:      2 weeks
    Sponsored by:   DARPA
    Differential Revision:  https://reviews.freebsd.org/D35667
---
 usr.bin/gcore/elf32core.c | 38 ----------------------------------
 usr.bin/gcore/elfcore.c   | 52 ++---------------------------------------------
 2 files changed, 2 insertions(+), 88 deletions(-)

diff --git a/usr.bin/gcore/elf32core.c b/usr.bin/gcore/elf32core.c
index 98e2408c4aa9..29fb7d3608b4 100644
--- a/usr.bin/gcore/elf32core.c
+++ b/usr.bin/gcore/elf32core.c
@@ -12,41 +12,3 @@
 #define        ELFCORE_COMPAT_32       1
 #include "elfcore.c"
 
-static void
-elf_convert_siginfo(struct siginfo32 *sid, siginfo_t *sis)
-{
-
-       bzero(sid, sizeof(*sid));
-       sid->si_signo = sis->si_signo;
-       sid->si_errno = sis->si_errno;
-       sid->si_code = sis->si_code;
-       sid->si_pid = sis->si_pid;
-       sid->si_uid = sis->si_uid;
-       sid->si_status = sis->si_status;
-       sid->si_addr = (uintptr_t)sis->si_addr;
-#if _BYTE_ORDER == _BIG_ENDIAN
-       if (sis->si_value.sival_int == 0)
-               sid->si_value.sival_ptr = (uintptr_t)sis->si_value.sival_ptr;
-       else
-#endif
-               sid->si_value.sival_int = sis->si_value.sival_int;
-       sid->si_timerid = sis->si_timerid;
-       sid->si_overrun = sis->si_overrun;
-}
-
-static void
-elf_convert_lwpinfo(struct ptrace_lwpinfo32 *pld, struct ptrace_lwpinfo *pls)
-{
-
-       pld->pl_lwpid = pls->pl_lwpid;
-       pld->pl_event = pls->pl_event;
-       pld->pl_flags = pls->pl_flags;
-       pld->pl_sigmask = pls->pl_sigmask;
-       pld->pl_siglist = pls->pl_siglist;
-       elf_convert_siginfo(&pld->pl_siginfo, &pls->pl_siginfo);
-       memcpy(pld->pl_tdname, pls->pl_tdname, sizeof(pld->pl_tdname));
-       pld->pl_child_pid = pls->pl_child_pid;
-       pld->pl_syscall_code = pls->pl_syscall_code;
-       pld->pl_syscall_narg = pls->pl_syscall_narg;
-}
-
diff --git a/usr.bin/gcore/elfcore.c b/usr.bin/gcore/elfcore.c
index 8a6fdb642aeb..b01adb9a73b4 100644
--- a/usr.bin/gcore/elfcore.c
+++ b/usr.bin/gcore/elfcore.c
@@ -85,13 +85,8 @@ struct sseg_closure {
 
 #ifdef ELFCORE_COMPAT_32
 typedef struct prpsinfo32 elfcore_prpsinfo_t;
-typedef struct ptrace_lwpinfo32 elfcore_lwpinfo_t;
-static void elf_convert_lwpinfo(struct ptrace_lwpinfo32 *pld,
-    struct ptrace_lwpinfo *pls);
 #else
 typedef prpsinfo_t elfcore_prpsinfo_t;
-typedef struct ptrace_lwpinfo elfcore_lwpinfo_t;
-#define        elf_convert_lwpinfo(d,s)        *d = *s
 #endif
 
 typedef void* (*notefunc_t)(void *, size_t *);
@@ -102,8 +97,6 @@ static void each_dumpable_segment(struct map_entry *, 
segment_callback,
     void *closure);
 static void elf_detach(void);  /* atexit() handler. */
 static void *elf_note_prpsinfo(void *, size_t *);
-static void *elf_note_thrmisc(void *, size_t *);
-static void *elf_note_ptlwpinfo(void *, size_t *);
 #if defined(__i386__) || defined(__amd64__)
 static void *elf_note_x86_xstate(void *, size_t *);
 #endif
@@ -366,8 +359,8 @@ elf_putnotes(pid_t pid, struct sbuf *sb, size_t *sizep)
        for (i = 0; i < threads; ++i) {
                elf_putregnote(NT_PRSTATUS, tids[i], sb);
                elf_putregnote(NT_FPREGSET, tids[i], sb);
-               elf_putnote(NT_THRMISC, elf_note_thrmisc, tids + i, sb);
-               elf_putnote(NT_PTLWPINFO, elf_note_ptlwpinfo, tids + i, sb);
+               elf_putregnote(NT_THRMISC, tids[i], sb);
+               elf_putregnote(NT_PTLWPINFO, tids[i], sb);
 #if defined(__aarch64__) || defined(__arm__)
                elf_putregnote(NT_ARM_TLS, tids[i], sb);
 #endif
@@ -682,47 +675,6 @@ elf_note_prpsinfo(void *arg, size_t *sizep)
        return (psinfo);
 }
 
-static void *
-elf_note_thrmisc(void *arg, size_t *sizep)
-{
-       lwpid_t tid;
-       struct ptrace_lwpinfo lwpinfo;
-       thrmisc_t *thrmisc;
-
-       tid = *(lwpid_t *)arg;
-       thrmisc = calloc(1, sizeof(*thrmisc));
-       if (thrmisc == NULL)
-               errx(1, "out of memory");
-       ptrace(PT_LWPINFO, tid, (void *)&lwpinfo,
-           sizeof(lwpinfo));
-       memset(&thrmisc->_pad, 0, sizeof(thrmisc->_pad));
-       strcpy(thrmisc->pr_tname, lwpinfo.pl_tdname);
-
-       *sizep = sizeof(*thrmisc);
-       return (thrmisc);
-}
-
-static void *
-elf_note_ptlwpinfo(void *arg, size_t *sizep)
-{
-       lwpid_t tid;
-       elfcore_lwpinfo_t *elf_info;
-       struct ptrace_lwpinfo lwpinfo;
-       void *p;
-
-       tid = *(lwpid_t *)arg;
-       p = calloc(1, sizeof(int) + sizeof(elfcore_lwpinfo_t));
-       if (p == NULL)
-               errx(1, "out of memory");
-       *(int *)p = sizeof(elfcore_lwpinfo_t);
-       elf_info = (void *)((int *)p + 1);
-       ptrace(PT_LWPINFO, tid, (void *)&lwpinfo, sizeof(lwpinfo));
-       elf_convert_lwpinfo(elf_info, &lwpinfo);
-
-       *sizep = sizeof(int) + sizeof(struct ptrace_lwpinfo);
-       return (p);
-}
-
 #if defined(__i386__) || defined(__amd64__)
 static void *
 elf_note_x86_xstate(void *arg, size_t *sizep)

Reply via email to