sync code with last fixes and improvements from OpenBSD

This commit is contained in:
purplerain 2023-06-12 03:32:40 +00:00
parent bf0676207f
commit 8f31919cdb
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
325 changed files with 2094 additions and 51856 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: exec_elf.c,v 1.181 2023/04/19 15:37:36 kettenis Exp $ */
/* $OpenBSD: exec_elf.c,v 1.182 2023/06/10 19:30:48 kettenis Exp $ */
/*
* Copyright (c) 1996 Per Fogelstrom
@ -1383,6 +1383,9 @@ coredump_note_elf(struct proc *p, void *iocookie, size_t *sizep)
#ifdef PT_GETFPREGS
struct fpreg freg;
#endif
#ifdef PT_PACMASK
register_t pacmask[2];
#endif
size = 0;
@ -1427,6 +1430,24 @@ coredump_note_elf(struct proc *p, void *iocookie, size_t *sizep)
size += notesize;
#endif
#ifdef PT_PACMASK
notesize = sizeof(nhdr) + elfround(namesize) +
elfround(sizeof(pacmask));
if (iocookie) {
pacmask[0] = pacmask[1] = process_get_pacmask(p);
nhdr.namesz = namesize;
nhdr.descsz = sizeof(pacmask);
nhdr.type = NT_OPENBSD_PACMASK;
error = coredump_writenote_elf(p, iocookie, &nhdr,
name, &pacmask);
if (error)
return (error);
}
size += notesize;
#endif
*sizep = size;
/* XXX Add hook for machdep per-LWP notes. */
return (0);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sys_process.c,v 1.93 2023/01/24 00:12:03 deraadt Exp $ */
/* $OpenBSD: sys_process.c,v 1.94 2023/06/10 19:30:48 kettenis Exp $ */
/* $NetBSD: sys_process.c,v 1.55 1996/05/15 06:17:47 tls Exp $ */
/*-
@ -104,6 +104,7 @@ sys_ptrace(struct proc *p, void *v, register_t *retval)
struct ptrace_event u_pe;
struct ptrace_state u_ps;
register_t u_wcookie;
register_t u_pacmask[2];
} u;
int size = 0;
enum { NONE, IN, IN_ALLOC, OUT, OUT_ALLOC, IN_OUT } mode;
@ -199,6 +200,12 @@ sys_ptrace(struct proc *p, void *v, register_t *retval)
size = sizeof u.u_wcookie;
data = size; /* suppress the data == size check */
break;
#endif
#ifdef PT_PACMASK
case PT_PACMASK:
mode = OUT;
size = sizeof u.u_pacmask;
break;
#endif
default:
return EINVAL;
@ -731,6 +738,12 @@ ptrace_ustate(struct proc *p, int req, pid_t pid, void *addr, int data,
case PT_WCOOKIE:
*(register_t *)addr = process_get_wcookie(t);
return 0;
#endif
#ifdef PT_PACMASK
case PT_PACMASK:
((register_t *)addr)[0] = process_get_pacmask(t);
((register_t *)addr)[1] = process_get_pacmask(t);
return 0;
#endif
default:
KASSERTMSG(0, "%s: unhandled request %d", __func__, req);