summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-09-20 20:52:11 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-09-20 20:52:11 +0000
commit4e9408f19825cf62714518d8932f18563b44cd7b (patch)
treea6b52feaebb23e89ad560dfbf6a01b67e80c9b11
parentbca0bac323557ad790813fb7c2d4e2539df9193d (diff)
Add PSEUDO_NOERROR similar to that used by NetBSD.
Some ports were setting errno in PSEUDO and some were not. Now errno is set for all in PSEUDO and PSEUDO_NOERROR is provided for the non-errno case (only used by _exit). Needs testing on vax and m88k. XXX - hppa and powerpc still lack a real PSEUDO_NOERROR implementation. Currently PSEUDO_NOERROR and PSEUDO are the same (so builds don't break on those platforms).
-rw-r--r--lib/libc/arch/alpha/SYS.h10
-rw-r--r--lib/libc/arch/hppa/SYS.h29
-rw-r--r--lib/libc/arch/i386/SYS.h33
-rw-r--r--lib/libc/arch/m68k/SYS.h47
-rw-r--r--lib/libc/arch/m88k/SYS.h20
-rw-r--r--lib/libc/arch/mips/SYS.h14
-rw-r--r--lib/libc/arch/mvme88k/SYS.h20
-rw-r--r--lib/libc/arch/powerpc/SYS.h9
-rw-r--r--lib/libc/arch/sparc/SYS.h27
-rw-r--r--lib/libc/arch/vax/SYS.h29
-rw-r--r--lib/libc/sys/Makefile.inc37
11 files changed, 194 insertions, 81 deletions
diff --git a/lib/libc/arch/alpha/SYS.h b/lib/libc/arch/alpha/SYS.h
index 05718176b17..98565c16963 100644
--- a/lib/libc/arch/alpha/SYS.h
+++ b/lib/libc/arch/alpha/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.6 2001/06/13 11:44:25 art Exp $ */
+/* $OpenBSD: SYS.h,v 1.7 2001/09/20 20:52:09 millert Exp $ */
/* $NetBSD: SYS.h,v 1.4 1996/10/17 03:03:53 cgd Exp $ */
/*
@@ -68,6 +68,12 @@ __END(p,name)
#define __PSEUDO(p,label,name) \
__LEAF(p,label,0); /* XXX # of args? */ \
+ CALLSYS_ERROR(name); \
+ RET; \
+__END(p,label);
+
+#define __PSEUDO_NOERROR(p,label,name) \
+__LEAF(p,label,0); /* XXX # of args? */ \
CALLSYS_NOERROR(name); \
RET; \
__END(p,label);
@@ -83,6 +89,7 @@ __END(p,label);
# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
# define RSYSCALL_NOERROR(x) __RSYSCALL_NOERROR(_thread_sys_,x)
# define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y)
+# define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(_thread_sys_,x,y)
# define SYSLEAF(x,e) __LEAF(_thread_sys_,x,e)
# define SYSEND(x) __END(_thread_sys_,x)
#else /* _THREAD_SAFE */
@@ -95,6 +102,7 @@ __END(p,label);
# define RSYSCALL(x) __RSYSCALL(,x)
# define RSYSCALL_NOERROR(x) __RSYSCALL_NOERROR(,x)
# define PSEUDO(x,y) __PSEUDO(,x,y)
+# define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(,x,y)
# define SYSLEAF(x,e) __LEAF(,x,e)
# define SYSEND(x) __END(,x)
#endif /* _THREAD_SAFE */
diff --git a/lib/libc/arch/hppa/SYS.h b/lib/libc/arch/hppa/SYS.h
index a1fa5f561b6..6ae5d4cf977 100644
--- a/lib/libc/arch/hppa/SYS.h
+++ b/lib/libc/arch/hppa/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.8 2001/08/12 12:03:01 heko Exp $ */
+/* $OpenBSD: SYS.h,v 1.9 2001/09/20 20:52:09 millert Exp $ */
/*
* Copyright (c) 1998-1999 Michael Shalayeff
@@ -70,6 +70,14 @@ __ENTRY(p,x) !\
nop !\
__EXIT(p,x)
+/* XXX - actually sets errnor */
+#define __PSEUDO_NOERROR(p,x,y) !\
+__ENTRY(p,x) !\
+ __SYSCALL(p,y) !\
+ bv r0(rp) !\
+ nop !\
+__EXIT(p,x)
+
/*
* Design note:
*
@@ -83,18 +91,19 @@ __EXIT(p,x)
* For the thread_safe versions, we prepend _thread_sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
-# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
-# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
-# define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y)
-/*# define SYSENTRY(x) __ENTRY(_thread_sys_,x)*/
+# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
+# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
+# 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)*/
#else /* _THREAD_SAFE */
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
-# define SYSCALL(x) __SYSCALL(,x)
-# define RSYSCALL(x) __RSYSCALL(,x)
-# define PSEUDO(x,y) __PSEUDO(,x,y)
-/*# define SYSENTRY(x) __ENTRY(,x)*/
+# define SYSCALL(x) __SYSCALL(,x)
+# define RSYSCALL(x) __RSYSCALL(,x)
+# define PSEUDO(x,y) __PSEUDO(,x,y)
+# define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(_thread_sys_,x,y)
+/*# define SYSENTRY(x) __ENTRY(,x)*/
#endif /* _THREAD_SAFE */
-
diff --git a/lib/libc/arch/i386/SYS.h b/lib/libc/arch/i386/SYS.h
index 02933b17645..a4d0fe9d6aa 100644
--- a/lib/libc/arch/i386/SYS.h
+++ b/lib/libc/arch/i386/SYS.h
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.8 2000/01/06 10:49:20 d Exp $
+ * $OpenBSD: SYS.h,v 1.9 2001/09/20 20:52:09 millert Exp $
*/
#include <machine/asm.h>
@@ -88,25 +88,38 @@
int $0x80
#endif /* ! __STDC__ */
+/* perform a syscall */
+#define _SYSCALL_NOERROR(x,y) \
+ SYSENTRY(x); \
+ __DO_SYSCALL(y);
+
+#define SYSCALL_NOERROR(x) \
+ _SYSCALL_NOERROR(x,x)
+
/* perform a syscall, set errno */
-#define SYSCALL(x) \
+#define _SYSCALL(x,y) \
.text; \
.align 2; \
2: \
jmp PIC_PLT(cerror); \
- SYSENTRY(x); \
- __DO_SYSCALL(x); \
+ _SYSCALL_NOERROR(x,y) \
jc 2b
-/* perform a syscall, set errno, return */
-#define RSYSCALL(x) \
- SYSCALL(x); \
- ret
+#define SYSCALL(x) \
+ _SYSCALL(x,x)
/* perform a syscall, return */
+#define PSEUDO_NOERROR(x,y) \
+ _SYSCALL_NOERROR(x,y); \
+ ret
+
+/* perform a syscall, set errno, return */
#define PSEUDO(x,y) \
- SYSENTRY(x); \
- __DO_SYSCALL(y); \
+ _SYSCALL(x,y); \
ret
+/* perform a syscall with the same name, set errno, return */
+#define RSYSCALL(x) \
+ PSEUDO(x,x);
+
.globl cerror
diff --git a/lib/libc/arch/m68k/SYS.h b/lib/libc/arch/m68k/SYS.h
index 948eded4197..18cdd31a33e 100644
--- a/lib/libc/arch/m68k/SYS.h
+++ b/lib/libc/arch/m68k/SYS.h
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.5 2001/08/12 12:03:01 heko Exp $
+ * $OpenBSD: SYS.h,v 1.6 2001/09/20 20:52:09 millert Exp $
*/
#include <sys/syscall.h>
@@ -56,44 +56,57 @@
# define __LABEL2(p,x) _C_LABEL(p/**/x)
#endif
+/* perform a syscall */
+
+#define __SYSCALL_NOERROR(p,x,y) \
+ __ENTRY(p,x); \
+ __DO_SYSCALL(y)
+
/* perform a syscall, set errno */
-#define __SYSCALL(p,x) \
+#define __SYSCALL(p,x,y) \
.even; \
err: jra cerror; \
- __ENTRY(p,x); \
- __DO_SYSCALL(x); \
+ __SYSCALL_NOERROR(p,x,y); \
jcs err
-/* perform a syscall, set errno, return */
+/* perform a syscall, return */
-#define __RSYSCALL(p,x) __SYSCALL(p,x); rts
+#define __PSEUDO_NOERROR(p,x,y) \
+ __SYSCALL_NOERROR(p,x,y); \
+ rts
-/* perform a syscall, return */
+/* perform a syscall, set errno, return */
#define __PSEUDO(p,x,y) \
- __ENTRY(p,x); \
- __DO_SYSCALL(y); \
+ __SYSCALL(p,x,y); \
rts
+/* perform a syscall, set errno, return */
+
+#define __RSYSCALL(p,x) __PSEUDO(p,x,x)
+
+
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
-# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
-# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
-# define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y)
-# define SYSENTRY(x) __ENTRY(_thread_sys_,x)
+# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
+# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
+# 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)
#else /* _THREAD_SAFE */
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
-# define SYSCALL(x) __SYSCALL(,x)
-# define RSYSCALL(x) __RSYSCALL(,x)
-# define PSEUDO(x,y) __PSEUDO(,x,y)
-# define SYSENTRY(x) __ENTRY(,x)
+# define SYSCALL(x) __SYSCALL(,x)
+# define RSYSCALL(x) __RSYSCALL(,x)
+# define PSEUDO(x,y) __PSEUDO(,x,y)
+# define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(,x,y)
+# define SYSENTRY(x) __ENTRY(,x)
#endif /* _THREAD_SAFE */
#define ASMSTR .asciz
diff --git a/lib/libc/arch/m88k/SYS.h b/lib/libc/arch/m88k/SYS.h
index 1d98598dae4..7dbbe09d978 100644
--- a/lib/libc/arch/m88k/SYS.h
+++ b/lib/libc/arch/m88k/SYS.h
@@ -1,4 +1,4 @@
-/* * $OpenBSD: SYS.h,v 1.2 2000/03/01 17:31:20 todd Exp $*/
+/* * $OpenBSD: SYS.h,v 1.3 2001/09/20 20:52:09 millert Exp $*/
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -43,33 +43,39 @@
#ifdef __STDC__
-#define SYSCALL(x) align 8; \
+#define _SYSCALL(x,y) align 8; \
ENTRY(x); \
ld r10,r31,32; \
ld r11,r31,36; \
ld r12,r31,40; \
- or r13,r0, SYS_ ## x; \
+ or r13,r0, SYS_ ## y; \
tb0 0, r0, 128; \
br cerror
+#define SYSCALL(x) _SYSCALL(x,x)
#define RSYSCALL(x) SYSCALL(x) ;\
jmp r1
-#define PSEUDO(x,y) ENTRY(x); ;\
+#define PSEUDO(x,y) _SYSCALL(x,y); \
+ jmp r1
+#define PSEUDO_NOERROR(x,y) ENTRY(x); ;\
or r13,r0, SYS_ ## y; \
tb0 0,r0,128; or r0,r0,r0;jmp r1
#else /* !__STDC__ */
-#define SYSCALL(x) align 8; \
+#define _SYSCALL(x,y) align 8; \
ENTRY(x); \
ld r10,r31,32; \
ld r11,r31,36; \
ld r12,r31,40; \
- or r13,r0, SYS_/**/x; \
+ or r13,r0, SYS_/**/y; \
tb0 0, r0, 128; \
br cerror
+#define SYSCALL(x) _SYSCALL(x,x)
#define RSYSCALL(x) SYSCALL(x); \
jmp r1
-#define PSEUDO(x,y) ENTRY(x); \
+#define PSEUDO(x,y) _SYSCALL(x,y); \
+ jmp r1
+#define PSEUDO_NOERROR(x,y) ENTRY(x); \
or r13,r0, SYS_/**/y; \
tb0 0,r0,128; or r0,r0,r0; jmp r1
#endif /* !__STDC__ */
diff --git a/lib/libc/arch/mips/SYS.h b/lib/libc/arch/mips/SYS.h
index f8a57c29cb8..89ff3f8e1b0 100644
--- a/lib/libc/arch/mips/SYS.h
+++ b/lib/libc/arch/mips/SYS.h
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.6 2001/08/12 12:03:01 heko Exp $
+ * $OpenBSD: SYS.h,v 1.7 2001/09/20 20:52:09 millert Exp $
*/
#include <sys/syscall.h>
@@ -57,13 +57,19 @@
# define __CLABEL2(p,x) _C_LABEL(p/**/x)
#endif
+#define __PSEUDO_NOERROR(p,x,y) \
+ __LEAF2(p,x); \
+ __DO_SYSCALL(y); \
+ j ra; \
+ __END2(p,x)
+
#define __PSEUDO(p,x,y) \
__LEAF2(p,x); \
__DO_SYSCALL(y); \
- bne a3,zero,err; \
- j ra; \
+ bne a3,zero,err; \
+ j ra; \
err: la t9,_C_LABEL(cerror); \
- jr t9; \
+ jr t9; \
__END2(p,x)
#define __RSYSCALL(p,x) __PSEUDO(p,x,x)
diff --git a/lib/libc/arch/mvme88k/SYS.h b/lib/libc/arch/mvme88k/SYS.h
index 6c69a17d911..29f81db8f31 100644
--- a/lib/libc/arch/mvme88k/SYS.h
+++ b/lib/libc/arch/mvme88k/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.2 2000/03/01 17:31:22 todd Exp $ */
+/* $OpenBSD: SYS.h,v 1.3 2001/09/20 20:52:10 millert Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -43,33 +43,39 @@
#ifdef __STDC__
-#define SYSCALL(x) align 8; \
+#define _SYSCALL(x,y) align 8; \
ENTRY(x); \
ld r10,r31,32; \
ld r11,r31,36; \
ld r12,r31,40; \
- or r13,r0, SYS_ ## x; \
+ or r13,r0, SYS_ ## y; \
tb0 0, r0, 128; \
br cerror
+#define SYSCALL(x) _SYSCALL(x,x)
#define RSYSCALL(x) SYSCALL(x) ;\
jmp r1
-#define PSEUDO(x,y) ENTRY(x); ;\
+#define PSEUDO(x,y) _SYSCALL(x,y); \
+ jmp r1
+#define PSEUDO_NOERROR(x,y) ENTRY(x); ;\
or r13,r0, SYS_ ## y; \
tb0 0,r0,128; or r0,r0,r0;jmp r1
#else /* !__STDC__ */
-#define SYSCALL(x) align 8; \
+#define _SYSCALL(x,y) align 8; \
ENTRY(x); \
ld r10,r31,32; \
ld r11,r31,36; \
ld r12,r31,40; \
- or r13,r0, SYS_/**/x; \
+ or r13,r0, SYS_/**/y; \
tb0 0, r0, 128; \
br cerror
+#define SYSCALL(x) _SYSCALL(x,x)
#define RSYSCALL(x) SYSCALL(x); \
jmp r1
-#define PSEUDO(x,y) ENTRY(x); \
+#define PSEUDO(x,y) _SYSCALL(x,y); \
+ jmp r1
+#define PSEUDO_NOERROR(x,y) ENTRY(x); \
or r13,r0, SYS_/**/y; \
tb0 0,r0,128; or r0,r0,r0; jmp r1
#endif /* !__STDC__ */
diff --git a/lib/libc/arch/powerpc/SYS.h b/lib/libc/arch/powerpc/SYS.h
index 80ee82483ee..82df53efe55 100644
--- a/lib/libc/arch/powerpc/SYS.h
+++ b/lib/libc/arch/powerpc/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.8 2000/10/06 23:29:15 d Exp $ */
+/* $OpenBSD: SYS.h,v 1.9 2001/09/20 20:52:10 millert Exp $ */
/*-
* Copyright (c) 1994
* Andrew Cagney. All rights reserved.
@@ -70,10 +70,15 @@
PSEUDO_PREFIX(_thread_sys_,x,x)
#define PREFIX2(x,y) ALIAS(_thread_sys_,x) \
PSEUDO_PREFIX(_thread_sys_,x,y)
+/* XXX - actually sets errno */
+#define PSEUDO_NOERROR(x,y) ALIAS(_thread_sys_,x) \
+ PSEUDO_PREFIX(_thread_sys_,x,y) ; \
+ sc ; \
+ PSEUDO_SUFFIX
+
#define PSEUDO(x,y) ALIAS(_thread_sys_,x) \
PSEUDO_PREFIX(_thread_sys_,x,y) ; \
sc ; \
PSEUDO_SUFFIX
#define RSYSCALL(x) PSEUDO(x,x)
-
diff --git a/lib/libc/arch/sparc/SYS.h b/lib/libc/arch/sparc/SYS.h
index 3f6fe17100f..cfaefa3805c 100644
--- a/lib/libc/arch/sparc/SYS.h
+++ b/lib/libc/arch/sparc/SYS.h
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: SYS.h,v 1.8 2001/08/12 12:03:01 heko Exp $
+ * $OpenBSD: SYS.h,v 1.9 2001/09/20 20:52:10 millert Exp $
*/
#include <machine/asm.h>
@@ -86,23 +86,32 @@
__ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
t ST_SYSCALL; ERROR()
+/*
+ * 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
+
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
-# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
-# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
-# define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y)
-# define SYSENTRY(x) __ENTRY(_thread_sys_,x)
+# define SYSCALL(x) __SYSCALL(_thread_sys_,x)
+# define RSYSCALL(x) __RSYSCALL(_thread_sys_,x)
+# 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)
#else /* _THREAD_SAFE */
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
-# define SYSCALL(x) __SYSCALL(,x)
-# define RSYSCALL(x) __RSYSCALL(,x)
-# define PSEUDO(x,y) __PSEUDO(,x,y)
-# define SYSENTRY(x) __ENTRY(,x)
+# define SYSCALL(x) __SYSCALL(,x)
+# define RSYSCALL(x) __RSYSCALL(,x)
+# define PSEUDO(x,y) __PSEUDO(,x,y)
+# define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(,x,y)
+# define SYSENTRY(x) __ENTRY(,x)
#endif /* _THREAD_SAFE */
.globl cerror
diff --git a/lib/libc/arch/vax/SYS.h b/lib/libc/arch/vax/SYS.h
index 27fbc42d8a4..ace50176650 100644
--- a/lib/libc/arch/vax/SYS.h
+++ b/lib/libc/arch/vax/SYS.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: SYS.h,v 1.5 2001/08/23 21:58:37 miod Exp $ */
+/* $OpenBSD: SYS.h,v 1.6 2001/09/20 20:52:10 millert Exp $ */
/* $NetBSD: SYS.h,v 1.4 1997/05/02 18:15:32 kleink Exp $ */
/*
@@ -60,26 +60,33 @@
jcs err; \
ret
+#define __PSEUDO_NOERROR(p,x,y) \
+ __ENTRY(p,x); \
+ __DO_SYSCALL(y); \
+ ret
+
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
-#define SYSCALL(x) __SYSCALL(_thread_sys_,x,x)
-#define RSYSCALL(x) __PSEUDO(_thread_sys_,x,x)
-#define PSEUDO(x,y) __PSEUDO(_thread_sys_,x,y)
-#define SYSENTRY(x) __ENTRY(_thread_sys_,x)
-#define SYSNAME(x) _CAT(__thread_sys_,x)
+#define SYSCALL(x) __SYSCALL(_thread_sys_,x,x)
+#define RSYSCALL(x) __PSEUDO(_thread_sys_,x,x)
+#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 SYSNAME(x) _CAT(__thread_sys_,x)
#else _THREAD_SAFE
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
-#define SYSCALL(x) __SYSCALL(,x,x)
-#define RSYSCALL(x) __PSEUDO(,x,x)
-#define PSEUDO(x,y) __PSEUDO(,x,y)
-#define SYSENTRY(x) __ENTRY(,x)
-#define SYSNAME(x) _CAT(_,x)
+#define SYSCALL(x) __SYSCALL(,x,x)
+#define RSYSCALL(x) __PSEUDO(,x,x)
+#define PSEUDO(x,y) __PSEUDO(,x,y)
+#define PSEUDO_NOERROR(x,y) __PSEUDO_NOERROR(,x,y)
+#define SYSENTRY(x) __ENTRY(,x)
+#define SYSNAME(x) _CAT(_,x)
#endif _THREAD_SAFE
.globl cerror
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
index 03a9ce6454b..8424e1ae6ee 100644
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.45 2001/07/09 00:20:52 fgsch Exp $
+# $OpenBSD: Makefile.inc,v 1.46 2001/09/20 20:52:09 millert Exp $
# $NetBSD: Makefile.inc,v 1.35 1995/10/16 23:49:07 jtc Exp $
# @(#)Makefile.inc 8.1 (Berkeley) 6/17/93
@@ -66,12 +66,17 @@ GASM= ${ASM:.o=.go}
PASM= ${ASM:.o=.po}
SASM= ${ASM:.o=.so}
-PSEUDO= _exit.o _getlogin.o _setlogin.o _ptrace.o
+PSEUDO= _getlogin.o _setlogin.o _ptrace.o
GPSEUDO=${PSEUDO:.o=.go}
PPSEUDO=${PSEUDO:.o=.po}
SPSEUDO=${PSEUDO:.o=.so}
-OBJS+= ${ASM} ${PSEUDO}
+PSEUDO_NOERR= _exit.o
+GPSEUDO_NOERR=${PSEUDO_NOERR:.o=.go}
+PPSEUDO_NOERR=${PSEUDO_NOERR:.o=.po}
+SPSEUDO_NOERR=${PSEUDO_NOERR:.o=.so}
+
+OBJS+= ${ASM} ${PSEUDO} ${PSEUDO_NOERR}
${GASM}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
@echo creating ${.TARGET}
@@ -139,6 +144,32 @@ ${PSEUDO}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
@rm -f ${.TARGET}.o
+${PPSEUDO_NOERR}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
+ @echo creating ${.TARGET}
+ @printf '#include "SYS.h"\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/_//})\n' | \
+ ${CPP} -DPROF ${CFLAGS:M-[ID]*} ${AINC} | ${AS} -o ${.TARGET}.o
+ @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
+ @rm -f ${.TARGET}.o
+
+.if (${MACHINE_ARCH} != "mips")
+${SPSEUDO_NOERR}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
+ @echo creating ${.TARGET}
+ @printf '#include "SYS.h"\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/_//})\n' | \
+ ${CPP} -DPIC ${CFLAGS:M-[ID]*} ${AINC} | ${AS} -k -o ${.TARGET}
+.else
+${SPSEUDO_NOERR}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
+ @echo creating ${.TARGET}
+ @printf '#include "SYS.h"\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/_//})\n' | \
+ ${CPP} -DPIC ${CFLAGS:M-[ID]*} ${AINC} | ${AS} -o ${.TARGET}
+.endif
+
+${PSEUDO_NOERR}: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/SYS.h /usr/include/sys/syscall.h
+ @echo creating ${.TARGET}
+ @printf '#include "SYS.h"\nPSEUDO_NOERROR(${.PREFIX},${.PREFIX:S/_//})\n' | \
+ ${CPP} ${CFLAGS:M-[ID]*} ${AINC} | ${AS} -o ${.TARGET}.o
+ @${LD} -X -r ${.TARGET}.o -o ${.TARGET}
+ @rm -f ${.TARGET}.o
+
# Lint stubs for all automatically-generated assembly stubs (GENERATED)
#LSRCS+= LintSysNormal.c LintSysNoerr.c LintSysPseudoNoerr.c
#DPSRCS+= LintSysNormal.c LintSysNoerr.c LintSysPseudoNoerr.c