Add a new label "sigcodecall" inside every sigtramp definition, directly
authorderaadt <deraadt@openbsd.org>
Sun, 10 Dec 2023 16:56:01 +0000 (16:56 +0000)
committerderaadt <deraadt@openbsd.org>
Sun, 10 Dec 2023 16:56:01 +0000 (16:56 +0000)
in front of the syscall instruction.  This is used to calculate the start
of the syscall for SYS_sigreturn and pinned system calls.
ok kettenis

13 files changed:
sys/arch/alpha/alpha/locore.s
sys/arch/amd64/amd64/locore.S
sys/arch/arm/arm/sigcode.S
sys/arch/arm64/arm64/locore.S
sys/arch/hppa/hppa/locore.S
sys/arch/i386/i386/locore.s
sys/arch/m88k/m88k/subr.S
sys/arch/macppc/macppc/locore.S
sys/arch/mips64/mips64/lcore_access.S
sys/arch/powerpc64/powerpc64/locore.S
sys/arch/riscv64/riscv64/locore.S
sys/arch/sh/sh/locore_subr.S
sys/arch/sparc64/sparc64/locore.s

index 1bbf06a..6b5f097 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.53 2023/12/06 06:15:33 miod Exp $ */
+/* $OpenBSD: locore.s,v 1.54 2023/12/10 16:56:01 deraadt Exp $ */
 /* $NetBSD: locore.s,v 1.94 2001/04/26 03:10:44 ross Exp $ */
 
 /*-
@@ -202,6 +202,8 @@ NESTED(sigcode,0,0,ra,0,0)
        ldq     a0, 0(sp)               /* get the sigcontext pointer */
        lda     sp, 16(sp)
        ldiq    v0, SYS_sigreturn       /* and call sigreturn() with it. */
+       .globl  sigcodecall
+sigcodecall:
        call_pal PAL_OSF1_callsys
        .globl  sigcoderet
 sigcoderet:
index bcf30f6..a3d496e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.141 2023/10/24 13:20:09 claudio Exp $    */
+/*     $OpenBSD: locore.S,v 1.142 2023/12/10 16:56:01 deraadt Exp $    */
 /*     $NetBSD: locore.S,v 1.13 2004/03/25 18:33:17 drochner Exp $     */
 
 /*
@@ -176,6 +176,8 @@ sigcode:
        movq    %rsp,%rdi
        pushq   %rdi                    /* fake return address */
        movq    $SYS_sigreturn,%rax
+       .globl sigcodecall
+sigcodecall:
        syscall
        .globl  sigcoderet
 sigcoderet:
index a6a842d..70c0f54 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sigcode.S,v 1.12 2022/12/08 01:25:44 guenther Exp $   */
+/*     $OpenBSD: sigcode.S,v 1.13 2023/12/10 16:56:01 deraadt Exp $    */
 /*     $NetBSD: sigcode.S,v 1.6 2003/10/05 19:44:58 matt Exp $ */
 
 /*
@@ -56,6 +56,8 @@ sigcode:
 /*     mov     r0, sp */
        add     r0, sp, #SIGF_SC
        mov     r12, #SYS_sigreturn
+       .globl  sigcodecall
+sigcodecall:
        swi     0
        dsb     nsh
        isb
index 057d226..9f2faa0 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.S,v 1.43 2023/01/26 13:09:18 kettenis Exp $ */
+/* $OpenBSD: locore.S,v 1.44 2023/12/10 16:56:01 deraadt Exp $ */
 /*-
  * Copyright (c) 2012-2014 Andrew Turner
  * All rights reserved.
@@ -365,6 +365,8 @@ sigcode:
        add     x0, x0, #SF_SC
 
        mov     x8, #SYS_sigreturn
+       .globl sigcodecall
+sigcodecall:
        svc     0
        dsb     nsh
        isb
index 0684407..28647e5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.205 2023/10/24 13:20:10 claudio Exp $    */
+/*     $OpenBSD: locore.S,v 1.206 2023/12/10 16:56:01 deraadt Exp $    */
 
 /*
  * Copyright (c) 1998-2004 Michael Shalayeff
@@ -2866,8 +2866,10 @@ sigcode_call
        ldil    L%SYSCALLGATE, r1
        copy    r4, arg0
        .call
+       .globl  sigcodecall
+sigcodecall:
        ble     4(sr7, r1)
-       ldi     SYS_sigreturn, t1
+        ldi    SYS_sigreturn, t1
        .globl  sigcoderet
 sigcoderet:
 
index 2d80d10..c3a7497 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.s,v 1.202 2023/10/24 13:20:10 claudio Exp $    */
+/*     $OpenBSD: locore.s,v 1.203 2023/12/10 16:56:01 deraadt Exp $    */
 /*     $NetBSD: locore.s,v 1.145 1996/05/03 19:41:19 christos Exp $    */
 
 /*-
@@ -341,6 +341,8 @@ sigcode:
        pushl   %eax
        pushl   %eax                    # junk to fake return address
        movl    $SYS_sigreturn,%eax
+       .globl  sigcodecall
+sigcodecall:
        int     $0x80                   # enter kernel with args on stack
        .globl  sigcoderet
 sigcoderet:
index c3e8588..69d79fe 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: subr.S,v 1.29 2023/01/31 15:18:54 deraadt Exp $   */
+/* $OpenBSD: subr.S,v 1.30 2023/12/10 16:56:01 deraadt Exp $   */
 /*
  * Mach Operating System
  * Copyright (c) 1993-1992 Carnegie Mellon University
@@ -1131,6 +1131,7 @@ ENTRY(longjmp)
 GLOBAL(sigcode)                        /* r31 points to sigframe */
        ld      %r2,  %r31, 0   /* pick sigcontext* */
        or      %r13, %r0,  SYS_sigreturn
+GLOBAL(sigcodecall)
 GLOBAL(sigcoderet)
        tb0     0,    %r0,  450 /* syscall trap, calling sigreturn */
        NOP                     | failure return
index c578d9a..76ed02f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.62 2023/10/24 13:20:10 claudio Exp $     */
+/*     $OpenBSD: locore.S,v 1.63 2023/12/10 16:56:01 deraadt Exp $     */
 /*     $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $    */
 
 /*
@@ -1175,6 +1175,8 @@ sigcode:
        lfd     %f13,104(%r6)
        addi    %r3,%r1,((16+FPSIG_SIZEOF+15)&~0xf)+SF_SC       /* compute &sf_sc */
        li      %r0,SYS_sigreturn
+       .globl  sigcodecall
+sigcodecall:
        sc                              /* sigreturn(scp) */
        .globl  sigcoderet
 sigcoderet:
index bc51fe7..f2106d1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: lcore_access.S,v 1.34 2023/01/31 15:18:55 deraadt Exp $ */
+/*     $OpenBSD: lcore_access.S,v 1.35 2023/12/10 16:56:01 deraadt Exp $ */
 
 /*
  * Copyright (c) 2001-2003 Opsycon AB  (www.opsycon.se / www.opsycon.com)
@@ -75,6 +75,8 @@ onfault_table:
 sigcode:
        PTR_ADDU a0, sp, 4*REGSZ                # address of sigcontext
        LI      v0, SYS_sigreturn       # sigreturn(scp)
+       .globl  sigcodecall
+sigcodecall:
        syscall
        .globl  sigcoderet
 sigcoderet:
index d0a21c1..c74b185 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.46 2023/10/24 13:20:10 claudio Exp $     */
+/*     $OpenBSD: locore.S,v 1.47 2023/12/10 16:56:01 deraadt Exp $     */
 
 /*
  * Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
        .rodata
 
        .globl sigcode
-       .globl sigcoderet
 sigcode:
        addi    %r1, %r1, -32
        mtctr   %r12
        bctrl
        addi    %r3, %r1, 32+SF_SC
        li      %r0, SYS_sigreturn
+       .globl  sigcodecall
+sigcodecall:
        sc
+       .globl sigcoderet
 sigcoderet:
        li      %r0, SYS_exit
        sc
index 8848ac3..f1f1f2e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.15 2022/12/02 12:27:08 jca Exp $ */
+/*     $OpenBSD: locore.S,v 1.16 2023/12/10 16:56:02 deraadt Exp $     */
 
 /*-
  * Copyright (c) 2015-2018 Ruslan Bukin <br@bsdpad.com>
@@ -250,8 +250,9 @@ ENTRY(sigcode)
        mv      a0, sp
        addi    a0, a0, SF_SC
        li      t0, SYS_sigreturn
+       .globl  sigcodecall
+sigcodecall:
        ecall
-
        .globl sigcoderet
 sigcoderet:
        /* sigreturn failed, exit */
index 3428681..2bd371f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore_subr.S,v 1.17 2023/10/24 13:20:10 claudio Exp $        */
+/*     $OpenBSD: locore_subr.S,v 1.18 2023/12/10 16:56:02 deraadt Exp $        */
 /*     $NetBSD: locore_subr.S,v 1.28 2006/01/23 22:52:09 uwe Exp $     */
 
 /*
@@ -497,6 +497,8 @@ NENTRY(proc_trampoline)
 NENTRY(sigcode)
        mov     r15, r4                 /* get pointer to sigcontext */
        mov.l   .L_SYS_sigreturn, r0
+       .globl  sigcodecall
+sigcodecall:
        trapa   #0x80                   /* and call sigreturn() */
        .globl  sigcoderet
 sigcoderet:
index 17ec463..786bb4a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.s,v 1.202 2023/10/24 13:20:11 claudio Exp $    */
+/*     $OpenBSD: locore.s,v 1.203 2023/12/10 16:56:02 deraadt Exp $    */
 /*     $NetBSD: locore.s,v 1.137 2001/08/13 06:10:10 jdolecek Exp $    */
 
 /*
@@ -5399,6 +5399,8 @@ sigcode:
 !      andn    %o0, 0x0f, %o0
        .globl  sigcoderet
 sigcoderet:
+       .globl  sigcodecall
+sigcodecall:
        t       ST_SYSCALL              ! sigreturn(scp)
        ! sigreturn does not return unless it fails
        mov     SYS_exit, %g1           ! exit(errno)