diff options
author | 2015-09-10 13:29:09 +0000 | |
---|---|---|
committer | 2015-09-10 13:29:09 +0000 | |
commit | 3f373d4115327011c7af514e278a1fc5ced933e6 (patch) | |
tree | 947cf988ffff0c8d6ad01c4c60f1930a94839125 /lib/libc/arch/sparc | |
parent | Replace TLS_{READ,WRITE}_AGAIN with TLS_WANT_POLL{IN,OUT} and correctly (diff) | |
download | wireguard-openbsd-3f373d4115327011c7af514e278a1fc5ced933e6.tar.xz wireguard-openbsd-3f373d4115327011c7af514e278a1fc5ced933e6.zip |
Adds hidden _libc_FOO aliases for the system call stubs.
Stop generating _brk and _sbrk symbols: they've already been hidden.
Set the ELF symbol size on the syscall stubs.
Give the __{min,cur}brk symbols a size and type, and hide more jump labels.
alpha, arm, m88k, sh, sparc, and vax assistance miod@
hppa assistance kettenis@
ok deraadt@ miod@
Diffstat (limited to 'lib/libc/arch/sparc')
-rw-r--r-- | lib/libc/arch/sparc/SYS.h | 14 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/brk.S | 13 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/sbrk.S | 10 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/sigpending.S | 3 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/sigprocmask.S | 3 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/sigreturn.S | 3 | ||||
-rw-r--r-- | lib/libc/arch/sparc/sys/sigsuspend.S | 3 |
7 files changed, 34 insertions, 15 deletions
diff --git a/lib/libc/arch/sparc/SYS.h b/lib/libc/arch/sparc/SYS.h index be262c8abfd..68227774a9f 100644 --- a/lib/libc/arch/sparc/SYS.h +++ b/lib/libc/arch/sparc/SYS.h @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $OpenBSD: SYS.h,v 1.18 2015/08/31 02:53:57 guenther Exp $ + * $OpenBSD: SYS.h,v 1.19 2015/09/10 13:29:09 guenther Exp $ */ #include "DEFS.h" @@ -42,6 +42,11 @@ #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)); \ + END(_HIDDEN(x)) +#define __END(p,x) __END_HIDDEN(p,x); END(x) + /* * ERROR branches to cerror. */ @@ -82,21 +87,21 @@ */ #define __RSYSCALL(p,x) \ __ENTRY(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \ - t ST_SYSCALL; ERROR() + t ST_SYSCALL; ERROR(); __END(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() + t ST_SYSCALL; ERROR(); __END(p,x) /* * PSEUDO_NOERROR(x,y) is like PSEUDO(x,y) except that errno is not set. */ #define __PSEUDO_NOERROR(p,x,y) \ __ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \ - t ST_SYSCALL + t ST_SYSCALL; __END(p,x) # define SYSCALL(x) __SYSCALL(_thread_sys_,x) # define RSYSCALL(x) __RSYSCALL(_thread_sys_,x) @@ -104,5 +109,6 @@ # define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y) # define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(_thread_sys_,x,y) # define SYSENTRY(x) __ENTRY(_thread_sys_,x) +# define SYSCALL_END(x) __END(_thread_sys_,x) .globl _C_LABEL(__cerror) diff --git a/lib/libc/arch/sparc/sys/brk.S b/lib/libc/arch/sparc/sys/brk.S index 9dbefa99952..f3aa5c9a8e5 100644 --- a/lib/libc/arch/sparc/sys/brk.S +++ b/lib/libc/arch/sparc/sys/brk.S @@ -1,4 +1,4 @@ -/* $OpenBSD: brk.S,v 1.9 2015/08/26 01:54:09 guenther Exp $ */ +/* $OpenBSD: brk.S,v 1.10 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -39,12 +39,15 @@ .data __minbrk: .long _end ! lower brk limit; also for gmon code + END(__minbrk) + .type __minbrk,@object + .text -WEAK_ALIAS(brk, _brk) + .weak brk #ifdef __PIC__ -ENTRY(_brk) +ENTRY(brk) PIC_PROLOGUE(%o5,%o4) #if __PIC__ == 1 ld [%o5 + __minbrk], %o4 @@ -73,8 +76,9 @@ ENTRY(_brk) 1: retl ! success, return 0 & record new break st %o2, [%o4] +END(brk) #else -ENTRY(_brk) +ENTRY(brk) sethi %hi(__minbrk), %o1 ! %o1 = minbrk ld [%o1 + %lo(__minbrk)], %o1 cmp %o1, %o0 ! if (minbrk > %o0) @@ -90,4 +94,5 @@ ENTRY(_brk) 1: retl ! success, return 0 & record new break st %o2, [%g1 + %lo(__curbrk)] +END(brk) #endif diff --git a/lib/libc/arch/sparc/sys/sbrk.S b/lib/libc/arch/sparc/sys/sbrk.S index 61e3ce3ac2e..b0d3497976c 100644 --- a/lib/libc/arch/sparc/sys/sbrk.S +++ b/lib/libc/arch/sparc/sys/sbrk.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sbrk.S,v 1.8 2015/08/26 01:54:09 guenther Exp $ */ +/* $OpenBSD: sbrk.S,v 1.9 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -40,11 +40,14 @@ .data __curbrk: .long _end + END(__curbrk) + .type __curbrk,@object + .text -WEAK_ALIAS(sbrk, _sbrk) + .weak sbrk -ENTRY(_sbrk) +ENTRY(sbrk) #ifdef __PIC__ PIC_PROLOGUE(%o5,%o4) #if __PIC__ == 1 @@ -79,3 +82,4 @@ ENTRY(_sbrk) retl ! and update curbrk st %o4, [%o2 + %lo(__curbrk)] #endif +END(sbrk) diff --git a/lib/libc/arch/sparc/sys/sigpending.S b/lib/libc/arch/sparc/sys/sigpending.S index f5839366b06..cfc6ab51a75 100644 --- a/lib/libc/arch/sparc/sys/sigpending.S +++ b/lib/libc/arch/sparc/sys/sigpending.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sigpending.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */ +/* $OpenBSD: sigpending.S,v 1.6 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -44,3 +44,4 @@ SYSENTRY(sigpending) 1: retl ! and return 0 clr %o0 +SYSCALL_END(sigpending) diff --git a/lib/libc/arch/sparc/sys/sigprocmask.S b/lib/libc/arch/sparc/sys/sigprocmask.S index 59a93d2675c..5e0e9233b52 100644 --- a/lib/libc/arch/sparc/sys/sigprocmask.S +++ b/lib/libc/arch/sparc/sys/sigprocmask.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sigprocmask.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */ +/* $OpenBSD: sigprocmask.S,v 1.6 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -55,3 +55,4 @@ SYSENTRY(sigprocmask) 3: retl ! in any case, return 0 clr %o0 +SYSCALL_END(sigprocmask) diff --git a/lib/libc/arch/sparc/sys/sigreturn.S b/lib/libc/arch/sparc/sys/sigreturn.S index 6dcfb2d45b4..ed14c93ddad 100644 --- a/lib/libc/arch/sparc/sys/sigreturn.S +++ b/lib/libc/arch/sparc/sys/sigreturn.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sigreturn.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */ +/* $OpenBSD: sigreturn.S,v 1.6 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -38,3 +38,4 @@ SYSENTRY(sigreturn) mov SYS_sigreturn, %g1 t ST_SYSCALL ERROR() +SYSCALL_END(sigreturn) diff --git a/lib/libc/arch/sparc/sys/sigsuspend.S b/lib/libc/arch/sparc/sys/sigsuspend.S index dae2cb23716..ee728bd4f9f 100644 --- a/lib/libc/arch/sparc/sys/sigsuspend.S +++ b/lib/libc/arch/sparc/sys/sigsuspend.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sigsuspend.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */ +/* $OpenBSD: sigsuspend.S,v 1.6 2015/09/10 13:29:09 guenther Exp $ */ /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -39,3 +39,4 @@ SYSENTRY(sigsuspend) mov SYS_sigsuspend, %g1 t ST_SYSCALL ERROR() ! always terminates with EINTR +SYSCALL_END(sigsuspend) |