Continue to delete emulation support: we only have one sigcode and
authorguenther <guenther@openbsd.org>
Tue, 7 Dec 2021 17:51:04 +0000 (17:51 +0000)
committerguenther <guenther@openbsd.org>
Tue, 7 Dec 2021 17:51:04 +0000 (17:51 +0000)
sigobject.  Just use the existing globals for the former and use a
global for the latter.

ok jsg@ kettenis@

sys/kern/exec_elf.c
sys/kern/init_main.c
sys/kern/kern_exec.c
sys/sys/proc.h

index aa789cc..40d19df 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: exec_elf.c,v 1.162 2021/12/07 04:19:24 guenther Exp $ */
+/*     $OpenBSD: exec_elf.c,v 1.163 2021/12/07 17:51:04 guenther Exp $ */
 
 /*
  * Copyright (c) 1996 Per Fogelstrom
@@ -104,7 +104,6 @@ int exec_elf_fixup(struct proc *, struct exec_package *);
 int    elf_os_pt_note_name(Elf_Note *);
 int    elf_os_pt_note(struct proc *, struct exec_package *, Elf_Ehdr *, int *);
 
-extern char sigcode[], esigcode[], sigcoderet[];
 #ifdef SYSCALL_DEBUG
 extern char *syscallnames[];
 #endif
@@ -136,9 +135,6 @@ struct emul emul_elf = {
        setregs,
        exec_elf_fixup,
        coredump_elf,
-       sigcode,
-       esigcode,
-       sigcoderet
 };
 
 #define ELF_NOTE_NAME_OPENBSD  0x01
index 15e4f92..8060a6e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: init_main.c,v 1.310 2021/12/07 04:19:24 guenther Exp $        */
+/*     $OpenBSD: init_main.c,v 1.311 2021/12/07 17:51:04 guenther Exp $        */
 /*     $NetBSD: init_main.c,v 1.84.4.1 1996/06/02 09:08:06 mrg Exp $   */
 
 /*
@@ -154,7 +154,6 @@ void        timeout_proc_init(void);
 void   pool_gc_pages(void *);
 void   percpu_init(void);
 
-extern char sigcode[], esigcode[], sigcoderet[];
 #ifdef SYSCALL_DEBUG
 extern char *syscallnames[];
 #endif
@@ -173,9 +172,6 @@ struct emul emul_native = {
        setregs,
        NULL,           /* fixup */
        NULL,           /* coredump */
-       sigcode,
-       esigcode,
-       sigcoderet
 };
 
 #ifdef DIAGNOSTIC
index f3a8f64..c3bbc5b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: kern_exec.c,v 1.225 2021/12/07 04:19:24 guenther Exp $        */
+/*     $OpenBSD: kern_exec.c,v 1.226 2021/12/07 17:51:04 guenther Exp $        */
 /*     $NetBSD: kern_exec.c,v 1.75 1996/02/09 18:59:28 christos Exp $  */
 
 /*-
@@ -67,6 +67,7 @@
 
 #include <sys/timetc.h>
 
+struct uvm_object *sigobject;          /* shared sigcode object */
 struct uvm_object *timekeep_object;
 struct timekeep *timekeep;
 
@@ -80,7 +81,7 @@ const struct kmem_va_mode kv_exec = {
 /*
  * Map the shared signal code.
  */
-int exec_sigcode_map(struct process *, struct emul *);
+int exec_sigcode_map(struct process *);
 
 /*
  * Map the shared timekeep page.
@@ -691,7 +692,7 @@ sys_execve(struct proc *p, void *v, register_t *retval)
 #endif
 
        /* map the process's signal trampoline code */
-       if (exec_sigcode_map(pr, pack.ep_emul))
+       if (exec_sigcode_map(pr))
                goto free_pack_abort;
 
 #ifdef __HAVE_EXEC_MD_MAP
@@ -818,14 +819,15 @@ copyargs(struct exec_package *pack, struct ps_strings *arginfo, void *stack,
 }
 
 int
-exec_sigcode_map(struct process *pr, struct emul *e)
+exec_sigcode_map(struct process *pr)
 {
+       extern char sigcode[], esigcode[], sigcoderet[];
        vsize_t sz;
 
-       sz = (vaddr_t)e->e_esigcode - (vaddr_t)e->e_sigcode;
+       sz = (vaddr_t)esigcode - (vaddr_t)sigcode;
 
        /*
-        * If we don't have a sigobject for this emulation, create one.
+        * If we don't have a sigobject yet, create one.
         *
         * sigobject is an anonymous memory object (just like SYSV shared
         * memory) that we keep a permanent reference to and that we map
@@ -835,20 +837,20 @@ exec_sigcode_map(struct process *pr, struct emul *e)
         * Then we map it with PROT_READ|PROT_EXEC into the process just
         * the way sys_mmap would map it.
         */
-       if (e->e_sigobject == NULL) {
+       if (sigobject == NULL) {
                extern int sigfillsiz;
                extern u_char sigfill[];
                size_t off, left;
                vaddr_t va;
                int r;
 
-               e->e_sigobject = uao_create(sz, 0);
-               uao_reference(e->e_sigobject);  /* permanent reference */
+               sigobject = uao_create(sz, 0);
+               uao_reference(sigobject);       /* permanent reference */
 
-               if ((r = uvm_map(kernel_map, &va, round_page(sz), e->e_sigobject,
+               if ((r = uvm_map(kernel_map, &va, round_page(sz), sigobject,
                    0, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
                    MAP_INHERIT_SHARE, MADV_RANDOM, 0)))) {
-                       uao_detach(e->e_sigobject);
+                       uao_detach(sigobject);
                        return (ENOMEM);
                }
 
@@ -858,23 +860,22 @@ exec_sigcode_map(struct process *pr, struct emul *e)
                        memcpy((caddr_t)va + off, sigfill, chunk);
                        left -= chunk;
                }
-               memcpy((caddr_t)va, e->e_sigcode, sz);
+               memcpy((caddr_t)va, sigcode, sz);
                uvm_unmap(kernel_map, va, va + round_page(sz));
        }
 
        pr->ps_sigcode = 0; /* no hint */
-       uao_reference(e->e_sigobject);
+       uao_reference(sigobject);
        if (uvm_map(&pr->ps_vmspace->vm_map, &pr->ps_sigcode, round_page(sz),
-           e->e_sigobject, 0, 0, UVM_MAPFLAG(PROT_READ | PROT_EXEC,
+           sigobject, 0, 0, UVM_MAPFLAG(PROT_READ | PROT_EXEC,
            PROT_READ | PROT_WRITE | PROT_EXEC, MAP_INHERIT_COPY,
            MADV_RANDOM, UVM_FLAG_COPYONW | UVM_FLAG_SYSCALL))) {
-               uao_detach(e->e_sigobject);
+               uao_detach(sigobject);
                return (ENOMEM);
        }
 
        /* Calculate PC at point of sigreturn entry */
-       pr->ps_sigcoderet = pr->ps_sigcode +
-           (pr->ps_emul->e_esigret - pr->ps_emul->e_sigcode);
+       pr->ps_sigcoderet = pr->ps_sigcode + (sigcoderet - sigcode);
 
        return (0);
 }
index 1f6b5b7..73bd2aa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: proc.h,v 1.319 2021/12/07 04:19:24 guenther Exp $     */
+/*     $OpenBSD: proc.h,v 1.320 2021/12/07 17:51:04 guenther Exp $     */
 /*     $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $       */
 
 /*-
@@ -105,10 +105,6 @@ struct     emul {
                                  u_long, register_t *);
        int     (*e_fixup)(struct proc *, struct exec_package *);
        int     (*e_coredump)(struct proc *, void *cookie);
-       char    *e_sigcode;             /* Start of sigcode */
-       char    *e_esigcode;            /* End of sigcode */
-       char    *e_esigret;             /* sigaction RET position */
-       struct uvm_object *e_sigobject; /* shared sigcode object */
 };
 
 /*