sync with OpenBSD -current
This commit is contained in:
parent
4c73aa256c
commit
086d8cf2c2
118 changed files with 975 additions and 393 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: SYS.h,v 1.17 2022/01/01 23:47:14 guenther Exp $ */
|
||||
/* $OpenBSD: SYS.h,v 1.18 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
|
@ -49,8 +49,8 @@
|
|||
#define __ENTRY(p,x) ENTRY(_CAT(p,x)) ; .weak x; x = _CAT(p,x)
|
||||
#define __ENTRY_HIDDEN(p,x) ENTRY(_CAT(p,x))
|
||||
|
||||
#define __END_HIDDEN(p,x) END(_CAT(p,x)); \
|
||||
_HIDDEN_FALIAS(x, _CAT(p,x)); \
|
||||
#define __END_HIDDEN(p,x) END(_CAT(p,x)); \
|
||||
_HIDDEN_FALIAS(x, _CAT(p,x)); \
|
||||
END(_HIDDEN(x))
|
||||
#define __END(p,x) __END_HIDDEN(p,x); END(x)
|
||||
|
||||
|
@ -67,15 +67,30 @@
|
|||
* Note that it adds a `nop' over what we could do, if we only knew what
|
||||
* came at label 1....
|
||||
*/
|
||||
#define _SYSCALL(p,x,y) \
|
||||
__ENTRY(p,x); mov _CAT(SYS_,y),%g1; t ST_SYSCALL; bcc 1f; nop; ERROR(); 1:
|
||||
#define _SYSCALL_HIDDEN(p,x,y) \
|
||||
__ENTRY_HIDDEN(p,x); mov _CAT(SYS_,y),%g1; t ST_SYSCALL; bcc 1f; nop; ERROR(); 1:
|
||||
#define _SYSCALL(p,x,y) \
|
||||
__ENTRY(p,x); \
|
||||
mov _CAT(SYS_,y),%g1; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||
bcc 1f; \
|
||||
nop; \
|
||||
ERROR(); \
|
||||
1:
|
||||
|
||||
#define __SYSCALL(p,x) \
|
||||
#define _SYSCALL_HIDDEN(p,x,y) \
|
||||
__ENTRY_HIDDEN(p,x); \
|
||||
mov _CAT(SYS_,y),%g1; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||
bcc 1f; \
|
||||
nop; \
|
||||
ERROR(); \
|
||||
1:
|
||||
|
||||
#define __SYSCALL(p,x) \
|
||||
_SYSCALL(p,x,x)
|
||||
|
||||
#define __SYSCALL_HIDDEN(p,x) \
|
||||
#define __SYSCALL_HIDDEN(p,x) \
|
||||
_SYSCALL_HIDDEN(p,x,x)
|
||||
|
||||
/*
|
||||
|
@ -83,19 +98,34 @@
|
|||
* we use the SYSCALL_G2RFLAG to put the `success' return address in %g2
|
||||
* and avoid a branch.
|
||||
*/
|
||||
#define __RSYSCALL(p,x) \
|
||||
__ENTRY(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; t ST_SYSCALL; ERROR(); __END(p,x)
|
||||
#define __RSYSCALL_HIDDEN(p,x) \
|
||||
__ENTRY_HIDDEN(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; t ST_SYSCALL; ERROR(); __END_HIDDEN(p,x)
|
||||
#define __RSYSCALL(p,x) \
|
||||
__ENTRY(p,x); \
|
||||
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||
ERROR(); \
|
||||
__END(p,x)
|
||||
#define __RSYSCALL_HIDDEN(p,x) \
|
||||
__ENTRY_HIDDEN(p,x); \
|
||||
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||
ERROR(); \
|
||||
__END_HIDDEN(p,x)
|
||||
|
||||
/*
|
||||
* PSEUDO(x,y) is like RSYSCALL(y) except that the name is x.
|
||||
*/
|
||||
#define __PSEUDO(p,x,y) \
|
||||
__ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
||||
t ST_SYSCALL; ERROR(); __END(p,x)
|
||||
#define __PSEUDO(p,x,y) \
|
||||
__ENTRY(p,x); \
|
||||
mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||
ERROR(); \
|
||||
__END(p,x)
|
||||
|
||||
/*
|
||||
* SYSCALL_NOERROR is like SYSCALL, except it's used for syscalls
|
||||
|
@ -103,8 +133,11 @@
|
|||
*
|
||||
* XXX - This should be optimized.
|
||||
*/
|
||||
#define __SYSCALL_NOERROR(p,x) \
|
||||
__ENTRY(p,x); mov _CAT(SYS_,x),%g1; t ST_SYSCALL
|
||||
#define __SYSCALL_NOERROR(p,x) \
|
||||
__ENTRY(p,x); \
|
||||
mov _CAT(SYS_,x),%g1; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,x), 97b)
|
||||
|
||||
/*
|
||||
* RSYSCALL_NOERROR is like RSYSCALL, except it's used for syscalls
|
||||
|
@ -112,16 +145,24 @@
|
|||
*
|
||||
* XXX - This should be optimized.
|
||||
*/
|
||||
#define __RSYSCALL_NOERROR(p,x) \
|
||||
__ENTRY(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
||||
t ST_SYSCALL; __END(p,x)
|
||||
#define __RSYSCALL_NOERROR(p,x) \
|
||||
__ENTRY(p,x); \
|
||||
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||
__END(p,x)
|
||||
|
||||
/*
|
||||
* PSEUDO_NOERROR(x,y) is like RSYSCALL_NOERROR(y) except that the name is x.
|
||||
*/
|
||||
#define __PSEUDO_NOERROR(p,x,y) \
|
||||
__ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
||||
t ST_SYSCALL; __END(p,x)
|
||||
#define __PSEUDO_NOERROR(p,x,y) \
|
||||
__ENTRY(p,x); \
|
||||
mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; \
|
||||
add %o7,8,%g2; \
|
||||
97: t ST_SYSCALL; \
|
||||
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||
__END(p,x)
|
||||
|
||||
/*
|
||||
* SYSENTRY is for functions that pretend to be syscalls.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: setjmp.S,v 1.6 2016/04/28 12:53:47 kettenis Exp $ */
|
||||
/* $OpenBSD: setjmp.S,v 1.7 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/* $NetBSD: setjmp.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -53,7 +53,8 @@ ENTRY(setjmp)
|
|||
mov 1, %o0 /* SIG_BLOCK */
|
||||
mov SYS_sigprocmask, %g1
|
||||
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||
stx %o0, [%o3 + 0x10]
|
||||
|
||||
stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
||||
|
@ -68,7 +69,8 @@ ENTRY(longjmp)
|
|||
mov 3, %o0 /* SIG_SETMASK */
|
||||
ldx [%i0 + 0x10], %o1
|
||||
mov SYS_sigprocmask, %g1
|
||||
t ST_SYSCALL
|
||||
98: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||
|
||||
ldx [%i0 + 0x00], %fp
|
||||
ldx [%i0 + 0x08], %i7
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sigsetjmp.S,v 1.4 2016/05/08 18:29:34 guenther Exp $ */
|
||||
/* $OpenBSD: sigsetjmp.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/* $NetBSD: sigsetjmp.S,v 1.5 2000/08/28 00:45:59 eeh Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -43,7 +43,8 @@ ENTRY(sigsetjmp)
|
|||
mov 1, %o0 /* SIG_BLOCK */
|
||||
mov SYS_sigprocmask, %g1
|
||||
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||
stx %o0, [%o3 + 0x10]
|
||||
|
||||
1: stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
||||
|
@ -62,7 +63,8 @@ ENTRY(siglongjmp)
|
|||
mov 3, %o0 /* SIG_SETMASK */
|
||||
ldx [%i0 + 0x10], %o1
|
||||
mov SYS_sigprocmask, %g1
|
||||
t ST_SYSCALL
|
||||
98: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||
|
||||
1: ldx [%i0 + 0x00], %fp
|
||||
ldx [%i0 + 0x08], %i7
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: brk.S,v 1.11 2023/01/13 17:52:08 miod Exp $ */
|
||||
/* $OpenBSD: brk.S,v 1.12 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/* $NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -59,7 +59,8 @@ ENTRY_NB(brk)
|
|||
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
||||
mov %o0, %o2 /* save argument to syscall */
|
||||
mov SYS_break, %g1
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_break, 99b)
|
||||
set __curbrk, %o3
|
||||
bcc,a,pt %icc, 1f
|
||||
ldx [%o5 + %o3], %o4
|
||||
|
@ -74,7 +75,8 @@ ENTRY_NB(brk)
|
|||
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
||||
mov %o0, %o2 /* save argument to syscall */
|
||||
mov SYS_break, %g1
|
||||
t ST_SYSCALL
|
||||
98: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_break, 98b)
|
||||
bcc,a,pt %icc,1f
|
||||
sethi %hi(__curbrk), %g1
|
||||
ERROR()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sbrk.S,v 1.9 2023/01/13 17:52:08 miod Exp $ */
|
||||
/* $OpenBSD: sbrk.S,v 1.10 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/* $NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -59,7 +59,8 @@ ENTRY_NB(sbrk)
|
|||
add %o3, %o0, %o4 /* %o4 = new break */
|
||||
mov %o4, %o0 /* copy for syscall */
|
||||
mov SYS_break, %g1
|
||||
t ST_SYSCALL /* break(new_break) */
|
||||
99: t ST_SYSCALL /* break(new_break) */
|
||||
PINSYSCALL(SYS_break, 99b)
|
||||
bcc,a 1f /* if success, */
|
||||
mov %o3, %o0 /* set return value */
|
||||
ERROR()
|
||||
|
@ -72,7 +73,8 @@ ENTRY_NB(sbrk)
|
|||
add %o3, %o0, %o4 /* %o4 = new break */
|
||||
mov %o4, %o0 /* copy for syscall */
|
||||
mov SYS_break, %g1
|
||||
t ST_SYSCALL /* break(new_break) */
|
||||
98: t ST_SYSCALL /* break(new_break) */
|
||||
PINSYSCALL(SYS_break, 98b)
|
||||
bcc,a 1f /* if success, */
|
||||
mov %o3, %o0 /* set return value */
|
||||
ERROR()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sigpending.S,v 1.3 2015/09/05 06:22:47 guenther Exp $ */
|
||||
/* $OpenBSD: sigpending.S,v 1.4 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
|
@ -38,7 +38,8 @@
|
|||
SYSENTRY(sigpending)
|
||||
mov %o0, %o2 /* save pointer */
|
||||
mov SYS_sigpending, %g1
|
||||
t ST_SYSCALL /* sigpending() */
|
||||
99: t ST_SYSCALL /* sigpending() */
|
||||
PINSYSCALL(SYS_sigpending, 99b)
|
||||
bcc,a 1f /* if success, */
|
||||
st %o0, [%o2] /* store return value */
|
||||
ERROR()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sigprocmask.S,v 1.4 2015/10/23 04:39:25 guenther Exp $ */
|
||||
/* $OpenBSD: sigprocmask.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
|
@ -46,7 +46,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
|||
mov 1, %o0 /* ... using sigprocmask(SIG_BLOCK) */
|
||||
1:
|
||||
mov SYS_sigprocmask, %g1
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||
bcc 2f /* if success, */
|
||||
tst %o2 /* check to see if oset requested */
|
||||
ERROR()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sigsuspend.S,v 1.4 2016/05/07 19:05:22 guenther Exp $ */
|
||||
/* $OpenBSD: sigsuspend.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
|
@ -39,6 +39,7 @@
|
|||
SYSENTRY_HIDDEN(sigsuspend)
|
||||
ld [%o0], %o0 /* indirect to mask argument */
|
||||
mov SYS_sigsuspend, %g1
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||
ERROR() /* always terminates with EINTR */
|
||||
SYSCALL_END_HIDDEN(sigsuspend)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: tfork_thread.S,v 1.4 2020/10/18 14:28:18 deraadt Exp $ */
|
||||
/* $OpenBSD: tfork_thread.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2005, Miodrag Vallat
|
||||
|
@ -36,7 +36,8 @@ ENTRY(__tfork_thread)
|
|||
* different return paths.
|
||||
*/
|
||||
mov SYS___tfork, %g1
|
||||
t ST_SYSCALL
|
||||
99: t ST_SYSCALL
|
||||
PINSYSCALL(SYS___tfork, 99b)
|
||||
bcs 9f
|
||||
nop
|
||||
|
||||
|
@ -59,7 +60,8 @@ ENTRY(__tfork_thread)
|
|||
|
||||
mov SYS___threxit, %g1
|
||||
clr %o0
|
||||
t ST_SYSCALL /* will not return */
|
||||
98: t ST_SYSCALL /* will not return */
|
||||
PINSYSCALL(SYS___threxit, 98b)
|
||||
unimp
|
||||
|
||||
9:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue