summaryrefslogtreecommitdiffstats
path: root/lib/libc/arch/sparc
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2015-09-10 13:29:09 +0000
committerguenther <guenther@openbsd.org>2015-09-10 13:29:09 +0000
commit3f373d4115327011c7af514e278a1fc5ced933e6 (patch)
tree947cf988ffff0c8d6ad01c4c60f1930a94839125 /lib/libc/arch/sparc
parentReplace TLS_{READ,WRITE}_AGAIN with TLS_WANT_POLL{IN,OUT} and correctly (diff)
downloadwireguard-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.h14
-rw-r--r--lib/libc/arch/sparc/sys/brk.S13
-rw-r--r--lib/libc/arch/sparc/sys/sbrk.S10
-rw-r--r--lib/libc/arch/sparc/sys/sigpending.S3
-rw-r--r--lib/libc/arch/sparc/sys/sigprocmask.S3
-rw-r--r--lib/libc/arch/sparc/sys/sigreturn.S3
-rw-r--r--lib/libc/arch/sparc/sys/sigsuspend.S3
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)