From e415d488727a332a2c69df018aa35e2cecf4148a Mon Sep 17 00:00:00 2001 From: Lionel Sambuc Date: Mon, 17 Sep 2012 11:09:12 +0200 Subject: [PATCH] Libc update to simplify merge. Bumping libc files for unsupported architectures, to simplify merging. A bunch of small fixes: * in libutil update * the macro in endian.h * some undefined types due to clear separation from host. * Fix a warning for cdbr.c Some modification which were required for the new build system: * inclusion path for const.h in sconst, still hacky * Removed default malloc.c which conflicts on some occasions. --- etc/{ => mtree}/mtree.sh | 0 include/sys/endian.h | 8 +- kernel/arch/i386/sconst.h | 5 + lib/libc/arch/alpha/gen/__setjmp14.S | 4 +- lib/libc/arch/alpha/gen/_lwp.c | 7 +- lib/libc/arch/alpha/gen/flt_rounds.c | 36 +- lib/libc/arch/alpha/gen/fpgetround.c | 17 +- lib/libc/arch/alpha/gen/fpsetround.c | 30 +- lib/libc/arch/alpha/gen/makecontext.c | 8 +- lib/libc/arch/alpha/gen/resumecontext.c | 6 +- lib/libc/arch/hppa/gen/__longjmp14.c | 3 +- lib/libc/arch/hppa/gen/_lwp.c | 5 +- lib/libc/arch/hppa/gen/flt_rounds.c | 6 +- lib/libc/arch/hppa/gen/fpgetmask.c | 6 +- lib/libc/arch/hppa/gen/fpgetround.c | 6 +- lib/libc/arch/hppa/gen/fpgetsticky.c | 6 +- lib/libc/arch/hppa/gen/fpsetmask.c | 6 +- lib/libc/arch/hppa/gen/fpsetround.c | 6 +- lib/libc/arch/hppa/gen/fpsetsticky.c | 6 +- lib/libc/arch/hppa/gen/makecontext.c | 9 +- lib/libc/arch/hppa/gen/resumecontext.c | 6 +- lib/libc/arch/hppa/gen/swapcontext.S | 13 +- lib/libc/arch/hppa/sys/brk.S | 8 +- lib/libc/arch/hppa/sys/sbrk.S | 8 +- lib/libc/arch/m68k/Makefile.inc | 4 +- lib/libc/arch/m68k/gen/Makefile.inc | 3 +- lib/libc/arch/m68k/gen/_lwp.c | 12 +- lib/libc/arch/m68k/gen/fpfake.c | 3 + lib/libc/arch/m68k/softfloat/softfloat.h | 24 +- lib/libc/arch/m68k/sys/__m68k_read_tp.S | 7 + lib/libc/arch/mips/Makefile.inc | 18 +- lib/libc/arch/mips/gen/Makefile.inc | 4 +- lib/libc/arch/mips/gen/_lwp.c | 28 +- lib/libc/arch/mips/gen/_resumecontext.S | 6 +- lib/libc/arch/mips/gen/_setjmp.S | 17 +- lib/libc/arch/mips/gen/cacheflush.c | 10 +- lib/libc/arch/mips/gen/flt_rounds.c | 6 +- lib/libc/arch/mips/gen/fpgetmask.c | 8 +- lib/libc/arch/mips/gen/fpgetround.c | 8 +- lib/libc/arch/mips/gen/fpgetsticky.c | 8 +- lib/libc/arch/mips/gen/fpsetmask.c | 10 +- lib/libc/arch/mips/gen/fpsetround.c | 12 +- lib/libc/arch/mips/gen/fpsetsticky.c | 12 +- lib/libc/arch/mips/gen/longjmp.c | 4 +- lib/libc/arch/mips/gen/makecontext.c | 8 +- lib/libc/arch/mips/gen/resumecontext.c | 6 +- lib/libc/arch/mips/gen/swapcontext.S | 6 +- lib/libc/arch/mips/softfloat/mips-gcc.h | 4 +- lib/libc/arch/mips/softfloat/softfloat.h | 24 +- lib/libc/arch/mips/sys/cerror.S | 6 +- lib/libc/arch/powerpc/gen/Makefile.inc | 4 +- lib/libc/arch/powerpc/gen/_lwp.c | 23 +- lib/libc/arch/powerpc/gen/flt_rounds.c | 13 +- lib/libc/arch/powerpc/gen/fpgetmask.c | 13 +- lib/libc/arch/powerpc/gen/fpgetround.c | 13 +- lib/libc/arch/powerpc/gen/fpgetsticky.c | 13 +- lib/libc/arch/powerpc/gen/fpsetmask.c | 19 +- lib/libc/arch/powerpc/gen/fpsetround.c | 19 +- lib/libc/arch/powerpc/gen/fpsetsticky.c | 29 +- lib/libc/arch/powerpc/gen/resumecontext.c | 6 +- lib/libc/arch/powerpc/softfloat/softfloat.h | 24 +- lib/libc/arch/powerpc/string/bzero.S | 26 +- lib/libc/arch/powerpc/sys/cerror.S | 6 +- lib/libc/arch/powerpc64/gen/resumecontext.c | 6 +- lib/libc/arch/powerpc64/gen/swapcontext.S | 8 +- lib/libc/arch/powerpc64/sys/brk.S | 5 +- lib/libc/arch/powerpc64/sys/cerror.S | 5 +- lib/libc/arch/powerpc64/sys/getcontext.S | 6 +- lib/libc/arch/sh3/SYS.h | 5 +- lib/libc/arch/sh3/gen/_lwp.c | 9 +- lib/libc/arch/sh3/gen/flt_rounds.c | 6 +- lib/libc/arch/sh3/gen/resumecontext.c | 6 +- lib/libc/arch/sh3/softfloat/softfloat.h | 24 +- lib/libc/arch/sparc/Makefile.inc | 6 +- lib/libc/arch/sparc/SYS.h | 20 +- lib/libc/arch/sparc/gen/_lwp.c | 7 +- lib/libc/arch/sparc/gen/_setjmp.S | 16 +- lib/libc/arch/sparc/gen/divrem.m4 | 4 +- lib/libc/arch/sparc/gen/flt_rounds.c | 8 +- lib/libc/arch/sparc/gen/fpgetmask.c | 8 +- lib/libc/arch/sparc/gen/fpgetround.c | 8 +- lib/libc/arch/sparc/gen/fpgetsticky.c | 8 +- lib/libc/arch/sparc/gen/fpsetmask.c | 7 +- lib/libc/arch/sparc/gen/fpsetround.c | 9 +- lib/libc/arch/sparc/gen/longjmp.c | 29 +- lib/libc/arch/sparc/gen/resumecontext.c | 6 +- lib/libc/arch/sparc/gen/setjmp.S | 10 +- lib/libc/arch/sparc/gen/swapcontext.S | 19 +- lib/libc/arch/sparc64/Makefile.inc | 39 +- lib/libc/arch/sparc64/SYS.h | 14 +- lib/libc/arch/sparc64/gen/_lwp.c | 7 +- lib/libc/arch/sparc64/gen/_setjmp.S | 21 +- lib/libc/arch/sparc64/gen/divrem.m4 | 273 --- lib/libc/arch/sparc64/gen/flt_rounds.c | 8 +- lib/libc/arch/sparc64/gen/fpgetmask.c | 9 +- lib/libc/arch/sparc64/gen/fpgetround.c | 9 +- lib/libc/arch/sparc64/gen/fpgetsticky.c | 22 +- lib/libc/arch/sparc64/gen/fpsetmask.c | 19 +- lib/libc/arch/sparc64/gen/fpsetround.c | 7 +- lib/libc/arch/sparc64/gen/fpsetsticky.c | 17 +- lib/libc/arch/sparc64/gen/longjmp.c | 33 +- lib/libc/arch/sparc64/gen/makecontext.c | 6 +- lib/libc/arch/sparc64/gen/resumecontext.c | 6 +- lib/libc/arch/sparc64/gen/setjmp.S | 16 +- lib/libc/arch/sparc64/gen/sigsetjmp.S | 19 +- lib/libc/arch/sparc64/gen/swapcontext.S | 24 +- lib/libc/arch/sparc64/softfloat/qp.c | 12 +- lib/libc/arch/sparc64/softfloat/softfloat.h | 24 +- lib/libc/arch/sparc64/string/memcpy.S | 13 +- lib/libc/arch/vax/SYS.h | 21 +- lib/libc/arch/vax/gen/__setjmp14.S | 50 +- lib/libc/arch/vax/gen/__sigsetjmp14.S | 11 +- lib/libc/arch/vax/gen/_lwp.c | 24 +- lib/libc/arch/vax/gen/_setjmp.S | 45 +- lib/libc/arch/vax/gen/alloca.S | 11 +- lib/libc/arch/vax/gen/byte_swap_2.S | 7 +- lib/libc/arch/vax/gen/byte_swap_4.S | 7 +- lib/libc/arch/vax/gen/fabs.S | 7 +- lib/libc/arch/vax/gen/frexp.c | 8 +- lib/libc/arch/vax/gen/ldexp.S | 32 +- lib/libc/arch/vax/gen/makecontext.c | 14 +- lib/libc/arch/vax/gen/modf.S | 8 +- lib/libc/arch/vax/gen/resumecontext.c | 6 +- lib/libc/arch/vax/gen/swapcontext.S | 7 +- lib/libc/arch/vax/genassym.cf | 5 +- lib/libc/arch/vax/string/bcmp.S | 7 +- lib/libc/arch/vax/string/bcopy.S | 13 +- lib/libc/arch/vax/string/bzero.S | 14 +- lib/libc/arch/vax/string/ffs.S | 10 +- lib/libc/arch/vax/string/index.S | 7 +- lib/libc/arch/vax/string/memcmp.S | 7 +- lib/libc/arch/vax/sys/__clone.S | 7 +- lib/libc/arch/vax/sys/__sigtramp3.S | 7 +- lib/libc/arch/vax/sys/__syscall.S | 7 +- lib/libc/arch/vax/sys/__vfork14.S | 10 +- lib/libc/arch/vax/sys/brk.S | 7 +- lib/libc/arch/vax/sys/cerror.S | 9 +- lib/libc/arch/vax/sys/execl.S | 7 +- lib/libc/arch/vax/sys/execle.S | 7 +- lib/libc/arch/vax/sys/execlp.S | 7 +- lib/libc/arch/vax/sys/exect.S | 9 +- lib/libc/arch/vax/sys/fork.S | 7 +- lib/libc/arch/vax/sys/getcontext.S | 20 +- lib/libc/arch/vax/sys/pipe.S | 11 +- lib/libc/arch/vax/sys/ptrace.S | 7 +- lib/libc/arch/vax/sys/sbrk.S | 7 +- lib/libc/arch/vax/sys/syscall.S | 7 +- lib/libc/cdb/cdbr.c | 2 +- lib/libc/compat/arch/alpha/sys/Makefile.inc | 4 +- .../compat/arch/alpha/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/hppa/sys/Makefile.inc | 4 +- .../compat/arch/hppa/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/ia64/sys/Makefile.inc | 4 +- .../compat/arch/ia64/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/m68k/sys/Makefile.inc | 4 +- .../compat/arch/m68k/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/mips/sys/Makefile.inc | 4 +- .../compat/arch/mips/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/powerpc/sys/Makefile.inc | 4 +- .../compat/arch/powerpc/sys/compat_quotactl.S | 38 + .../compat/arch/powerpc64/sys/Makefile.inc | 4 +- .../arch/powerpc64/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/sh3/sys/Makefile.inc | 4 +- .../compat/arch/sh3/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/sparc/sys/Makefile.inc | 4 +- .../compat/arch/sparc/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/sparc64/sys/Makefile.inc | 4 +- .../arch/sparc64/sys/compat___sigtramp1.S | 5 +- .../compat/arch/sparc64/sys/compat_quotactl.S | 38 + lib/libc/compat/arch/vax/sys/Makefile.inc | 4 +- lib/libc/compat/arch/vax/sys/compat_Ovfork.S | 7 +- .../arch/vax/sys/compat___sigreturn14.S | 6 +- .../compat/arch/vax/sys/compat___sigtramp2.S | 8 +- .../compat/arch/vax/sys/compat_quotactl.S | 38 + .../compat/arch/vax/sys/compat_sigpending13.S | 7 +- .../arch/vax/sys/compat_sigprocmask13.S | 7 +- .../compat/arch/vax/sys/compat_sigreturn13.S | 6 +- .../compat/arch/vax/sys/compat_sigsuspend13.S | 9 +- lib/libc/stdlib/malloc.c | 1320 ------------ lib/libmthread/global.h | 3 + lib/libutil/pty.c | 6 + lib/libvtreefs/inc.h | 1 + share/mk/bsd.README | 1841 +++++++++++++++++ 183 files changed, 3289 insertions(+), 2382 deletions(-) rename etc/{ => mtree}/mtree.sh (100%) create mode 100644 lib/libc/arch/m68k/sys/__m68k_read_tp.S delete mode 100644 lib/libc/arch/sparc64/gen/divrem.m4 create mode 100644 lib/libc/compat/arch/alpha/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/hppa/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/ia64/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/m68k/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/mips/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/powerpc/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/powerpc64/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/sh3/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/sparc/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/sparc64/sys/compat_quotactl.S create mode 100644 lib/libc/compat/arch/vax/sys/compat_quotactl.S delete mode 100644 lib/libc/stdlib/malloc.c create mode 100644 share/mk/bsd.README diff --git a/etc/mtree.sh b/etc/mtree/mtree.sh similarity index 100% rename from etc/mtree.sh rename to etc/mtree/mtree.sh diff --git a/include/sys/endian.h b/include/sys/endian.h index ac5418c15..13083193e 100644 --- a/include/sys/endian.h +++ b/include/sys/endian.h @@ -127,10 +127,10 @@ __END_DECLS #define htonl(x) bswap32(__CAST(uint32_t, (x))) #define htons(x) bswap16(__CAST(uint16_t, (x))) -#define NTOHL(x) (x) = ntohl(__CAST(uint32_t, (x))) -#define NTOHS(x) (x) = ntohs(__CAST(uint16_t, (x))) -#define HTONL(x) (x) = htonl(__CAST(uint32_t, (x))) -#define HTONS(x) (x) = htons(__CAST(uint16_t, (x))) +#define NTOHL(x) ntohl(__CAST(uint32_t, (x))) +#define NTOHS(x) ntohs(__CAST(uint16_t, (x))) +#define HTONL(x) htonl(__CAST(uint32_t, (x))) +#define HTONS(x) htons(__CAST(uint16_t, (x))) #endif /* LITTLE_ENDIAN || !defined(__lint__) */ /* diff --git a/kernel/arch/i386/sconst.h b/kernel/arch/i386/sconst.h index 6138e4402..3732a353c 100644 --- a/kernel/arch/i386/sconst.h +++ b/kernel/arch/i386/sconst.h @@ -1,8 +1,13 @@ #ifndef __SCONST_H__ #define __SCONST_H__ +/* + * LSC Weirdness going on with the const.h header: FIXME #include "kernel/const.h" #include "kernel/procoffsets.h" + */ +#include "const.h" +#include "procoffsets.h" /* * offset to current process pointer right after trap, we assume we always have diff --git a/lib/libc/arch/alpha/gen/__setjmp14.S b/lib/libc/arch/alpha/gen/__setjmp14.S index 4e59a7b64..062935de7 100644 --- a/lib/libc/arch/alpha/gen/__setjmp14.S +++ b/lib/libc/arch/alpha/gen/__setjmp14.S @@ -1,4 +1,4 @@ -/* $NetBSD: __setjmp14.S,v 1.4 2004/03/21 18:04:27 matt Exp $ */ +/* $NetBSD: __setjmp14.S,v 1.5 2011/06/12 05:44:36 matt Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -96,7 +96,9 @@ LEAF(__setjmp14, 1) stt fs5, (7*8 + SC_FPREGS)(a0) stt fs6, (8*8 + SC_FPREGS)(a0) stt fs7, (9*8 + SC_FPREGS)(a0) + excb /* required 4.7.8.1 Alpha ARM */ mf_fpcr ft0 /* get FP control reg */ + excb /* required 4.7.8.1 Alpha ARM */ stt ft0, SC_FPCR(a0) /* and store it in sc_fpcr */ stq zero, SC_FP_CONTROL(a0) /* FP software control XXX */ stq zero, (SC_RESERVED + 0*8)(a0) /* sc_reserved[0] */ diff --git a/lib/libc/arch/alpha/gen/_lwp.c b/lib/libc/arch/alpha/gen/_lwp.c index 21213682b..c2a7ce412 100644 --- a/lib/libc/arch/alpha/gen/_lwp.c +++ b/lib/libc/arch/alpha/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:55 martin Exp $ */ +/* $NetBSD: _lwp.c,v 1.7 2012/09/12 14:13:43 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:55 martin Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.7 2012/09/12 14:13:43 manu Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -60,4 +60,7 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), gr[_REG_A0] = (unsigned long) arg; gr[_REG_SP] = ((unsigned long) (stack_base + stack_size)) & ~0x7; gr[_REG_S6] = 0; + gr[_REG_UNIQUE] = (unsigned long)private; + + u->uc_flags |= _UC_TLSBASE; } diff --git a/lib/libc/arch/alpha/gen/flt_rounds.c b/lib/libc/arch/alpha/gen/flt_rounds.c index ef06c6c36..3f28b3ecc 100644 --- a/lib/libc/arch/alpha/gen/flt_rounds.c +++ b/lib/libc/arch/alpha/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.8 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.9 2011/06/12 05:44:36 matt Exp $ */ /* * Copyright (c) 1995 Christopher G. Demetriou @@ -36,29 +36,33 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.8 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.9 2011/06/12 05:44:36 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include +#include #include -static const int map[] = { - 0, /* round to zero */ - 3, /* round to negative infinity */ - 1, /* round to nearest */ - 2 /* round to positive infinity */ -}; +/* + * These come from defintion + */ +#define FLT_ROUND_MAP \ + ( (0 << (FP_RZ*2)) /* round to zero */ \ + | (1 << (FP_RN*2)) /* round to nearest */ \ + | (3 << (FP_RM*2)) /* round to negative infinity */ \ + | (2 << (FP_RP*2))) /* round to positive infinity */ int -__flt_rounds() +__flt_rounds(void) { - double fpcrval; - u_int64_t old; + union { + double d; + uint64_t u64; + } fpcrval; + uint64_t old; - __asm("trapb"); - __asm("mf_fpcr %0" : "=f" (fpcrval)); - __asm("trapb"); - old = *(u_int64_t *)(void *)&fpcrval; + __asm("excb; mf_fpcr %0; excb" : "=f" (fpcrval.d)); + old = (fpcrval.u64 >> 58) & 3; - return map[(old >> 58) & 0x3]; + return (FLT_ROUND_MAP >> (old << 1)) & 3; } diff --git a/lib/libc/arch/alpha/gen/fpgetround.c b/lib/libc/arch/alpha/gen/fpgetround.c index 1bee9b690..263b195f7 100644 --- a/lib/libc/arch/alpha/gen/fpgetround.c +++ b/lib/libc/arch/alpha/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.9 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetround.c,v 1.11 2012/03/21 20:07:52 he Exp $ */ /* * Copyright (c) 1995 Christopher G. Demetriou @@ -36,7 +36,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.9 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.11 2012/03/21 20:07:52 he Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -49,13 +49,14 @@ __weak_alias(fpgetround,_fpgetround) #endif fp_rnd -fpgetround() +fpgetround(void) { - double fpcrval; - u_int64_t old; + union { + double d; + uint64_t u64; + } fpcrval; - __asm("mf_fpcr %0" : "=f" (fpcrval)); - old = *(u_int64_t *)(void *)&fpcrval; + __asm("excb; mf_fpcr %0; excb" : "=f" (fpcrval.d)); - return ((old >> 58) & 0x3); + return ((fp_rnd)(fpcrval.u64 >> 58) & 0x3); } diff --git a/lib/libc/arch/alpha/gen/fpsetround.c b/lib/libc/arch/alpha/gen/fpsetround.c index b3cb5a5a3..ec9b11e98 100644 --- a/lib/libc/arch/alpha/gen/fpsetround.c +++ b/lib/libc/arch/alpha/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.10 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetround.c,v 1.12 2012/03/21 20:07:52 he Exp $ */ /* * Copyright (c) 1995 Christopher G. Demetriou @@ -36,7 +36,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.10 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.12 2012/03/21 20:07:52 he Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -49,22 +49,22 @@ __weak_alias(fpsetround,_fpsetround) #endif fp_rnd -fpsetround(rnd_dir) - fp_rnd rnd_dir; +fpsetround(fp_rnd rnd_dir) { - double fpcrval; - u_int64_t old, new; + union { + double d; + uint64_t u64; + } fpcrval; + fp_rnd old; - __asm("excb"); - __asm("mf_fpcr %0" : "=f" (fpcrval)); - old = *(u_int64_t *)(void *)&fpcrval; + __asm("excb; mf_fpcr %0; excb" : "=f" (fpcrval.d)); + old = (fp_rnd)(fpcrval.u64 >> 58) & 0x3; - new = old & ~(long)0x0c00000000000000; - new = (long)rnd_dir << 58; - *(u_int64_t *)(void *)&fpcrval = new; + rnd_dir ^= old; - __asm("mt_fpcr %0" : : "f" (fpcrval)); - __asm("excb"); + fpcrval.u64 ^= (long)rnd_dir << 58; - return ((old >> 58) & 0x3); + __asm("excb; mt_fpcr %0; excb" : : "f" (fpcrval.d)); + + return old; } diff --git a/lib/libc/arch/alpha/gen/makecontext.c b/lib/libc/arch/alpha/gen/makecontext.c index 3554eb3a7..aeabddf26 100644 --- a/lib/libc/arch/alpha/gen/makecontext.c +++ b/lib/libc/arch/alpha/gen/makecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $ */ +/* $NetBSD: makecontext.c,v 1.6 2011/09/20 08:42:29 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.6 2011/09/20 08:42:29 joerg Exp $"); #endif #include @@ -41,6 +41,8 @@ __RCSID("$NetBSD: makecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $"); #include +void __resumecontext(void) __dead; + void makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) { @@ -49,8 +51,6 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) unsigned long *sp; va_list ap; - void __resumecontext(void); - /* Compute and align stack pointer. */ sp = (unsigned long *) (((uintptr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ~0x7); diff --git a/lib/libc/arch/alpha/gen/resumecontext.c b/lib/libc/arch/alpha/gen/resumecontext.c index cd1795b59..d5b745c99 100644 --- a/lib/libc/arch/alpha/gen/resumecontext.c +++ b/lib/libc/arch/alpha/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:57 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:57 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:55 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/hppa/gen/__longjmp14.c b/lib/libc/arch/hppa/gen/__longjmp14.c index bb14fd627..04ab4ee73 100644 --- a/lib/libc/arch/hppa/gen/__longjmp14.c +++ b/lib/libc/arch/hppa/gen/__longjmp14.c @@ -1,4 +1,4 @@ -/* $NetBSD: __longjmp14.c,v 1.4 2008/04/28 20:22:55 martin Exp $ */ +/* $NetBSD: __longjmp14.c,v 1.5 2012/03/22 12:31:32 skrll Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -81,6 +81,7 @@ __longjmp14(jmp_buf env, int val) uc.uc_mcontext.__gregs[18] = regs[18]; /* Preserve the current value of DP */ + /* LINTED dp is r27, so is "initialized" */ uc.uc_mcontext.__gregs[27] = dp; /* Set the desired return value. */ diff --git a/lib/libc/arch/hppa/gen/_lwp.c b/lib/libc/arch/hppa/gen/_lwp.c index 4e8cc16b0..631ce8b66 100644 --- a/lib/libc/arch/hppa/gen/_lwp.c +++ b/lib/libc/arch/hppa/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.4 2010/01/07 12:31:10 skrll Exp $ */ +/* $NetBSD: _lwp.c,v 1.5 2011/02/24 04:28:42 joerg Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.4 2010/01/07 12:31:10 skrll Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.5 2011/02/24 04:28:42 joerg Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -69,4 +69,5 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), gr[_REG_RP] = (__greg_t) _lwp_exit; gr[_REG_ARG0] = (__greg_t) arg; gr[_REG_SP] = (__greg_t) sp; + gr[_REG_CR27] = (__greg_t) private; } diff --git a/lib/libc/arch/hppa/gen/flt_rounds.c b/lib/libc/arch/hppa/gen/flt_rounds.c index e043d2b77..179fb60b0 100644 --- a/lib/libc/arch/hppa/gen/flt_rounds.c +++ b/lib/libc/arch/hppa/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.4 2005/12/24 21:42:32 perry Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.5 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: flt_rounds.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.4 2005/12/24 21:42:32 perry Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.5 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -27,5 +27,5 @@ __flt_rounds(void) uint64_t fpsr; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); - return map[(fpsr >> 41) & 0x03]; + return map[(unsigned int)(fpsr >> 41) & 0x03]; } diff --git a/lib/libc/arch/hppa/gen/fpgetmask.c b/lib/libc/arch/hppa/gen/fpgetmask.c index 4ef451c65..cedf4797a 100644 --- a/lib/libc/arch/hppa/gen/fpgetmask.c +++ b/lib/libc/arch/hppa/gen/fpgetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetmask.c,v 1.4 2005/12/24 21:42:32 perry Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.5 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpgetmask.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetmask.c,v 1.4 2005/12/24 21:42:32 perry Exp $"); +__RCSID("$NetBSD: fpgetmask.c,v 1.5 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -20,5 +20,5 @@ fpgetmask(void) uint64_t fpsr; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); - return ((fpsr >> 32) & 0x1f); + return ((fp_except)(fpsr >> 32) & 0x1f); } diff --git a/lib/libc/arch/hppa/gen/fpgetround.c b/lib/libc/arch/hppa/gen/fpgetround.c index 1629b6498..f0feb3167 100644 --- a/lib/libc/arch/hppa/gen/fpgetround.c +++ b/lib/libc/arch/hppa/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.4 2005/12/24 21:42:32 perry Exp $ */ +/* $NetBSD: fpgetround.c,v 1.5 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpgetround.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.4 2005/12/24 21:42:32 perry Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.5 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -20,5 +20,5 @@ fpgetround(void) uint64_t fpsr; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); - return ((fpsr >> 41) & 0x3); + return ((fp_rnd)(fpsr >> 41) & 0x3); } diff --git a/lib/libc/arch/hppa/gen/fpgetsticky.c b/lib/libc/arch/hppa/gen/fpgetsticky.c index 29ea34aa2..9e424abeb 100644 --- a/lib/libc/arch/hppa/gen/fpgetsticky.c +++ b/lib/libc/arch/hppa/gen/fpgetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetsticky.c,v 1.4 2005/12/24 21:42:32 perry Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.5 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpgetsticky.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetsticky.c,v 1.4 2005/12/24 21:42:32 perry Exp $"); +__RCSID("$NetBSD: fpgetsticky.c,v 1.5 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -20,5 +20,5 @@ fpgetsticky(void) uint64_t fpsr; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); - return ((fpsr >> 59) & 0x1f); + return ((fp_except)(fpsr >> 59) & 0x1f); } diff --git a/lib/libc/arch/hppa/gen/fpsetmask.c b/lib/libc/arch/hppa/gen/fpsetmask.c index 1633f61e4..b1761b07e 100644 --- a/lib/libc/arch/hppa/gen/fpsetmask.c +++ b/lib/libc/arch/hppa/gen/fpsetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetmask.c,v 1.5 2009/01/25 16:44:41 skrll Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.6 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpsetmask.c,v 1.4 2004/01/05 06:06:16 otto Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetmask.c,v 1.5 2009/01/25 16:44:41 skrll Exp $"); +__RCSID("$NetBSD: fpsetmask.c,v 1.6 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,7 +21,7 @@ fpsetmask(fp_except mask) fp_except old; __asm volatile("fstd %%fr0,0(%1)" : "=m"(fpsr) : "r"(&fpsr) : "memory"); - old = (fpsr >> 32) & 0x1f; + old = (fp_except)(fpsr >> 32) & 0x1f; fpsr = (fpsr & 0xffffffe000000000LL) | ((uint64_t)(mask & 0x1f) << 32); __asm volatile("fldd 0(%0),%%fr0" : : "r"(&fpsr) : "memory"); return (old); diff --git a/lib/libc/arch/hppa/gen/fpsetround.c b/lib/libc/arch/hppa/gen/fpsetround.c index d9474625c..f9f631666 100644 --- a/lib/libc/arch/hppa/gen/fpsetround.c +++ b/lib/libc/arch/hppa/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.5 2009/01/25 16:44:41 skrll Exp $ */ +/* $NetBSD: fpsetround.c,v 1.6 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpsetround.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.5 2009/01/25 16:44:41 skrll Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.6 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,7 +21,7 @@ fpsetround(fp_rnd rnd_dir) fp_rnd old; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr) : "memory"); - old = (fpsr >> 41) & 0x03; + old = (fp_rnd)(fpsr >> 41) & 0x03; fpsr = (fpsr & 0xfffff9ff00000000LL) | ((uint64_t)(rnd_dir & 0x03) << 41); __asm volatile("fldd 0(%0),%%fr0" : : "r" (&fpsr) : "memory"); diff --git a/lib/libc/arch/hppa/gen/fpsetsticky.c b/lib/libc/arch/hppa/gen/fpsetsticky.c index 472160900..c9dce7a73 100644 --- a/lib/libc/arch/hppa/gen/fpsetsticky.c +++ b/lib/libc/arch/hppa/gen/fpsetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetsticky.c,v 1.5 2009/01/25 16:44:41 skrll Exp $ */ +/* $NetBSD: fpsetsticky.c,v 1.6 2012/03/23 09:34:09 skrll Exp $ */ /* $OpenBSD: fpsetsticky.c,v 1.4 2004/01/05 06:06:16 otto Exp $ */ @@ -8,7 +8,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetsticky.c,v 1.5 2009/01/25 16:44:41 skrll Exp $"); +__RCSID("$NetBSD: fpsetsticky.c,v 1.6 2012/03/23 09:34:09 skrll Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,7 +21,7 @@ fpsetsticky(fp_except mask) fp_except old; __asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr) : "memory"); - old = (fpsr >> 59) & 0x1f; + old = (fp_except)(fpsr >> 59) & 0x1f; fpsr = (fpsr & 0x07ffffff00000000LL) | ((uint64_t)(mask & 0x1f) << 59); __asm volatile("fldd 0(%0),%%fr0" : : "r" (&fpsr) : "memory"); diff --git a/lib/libc/arch/hppa/gen/makecontext.c b/lib/libc/arch/hppa/gen/makecontext.c index c7cb50d7a..5a03f2388 100644 --- a/lib/libc/arch/hppa/gen/makecontext.c +++ b/lib/libc/arch/hppa/gen/makecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: makecontext.c,v 1.6 2012/03/22 12:31:32 skrll Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.6 2012/03/22 12:31:32 skrll Exp $"); #endif #include @@ -44,6 +44,8 @@ __RCSID("$NetBSD: makecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $"); #include #include +void __resumecontext(void) __dead; + void makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) { @@ -54,8 +56,6 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) int i; va_list ap; - void __resumecontext(void); - /* LINTED uintptr_t is safe */ sp = (uintptr_t *)ucp->uc_stack.ss_sp; /* LINTED uintptr_t is safe */ @@ -81,6 +81,7 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) } gr[_REG_PCOQH] = fp | HPPA_PC_PRIV_USER; gr[_REG_PCOQT] = (fp + 4) | HPPA_PC_PRIV_USER; + /* LINTED dp is reg27, ref. above, so initialized */ gr[_REG_DP] = dp; /* Construct argument list. */ diff --git a/lib/libc/arch/hppa/gen/resumecontext.c b/lib/libc/arch/hppa/gen/resumecontext.c index 03443a32d..9bdeb4ac7 100644 --- a/lib/libc/arch/hppa/gen/resumecontext.c +++ b/lib/libc/arch/hppa/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:57 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:57 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:56 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/hppa/gen/swapcontext.S b/lib/libc/arch/hppa/gen/swapcontext.S index 7e5601c1e..4ba6cddea 100644 --- a/lib/libc/arch/hppa/gen/swapcontext.S +++ b/lib/libc/arch/hppa/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.4 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: swapcontext.S,v 1.5 2012/09/12 02:00:52 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #include #if defined(SYSLIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: swapcontext.S,v 1.4 2008/04/28 20:22:56 martin Exp $") + RCSID("$NetBSD: swapcontext.S,v 1.5 2012/09/12 02:00:52 manu Exp $") #endif /* SYSLIBC_SCCS && !lint */ LEAF_ENTRY(swapcontext) @@ -44,10 +44,15 @@ LEAF_ENTRY(swapcontext) ldw HPPA_FRAME_ARG(0)(%sp), %arg1 ldw HPPA_FRAME_ARG(1)(%sp), %arg0 - stw %r0, (_OFFSETOF_UC_GREGS + _REG_RET0 * SZREG)(%arg1) + + ldw HPPA_FRAME_CRP(%sp), %rp ldo 4(%rp), %r1 stw %r1, (_OFFSETOF_UC_GREGS + _REG_PCOQT * SZREG)(%arg1) stw %rp, (_OFFSETOF_UC_GREGS + _REG_PCOQH * SZREG)(%arg1) - SYSCALL(setcontext) + bl setcontext, %rp + stw %r0, (_OFFSETOF_UC_GREGS + _REG_RET0 * SZREG)(%arg1) + + ldw HPPA_FRAME_CRP(%sp), %rp + bv,n %r0(%rp) EXIT(swapcontext) .end diff --git a/lib/libc/arch/hppa/sys/brk.S b/lib/libc/arch/hppa/sys/brk.S index 61ce62527..e25b84e30 100644 --- a/lib/libc/arch/hppa/sys/brk.S +++ b/lib/libc/arch/hppa/sys/brk.S @@ -1,4 +1,4 @@ -/* $NetBSD: brk.S,v 1.4 2009/11/03 05:07:25 snj Exp $ */ +/* $NetBSD: brk.S,v 1.5 2012/03/14 14:18:10 skrll Exp $ */ /* $OpenBSD: brk.S,v 1.7 2001/06/04 23:14:04 mickey Exp $ */ @@ -31,11 +31,11 @@ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: brk.S,v 1.4 2009/11/03 05:07:25 snj Exp $") + RCSID("$NetBSD: brk.S,v 1.5 2012/03/14 14:18:10 skrll Exp $") #endif /* LIBC_SCCS and not lint */ .import curbrk, data - .import end, data + .global _end #ifdef WEAK_ALIAS WEAK_ALIAS(brk, _brk) @@ -44,7 +44,7 @@ .data .export __minbrk, data __minbrk: - .long end + .long _end ENTRY(_brk,0) #ifdef PIC diff --git a/lib/libc/arch/hppa/sys/sbrk.S b/lib/libc/arch/hppa/sys/sbrk.S index 963d2519a..b5821d5f8 100644 --- a/lib/libc/arch/hppa/sys/sbrk.S +++ b/lib/libc/arch/hppa/sys/sbrk.S @@ -1,4 +1,4 @@ -/* $NetBSD: sbrk.S,v 1.4 2009/11/03 05:07:25 snj Exp $ */ +/* $NetBSD: sbrk.S,v 1.5 2012/03/14 14:18:10 skrll Exp $ */ /* $OpenBSD: sbrk.S,v 1.7 2001/06/04 23:14:04 mickey Exp $ */ @@ -31,10 +31,10 @@ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: sbrk.S,v 1.4 2009/11/03 05:07:25 snj Exp $") + RCSID("$NetBSD: sbrk.S,v 1.5 2012/03/14 14:18:10 skrll Exp $") #endif /* LIBC_SCCS and not lint */ - .import end, data + .global _end #ifdef WEAK_ALIAS WEAK_ALIAS(sbrk, _sbrk) @@ -43,7 +43,7 @@ .data .export curbrk, data curbrk: - .long end + .long _end ENTRY(_sbrk,0) #ifdef PIC diff --git a/lib/libc/arch/m68k/Makefile.inc b/lib/libc/arch/m68k/Makefile.inc index abe01f49a..13a17bdbd 100644 --- a/lib/libc/arch/m68k/Makefile.inc +++ b/lib/libc/arch/m68k/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.13 2008/02/09 02:41:06 mrg Exp $ +# $NetBSD: Makefile.inc,v 1.14 2011/11/22 15:25:28 joerg Exp $ -SRCS+= __sigaction14_sigtramp.c __sigtramp2.S __mmap.S +SRCS+= __sigaction14_sigtramp.c __sigtramp2.S __m68k_read_tp.S __mmap.S ASM+= _lwp_getprivate.S mremap.S diff --git a/lib/libc/arch/m68k/gen/Makefile.inc b/lib/libc/arch/m68k/gen/Makefile.inc index f1ed0466f..bef14d0f2 100644 --- a/lib/libc/arch/m68k/gen/Makefile.inc +++ b/lib/libc/arch/m68k/gen/Makefile.inc @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.30 2009/12/06 07:12:17 uebayasi Exp $ +# $NetBSD: Makefile.inc,v 1.31 2011/11/22 15:25:28 joerg Exp $ SRCS+= alloca.S fabs.S @@ -26,6 +26,7 @@ SRCS+= ashlsi3.S ashrsi3.S \ negdf2.S negsf2.S SRCS+= bswap16.S bswap32.S bswap64.S SRCS+= _lwp.c +CPPFLAGS._lwp.c += -D_LIBC_SOURCE # 68000-based machines build with a libgcc that includes # much of the (soft)float and integer support that would diff --git a/lib/libc/arch/m68k/gen/_lwp.c b/lib/libc/arch/m68k/gen/_lwp.c index 6d6e09331..ce0e16d47 100644 --- a/lib/libc/arch/m68k/gen/_lwp.c +++ b/lib/libc/arch/m68k/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: _lwp.c,v 1.8 2012/03/18 16:26:34 christos Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,18 +31,19 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.8 2012/03/18 16:26:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" #include +#include #include #include #include void _lwp_makecontext(ucontext_t *u, void (*start)(void *), - void *arg, void *private, caddr_t stack_base, size_t stack_size) + void *arg, void *tcb, caddr_t stack_base, size_t stack_size) { void **sp; @@ -54,10 +55,13 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), u->uc_mcontext.__gregs[_REG_PC] = (int)start; - sp = (void **) (stack_base + stack_size); + sp = (void **)(void *)(stack_base + stack_size); *--sp = arg; *--sp = (void *) _lwp_exit; u->uc_mcontext.__gregs[_REG_A7] = (int) sp; + u->uc_mcontext._mc_tlsbase = (uintptr_t)tcb + TLS_TP_OFFSET + + sizeof(struct tls_tcb); + u->uc_flags |= _UC_TLSBASE; } diff --git a/lib/libc/arch/m68k/gen/fpfake.c b/lib/libc/arch/m68k/gen/fpfake.c index b2835d4ad..6911f0173 100644 --- a/lib/libc/arch/m68k/gen/fpfake.c +++ b/lib/libc/arch/m68k/gen/fpfake.c @@ -18,18 +18,21 @@ fpgetsticky(void) return 0; } +/* ARGSUSED */ fp_except fpsetmask(fp_except mask) { return 0; } +/* ARGSUSED */ fp_rnd fpsetround(fp_rnd rnd_dir) { return 0; } +/* ARGSUSED */ fp_except fpsetsticky(fp_except sticky) { diff --git a/lib/libc/arch/m68k/softfloat/softfloat.h b/lib/libc/arch/m68k/softfloat/softfloat.h index 1c4c1533d..b45238d27 100644 --- a/lib/libc/arch/m68k/softfloat/softfloat.h +++ b/lib/libc/arch/m68k/softfloat/softfloat.h @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.2 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.4 2011/07/07 07:14:57 matt Exp $ */ /* This is a derivative work. */ @@ -84,12 +84,10 @@ Software IEC/IEEE floating-point rounding mode. ------------------------------------------------------------------------------- */ extern fp_rnd float_rounding_mode; -enum { - float_round_nearest_even = FP_RN, - float_round_to_zero = FP_RZ, - float_round_down = FP_RM, - float_round_up = FP_RP -}; +#define float_round_nearest_even FP_RN +#define float_round_to_zero FP_RZ +#define float_round_down FP_RM +#define float_round_up FP_RP /* ------------------------------------------------------------------------------- @@ -119,13 +117,17 @@ void float_raise( fp_except ); Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); diff --git a/lib/libc/arch/m68k/sys/__m68k_read_tp.S b/lib/libc/arch/m68k/sys/__m68k_read_tp.S new file mode 100644 index 000000000..0daae953a --- /dev/null +++ b/lib/libc/arch/m68k/sys/__m68k_read_tp.S @@ -0,0 +1,7 @@ +#include "SYS.h" + +ENTRY(__m68k_read_tp) + SYSTRAP(_lwp_getprivate) + movl %d0,%a0 + rts + .size __m68k_read_tp, .-__m68k_read_tp diff --git a/lib/libc/arch/mips/Makefile.inc b/lib/libc/arch/mips/Makefile.inc index 032d3d9e4..6f5cede92 100644 --- a/lib/libc/arch/mips/Makefile.inc +++ b/lib/libc/arch/mips/Makefile.inc @@ -1,4 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.9 2009/12/14 01:07:41 matt Exp $ +# $NetBSD: Makefile.inc,v 1.12 2011/07/09 04:12:01 matt Exp $ + +.include SRCS+= __sigaction14_sigtramp.c __sigtramp2.S @@ -7,5 +9,17 @@ CPPFLAGS.assym.h+=-D__LIBC12_SOURCE__ .if ${MKSOFTFLOAT} != "no" .include -CPPFLAGS+= -DSOFTFLOAT_NEED_FIXUNS +CPPFLAGS+= -DSOFTFLOAT + +SRCS+= fixunsgen_ieee754.c fixunssfsi_ieee754.c fixunsdfsi_ieee754.c +SRCS+= fixunsgen64_ieee754.c #fixunssfdi.c fixunsdfdi.c +.if (${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el") \ + && (!defined(CPUFLAGS) || empty(CPUFLAGS:M-mabi=32)) +SRCS+= fixunstfsi_ieee754.c fixunstfdi_ieee754.c +.endif +.endif + +.if (${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el") \ + && (!defined(CPUFLAGS) || empty(CPUFLAGS:M-mabi=32)) +SRCS+= floatunditf_ieee754.c .endif diff --git a/lib/libc/arch/mips/gen/Makefile.inc b/lib/libc/arch/mips/gen/Makefile.inc index 08d2e3783..acaccca82 100644 --- a/lib/libc/arch/mips/gen/Makefile.inc +++ b/lib/libc/arch/mips/gen/Makefile.inc @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.32 2011/01/17 23:53:03 matt Exp $ +# $NetBSD: Makefile.inc,v 1.33 2011/03/15 07:40:18 matt Exp $ .if ${MKSOFTFLOAT} == "no" SRCS+= fabs.S ldexp.S modf.S @@ -32,6 +32,8 @@ SRCS+= makecontext.c resumecontext.c _resumecontext.S swapcontext.S _lwp.c # mips abi builtin extensions (used by GCC for lexical-closure trampoline) SRCS+= cacheflush.c +CPPFLAGS._lwp.c += -D_LIBC_SOURCE + LSRCS.mips.gen= Lint__setjmp.c Lint_bswap16.c Lint_bswap32.c Lint_swapcontext.c LSRCS+= ${LSRCS.mips.gen} DPSRCS+= ${LSRCS.mips.gen} diff --git a/lib/libc/arch/mips/gen/_lwp.c b/lib/libc/arch/mips/gen/_lwp.c index 408240229..f987f4a1a 100644 --- a/lib/libc/arch/mips/gen/_lwp.c +++ b/lib/libc/arch/mips/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: _lwp.c,v 1.8 2011/04/29 08:05:22 matt Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.8 2011/04/29 08:05:22 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -40,10 +40,15 @@ __RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $"); #include #include -#define CALLFRAME_SIZ 24 +#if defined(__mips_o32) || defined(__mips_o64) +#define CALLFRAME_SIZ (6 * sizeof(void *)) +#else +#define CALLFRAME_SIZ (4 * sizeof(uint64_t)) +#endif -void _lwp_makecontext(ucontext_t *u, void (*start)(void *), - void *arg, void *private, caddr_t stack_base, size_t stack_size) +void +_lwp_makecontext(ucontext_t *u, void (*start)(void *), + void *arg, void *tcb, caddr_t stack_base, size_t stack_size) { caddr_t sp; __greg_t *gr; @@ -56,9 +61,12 @@ void _lwp_makecontext(ucontext_t *u, void (*start)(void *), u->uc_stack.ss_size = stack_size; sp = stack_base + stack_size - CALLFRAME_SIZ; - gr[_REG_EPC] = (unsigned long) start; - gr[_REG_T9] = (unsigned long) start; /* required for .abicalls */ - gr[_REG_RA] = (unsigned long) _lwp_exit; - gr[_REG_A0] = (unsigned long) arg; - gr[_REG_SP] = (unsigned long) sp; + gr[_REG_EPC] = (uintptr_t) start; + gr[_REG_T9] = (uintptr_t) start; /* required for .abicalls */ + gr[_REG_RA] = (uintptr_t) _lwp_exit; + gr[_REG_A0] = (uintptr_t) arg; + gr[_REG_SP] = (uintptr_t) sp; + u->uc_mcontext._mc_tlsbase = + (uintptr_t)tcb + TLS_TP_OFFSET + sizeof(struct tls_tcb); + u->uc_flags |= _UC_TLSBASE; } diff --git a/lib/libc/arch/mips/gen/_resumecontext.S b/lib/libc/arch/mips/gen/_resumecontext.S index 2631070f9..a8b3e2c40 100644 --- a/lib/libc/arch/mips/gen/_resumecontext.S +++ b/lib/libc/arch/mips/gen/_resumecontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: _resumecontext.S,v 1.6 2009/12/14 01:07:42 matt Exp $ */ +/* $NetBSD: _resumecontext.S,v 1.7 2012/09/12 02:00:52 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include "assym.h" #if defined(SYSLIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: _resumecontext.S,v 1.6 2009/12/14 01:07:42 matt Exp $") + RCSID("$NetBSD: _resumecontext.S,v 1.7 2012/09/12 02:00:52 manu Exp $") #endif /* SYSLIBC_SCCS && !lint */ .set reorder @@ -53,7 +53,7 @@ LEAF_NOPROFILE(__resumecontext) PTR_L a0, _OFFSETOF_UC_LINK(a0) # linked context? beq a0, zero, 1f # nope, exit process nop - SYSTRAP(setcontext) # yes, become it. + PIC_TAILCALL(setcontext) # yes, become it. /* NOTREACHED (in theory) */ li a0, -1 # failure, 1: diff --git a/lib/libc/arch/mips/gen/_setjmp.S b/lib/libc/arch/mips/gen/_setjmp.S index 3d2f91fdf..9e91ce26b 100644 --- a/lib/libc/arch/mips/gen/_setjmp.S +++ b/lib/libc/arch/mips/gen/_setjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: _setjmp.S,v 1.22 2010/09/03 17:22:51 matt Exp $ */ +/* $NetBSD: _setjmp.S,v 1.24 2012/07/08 00:59:34 matt Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -46,7 +46,7 @@ #if 0 RCSID("from: @(#)_setjmp.s 8.1 (Berkeley) 6/4/93") #else - RCSID("$NetBSD: _setjmp.S,v 1.22 2010/09/03 17:22:51 matt Exp $") + RCSID("$NetBSD: _setjmp.S,v 1.24 2012/07/08 00:59:34 matt Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -88,7 +88,6 @@ LEAF(_setjmp) */ #ifndef SOFTFLOAT_FOR_GCC cfc1 v0, $31 # too bad cant check if FP used - INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0) #if defined(__mips_n64) || defined(__mips_n32) FP_S $f30, _OFFSETOF_SC_FPREGS_F30(a0) FP_S $f28, _OFFSETOF_SC_FPREGS_F28(a0) @@ -109,11 +108,12 @@ LEAF(_setjmp) FP_S $f29, _OFFSETOF_SC_FPREGS_F29(a0) FP_S $f31, _OFFSETOF_SC_FPREGS_F31(a0) #endif + INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0) #endif /* SOFTFLOAT_FOR_GCC */ REG_EPILOGUE j ra - move v0, zero + move v0, zero END(_setjmp) LEAF(_longjmp) @@ -139,11 +139,13 @@ LEAF(_longjmp) #if defined(__mips_n32) || defined(__mips_n64) REG_L gp, _OFFSETOF_SC_REGS_GP(a0) #endif +#ifndef SOFTFLOAT_FOR_GCC # get fpu status + INT_L v0, _OFFSETOF_SC_FPREGS_FCSR(a0) +#endif REG_L sp, _OFFSETOF_SC_REGS_SP(a0) REG_L s8, _OFFSETOF_SC_REGS_S8(a0) #ifndef SOFTFLOAT_FOR_GCC - INT_L v0, _OFFSETOF_SC_FPREGS_FCSR(a0) ctc1 v0, $31 /* * In N32, FP registers F20, F22, F24, F26, F28, F30 are callee-saved. @@ -173,9 +175,8 @@ LEAF(_longjmp) #endif /* SOFTFLOAT_FOR_GCC */ REG_EPILOGUE - move v0, a1 # get return value in 1st arg j ra - nop + move v0, a1 # get return value in 1st arg botch: /* @@ -183,6 +184,8 @@ botch: * our caller's GP. */ jal _C_LABEL(longjmperror) + nop PIC_TAILCALL(abort) + nop END(_longjmp) diff --git a/lib/libc/arch/mips/gen/cacheflush.c b/lib/libc/arch/mips/gen/cacheflush.c index 45a9aefbe..b63b4b647 100644 --- a/lib/libc/arch/mips/gen/cacheflush.c +++ b/lib/libc/arch/mips/gen/cacheflush.c @@ -1,4 +1,4 @@ -/* $NetBSD: cacheflush.c,v 1.4 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: cacheflush.c,v 1.6 2012/03/29 21:21:04 christos Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -34,14 +34,12 @@ #include int -_cacheflush(addr, nbytes, whichcache) - void * addr; - int nbytes, whichcache; +_cacheflush(void *addr, size_t nbytes, int whichcache) { struct mips_cacheflush_args cfa; - cfa.va = (vaddr_t) addr; + cfa.va = (vaddr_t)(intptr_t)addr; cfa.nbytes = nbytes; cfa.whichcache = whichcache; - return (sysarch(MIPS_CACHEFLUSH, (void *)&cfa)); + return sysarch(MIPS_CACHEFLUSH, (void *)&cfa); } diff --git a/lib/libc/arch/mips/gen/flt_rounds.c b/lib/libc/arch/mips/gen/flt_rounds.c index ab8a5cdcc..0f5ac1465 100644 --- a/lib/libc/arch/mips/gen/flt_rounds.c +++ b/lib/libc/arch/mips/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.6 2010/09/03 17:22:51 matt Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.7 2012/06/24 15:26:02 christos Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.6 2010/09/03 17:22:51 matt Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.7 2012/06/24 15:26:02 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,7 +21,7 @@ static const int map[] = { }; int -__flt_rounds() +__flt_rounds(void) { #ifdef SOFTFLOAT_FOR_GCC return map[fpgetround()]; diff --git a/lib/libc/arch/mips/gen/fpgetmask.c b/lib/libc/arch/mips/gen/fpgetmask.c index 1e62810da..4e950a740 100644 --- a/lib/libc/arch/mips/gen/fpgetmask.c +++ b/lib/libc/arch/mips/gen/fpgetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.8 2012/03/20 16:19:56 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetmask.c,v 1.8 2012/03/20 16:19:56 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetmask,_fpgetmask) #endif fp_except -fpgetmask() +fpgetmask(void) { - int x; + fp_except x; __asm("cfc1 %0,$31" : "=r" (x)); return (x >> 7) & 0x1f; diff --git a/lib/libc/arch/mips/gen/fpgetround.c b/lib/libc/arch/mips/gen/fpgetround.c index e05bdc82f..c29e06270 100644 --- a/lib/libc/arch/mips/gen/fpgetround.c +++ b/lib/libc/arch/mips/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetround.c,v 1.6 2012/03/19 22:23:10 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.6 2012/03/19 22:23:10 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetround,_fpgetround) #endif fp_rnd -fpgetround() +fpgetround(void) { - int x; + fp_rnd x; __asm("cfc1 %0,$31" : "=r" (x)); return x & 0x03; diff --git a/lib/libc/arch/mips/gen/fpgetsticky.c b/lib/libc/arch/mips/gen/fpgetsticky.c index d72d234a6..408ea88e7 100644 --- a/lib/libc/arch/mips/gen/fpgetsticky.c +++ b/lib/libc/arch/mips/gen/fpgetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.8 2012/03/20 16:19:56 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetsticky.c,v 1.8 2012/03/20 16:19:56 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetsticky,_fpgetsticky) #endif fp_except -fpgetsticky() +fpgetsticky(void) { - int x; + fp_except x; __asm("cfc1 %0,$31" : "=r" (x)); return (x >> 2) & 0x1f; diff --git a/lib/libc/arch/mips/gen/fpsetmask.c b/lib/libc/arch/mips/gen/fpsetmask.c index f3710abc7..e1083de15 100644 --- a/lib/libc/arch/mips/gen/fpsetmask.c +++ b/lib/libc/arch/mips/gen/fpsetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.8 2012/03/20 16:19:56 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetmask.c,v 1.8 2012/03/20 16:19:56 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,16 +19,14 @@ __weak_alias(fpsetmask,_fpsetmask) #endif fp_except -fpsetmask(mask) - fp_except mask; +fpsetmask(fp_except mask) { fp_except old; fp_except new; __asm("cfc1 %0,$31" : "=r" (old)); - new = old; - new &= ~(0x1f << 7); + new = old & ~(0x1f << 7); new |= ((mask & 0x1f) << 7); __asm("ctc1 %0,$31" : : "r" (new)); diff --git a/lib/libc/arch/mips/gen/fpsetround.c b/lib/libc/arch/mips/gen/fpsetround.c index 7741b8401..43c5dd013 100644 --- a/lib/libc/arch/mips/gen/fpsetround.c +++ b/lib/libc/arch/mips/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetround.c,v 1.6 2012/03/19 22:23:10 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.6 2012/03/19 22:23:10 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,17 +19,15 @@ __weak_alias(fpsetround,_fpsetround) #endif fp_rnd -fpsetround(rnd_dir) - fp_rnd rnd_dir; +fpsetround(fp_rnd rnd_dir) { fp_rnd old; fp_rnd new; __asm("cfc1 %0,$31" : "=r" (old)); - new = old; - new &= ~0x03; - new |= (rnd_dir & 0x03); + new = old & ~0x03; + new |= rnd_dir & 0x03; __asm("ctc1 %0,$31" : : "r" (new)); diff --git a/lib/libc/arch/mips/gen/fpsetsticky.c b/lib/libc/arch/mips/gen/fpsetsticky.c index c86f59511..823e4880b 100644 --- a/lib/libc/arch/mips/gen/fpsetsticky.c +++ b/lib/libc/arch/mips/gen/fpsetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetsticky.c,v 1.8 2012/03/20 16:19:56 matt Exp $ */ /* * Written by J.T. Conklin, Apr 11, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetsticky.c,v 1.8 2012/03/20 16:19:56 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,17 +19,15 @@ __weak_alias(fpsetsticky,_fpsetsticky) #endif fp_except -fpsetsticky(sticky) - fp_except sticky; +fpsetsticky(fp_except sticky) { fp_except old; fp_except new; __asm("cfc1 %0,$31" : "=r" (old)); - new = old; - new &= ~(0x1f << 2); - new |= ((sticky & 0x1f) << 2); + new = old & ~(0x1f << 2); + new |= (sticky & 0x1f) << 2; __asm("ctc1 %0,$31" : : "r" (new)); diff --git a/lib/libc/arch/mips/gen/longjmp.c b/lib/libc/arch/mips/gen/longjmp.c index 8a7072137..547fd399f 100644 --- a/lib/libc/arch/mips/gen/longjmp.c +++ b/lib/libc/arch/mips/gen/longjmp.c @@ -1,4 +1,4 @@ -/* $NetBSD: longjmp.c,v 1.4 2010/09/03 17:22:51 matt Exp $ */ +/* $NetBSD: longjmp.c,v 1.5 2012/03/29 19:27:05 christos Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -49,7 +49,7 @@ __longjmp14(jmp_buf env, int val) ucontext_t uc; /* Ensure non-zero SP and sigcontext magic number is present */ - if (sc->sc_regs[_R_SP] == 0 || sc->sc_regs[_R_ZERO] != (mips_reg_t)0xACEDBADE) + if (sc->sc_regs[_R_SP] == 0 || sc->sc_regs[_R_ZERO] != (mips_reg_t)0xACEDBADEU) goto err; /* Ensure non-zero return value */ diff --git a/lib/libc/arch/mips/gen/makecontext.c b/lib/libc/arch/mips/gen/makecontext.c index 7aa42984f..932f071d5 100644 --- a/lib/libc/arch/mips/gen/makecontext.c +++ b/lib/libc/arch/mips/gen/makecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.5 2009/12/14 01:07:42 matt Exp $ */ +/* $NetBSD: makecontext.c,v 1.7 2011/09/20 08:42:29 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.5 2009/12/14 01:07:42 matt Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.7 2011/09/20 08:42:29 joerg Exp $"); #endif #include @@ -41,6 +41,8 @@ __RCSID("$NetBSD: makecontext.c,v 1.5 2009/12/14 01:07:42 matt Exp $"); #include +void __resumecontext(void) __dead; + void makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) { @@ -49,8 +51,6 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) int i; va_list ap; - void __resumecontext(void); - /* LINTED uintptr_t is safe */ sp = (__greg_t *) ((uintptr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); diff --git a/lib/libc/arch/mips/gen/resumecontext.c b/lib/libc/arch/mips/gen/resumecontext.c index 08362ec2e..66781b68f 100644 --- a/lib/libc/arch/mips/gen/resumecontext.c +++ b/lib/libc/arch/mips/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:57 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:57 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:56 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/mips/gen/swapcontext.S b/lib/libc/arch/mips/gen/swapcontext.S index 9f19534e7..e2aff9d39 100644 --- a/lib/libc/arch/mips/gen/swapcontext.S +++ b/lib/libc/arch/mips/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.4 2009/12/14 01:07:42 matt Exp $ */ +/* $NetBSD: swapcontext.S,v 1.5 2012/09/12 02:00:52 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #include "assym.h" #if defined(SYSLIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: swapcontext.S,v 1.4 2009/12/14 01:07:42 matt Exp $") + RCSID("$NetBSD: swapcontext.S,v 1.5 2012/09/12 02:00:52 manu Exp $") #endif /* SYSLIBC_SCCS && !lint */ .set reorder @@ -57,7 +57,7 @@ NESTED(swapcontext, CALLFRAME_SIZ, ra) REG_S v0, _OFFSETOF_UC_GREGS_SP(v1) REG_EPILOGUE - SYSTRAP(setcontext) + PIC_TAILCALL(setcontext) /* NOTREACHED */ 1: PTR_ADDU sp, sp, CALLFRAME_SIZ diff --git a/lib/libc/arch/mips/softfloat/mips-gcc.h b/lib/libc/arch/mips/softfloat/mips-gcc.h index 6ed3c22eb..364924614 100644 --- a/lib/libc/arch/mips/softfloat/mips-gcc.h +++ b/lib/libc/arch/mips/softfloat/mips-gcc.h @@ -1,4 +1,4 @@ -/* $NetBSD: mips-gcc.h,v 1.2 2009/12/14 01:07:42 matt Exp $ */ +/* $NetBSD: mips-gcc.h,v 1.5 2011/06/27 06:40:26 matt Exp $ */ /* ------------------------------------------------------------------------------- @@ -85,7 +85,7 @@ to be `static'. /* ------------------------------------------------------------------------------- -The ARM FPA is odd in that it stores doubles high-order word first, no matter +The MIPS FPA is odd in that it stores doubles high-order word first, no matter what the endianness of the CPU. VFP is sane. ------------------------------------------------------------------------------- */ diff --git a/lib/libc/arch/mips/softfloat/softfloat.h b/lib/libc/arch/mips/softfloat/softfloat.h index ab2ae0569..c731604e7 100644 --- a/lib/libc/arch/mips/softfloat/softfloat.h +++ b/lib/libc/arch/mips/softfloat/softfloat.h @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.3 2011/01/17 23:53:04 matt Exp $ */ +/* $NetBSD: softfloat.h,v 1.5 2011/07/07 07:14:57 matt Exp $ */ /* This is a derivative work. */ @@ -86,12 +86,10 @@ Software IEC/IEEE floating-point rounding mode. ------------------------------------------------------------------------------- */ extern fp_rnd float_rounding_mode; -enum { - float_round_nearest_even = FP_RN, - float_round_to_zero = FP_RZ, - float_round_down = FP_RM, - float_round_up = FP_RP -}; +#define float_round_nearest_even FP_RN +#define float_round_to_zero FP_RZ +#define float_round_down FP_RM +#define float_round_up FP_RP /* ------------------------------------------------------------------------------- @@ -121,13 +119,17 @@ void float_raise( fp_except ); Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */ float32 int64_to_float32( long long ); diff --git a/lib/libc/arch/mips/sys/cerror.S b/lib/libc/arch/mips/sys/cerror.S index 059c3d313..e3bd675ed 100644 --- a/lib/libc/arch/mips/sys/cerror.S +++ b/lib/libc/arch/mips/sys/cerror.S @@ -1,4 +1,4 @@ -/* $NetBSD: cerror.S,v 1.16 2011/01/17 23:34:44 matt Exp $ */ +/* $NetBSD: cerror.S,v 1.18 2012/02/27 14:48:34 tsutsui Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -38,12 +38,12 @@ #if 0 RCSID("from: @(#)cerror.s 8.1 (Berkeley) 6/16/93") #else - RCSID("$NetBSD: cerror.S,v 1.16 2011/01/17 23:34:44 matt Exp $") + RCSID("$NetBSD: cerror.S,v 1.18 2012/02/27 14:48:34 tsutsui Exp $") #endif #endif /* LIBC_SCCS and not lint */ #ifdef PIC - .hidden __cerror + .protected __cerror #endif #ifdef _REENTRANT diff --git a/lib/libc/arch/powerpc/gen/Makefile.inc b/lib/libc/arch/powerpc/gen/Makefile.inc index a0d17995e..01b8533aa 100644 --- a/lib/libc/arch/powerpc/gen/Makefile.inc +++ b/lib/libc/arch/powerpc/gen/Makefile.inc @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.24 2009/12/06 07:12:17 uebayasi Exp $ +# $NetBSD: Makefile.inc,v 1.25 2011/03/12 07:55:09 matt Exp $ SRCS+= __setjmp14.S __sigsetjmp14.S _setjmp.S SRCS+= bswap16.c bswap32.c bswap64.c @@ -21,6 +21,8 @@ SRCS+= fpgetround.c fpsetround.c fpgetmask.c fpsetmask.c SRCS+= fpgetsticky.c fpsetsticky.c .endif +CPPFLAGS._lwp.c += -D_LIBC_SOURCE + LSRCS.powerpc.gen=Lint_swapcontext.c LSRCS+= ${LSRCS.powerpc.gen} DPSRCS+= ${LSRCS.powerpc.gen} diff --git a/lib/libc/arch/powerpc/gen/_lwp.c b/lib/libc/arch/powerpc/gen/_lwp.c index 4a5597037..f2e914e4e 100644 --- a/lib/libc/arch/powerpc/gen/_lwp.c +++ b/lib/libc/arch/powerpc/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.4 2005/06/12 05:21:26 lukem Exp $ */ +/* $NetBSD: _lwp.c,v 1.7 2012/03/22 05:36:50 matt Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -37,10 +37,11 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.4 2005/06/12 05:21:26 lukem Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.7 2012/03/22 05:36:50 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #include #include @@ -48,9 +49,9 @@ __RCSID("$NetBSD: _lwp.c,v 1.4 2005/06/12 05:21:26 lukem Exp $"); void _lwp_makecontext(ucontext_t *u, void (*start)(void *), void *arg, - void *private, caddr_t stack_base, size_t stack_size) + void *tcb, caddr_t stack_base, size_t stack_size) { - void **sp; + uintptr_t sp; getcontext(u); u->uc_link = NULL; @@ -58,10 +59,14 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), void *arg, u->uc_stack.ss_sp = stack_base; u->uc_stack.ss_size = stack_size; - sp = (void **) (stack_base + stack_size); + sp = (uintptr_t)stack_base + stack_size; + sp -= STACK_ALIGNBYTES + 1; + sp &= ~STACK_ALIGNBYTES; - u->uc_mcontext.__gregs[3] = (int) arg; /* arg1 */ - u->uc_mcontext.__gregs[1] = ((int) sp) - 12; /* stack */ - u->uc_mcontext.__gregs[33] = (int) _lwp_exit; /* LR */ - u->uc_mcontext.__gregs[34] = (int) start; /* PC */ + u->uc_mcontext.__gregs[3] = (uintptr_t) arg; /* arg1 */ + u->uc_mcontext.__gregs[1] = sp; /* stack */ + u->uc_mcontext.__gregs[33] = (uintptr_t) _lwp_exit; /* LR */ + u->uc_mcontext.__gregs[34] = (uintptr_t) start; /* PC */ + u->uc_mcontext.__gregs[_REG_R2] = + (uintptr_t)tcb + TLS_TP_OFFSET + sizeof(struct tls_tcb); } diff --git a/lib/libc/arch/powerpc/gen/flt_rounds.c b/lib/libc/arch/powerpc/gen/flt_rounds.c index d0b14f40d..4a03e7cec 100644 --- a/lib/libc/arch/powerpc/gen/flt_rounds.c +++ b/lib/libc/arch/powerpc/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.10 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.11 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1996 Mark Brinicombe @@ -33,7 +33,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.10 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.11 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -54,9 +54,12 @@ __flt_rounds(void) #ifdef _SOFT_FLOAT return map[fpgetround()]; #else - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; - __asm volatile("mffs %0" : "=f"(fpscr)); - return map[((uint32_t)fpscr & FPSCR_RN)]; + __asm volatile("mffs %0" : "=f"(ud.u_d)); + return map[((uint32_t)ud.u_fpscr & FPSCR_RN)]; #endif } diff --git a/lib/libc/arch/powerpc/gen/fpgetmask.c b/lib/libc/arch/powerpc/gen/fpgetmask.c index 278411b49..6bc3f91cf 100644 --- a/lib/libc/arch/powerpc/gen/fpgetmask.c +++ b/lib/libc/arch/powerpc/gen/fpgetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: fpgetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -50,8 +50,11 @@ __weak_alias(fpgetmask,_fpgetmask) fp_except fpgetmask(void) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; - __asm volatile("mffs %0" : "=f"(fpscr)); - return (((uint32_t)fpscr & MASKBITS) >> MASKSHFT); + __asm volatile("mffs %0" : "=f"(ud.u_d)); + return (((uint32_t)ud.u_fpscr & MASKBITS) >> MASKSHFT); } diff --git a/lib/libc/arch/powerpc/gen/fpgetround.c b/lib/libc/arch/powerpc/gen/fpgetround.c index 65c19eb80..58cfe030f 100644 --- a/lib/libc/arch/powerpc/gen/fpgetround.c +++ b/lib/libc/arch/powerpc/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.9 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: fpgetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.9 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -50,8 +50,11 @@ __weak_alias(fpgetround,_fpgetround) fp_rnd fpgetround(void) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; - __asm volatile("mffs %0" : "=f"(fpscr)); - return (((uint32_t)fpscr & ROUNDBITS) >> ROUNDSHFT); + __asm volatile("mffs %0" : "=f"(ud.u_d)); + return (((uint32_t)ud.u_fpscr & ROUNDBITS) >> ROUNDSHFT); } diff --git a/lib/libc/arch/powerpc/gen/fpgetsticky.c b/lib/libc/arch/powerpc/gen/fpgetsticky.c index 7fba344c9..079acc0c0 100644 --- a/lib/libc/arch/powerpc/gen/fpgetsticky.c +++ b/lib/libc/arch/powerpc/gen/fpgetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetsticky.c,v 1.9 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.10 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetsticky.c,v 1.9 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: fpgetsticky.c,v 1.10 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -50,8 +50,11 @@ __weak_alias(fpgetsticky,_fpgetsticky) fp_except fpgetsticky(void) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; - __asm volatile("mffs %0" : "=f"(fpscr)); - return (((uint32_t)fpscr & STICKYBITS) >> STICKYSHFT); + __asm volatile("mffs %0" : "=f"(ud.u_d)); + return (((uint32_t)ud.u_fpscr & STICKYBITS) >> STICKYSHFT); } diff --git a/lib/libc/arch/powerpc/gen/fpsetmask.c b/lib/libc/arch/powerpc/gen/fpsetmask.c index 8e6f07939..ef298c591 100644 --- a/lib/libc/arch/powerpc/gen/fpsetmask.c +++ b/lib/libc/arch/powerpc/gen/fpsetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $"); +__RCSID("$NetBSD: fpsetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -50,13 +50,16 @@ __weak_alias(fpsetmask,_fpsetmask) fp_except fpsetmask(fp_except mask) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; fp_except old; - __asm volatile("mffs %0" : "=f"(fpscr)); - old = ((uint32_t)fpscr & MASKBITS) >> MASKSHFT; - fpscr &= ~MASKBITS; - fpscr |= ((uint32_t)mask << MASKSHFT) & MASKBITS; - __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + __asm volatile("mffs %0" : "=f"(ud.u_d)); + old = ((uint32_t)ud.u_fpscr & MASKBITS) >> MASKSHFT; + ud.u_fpscr &= ~MASKBITS; + ud.u_fpscr |= ((uint32_t)mask << MASKSHFT) & MASKBITS; + __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d)); return (old); } diff --git a/lib/libc/arch/powerpc/gen/fpsetround.c b/lib/libc/arch/powerpc/gen/fpsetround.c index d45124104..c2ed35eaa 100644 --- a/lib/libc/arch/powerpc/gen/fpsetround.c +++ b/lib/libc/arch/powerpc/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.9 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: fpsetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.9 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -49,13 +49,16 @@ __weak_alias(fpsetround,_fpsetround) fp_rnd fpsetround(fp_rnd rnd_dir) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; fp_rnd old; - __asm volatile("mffs %0" : "=f"(fpscr)); - old = (uint32_t)fpscr & ROUNDBITS; - fpscr &= ~ROUNDBITS; - fpscr |= rnd_dir & ROUNDBITS; - __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + __asm volatile("mffs %0" : "=f"(ud.u_d)); + old = (uint32_t)ud.u_fpscr & ROUNDBITS; + ud.u_fpscr &= ~ROUNDBITS; + ud.u_fpscr |= rnd_dir & ROUNDBITS; + __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d)); return (old); } diff --git a/lib/libc/arch/powerpc/gen/fpsetsticky.c b/lib/libc/arch/powerpc/gen/fpsetsticky.c index 2ce3f7d45..71df9c058 100644 --- a/lib/libc/arch/powerpc/gen/fpsetsticky.c +++ b/lib/libc/arch/powerpc/gen/fpsetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetsticky.c,v 1.10 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: fpsetsticky.c,v 1.11 2011/07/10 21:18:47 matt Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetsticky.c,v 1.10 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: fpsetsticky.c,v 1.11 2011/07/10 21:18:47 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -53,32 +53,35 @@ __weak_alias(fpsetsticky,_fpsetsticky) fp_except fpsetsticky(fp_except mask) { - uint64_t fpscr; + union { + double u_d; + uint64_t u_fpscr; + } ud; fp_except old; - __asm volatile("mffs %0" : "=f"(fpscr)); - old = ((uint32_t)fpscr & STICKYBITS) >> STICKYSHFT; + __asm volatile("mffs %0" : "=f"(ud.u_d)); + old = ((uint32_t)ud.u_fpscr & STICKYBITS) >> STICKYSHFT; /* * FPSCR_VX (aka FP_X_INV) is not a sticky bit but a summary of the * all the FPSCR_VX* sticky bits. So when FP_X_INV is cleared then * clear all of those bits, likewise when it's set, set them all. */ if ((mask & FP_X_INV) == 0) - fpscr &= ~INVBITS; + ud.u_fpscr &= ~INVBITS; else - fpscr |= INVBITS; - fpscr &= ~STICKYBITS; - fpscr |= ((uint32_t)mask << STICKYSHFT) & STICKYBITS; + ud.u_fpscr |= INVBITS; + ud.u_fpscr &= ~STICKYBITS; + ud.u_fpscr |= ((uint32_t)mask << STICKYSHFT) & STICKYBITS; /* * Make FPSCR_FX reflect the presence of a set sticky bit (or not). */ - if (fpscr & (STICKYBITS|INVBITS)) - fpscr |= FPSCR_FX; + if (ud.u_fpscr & (STICKYBITS|INVBITS)) + ud.u_fpscr |= FPSCR_FX; else - fpscr &= ~FPSCR_FX; + ud.u_fpscr &= ~FPSCR_FX; /* * Write back the fpscr. */ - __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d)); return (old); } diff --git a/lib/libc/arch/powerpc/gen/resumecontext.c b/lib/libc/arch/powerpc/gen/resumecontext.c index 1a7c4c55f..57d68fdf8 100644 --- a/lib/libc/arch/powerpc/gen/resumecontext.c +++ b/lib/libc/arch/powerpc/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/powerpc/softfloat/softfloat.h b/lib/libc/arch/powerpc/softfloat/softfloat.h index d9c095b2c..dfb038ab8 100644 --- a/lib/libc/arch/powerpc/softfloat/softfloat.h +++ b/lib/libc/arch/powerpc/softfloat/softfloat.h @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.5 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.7 2011/07/07 07:14:57 matt Exp $ */ /* This is a derivative work. */ @@ -84,12 +84,10 @@ Software IEC/IEEE floating-point rounding mode. ------------------------------------------------------------------------------- */ extern fp_rnd float_rounding_mode; -enum { - float_round_nearest_even = FP_RN, - float_round_to_zero = FP_RZ, - float_round_down = FP_RM, - float_round_up = FP_RP -}; +#define float_round_nearest_even FP_RN +#define float_round_to_zero FP_RZ +#define float_round_down FP_RM +#define float_round_up FP_RP /* ------------------------------------------------------------------------------- @@ -119,13 +117,17 @@ void float_raise( fp_except ); Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); diff --git a/lib/libc/arch/powerpc/string/bzero.S b/lib/libc/arch/powerpc/string/bzero.S index 3e441e1bd..d04d4a130 100644 --- a/lib/libc/arch/powerpc/string/bzero.S +++ b/lib/libc/arch/powerpc/string/bzero.S @@ -1,4 +1,4 @@ -/* $NetBSD: bzero.S,v 1.10 2011/01/19 02:47:01 matt Exp $ */ +/* $NetBSD: bzero.S,v 1.11 2011/01/29 02:21:20 matt Exp $ */ /*- * Copyright (C) 2001 Martin J. Laubach @@ -32,7 +32,7 @@ #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: bzero.S,v 1.10 2011/01/19 02:47:01 matt Exp $") +__RCSID("$NetBSD: bzero.S,v 1.11 2011/01/29 02:21:20 matt Exp $") #endif /* LIBC_SCCS && !lint */ #ifdef _KERNEL @@ -60,10 +60,10 @@ ENTRY(bzero) END(bzero) ENTRY(memset) - cmplwi cr1, %r5, 0 + cmplwi %cr1, %r5, 0 mr. %r0, %r4 mr %r8, %r3 - beqlr- cr1 /* Nothing to do */ + beqlr- %cr1 /* Nothing to do */ rlwimi %r0, %r4, 8, 16, 23 /* word extend fill value */ rlwimi %r0, %r0, 16, 0, 15 @@ -167,8 +167,8 @@ cb_memset: lwz %r30, R30_SAVE(%r1) #endif addi %r1, %r1, STKFRAME_SZ - lwz %r0, 4(%r1) - mtlr %r0 + lwz %r7, 4(%r1) + mtlr %r7 cntlzw %r6, %r9 /* compute shift value */ li %r5, 31 @@ -213,10 +213,10 @@ cb_cacheline_known: #endif /* _KERNEL */ /* Back in memory filling business */ - cmplwi cr1, r_len, 0 /* Nothing to do? */ + cmplwi %cr1, r_len, 0 /* Nothing to do? */ add %r5, %r9, %r9 cmplw r_len, %r5 /* <= 2*CL bytes to move? */ - beqlr- cr1 /* then do nothing */ + beqlr- %cr1 /* then do nothing */ blt+ simple_fill /* a trivial fill routine */ @@ -277,9 +277,9 @@ cb_aligned_cb: /* no need to check r_len, see above */ bdnz 1b cblocks_done: /* still CL aligned, but less than CL bytes left */ - cmplwi cr1, r_len, 0 + cmplwi %cr1, r_len, 0 cmplwi r_len, 8 - beq- cr1, sf_return + beq- %cr1, sf_return blt- sf_bytewise /* <8 remaining? */ b sf_aligned_w @@ -292,12 +292,12 @@ wbzero: li r_val, 0 simple_fill: #if USE_STSWX - cmplwi cr1, r_len, 12 /* < 12 bytes to move? */ + cmplwi %cr1, r_len, 12 /* < 12 bytes to move? */ #else - cmplwi cr1, r_len, 8 /* < 8 bytes to move? */ + cmplwi %cr1, r_len, 8 /* < 8 bytes to move? */ #endif andi. %r5, r_dst, 0x03 /* bytes to fill to align4 */ - blt cr1, sf_bytewise /* trivial byte mover */ + blt %cr1, sf_bytewise /* trivial byte mover */ li %r6, 4 subf %r5, %r5, %r6 diff --git a/lib/libc/arch/powerpc/sys/cerror.S b/lib/libc/arch/powerpc/sys/cerror.S index 9e86f75ed..e273e996b 100644 --- a/lib/libc/arch/powerpc/sys/cerror.S +++ b/lib/libc/arch/powerpc/sys/cerror.S @@ -1,17 +1,17 @@ -/* $NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $ */ +/* $NetBSD: cerror.S,v 1.10 2012/02/27 15:47:11 matt Exp $ */ #include "SYS.h" #include "assym.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $") +__RCSID("$NetBSD: cerror.S,v 1.10 2012/02/27 15:47:11 matt Exp $") #endif /* LIBC_SCCS && !lint */ #ifndef _REENTRANT .globl _C_LABEL(errno) #endif #ifdef PIC - .hidden _C_LABEL(__cerror) + .protected _C_LABEL(__cerror) #endif ENTRY(__cerror) diff --git a/lib/libc/arch/powerpc64/gen/resumecontext.c b/lib/libc/arch/powerpc64/gen/resumecontext.c index 7baafea1e..f604739da 100644 --- a/lib/libc/arch/powerpc64/gen/resumecontext.c +++ b/lib/libc/arch/powerpc64/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/powerpc64/gen/swapcontext.S b/lib/libc/arch/powerpc64/gen/swapcontext.S index a3d7b9c77..d170b0f67 100644 --- a/lib/libc/arch/powerpc64/gen/swapcontext.S +++ b/lib/libc/arch/powerpc64/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:52 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #if defined(LIBC_SCCS) && !defined(lint) .text - .asciz "$NetBSD: swapcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $" + .asciz "$NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:52 manu Exp $" #endif /* LIBC_SCCS && !lint */ ENTRY(swapcontext) @@ -52,8 +52,8 @@ ENTRY(swapcontext) std %r0,mc_off+34*8(%r11) # pc <- lr la %r0,16(%r1) std %r0,mc_off+1*8(%r11) # adjust sp - ld %r3,SF_PARAM+8(%r1) # load ucp - bl .setcontext # setcontext(ucp) + ld %r3,SF_PARAM+8(%r1) # load ucp + bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp) nop 1: ld %r0,SF_SZ+SF_LR(%r1) diff --git a/lib/libc/arch/powerpc64/sys/brk.S b/lib/libc/arch/powerpc64/sys/brk.S index 6eb574d1b..81d8868dd 100644 --- a/lib/libc/arch/powerpc64/sys/brk.S +++ b/lib/libc/arch/powerpc64/sys/brk.S @@ -1,4 +1,4 @@ -/* $NetBSD: brk.S,v 1.3 2006/07/07 06:50:06 ross Exp $ */ +/* $NetBSD: brk.S,v 1.4 2011/10/29 16:03:33 christos Exp $ */ #include "SYS.h" @@ -37,4 +37,5 @@ ENTRY(_brk) blr # return 0 1: - b .__cerror + b PIC_PLT(_C_LABEL(__cerror)) + diff --git a/lib/libc/arch/powerpc64/sys/cerror.S b/lib/libc/arch/powerpc64/sys/cerror.S index e360b691d..24ca13559 100644 --- a/lib/libc/arch/powerpc64/sys/cerror.S +++ b/lib/libc/arch/powerpc64/sys/cerror.S @@ -1,4 +1,4 @@ -/* $NetBSD: cerror.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: cerror.S,v 1.4 2012/02/27 15:47:11 matt Exp $ */ #include #include "SYS.h" @@ -6,6 +6,9 @@ #ifndef _REENTRANT .globl _C_LABEL(errno) #endif +#ifdef PIC + .protected _C_LABEL(__cerror) +#endif ENTRY(__cerror) #ifdef _REENTRANT diff --git a/lib/libc/arch/powerpc64/sys/getcontext.S b/lib/libc/arch/powerpc64/sys/getcontext.S index a718dc529..e5729ba00 100644 --- a/lib/libc/arch/powerpc64/sys/getcontext.S +++ b/lib/libc/arch/powerpc64/sys/getcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: getcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: getcontext.S,v 1.4 2011/10/29 16:03:33 christos Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #if defined(SYSLIBC_SCCS) && !defined(lint) .text - .asciz "$NetBSD: getcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $" + .asciz "$NetBSD: getcontext.S,v 1.4 2011/10/29 16:03:33 christos Exp $" #endif /* SYSLIBC_SCCS && !lint */ #ifdef WEAK_ALIAS @@ -50,4 +50,4 @@ ENTRY(_getcontext) stw %r3,(48 + 3 * 4)(%r5) # arrange for return value 0 blr 1: - b .__cerror + b PIC_PLT(_C_LABEL(__cerror)) diff --git a/lib/libc/arch/sh3/SYS.h b/lib/libc/arch/sh3/SYS.h index 91e856cc1..c38fcfe33 100644 --- a/lib/libc/arch/sh3/SYS.h +++ b/lib/libc/arch/sh3/SYS.h @@ -30,16 +30,17 @@ * SUCH DAMAGE. * * from: @(#)SYS.h 5.5 (Berkeley) 5/7/91 - * $NetBSD: SYS.h,v 1.9 2006/01/06 06:19:20 uwe Exp $ + * $NetBSD: SYS.h,v 1.10 2011/01/23 14:08:53 joerg Exp $ */ #include #include #ifdef __STDC__ +#define IMMEDIATE # #define SYSTRAP(x) \ mov.l 903f, r0; \ - .long 0xc380; /* trapa #0x80 */ \ + trapa IMMEDIATE 0x80; \ bra 904f; \ nop; \ .align 2; \ diff --git a/lib/libc/arch/sh3/gen/_lwp.c b/lib/libc/arch/sh3/gen/_lwp.c index 84d16472c..3f40e331d 100644 --- a/lib/libc/arch/sh3/gen/_lwp.c +++ b/lib/libc/arch/sh3/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.4 2005/06/12 05:21:26 lukem Exp $ */ +/* $NetBSD: _lwp.c,v 1.6 2012/03/22 09:32:04 he Exp $ */ /* * Copyright (c) 2002 Wasabi Systems, Inc. @@ -37,7 +37,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.4 2005/06/12 05:21:26 lukem Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.6 2012/03/22 09:32:04 he Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -50,7 +50,7 @@ void _lwp_makecontext(ucontext_t *u, void (*start)(void *), void *arg, void *private, caddr_t stack_base, size_t stack_size) { - void **sp; + uintptr_t sp; getcontext(u); u->uc_link = NULL; @@ -58,10 +58,11 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), u->uc_stack.ss_sp = stack_base; u->uc_stack.ss_size = stack_size; - sp = (void **) (stack_base + stack_size); + sp = (uintptr_t)stack_base + stack_size; u->uc_mcontext.__gregs[_REG_R4] = (__greg_t) arg; u->uc_mcontext.__gregs[_REG_SP] = ((__greg_t) sp) & ~3; u->uc_mcontext.__gregs[_REG_PR] = (__greg_t) _lwp_exit; u->uc_mcontext.__gregs[_REG_PC] = (__greg_t) start; + u->uc_mcontext.__gregs[_REG_GBR] = (__greg_t) private; } diff --git a/lib/libc/arch/sh3/gen/flt_rounds.c b/lib/libc/arch/sh3/gen/flt_rounds.c index 936d8f4c4..41caa5455 100644 --- a/lib/libc/arch/sh3/gen/flt_rounds.c +++ b/lib/libc/arch/sh3/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.4 2007/01/17 23:24:22 hubertf Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.5 2012/03/22 08:58:39 he Exp $ */ /* * Copyright (c) 1996 Mark Brinicombe @@ -33,7 +33,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.4 2007/01/17 23:24:22 hubertf Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.5 2012/03/22 08:58:39 he Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -75,7 +75,7 @@ static const int map[] = { extern int __flt_rounds __P((void)); int -__flt_rounds() +__flt_rounds(void) { return(map[fpgetround()]); } diff --git a/lib/libc/arch/sh3/gen/resumecontext.c b/lib/libc/arch/sh3/gen/resumecontext.c index 1a7c4c55f..57d68fdf8 100644 --- a/lib/libc/arch/sh3/gen/resumecontext.c +++ b/lib/libc/arch/sh3/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/sh3/softfloat/softfloat.h b/lib/libc/arch/sh3/softfloat/softfloat.h index a1f9b1ab8..b6d3936e4 100644 --- a/lib/libc/arch/sh3/softfloat/softfloat.h +++ b/lib/libc/arch/sh3/softfloat/softfloat.h @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.9 2006/05/16 20:55:51 mrg Exp $ */ +/* $NetBSD: softfloat.h,v 1.11 2011/07/07 07:14:57 matt Exp $ */ /* This is a derivative work. */ @@ -84,12 +84,10 @@ Software IEC/IEEE floating-point rounding mode. ------------------------------------------------------------------------------- */ extern fp_rnd float_rounding_mode; -enum { - float_round_nearest_even = FP_RN, - float_round_to_zero = FP_RZ, - float_round_down = FP_RM, - float_round_up = FP_RP -}; +#define float_round_nearest_even FP_RN +#define float_round_to_zero FP_RZ +#define float_round_down FP_RM +#define float_round_up FP_RP /* ------------------------------------------------------------------------------- @@ -119,13 +117,17 @@ void float_raise( fp_except ); Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif #ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */ float32 int64_to_float32( long long ); diff --git a/lib/libc/arch/sparc/Makefile.inc b/lib/libc/arch/sparc/Makefile.inc index cc99fbeb2..cf8f58094 100644 --- a/lib/libc/arch/sparc/Makefile.inc +++ b/lib/libc/arch/sparc/Makefile.inc @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.13 2008/10/26 07:43:07 mrg Exp $ +# $NetBSD: Makefile.inc,v 1.14 2011/04/12 03:35:47 mrg Exp $ SRCS+= __sigaction14_sigtramp.c __sigtramp2.S @@ -9,24 +9,28 @@ CLEANFILES+=rem.S sdiv.S udiv.S urem.S sdiv.S: ${LIBCDIR}/arch/sparc/gen/divrem.m4 @echo 'building ${.TARGET} from ${.ALLSRC}' + @rm -f ${.TARGET} @(echo "define(NAME,\`.div')define(OP,\`div')define(S,\`true')"; \ cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} @chmod 444 ${.TARGET} udiv.S: ${LIBCDIR}/arch/sparc/gen/divrem.m4 @echo 'building ${.TARGET} from ${.ALLSRC}' + @rm -f ${.TARGET} @(echo "define(NAME,\`.udiv')define(OP,\`div')define(S,\`false')"; \ cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} @chmod 444 ${.TARGET} rem.S: ${LIBCDIR}/arch/sparc/gen/divrem.m4 @echo 'building ${.TARGET} from ${.ALLSRC}' + @rm -f ${.TARGET} @(echo "define(NAME,\`.rem')define(OP,\`rem')define(S,\`true')"; \ cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} @chmod 444 ${.TARGET} urem.S: ${LIBCDIR}/arch/sparc/gen/divrem.m4 @echo 'building ${.TARGET} from ${.ALLSRC}' + @rm -f ${.TARGET} @(echo "define(NAME,\`.urem')define(OP,\`rem')define(S,\`false')"; \ cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} @chmod 444 ${.TARGET} diff --git a/lib/libc/arch/sparc/SYS.h b/lib/libc/arch/sparc/SYS.h index 5f8f3a469..12bc4f807 100644 --- a/lib/libc/arch/sparc/SYS.h +++ b/lib/libc/arch/sparc/SYS.h @@ -33,7 +33,7 @@ * @(#)SYS.h 8.1 (Berkeley) 6/4/93 * * from: Header: SYS.h,v 1.2 92/07/03 18:57:00 torek Exp - * $NetBSD: SYS.h,v 1.17 2007/10/08 13:06:00 uwe Exp $ + * $NetBSD: SYS.h,v 1.18 2011/03/28 11:19:12 martin Exp $ */ #include @@ -59,10 +59,10 @@ */ #ifdef PIC #define CALL(name) \ - PIC_PROLOGUE(%g1, %g2); \ - set name, %g2; \ - ld [%g1 + %g2], %g2; \ - jmp %g2; \ + PIC_PROLOGUE(%g1, %g5); \ + set name, %g5; \ + ld [%g1 + %g5], %g5; \ + jmp %g5; \ nop #else #define CALL(name) \ @@ -91,15 +91,15 @@ ENTRY(x); \ /* * RSYSCALL is used when the system call should just return. Here we - * use the SYSCALL_G2RFLAG to put the `success' return address in %g2 + * use the SYSCALL_G5RFLAG to put the `success' return address in %g5 * and avoid a branch. * * PSEUDO(x,y) is like RSYSCALL(y), except that the name is x. */ #define _RSYSCALL(x,y) \ ENTRY(x); \ - mov (_CAT(SYS_,y)) | SYSCALL_G2RFLAG, %g1; \ - add %o7, 8, %g2; \ + mov (_CAT(SYS_,y)) | SYSCALL_G5RFLAG, %g1; \ + add %o7, 8, %g5; \ t ST_SYSCALL; \ ERROR() @@ -141,8 +141,8 @@ ENTRY(x); \ */ #define _RSYSCALL_NOERROR(x,y) \ ENTRY(x); \ - mov (_CAT(SYS_,y)) | SYSCALL_G2RFLAG, %g1; \ - add %o7, 8, %g2; \ + mov (_CAT(SYS_,y)) | SYSCALL_G5RFLAG, %g1; \ + add %o7, 8, %g5; \ t ST_SYSCALL #define RSYSCALL_NOERROR(x) _RSYSCALL_NOERROR(x,x) diff --git a/lib/libc/arch/sparc/gen/_lwp.c b/lib/libc/arch/sparc/gen/_lwp.c index a8a91e8d6..90450bd0d 100644 --- a/lib/libc/arch/sparc/gen/_lwp.c +++ b/lib/libc/arch/sparc/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: _lwp.c,v 1.7 2012/03/21 00:34:04 christos Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.7 2012/03/21 00:34:04 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -53,7 +53,7 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), void *arg, u->uc_stack.ss_size = stack_size; - sp = (ulong *)(stack_base + stack_size); + sp = (void *)(stack_base + stack_size); sp = (ulong *)((ulong)sp & ~0x07); /* Make room for the fake caller stack frame (CCFSZ, only in words) */ @@ -65,6 +65,7 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), void *arg, gr[_REG_O0] = (ulong)arg; gr[_REG_O6] = (ulong)sp; gr[_REG_O7] = (ulong)_lwp_exit - 8; + gr[_REG_G7] = (ulong)private; /* XXX: uwe: why do we need this? */ /* create loopback in the window save area on the stack? */ diff --git a/lib/libc/arch/sparc/gen/_setjmp.S b/lib/libc/arch/sparc/gen/_setjmp.S index 3c593f40e..f2a31418f 100644 --- a/lib/libc/arch/sparc/gen/_setjmp.S +++ b/lib/libc/arch/sparc/gen/_setjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: _setjmp.S,v 1.8 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: _setjmp.S,v 1.9 2011/04/30 23:41:12 martin Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -RCSID("$NetBSD: _setjmp.S,v 1.8 2008/04/28 20:22:57 martin Exp $") +RCSID("$NetBSD: _setjmp.S,v 1.9 2011/04/30 23:41:12 martin Exp $") #endif /* LIBC_SCCS and not lint */ /* @@ -47,6 +47,12 @@ RCSID("$NetBSD: _setjmp.S,v 1.8 2008/04/28 20:22:57 martin Exp $") */ ENTRY(_setjmp) + /* store important globals, sigsetjmp compatible */ + st %g3, [%o0 + 16] + st %g2, [%o0 + 24] + st %g4, [%o0 + 48] + st %g7, [%o0 + 52] + st %sp, [%o0+0] /* store caller's stack pointer */ st %o7, [%o0+4] /* and the return pc */ retl @@ -60,6 +66,12 @@ ENTRY(_longjmp) 0: t ST_FLUSHWIN ! flush register windows out to the stack + /* restore globals */ + ld [%o0 + 16], %g3 + ld [%o0 + 24], %g2 + ld [%o0 + 48], %g4 + ld [%o0 + 52], %g7 + /* * We restore the saved stack pointer to %fp, then issue * a `restore' instruction which will reload the register diff --git a/lib/libc/arch/sparc/gen/divrem.m4 b/lib/libc/arch/sparc/gen/divrem.m4 index 601fd9c9a..151ca0623 100644 --- a/lib/libc/arch/sparc/gen/divrem.m4 +++ b/lib/libc/arch/sparc/gen/divrem.m4 @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: Header: divrem.m4,v 1.4 92/06/25 13:23:57 torek Exp - * $NetBSD: divrem.m4,v 1.5 2003/08/07 16:42:23 agc Exp $ + * $NetBSD: divrem.m4,v 1.6 2011/03/23 20:54:35 martin Exp $ */ /* @@ -89,7 +89,7 @@ define(V, `%o5') /* m4 reminder: ifelse(a,b,c,d) => if a is b, then c, else d */ define(T, `%g1') -define(SC, `%g7') +define(SC, `%g5') ifelse(S, `true', `define(SIGN, `%g6')') /* diff --git a/lib/libc/arch/sparc/gen/flt_rounds.c b/lib/libc/arch/sparc/gen/flt_rounds.c index 7f674836e..c64b1ff86 100644 --- a/lib/libc/arch/sparc/gen/flt_rounds.c +++ b/lib/libc/arch/sparc/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.6 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.7 2012/03/21 00:38:34 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.6 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.7 2012/03/21 00:38:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,9 +21,9 @@ static const int map[] = { }; int -__flt_rounds() +__flt_rounds(void) { - int x; + unsigned int x; __asm("st %%fsr,%0" : "=m" (*&x)); return map[(x >> 30) & 0x03]; diff --git a/lib/libc/arch/sparc/gen/fpgetmask.c b/lib/libc/arch/sparc/gen/fpgetmask.c index 0639cb887..281e2474b 100644 --- a/lib/libc/arch/sparc/gen/fpgetmask.c +++ b/lib/libc/arch/sparc/gen/fpgetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.6 2012/03/21 00:38:34 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetmask.c,v 1.6 2012/03/21 00:38:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetmask,_fpgetmask) #endif fp_except -fpgetmask() +fpgetmask(void) { - int x; + unsigned int x; __asm("st %%fsr,%0" : "=m" (*&x)); return (x >> 23) & 0x1f; diff --git a/lib/libc/arch/sparc/gen/fpgetround.c b/lib/libc/arch/sparc/gen/fpgetround.c index 2dffecfec..eafd21a24 100644 --- a/lib/libc/arch/sparc/gen/fpgetround.c +++ b/lib/libc/arch/sparc/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetround.c,v 1.6 2012/03/21 00:38:34 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.6 2012/03/21 00:38:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetround,_fpgetround) #endif fp_rnd -fpgetround() +fpgetround(void) { - int x; + unsigned int x; __asm("st %%fsr,%0" : "=m" (*&x)); return (x >> 30) & 0x03; diff --git a/lib/libc/arch/sparc/gen/fpgetsticky.c b/lib/libc/arch/sparc/gen/fpgetsticky.c index ebff93ff4..3184ee1bc 100644 --- a/lib/libc/arch/sparc/gen/fpgetsticky.c +++ b/lib/libc/arch/sparc/gen/fpgetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.6 2012/03/21 00:38:34 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetsticky.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetsticky.c,v 1.6 2012/03/21 00:38:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,9 +19,9 @@ __weak_alias(fpgetsticky,_fpgetsticky) #endif fp_except -fpgetsticky() +fpgetsticky(void) { - int x; + unsigned int x; __asm("st %%fsr,%0" : "=m" (*&x)); return (x >> 5) & 0x1f; diff --git a/lib/libc/arch/sparc/gen/fpsetmask.c b/lib/libc/arch/sparc/gen/fpsetmask.c index 99ca472c1..250761e48 100644 --- a/lib/libc/arch/sparc/gen/fpsetmask.c +++ b/lib/libc/arch/sparc/gen/fpsetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.6 2012/03/21 00:38:34 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetmask.c,v 1.6 2012/03/21 00:38:34 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,8 +19,7 @@ __weak_alias(fpsetmask,_fpsetmask) #endif fp_except -fpsetmask(mask) - fp_except mask; +fpsetmask(fp_except mask) { fp_except old; fp_except new; diff --git a/lib/libc/arch/sparc/gen/fpsetround.c b/lib/libc/arch/sparc/gen/fpsetround.c index 122feb266..4a0700ffa 100644 --- a/lib/libc/arch/sparc/gen/fpsetround.c +++ b/lib/libc/arch/sparc/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetround.c,v 1.6 2012/03/21 00:38:35 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.6 2012/03/21 00:38:35 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -19,8 +19,7 @@ __weak_alias(fpsetround,_fpsetround) #endif fp_rnd -fpsetround(rnd_dir) - fp_rnd rnd_dir; +fpsetround(fp_rnd rnd_dir) { fp_rnd old; fp_rnd new; @@ -33,5 +32,5 @@ fpsetround(rnd_dir) __asm("ld %0,%%fsr" : : "m" (*&new)); - return (old >> 30) & 0x03; + return ((unsigned int)old >> 30) & 0x03; } diff --git a/lib/libc/arch/sparc/gen/longjmp.c b/lib/libc/arch/sparc/gen/longjmp.c index 825e02378..fe46e50a8 100644 --- a/lib/libc/arch/sparc/gen/longjmp.c +++ b/lib/libc/arch/sparc/gen/longjmp.c @@ -1,4 +1,4 @@ -/* $NetBSD: longjmp.c,v 1.2 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: longjmp.c,v 1.3 2011/04/30 23:41:12 martin Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -35,11 +35,27 @@ #include #include #include +#include #define __LIBC12_SOURCE__ #include #include +struct __jmp_buf_regs_t { + __greg_t g4; + __greg_t g7; + __greg_t save_mask; +}; + +/* + * setjmp.S uses hard coded offsets into the jump_buf, + * make sure any changes cause a compile failure here + */ +__CTASSERT(56 == offsetof(struct __jmp_buf_regs_t,save_mask) + + sizeof(struct sigcontext)); +__CTASSERT(sizeof(sigjmp_buf) >= sizeof(struct __jmp_buf_regs_t) + + sizeof(struct sigcontext)); + /* * Use setcontext to reload the stack pointer, program counter , and * set the return value in %o0. The %i and %l registers will be reloaded @@ -49,14 +65,15 @@ void __longjmp14(jmp_buf env, int val) { struct sigcontext *sc = (void *)env; + struct __jmp_buf_regs_t *r = (void*)&sc[1]; ucontext_t uc; /* Ensure non-zero SP */ if (sc->sc_sp == 0) goto err; - /* Initialise the fields we're going to use */ - uc.uc_link = 0; + /* Initialise the context */ + memset(&uc, 0, sizeof(uc)); /* * Set _UC_{SET,CLR}STACK according to SS_ONSTACK. @@ -71,8 +88,12 @@ __longjmp14(jmp_buf env, int val) /* Extract PSR, PC, NPC and SP from jmp_buf */ uc.uc_mcontext.__gregs[_REG_PSR] = sc->sc_psr; uc.uc_mcontext.__gregs[_REG_PC] = sc->sc_pc; - uc.uc_mcontext.__gregs[_REG_nPC] = sc->sc_npc; + uc.uc_mcontext.__gregs[_REG_nPC] = sc->sc_pc+4; uc.uc_mcontext.__gregs[_REG_O6] = sc->sc_sp; + uc.uc_mcontext.__gregs[_REG_G2] = sc->sc_g1; + uc.uc_mcontext.__gregs[_REG_G3] = sc->sc_npc; + uc.uc_mcontext.__gregs[_REG_G4] = r->g4; + uc.uc_mcontext.__gregs[_REG_G7] = r->g7; /* Set the return value; make sure it's non-zero */ uc.uc_mcontext.__gregs[_REG_O0] = (val != 0 ? val : 1); diff --git a/lib/libc/arch/sparc/gen/resumecontext.c b/lib/libc/arch/sparc/gen/resumecontext.c index 1a7c4c55f..57d68fdf8 100644 --- a/lib/libc/arch/sparc/gen/resumecontext.c +++ b/lib/libc/arch/sparc/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/sparc/gen/setjmp.S b/lib/libc/arch/sparc/gen/setjmp.S index 993b92761..451f3c70f 100644 --- a/lib/libc/arch/sparc/gen/setjmp.S +++ b/lib/libc/arch/sparc/gen/setjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: setjmp.S,v 1.11 2007/10/08 13:06:00 uwe Exp $ */ +/* $NetBSD: setjmp.S,v 1.12 2011/04/30 23:41:13 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -40,7 +40,7 @@ #if 0 .asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: setjmp.S,v 1.11 2007/10/08 13:06:00 uwe Exp $") + RCSID("$NetBSD: setjmp.S,v 1.12 2011/04/30 23:41:13 martin Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -78,9 +78,11 @@ ENTRY(__setjmp14) st %fp, [%i0 + 8] /* sc.sc_sp = (caller's) sp */ add %i7, 8, %o0 st %o0, [%i0 + 12] /* sc.sc_pc = return_pc */ - add %i7, 12, %o0 - st %o0, [%i0 + 16] /* sc.sc_npc = return_pc + 4 */ + st %g3, [%i0 + 16] /* sc.sc_npc */ st %g0, [%i0 + 20] /* sc.sc_psr = (clean psr) */ + st %g2, [%i0 + 24] + st %g4, [%i0 + 48] + st %g7, [%i0 + 52] ret /* return 0 */ restore %g0, %g0, %o0 diff --git a/lib/libc/arch/sparc/gen/swapcontext.S b/lib/libc/arch/sparc/gen/swapcontext.S index 8b88d296a..b98e9b3d1 100644 --- a/lib/libc/arch/sparc/gen/swapcontext.S +++ b/lib/libc/arch/sparc/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:53 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: swapcontext.S,v 1.3 2008/04/28 20:22:57 martin Exp $") + RCSID("$NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:53 manu Exp $") #endif /* LIBC_SCCS && !lint */ ENTRY(swapcontext) @@ -49,8 +49,13 @@ ENTRY(swapcontext) add %o7, 8, %o1 st %o1, [%o2 + 40 + 1 * 4] ! gr[_REG_PC] = retaddr - mov %o3, %o0 - mov %o1, %g2 ! optimize `return' - mov SYS_setcontext|SYSCALL_G2RFLAG, %g1 - t ST_SYSCALL - ERROR() +#ifdef PIC + PIC_PROLOGUE(%g1, %g2) ! %g1 = _GLOBAL_OFFSET_TABLE + set _C_LABEL(setcontext), %g2 + ld [%g1 + %g2], %g1 + jmp %g1 + mov %o3, %o0 +#else + jmp _C_LABEL(setcontext) + mov %o3, %o0 +#endif diff --git a/lib/libc/arch/sparc64/Makefile.inc b/lib/libc/arch/sparc64/Makefile.inc index a3a651be4..8d6704e76 100644 --- a/lib/libc/arch/sparc64/Makefile.inc +++ b/lib/libc/arch/sparc64/Makefile.inc @@ -1,42 +1,14 @@ -# $NetBSD: Makefile.inc,v 1.13 2009/12/06 07:05:50 uebayasi Exp $ +# $NetBSD: Makefile.inc,v 1.19 2012/03/21 14:10:47 christos Exp $ SRCS+= __sigaction14_sigtramp.c __sigtramp2.S # Some assembler files use v9a extensions. AFLAGS+= -Wa,-Av9a -# `source' files built from m4 source -# the name `div.o' is taken for the ANSI C `div' function, hence sdiv here -SRCS+= rem.S sdiv.S udiv.S urem.S -CLEANFILES+=rem.S sdiv.S udiv.S urem.S - -sdiv.S: ${LIBCDIR}/arch/sparc64/gen/divrem.m4 - @echo 'building ${.TARGET} from ${.ALLSRC}' - @(echo "define(NAME,\`.div')define(OP,\`div')define(S,\`true')"; \ - cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} - @chmod 444 ${.TARGET} - -udiv.S: ${LIBCDIR}/arch/sparc64/gen/divrem.m4 - @echo 'building ${.TARGET} from ${.ALLSRC}' - @(echo "define(NAME,\`.udiv')define(OP,\`div')define(S,\`false')"; \ - cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} - @chmod 444 ${.TARGET} - -rem.S: ${LIBCDIR}/arch/sparc64/gen/divrem.m4 - @echo 'building ${.TARGET} from ${.ALLSRC}' - @(echo "define(NAME,\`.rem')define(OP,\`rem')define(S,\`true')"; \ - cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} - @chmod 444 ${.TARGET} - -urem.S: ${LIBCDIR}/arch/sparc64/gen/divrem.m4 - @echo 'building ${.TARGET} from ${.ALLSRC}' - @(echo "define(NAME,\`.urem')define(OP,\`rem')define(S,\`false')"; \ - cat ${.ALLSRC}) | ${TOOL_M4} > ${.TARGET} - @chmod 444 ${.TARGET} - .PATH: ${ARCHDIR}/softfloat SRCS+= qp.c -CPPFLAGS+= -DSOFTFLOATSPARC64_FOR_GCC +CPPFLAGS+= -DSOFTFLOATSPARC64_FOR_GCC -DEXCEPTIONS_WITH_SOFTFLOAT +CPPFLAGS+= -DSOFTFLOAT_NEED_FIXUNS .if ${MKSOFTFLOAT} != "no" .include .else @@ -47,4 +19,9 @@ SRCS.softfloat= softfloat-wrapper.c SRCS+= ${SRCS.softfloat} CPPFLAGS+= -I${ARCHDIR}/softfloat -I${.CURDIR}/softfloat \ -I${.CURDIR}/softfloat/bits64 + +.if ${HAVE_GCC} == 45 +COPTS.softfloat-wrapper.c+= -Wno-enum-compare +.endif + .endif diff --git a/lib/libc/arch/sparc64/SYS.h b/lib/libc/arch/sparc64/SYS.h index ede6a3e96..dea1fa11e 100644 --- a/lib/libc/arch/sparc64/SYS.h +++ b/lib/libc/arch/sparc64/SYS.h @@ -1,4 +1,4 @@ -/* $NetBSD: SYS.h,v 1.13 2003/08/07 16:42:26 agc Exp $ */ +/* $NetBSD: SYS.h,v 1.14 2011/03/28 11:19:13 martin Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -82,18 +82,18 @@ /* * RSYSCALL is used when the system call should just return. Here - * we use the SYSCALL_G7RFLAG to put the `success' return address in %g7 + * we use the SYSCALL_G5RFLAG to put the `success' return address in %g5 * and avoid a branch. */ #define RSYSCALL(x) \ - ENTRY(x); mov (_CAT(SYS_,x))|SYSCALL_G7RFLAG,%g1; add %o7,8,%g7; \ + ENTRY(x); mov (_CAT(SYS_,x))|SYSCALL_G5RFLAG,%g1; add %o7,8,%g5; \ t ST_SYSCALL; ERROR() /* * PSEUDO(x,y) is like RSYSCALL(y) except that the name is x. */ #define PSEUDO(x,y) \ - ENTRY(x); mov (_CAT(SYS_,y))|SYSCALL_G7RFLAG,%g1; add %o7,8,%g7; \ + ENTRY(x); mov (_CAT(SYS_,y))|SYSCALL_G5RFLAG,%g1; add %o7,8,%g5; \ t ST_SYSCALL; ERROR() /* @@ -120,16 +120,14 @@ * XXX - This should be optimized. */ #define RSYSCALL_NOERROR(x) \ - ENTRY(x); mov (_CAT(SYS_,x))|SYSCALL_G7RFLAG,%g1; add %o7,8,%g7; \ + ENTRY(x); mov (_CAT(SYS_,x))|SYSCALL_G5RFLAG,%g1; add %o7,8,%g5; \ t ST_SYSCALL /* * PSEUDO_NOERROR(x,y) is like RSYSCALL_NOERROR(y) except that the name is x. */ #define PSEUDO_NOERROR(x,y) \ - ENTRY(x); mov (_CAT(SYS_,y))|SYSCALL_G7RFLAG,%g1; add %o7,8,%g7; \ + ENTRY(x); mov (_CAT(SYS_,y))|SYSCALL_G5RFLAG,%g1; add %o7,8,%g5; \ t ST_SYSCALL - .register %g7,#scratch - .globl _C_LABEL(__cerror) diff --git a/lib/libc/arch/sparc64/gen/_lwp.c b/lib/libc/arch/sparc64/gen/_lwp.c index b217d28c4..622d713db 100644 --- a/lib/libc/arch/sparc64/gen/_lwp.c +++ b/lib/libc/arch/sparc64/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: _lwp.c,v 1.7 2012/03/17 20:48:58 martin Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.7 2012/03/17 20:48:58 martin Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -53,6 +53,7 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), u->uc_stack.ss_sp = stack_base; u->uc_stack.ss_size = stack_size; + /*LINTED*/ sp = (ulong *)(stack_base + stack_size); sp = (ulong *)((ulong)sp & ~0x0f); @@ -62,6 +63,7 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), sp[14] = (ulong)sp - 2047; sp[15] = (ulong)_lwp_exit - 8; + /*LINTED*/ sp = (ulong *)((caddr_t)sp - 2047); gr[_REG_PC] = (ulong) start; @@ -70,4 +72,5 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), gr[_REG_O0] = (ulong) arg; gr[_REG_O6] = (ulong) sp; gr[_REG_O7] = (ulong)_lwp_exit - 8; + gr[_REG_G7] = (ulong)private; } diff --git a/lib/libc/arch/sparc64/gen/_setjmp.S b/lib/libc/arch/sparc64/gen/_setjmp.S index 4990bb51f..66d1ec40e 100644 --- a/lib/libc/arch/sparc64/gen/_setjmp.S +++ b/lib/libc/arch/sparc64/gen/_setjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: _setjmp.S,v 1.6 2004/12/07 08:20:07 martin Exp $ */ +/* $NetBSD: _setjmp.S,v 1.7 2011/04/30 19:43:17 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -40,10 +40,13 @@ #if 0 .asciz "@(#)_setjmp.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: _setjmp.S,v 1.6 2004/12/07 08:20:07 martin Exp $") + RCSID("$NetBSD: _setjmp.S,v 1.7 2011/04/30 19:43:17 martin Exp $") #endif #endif /* LIBC_SCCS and not lint */ + .register %g2,#ignore + .register %g3,#ignore + /* * C library -- _setjmp, _longjmp * @@ -57,6 +60,15 @@ ENTRY(_setjmp) stx %sp, [%o0+0] /* store caller's stack pointer */ stx %o7, [%o0+8] /* and return pc */ + stx %g0, [%o0+0x18] /* mark as non-sigmask jmpbuf */ + + /* store globals, offsets compatible with siglongjmp */ + stx %g1, [%o0+0x28] + stx %g2, [%o0+0x30] /* adjust asserts in longjmp.c */ + stx %g3, [%o0+0x48] /* if you change any of these */ + stx %g6, [%o0+0x50] /* offsets! */ + stx %g7, [%o0+0x58] + retl clr %o0 ! return 0 @@ -68,6 +80,11 @@ ENTRY(_longjmp) * a `restore' instruction which will reload the register * window from the stack. */ + ldx [%i0+0x28],%g1 + ldx [%i0+0x30],%g2 + ldx [%i0+0x48],%g3 + ldx [%i0+0x50],%g6 + ldx [%i0+0x58],%g7 ldx [%i0+8], %i7 ldx [%i0+0], %fp mov 1, %i0 diff --git a/lib/libc/arch/sparc64/gen/divrem.m4 b/lib/libc/arch/sparc64/gen/divrem.m4 deleted file mode 100644 index 108918e72..000000000 --- a/lib/libc/arch/sparc64/gen/divrem.m4 +++ /dev/null @@ -1,273 +0,0 @@ -/* $NetBSD: divrem.m4,v 1.4 2003/08/07 16:42:27 agc Exp $ */ - -/* - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and - * contributed to Berkeley. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Header: divrem.m4,v 1.4 92/06/25 13:23:57 torek Exp - */ - -#include -#include - -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -#if defined(LIBC_SCCS) - RCSID("$NetBSD: divrem.m4,v 1.4 2003/08/07 16:42:27 agc Exp $") -#endif - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * NAME name of function to generate - * OP OP=div => %o0 / %o1; OP=rem => %o0 % %o1 - * S S=true => signed; S=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TWOSUPN 2^N, for label generation (m4 exponentiation currently broken) - * TOPBITS number of bits in the top `decade' of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - -define(N, `4') -define(TWOSUPN, `16') -define(WORDSIZE, `32') -define(TOPBITS, eval(WORDSIZE - N*((WORDSIZE-1)/N))) - -define(dividend, `%o0') -define(divisor, `%o1') -define(Q, `%o2') -define(R, `%o3') -define(ITER, `%o4') -define(V, `%o5') - -/* m4 reminder: ifelse(a,b,c,d) => if a is b, then c, else d */ -define(T, `%g1') -define(SC, `%g5') -ifelse(S, `true', `define(SIGN, `%g6')') - -/* - * This is the recursive definition for developing quotient digits. - * - * Parameters: - * $1 the current depth, 1 <= $1 <= N - * $2 the current accumulation of quotient bits - * N max depth - * - * We add a new bit to $2 and either recurse or insert the bits in - * the quotient. R, Q, and V are inputs and outputs as defined above; - * the condition codes are expected to reflect the input R, and are - * modified to reflect the output R. - */ -define(DEVELOP_QUOTIENT_BITS, -` ! depth $1, accumulated bits $2 - bl L.$1.eval(TWOSUPN+$2) - srl V,1,V - ! remainder is positive - subcc R,V,R - ifelse($1, N, - ` b 9f - add Q, ($2*2+1), Q - ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2+1)')') -L.$1.eval(TWOSUPN+$2): - ! remainder is negative - addcc R,V,R - ifelse($1, N, - ` b 9f - add Q, ($2*2-1), Q - ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2-1)')') - ifelse($1, 1, `9:')') - -FUNC(NAME) -ifelse(S, `true', -` ! compute sign of result; if neither is negative, no problem - orcc divisor, dividend, %g0 ! either negative? - bge 2f ! no, go do the divide - ifelse(OP, `div', - `xor divisor, dividend, SIGN', - `mov dividend, SIGN') ! compute sign in any case - tst divisor - bge 1f - tst dividend - ! divisor is definitely negative; dividend might also be negative - bge 2f ! if dividend not negative... - neg divisor ! in any case, make divisor nonneg -1: ! dividend is negative, divisor is nonnegative - neg dividend ! make dividend nonnegative -2: -') - ! Ready to divide. Compute size of quotient; scale comparand. - orcc divisor, %g0, V - bnz 1f - mov dividend, R - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - t ST_DIV0 - retl - clr %o0 - -1: - cmp R, V ! if divisor exceeds dividend, done - blu Lgot_result ! (and algorithm fails otherwise) - clr Q - sethi %hi(1 << (WORDSIZE - TOPBITS - 1)), T - cmp R, T - blu Lnot_really_big - clr ITER - - ! `Here the dividend is >= 2^(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R.' - 1: - cmp V, T - bgeu 3f - mov 1, SC - sll V, N, V - b 1b - inc ITER - - ! Now compute SC. - 2: addcc V, V, V - bcc Lnot_too_big - inc SC - - ! We get here if the divisor overflowed while shifting. - ! This means that R has the high-order bit set. - ! Restore V and subtract from R. - sll T, TOPBITS, T ! high order bit - srl V, 1, V ! rest of V - add V, T, V - b Ldo_single_div - dec SC - - Lnot_too_big: - 3: cmp V, R - blu 2b - nop - be Ldo_single_div - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! V > R: went too far: back up 1 step - ! srl V, 1, V - ! dec SC - ! do single-bit divide steps - ! - ! We have to be careful here. We know that R >= V, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if R >= 0. Because both R and V may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - Ldo_single_div: - deccc SC - bl Lend_regular_divide - nop - sub R, V, R - mov 1, Q - b Lend_single_divloop - nop - Lsingle_divloop: - sll Q, 1, Q - bl 1f - srl V, 1, V - ! R >= 0 - sub R, V, R - b 2f - inc Q - 1: ! R < 0 - add R, V, R - dec Q - 2: - Lend_single_divloop: - deccc SC - bge Lsingle_divloop - tst R - b,a Lend_regular_divide - -Lnot_really_big: -1: - sll V, N, V - cmp V, R - bleu 1b - inccc ITER - be Lgot_result - dec ITER - - tst R ! set up for initial iteration -Ldivloop: - sll Q, N, Q - DEVELOP_QUOTIENT_BITS(1, 0) -Lend_regular_divide: - deccc ITER - bge Ldivloop - tst R - bl,a Lgot_result - ! non-restoring fixup here (one instruction only!) -ifelse(OP, `div', -` dec Q -', ` add R, divisor, R -') - -Lgot_result: -ifelse(S, `true', -` ! check to see if answer should be < 0 - tst SIGN - bl,a 1f - ifelse(OP, `div', `neg Q', `neg R') -1:') - retl - ifelse(OP, `div', `mov Q, %o0', `mov R, %o0') diff --git a/lib/libc/arch/sparc64/gen/flt_rounds.c b/lib/libc/arch/sparc64/gen/flt_rounds.c index 5e70b742b..93e3b2cf6 100644 --- a/lib/libc/arch/sparc64/gen/flt_rounds.c +++ b/lib/libc/arch/sparc64/gen/flt_rounds.c @@ -1,4 +1,4 @@ -/* $NetBSD: flt_rounds.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: flt_rounds.c,v 1.6 2012/06/24 15:26:02 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,7 +7,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: flt_rounds.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: flt_rounds.c,v 1.6 2012/06/24 15:26:02 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -21,9 +21,9 @@ static const int map[] = { }; int -__flt_rounds() +__flt_rounds(void) { - int x; + uint32_t x; __asm("st %%fsr,%0" : "=m" (*&x)); return map[(x >> 30) & 0x03]; diff --git a/lib/libc/arch/sparc64/gen/fpgetmask.c b/lib/libc/arch/sparc64/gen/fpgetmask.c index b0cadda9c..095ff73f4 100644 --- a/lib/libc/arch/sparc64/gen/fpgetmask.c +++ b/lib/libc/arch/sparc64/gen/fpgetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetmask.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.6 2012/06/24 15:26:02 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,11 +7,12 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetmask.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetmask.c,v 1.6 2012/06/24 15:26:02 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias @@ -19,9 +20,9 @@ __weak_alias(fpgetmask,_fpgetmask) #endif fp_except -fpgetmask() +fpgetmask(void) { - int x; + uint32_t x; __asm("st %%fsr,%0" : "=m" (*&x)); return (x >> 23) & 0x1f; diff --git a/lib/libc/arch/sparc64/gen/fpgetround.c b/lib/libc/arch/sparc64/gen/fpgetround.c index c44991092..ef65c131b 100644 --- a/lib/libc/arch/sparc64/gen/fpgetround.c +++ b/lib/libc/arch/sparc64/gen/fpgetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetround.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetround.c,v 1.6 2012/06/24 15:26:02 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,11 +7,12 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetround.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetround.c,v 1.6 2012/06/24 15:26:02 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias @@ -19,9 +20,9 @@ __weak_alias(fpgetround,_fpgetround) #endif fp_rnd -fpgetround() +fpgetround(void) { - int x; + uint32_t x; __asm("st %%fsr,%0" : "=m" (*&x)); return (x >> 30) & 0x03; diff --git a/lib/libc/arch/sparc64/gen/fpgetsticky.c b/lib/libc/arch/sparc64/gen/fpgetsticky.c index bd0484dd4..67b3ea652 100644 --- a/lib/libc/arch/sparc64/gen/fpgetsticky.c +++ b/lib/libc/arch/sparc64/gen/fpgetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpgetsticky.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.7 2012/06/24 15:26:02 christos Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,22 +7,34 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpgetsticky.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpgetsticky.c,v 1.7 2012/06/24 15:26:02 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias __weak_alias(fpgetsticky,_fpgetsticky) #endif +#ifdef EXCEPTIONS_WITH_SOFTFLOAT +extern fp_except _softfloat_float_exception_flags; +#endif + fp_except -fpgetsticky() +fpgetsticky(void) { - int x; + uint32_t x; + fp_except res; __asm("st %%fsr,%0" : "=m" (*&x)); - return (x >> 5) & 0x1f; + res = (x >> 5) & 0x1f; + +#ifdef EXCEPTIONS_WITH_SOFTFLOAT + res |= _softfloat_float_exception_flags; +#endif + + return res; } diff --git a/lib/libc/arch/sparc64/gen/fpsetmask.c b/lib/libc/arch/sparc64/gen/fpsetmask.c index 65e7a7945..5a889e027 100644 --- a/lib/libc/arch/sparc64/gen/fpsetmask.c +++ b/lib/libc/arch/sparc64/gen/fpsetmask.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetmask.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.6 2012/03/17 21:35:06 martin Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,17 +7,22 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetmask.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetmask.c,v 1.6 2012/03/17 21:35:06 martin Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias __weak_alias(fpsetmask,_fpsetmask) #endif +#ifdef EXCEPTIONS_WITH_SOFTFLOAT +extern fp_except _softfloat_float_exception_mask; +#endif + fp_except fpsetmask(mask) fp_except mask; @@ -33,5 +38,13 @@ fpsetmask(mask) __asm("ld %0,%%fsr" : : "m" (*&new)); - return (old >> 23) & 0x1f; + old = ((uint32_t)old >> 23) & 0x1f; + +#ifdef EXCEPTIONS_WITH_SOFTFLOAT + /* update softfloat mask as well */ + old |= _softfloat_float_exception_mask; + _softfloat_float_exception_mask = mask; +#endif + + return old; } diff --git a/lib/libc/arch/sparc64/gen/fpsetround.c b/lib/libc/arch/sparc64/gen/fpsetround.c index 9e21dc7e3..0a3cd482c 100644 --- a/lib/libc/arch/sparc64/gen/fpsetround.c +++ b/lib/libc/arch/sparc64/gen/fpsetround.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetround.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetround.c,v 1.5 2012/03/17 21:35:06 martin Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,11 +7,12 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetround.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetround.c,v 1.5 2012/03/17 21:35:06 martin Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias @@ -33,5 +34,5 @@ fpsetround(rnd_dir) __asm("ld %0,%%fsr" : : "m" (*&new)); - return (old >> 30) & 0x03; + return ((uint32_t)old >> 30) & 0x03; } diff --git a/lib/libc/arch/sparc64/gen/fpsetsticky.c b/lib/libc/arch/sparc64/gen/fpsetsticky.c index 10e98ed78..e878b9331 100644 --- a/lib/libc/arch/sparc64/gen/fpsetsticky.c +++ b/lib/libc/arch/sparc64/gen/fpsetsticky.c @@ -1,4 +1,4 @@ -/* $NetBSD: fpsetsticky.c,v 1.4 2005/12/24 23:10:08 perry Exp $ */ +/* $NetBSD: fpsetsticky.c,v 1.6 2012/03/17 21:35:06 martin Exp $ */ /* * Written by J.T. Conklin, Apr 10, 1995 @@ -7,17 +7,22 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: fpsetsticky.c,v 1.4 2005/12/24 23:10:08 perry Exp $"); +__RCSID("$NetBSD: fpsetsticky.c,v 1.6 2012/03/17 21:35:06 martin Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" +#include #include #ifdef __weak_alias __weak_alias(fpsetsticky,_fpsetsticky) #endif +#ifdef EXCEPTIONS_WITH_SOFTFLOAT +extern fp_except _softfloat_float_exception_flags; +#endif + fp_except fpsetsticky(sticky) fp_except sticky; @@ -33,5 +38,11 @@ fpsetsticky(sticky) __asm("ld %0,%%fsr" : : "m" (*&new)); - return (old >> 5) & 0x1f; + old = ((uint32_t)old >> 5) & 0x1f; + +#ifdef EXCEPTIONS_WITH_SOFTFLOAT + old |= _softfloat_float_exception_flags; + _softfloat_float_exception_flags = sticky; +#endif + return old; } diff --git a/lib/libc/arch/sparc64/gen/longjmp.c b/lib/libc/arch/sparc64/gen/longjmp.c index 54f54ac20..c62d01d60 100644 --- a/lib/libc/arch/sparc64/gen/longjmp.c +++ b/lib/libc/arch/sparc64/gen/longjmp.c @@ -1,4 +1,4 @@ -/* $NetBSD: longjmp.c,v 1.2 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: longjmp.c,v 1.7 2012/03/17 21:35:06 martin Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -36,15 +36,31 @@ #include #include #include +#include #define __LIBC12_SOURCE__ #include #include typedef struct { - __greg_t __glob[5]; + __greg_t g3; + __greg_t g6; + __greg_t g7; + __greg_t dummy; + __greg_t save_mask; } __jmp_buf_regs_t; +/* + * setjmp.S uses hard coded offsets into the jump_buf, + * make sure any changes cause a compile failure here + */ +#ifndef lint /* XXX this is too much for lint */ +__CTASSERT(0x68 == offsetof(__jmp_buf_regs_t,save_mask) + + sizeof(struct sigcontext)); +__CTASSERT(sizeof(sigjmp_buf) >= sizeof(__jmp_buf_regs_t) + + sizeof(struct sigcontext)); +#endif + void __longjmp14(jmp_buf env, int val) { @@ -72,16 +88,17 @@ __longjmp14(jmp_buf env, int val) /* Fill other registers */ uc.uc_mcontext.__gregs[_REG_CCR] = sc->sc_tstate; uc.uc_mcontext.__gregs[_REG_PC] = sc->sc_pc; - uc.uc_mcontext.__gregs[_REG_nPC] = sc->sc_npc; + uc.uc_mcontext.__gregs[_REG_nPC] = sc->sc_pc+4; uc.uc_mcontext.__gregs[_REG_G1] = sc->sc_g1; uc.uc_mcontext.__gregs[_REG_G2] = sc->sc_o0; - uc.uc_mcontext.__gregs[_REG_G3] = r->__glob[0]; - uc.uc_mcontext.__gregs[_REG_G4] = r->__glob[1]; - uc.uc_mcontext.__gregs[_REG_G5] = r->__glob[2]; - uc.uc_mcontext.__gregs[_REG_G6] = r->__glob[3]; - uc.uc_mcontext.__gregs[_REG_G7] = r->__glob[4]; + uc.uc_mcontext.__gregs[_REG_G3] = r->g3; + uc.uc_mcontext.__gregs[_REG_G4] = 0; + uc.uc_mcontext.__gregs[_REG_G5] = 0; + uc.uc_mcontext.__gregs[_REG_G6] = r->g6; + uc.uc_mcontext.__gregs[_REG_G7] = r->g7; uc.uc_mcontext.__gregs[_REG_O6] = sc->sc_sp; + /* Make return value non-zero */ if (val == 0) val = 1; diff --git a/lib/libc/arch/sparc64/gen/makecontext.c b/lib/libc/arch/sparc64/gen/makecontext.c index 64fa3c622..8bdcee63a 100644 --- a/lib/libc/arch/sparc64/gen/makecontext.c +++ b/lib/libc/arch/sparc64/gen/makecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: makecontext.c,v 1.5 2012/03/17 21:35:06 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.5 2012/03/17 21:35:06 martin Exp $"); #endif #include @@ -50,6 +50,7 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) ulong *sp; va_list ap; + /*LINTED*/ sp = (ulong *)((caddr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); /* Align on quad-word boundary. */ sp = (ulong *)((ulong)sp & ~0xf); @@ -71,6 +72,7 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) sp[14] = (ulong)sp - 2047; sp[15] = (ulong)_resumecontext - 8; + /*LINTED*/ sp = (ulong *)((caddr_t)sp - 2047); gr[_REG_O6] = (__greg_t)sp; diff --git a/lib/libc/arch/sparc64/gen/resumecontext.c b/lib/libc/arch/sparc64/gen/resumecontext.c index 1a7c4c55f..57d68fdf8 100644 --- a/lib/libc/arch/sparc64/gen/resumecontext.c +++ b/lib/libc/arch/sparc64/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.5 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.4 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/sparc64/gen/setjmp.S b/lib/libc/arch/sparc64/gen/setjmp.S index e12e04a38..081f61e2f 100644 --- a/lib/libc/arch/sparc64/gen/setjmp.S +++ b/lib/libc/arch/sparc64/gen/setjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: setjmp.S,v 1.7 2005/10/16 17:15:38 christos Exp $ */ +/* $NetBSD: setjmp.S,v 1.9 2011/04/30 19:39:38 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -42,7 +42,7 @@ #if 0 .asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: setjmp.S,v 1.7 2005/10/16 17:15:38 christos Exp $") + RCSID("$NetBSD: setjmp.S,v 1.9 2011/04/30 19:39:38 martin Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -118,19 +118,15 @@ ENTRY(__setjmp14) stx %fp, [%i0 + 0x08] /* sc.sc_sp = sp */ add %i7, 8, %o0 stx %o0, [%i0 + 0x10] /* sc.sc_pc = return_pc */ - add %i7, 12, %o0 - stx %o0, [%i0 + 0x18] /* sc.sc_npc = return_pc + 4 */ stx %g0, [%i0 + 0x20] /* sc.sc_tstate = (clean ccr) */ stx %l1, [%i0 + 0x28] /* sc.sc_g1 */ stx %l2, [%i0 + 0x30] /* sc.sc_o0, set in longjmp, use as %g2 */ - /* 0x38 */ /* sc.sc_mask was already saved above */ + /* 0x38: 4x32bit */ /* sc.sc_mask was already saved above */ /* save additional registers needed to fill a complete mcontext */ - stx %l3, [%i0 + 0x40] - stx %l4, [%i0 + 0x48] - stx %l5, [%i0 + 0x50] - stx %l6, [%i0 + 0x58] - stx %l7, [%i0 + 0x60] + stx %l3, [%i0 + 0x48] /* adjust asserts in longjmp.c */ + stx %l6, [%i0 + 0x50] /* if you change any of these */ + stx %l7, [%i0 + 0x58] /* offsets! */ ret /* return 0 */ restore %g0, 0, %o0 diff --git a/lib/libc/arch/sparc64/gen/sigsetjmp.S b/lib/libc/arch/sparc64/gen/sigsetjmp.S index fedbc7004..4c350d992 100644 --- a/lib/libc/arch/sparc64/gen/sigsetjmp.S +++ b/lib/libc/arch/sparc64/gen/sigsetjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: sigsetjmp.S,v 1.8 2005/10/16 17:15:38 christos Exp $ */ +/* $NetBSD: sigsetjmp.S,v 1.10 2011/04/30 19:39:38 martin Exp $ */ /* * Copyright (c) 1995 Paul Kranenburg * All rights reserved. @@ -32,12 +32,17 @@ #include "SYS.h" +/* + * We use the sc_npc field inside the sigcontext to store the save mask + */ +#define MASK_OFFSET 0x68 + #ifdef PIC #ifdef BIGPIC ENTRY(__sigsetjmp14) PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE - st %o1,[%o0+0x68] ! jmpbuf[JBLEN] + st %o1,[%o0+MASK_OFFSET] ! end of jmpbuf sethi %hi(_C_LABEL(__setjmp14)), %o2 sethi %hi(_C_LABEL(_setjmp)), %o3 or %o2, %lo(_C_LABEL(__setjmp14)), %o2 @@ -51,7 +56,7 @@ ENTRY(__sigsetjmp14) ENTRY(__siglongjmp14) PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE - ld [%o0+0x68], %o2 ! jmpbuf[JBLEN] + ld [%o0+MASK_OFFSET], %o2 ! end of jmpbuf sethi %hi(_C_LABEL(__longjmp14)), %o3 sethi %hi(_C_LABEL(_longjmp)), %o4 or %o3, %lo(_C_LABEL(__longjmp14)), %o3 @@ -68,7 +73,7 @@ ENTRY(__siglongjmp14) ENTRY(__sigsetjmp14) PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE cmp %o1,0 - st %o1,[%o0+0x68] ! jmpbuf[JBLEN] + st %o1,[%o0+MASK_OFFSET] ! end of jmpbuf bne,a 1f ldx [%g1+_C_LABEL(__setjmp14)], %g1 ! if (%o1 != 0) goto __setjmp; ldx [%g1+_C_LABEL(_setjmp)], %g1 ! else goto _setjmp; @@ -78,7 +83,7 @@ ENTRY(__sigsetjmp14) ENTRY(__siglongjmp14) PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE - ld [%o0+0x68],%o2 ! jmpbuf[JBLEN] + ld [%o0+MASK_OFFSET],%o2 ! end of jmpbuf cmp %o2,0 bne,a 1f ldx [%g1+_C_LABEL(__longjmp14)], %g1 ! if (%o2 != 0) goto __longjmp; @@ -93,12 +98,12 @@ ENTRY(__siglongjmp14) ENTRY(__sigsetjmp14) cmp %o1,0 be _C_LABEL(_setjmp) - st %o1,[%o0+0x68] ! jmpbuf[JBLEN] + st %o1,[%o0+MASK_OFFSET] ! end of jmpbuf ba,a _C_LABEL(__setjmp14) unimp 0 ENTRY(__siglongjmp14) - ld [%o0+0x68],%g1 + ld [%o0+MASK_OFFSET],%g1 cmp %g1,0 be _C_LABEL(_longjmp) nop diff --git a/lib/libc/arch/sparc64/gen/swapcontext.S b/lib/libc/arch/sparc64/gen/swapcontext.S index 972d5a389..262bd50b8 100644 --- a/lib/libc/arch/sparc64/gen/swapcontext.S +++ b/lib/libc/arch/sparc64/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.4 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: swapcontext.S,v 1.6 2012/09/12 02:00:53 manu Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -32,10 +32,9 @@ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: swapcontext.S,v 1.4 2008/04/28 20:22:57 martin Exp $") + RCSID("$NetBSD: swapcontext.S,v 1.6 2012/09/12 02:00:53 manu Exp $") #endif /* LIBC_SCCS && !lint */ - .register %g2,#scratch ENTRY(swapcontext) mov %o0, %o2 /* must save pointer */ @@ -51,8 +50,17 @@ ENTRY(swapcontext) add %o7, 8, %o1 stx %o1, [%o2 + 64 + 1 * 8] /* gr[_REG_PC] = retaddr */ - mov %o3, %o0 - mov %o1, %g2 /* optimize `return' */ - mov SYS_setcontext|SYSCALL_G2RFLAG, %g1 - t ST_SYSCALL - ERROR() +#ifdef PIC + PIC_PROLOGUE(%g5,%o4) /* %g5 = _GLOBAL_OFFSET_TABLE */ +#ifdef BIGPIC + set _C_LABEL(setcontext), %o6 + ldx [%g5+%o6], %o5 +#else + ldx [%g5+_C_LABEL(setcontext)], %o5 +#endif + jmp %o5 + mov %o3, %o0 +#else + ba,a _C_LABEL(setcontext) + mov %o3, %o0 +#endif diff --git a/lib/libc/arch/sparc64/softfloat/qp.c b/lib/libc/arch/sparc64/softfloat/qp.c index 40bf84563..df3388072 100644 --- a/lib/libc/arch/sparc64/softfloat/qp.c +++ b/lib/libc/arch/sparc64/softfloat/qp.c @@ -1,4 +1,4 @@ -/* $NetBSD: qp.c,v 1.7 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: qp.c,v 1.9 2012/03/17 20:48:59 martin Exp $ */ /*- * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc. @@ -168,12 +168,12 @@ _Qp_mul(float128 *c, float128 *a, float128 *b) /* * XXX need corresponding softfloat function */ -static float128 __zero = {0x4034000000000000, 0x00000000}; +static float128 __sf128_zero = {0x4034000000000000, 0x00000000}; void _Qp_neg(float128 *c, float128 *a) { - *c = float128_sub(__zero, *a); + *c = float128_sub(__sf128_zero, *a); } @@ -271,15 +271,15 @@ _Qp_uxtoq(float128 *c, unsigned long a) if (a & 0x8000000000000000ULL) { a = (a >> 1) | (a & 1); - *c = int64_to_float128(a); + *c = int64_to_float128((long long)a); *c = float128_add(*c, *c); } else - *c = int64_to_float128(a); + *c = int64_to_float128((long long)a); } void _Qp_xtoq(float128 *c, long a) { - *c = int64_to_float128(a); + *c = int64_to_float128((long long)a); } diff --git a/lib/libc/arch/sparc64/softfloat/softfloat.h b/lib/libc/arch/sparc64/softfloat/softfloat.h index 069c0e5b6..881669265 100644 --- a/lib/libc/arch/sparc64/softfloat/softfloat.h +++ b/lib/libc/arch/sparc64/softfloat/softfloat.h @@ -1,4 +1,4 @@ -/* $NetBSD: softfloat.h,v 1.6 2007/11/08 15:50:23 martin Exp $ */ +/* $NetBSD: softfloat.h,v 1.8 2011/07/07 07:14:57 matt Exp $ */ /* This is a derivative work. */ @@ -86,12 +86,10 @@ Software IEC/IEEE floating-point rounding mode. ------------------------------------------------------------------------------- */ extern fp_rnd float_rounding_mode; -enum { - float_round_nearest_even = FP_RN, - float_round_to_zero = FP_RZ, - float_round_down = FP_RM, - float_round_up = FP_RP -}; +#define float_round_nearest_even FP_RN +#define float_round_to_zero FP_RZ +#define float_round_down FP_RM +#define float_round_up FP_RP /* ------------------------------------------------------------------------------- @@ -121,13 +119,17 @@ void float_raise( fp_except ); Software IEC/IEEE integer-to-floating-point conversion routines. ------------------------------------------------------------------------------- */ -float32 int32_to_float32( int ); -float64 int32_to_float64( int ); +float32 int32_to_float32( int32 ); +float32 uint32_to_float32( uint32 ); +float64 int32_to_float64( int32 ); +float64 uint32_to_float64( uint32 ); #ifdef FLOATX80 -floatx80 int32_to_floatx80( int ); +floatx80 int32_to_floatx80( int32 ); +floatx80 uint32_to_floatx80( uint32 ); #endif #ifdef FLOAT128 -float128 int32_to_float128( int ); +float128 int32_to_float128( int32 ); +float128 uint32_to_float128( uint32 ); #endif float32 int64_to_float32( long long ); float64 int64_to_float64( long long ); diff --git a/lib/libc/arch/sparc64/string/memcpy.S b/lib/libc/arch/sparc64/string/memcpy.S index 7d677f4d3..6bc391b28 100644 --- a/lib/libc/arch/sparc64/string/memcpy.S +++ b/lib/libc/arch/sparc64/string/memcpy.S @@ -1,4 +1,4 @@ -/* $NetBSD: memcpy.S,v 1.2 2001/08/01 05:52:12 eeh Exp $ */ +/* $NetBSD: memcpy.S,v 1.5 2011/07/12 07:51:33 mrg Exp $ */ /* * Copyright (c) 2001 Eduardo E. Horvath @@ -46,14 +46,15 @@ #include #if defined(LIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: memcpy.S,v 1.2 2001/08/01 05:52:12 eeh Exp $") + RCSID("$NetBSD: memcpy.S,v 1.5 2011/07/12 07:51:33 mrg Exp $") #endif /* LIBC_SCCS and not lint */ #define EMPTY nop #define NOTREACHED ta 1 #define BCOPY_SMALL 16 -#define BLOCK_SIZE 64 +#define BLOCK_SIZE SPARC64_BLOCK_SIZE +#define BLOCK_ALIGN SPARC64_BLOCK_ALIGN #if 0 #define ASI_STORE ASI_BLK_COMMIT_P @@ -61,6 +62,10 @@ #define ASI_STORE ASI_BLK_P #endif +#ifndef _ALIGN +#define _ALIGN .align 8 +#endif + #if 1 /* * kernel bcopy/memcpy @@ -728,7 +733,7 @@ Lbcopy_complete: .data 0: .asciz "bcopy failed: %x@%p != %x@%p byte %d\n" 1: .asciz "bcopy(%p, %p, %lx)\n" - .align 8 + _ALIGN .text 2: #endif diff --git a/lib/libc/arch/vax/SYS.h b/lib/libc/arch/vax/SYS.h index 7bc45135e..315f31944 100644 --- a/lib/libc/arch/vax/SYS.h +++ b/lib/libc/arch/vax/SYS.h @@ -1,4 +1,4 @@ -/* $NetBSD: SYS.h,v 1.10 2003/08/07 16:42:30 agc Exp $ */ +/* $NetBSD: SYS.h,v 1.12 2012/02/27 12:26:21 joerg Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -33,6 +33,9 @@ #include #include +#define CERROR _C_LABEL(__cerror) +#define CURBRK _C_LABEL(__curbrk) + #ifdef __STDC__ #define SYSTRAP(x) chmk $ SYS_ ## x #else @@ -44,6 +47,7 @@ SYSTRAP(y) #define _SYSCALL(x,y) \ + .p2align 2; \ err: nop; nop; jmp CERROR+2; \ _SYSCALL_NOERROR(x,y); \ jcs err+2 @@ -56,11 +60,13 @@ #define PSEUDO_NOERROR(x,y) \ _SYSCALL_NOERROR(x,y); \ - ret + ret; \ + END(x) #define PSEUDO(x,y) \ _SYSCALL(x,y); \ - ret + ret; \ + END(x) #define RSYSCALL_NOERROR(x) \ PSEUDO_NOERROR(x,x) @@ -79,12 +85,5 @@ #define ASMSTR .asciz -#ifdef __ELF__ -#define CERROR _C_LABEL(__cerror) -#define CURBRK _C_LABEL(__curbrk) -#else -#define CERROR _ASM_LABEL(cerror) -#define CURBRK _ASM_LABEL(curbrk) -#endif - + .protected CERROR .globl CERROR diff --git a/lib/libc/arch/vax/gen/__setjmp14.S b/lib/libc/arch/vax/gen/__setjmp14.S index 69726b169..6114aad24 100644 --- a/lib/libc/arch/vax/gen/__setjmp14.S +++ b/lib/libc/arch/vax/gen/__setjmp14.S @@ -27,11 +27,6 @@ * SUCH DAMAGE. */ -#if defined(LIBC_SCCS) && !defined(lint) - /* .asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: __setjmp14.S,v 1.10 2005/05/03 04:37:33 matt Exp $" -#endif /* LIBC_SCCS and not lint */ - /* * C library -- setjmp, longjmp * @@ -46,6 +41,11 @@ #include "DEFS.h" #include "assym.h" +#if defined(LIBC_SCCS) && !defined(lint) + /* .asciz "@(#)setjmp.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: __setjmp14.S,v 1.11 2011/01/25 02:38:15 matt Exp $") +#endif /* LIBC_SCCS and not lint */ + ENTRY(__setjmp14, R6) movl 4(%ap),%r2 # construct sigcontext subl2 $12,%sp # space for current struct sigstack @@ -68,48 +68,10 @@ ENTRY(__setjmp14, R6) movl 16(%fp),(%r2)+ # save pc of caller movpsl (%r2) # save current psl movw 4(%fp),(%r2) # save psw of caller -#ifdef __ELF__ addl3 $SC_LEN,4(%ap),%r2 # point to past signal context movq %r6,(%r2)+ # save r6/r7 movq %r8,(%r2)+ # save r8/r9 movq %r10,(%r2)+ # save r10/r11 -#endif clrl %r0 ret - -#ifndef __ELF__ -ENTRY(__longjmp14, 0) - movl 8(%ap),%r0 # return(v) - movl 4(%ap),%r1 # fetch buffer - tstl 12(%r1) # is fp non-null? - beql botch - -#ifdef __ELF__ - moval $SC_LEN(%r1),%r2 # get ptr to saved registers - movq (%r2)+,%r6 # restore r6/r7 - movq (%r2)+,%r8 # restore r8/r9 - movq (%r2)+,%r10 # restore r10/r11 -#else -loop: - cmpl 12(%r1),%fp # are we there yet? - beql done - blssu botch - moval 20(%fp),%r2 - blbc 6(%fp),1f # was %r0 saved? - movl %r0,(%r2)+ -1: - bbc $1,6(%fp),2f # was %r1 saved? - movl %r1,(%r2) -2: - movab loop,16(%fp) - ret # pop another frame - -done: -#endif /* !__ELF__ */ - pushl %r1 # pointer to sigcontext - calls $1,_C_LABEL(__sigreturn14) # restore previous context - # we should never return -botch: - calls $0,_C_LABEL(longjmperror) - halt -#endif +END(__setjmp14) diff --git a/lib/libc/arch/vax/gen/__sigsetjmp14.S b/lib/libc/arch/vax/gen/__sigsetjmp14.S index b5ada4642..ed661bfa4 100644 --- a/lib/libc/arch/vax/gen/__sigsetjmp14.S +++ b/lib/libc/arch/vax/gen/__sigsetjmp14.S @@ -27,8 +27,11 @@ * SUCH DAMAGE. */ +#include "DEFS.h" +#include + #if defined(LIBC_SCCS) && !defined(lint) - .asciz "$NetBSD: __sigsetjmp14.S,v 1.4 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: __sigsetjmp14.S,v 1.5 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ /* @@ -43,9 +46,6 @@ * signal mask. */ -#include "DEFS.h" -#include - ENTRY(__sigsetjmp14, R6) movl 4(%ap),%r0 # get env pointer movl 8(%ap),(_JBLEN*4)(%r0) # save "savemask" @@ -53,6 +53,7 @@ ENTRY(__sigsetjmp14, R6) beql L1 jmp _C_LABEL(__setjmp14)+2 # yep, do full setjmp L1: jmp _C_LABEL(_setjmp)+2 # nope, skip to _setjmp +END(__sigsetjmp14) ENTRY(__siglongjmp14, 0) movl 4(%ap),%r0 # get env pointer @@ -60,5 +61,5 @@ ENTRY(__siglongjmp14, 0) beql L2 jmp _C_LABEL(__longjmp14)+2 # yep, do full longjmp L2: jmp _C_LABEL(_longjmp)+2 # nope, skip to _longjmp - +END(__siglongjmp14) diff --git a/lib/libc/arch/vax/gen/_lwp.c b/lib/libc/arch/vax/gen/_lwp.c index d48b6cd0c..94d710bc6 100644 --- a/lib/libc/arch/vax/gen/_lwp.c +++ b/lib/libc/arch/vax/gen/_lwp.c @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.1 2009/06/03 01:02:28 christos Exp $ */ +/* $NetBSD: _lwp.c,v 1.3 2012/03/22 17:32:22 christos Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.1 2009/06/03 01:02:28 christos Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.3 2012/03/22 17:32:22 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -68,12 +68,20 @@ _lwp_makecontext(ucontext_t *u, void (*start)(void *), sp[1] = 0x20000000; /* make this a CALLS frame */ sp[2] = 0; /* saved argument pointer */ sp[3] = 0; /* saved frame pointer */ - sp[4] = (intptr_t)_lwp_exit + 2;/* return via _lwp_exit */ + sp[4] = (int)(uintptr_t)_lwp_exit + 2;/* return via _lwp_exit */ sp[5] = 1; /* argc */ - sp[6] = (intptr_t)arg; /* argv */ + sp[6] = (int)(uintptr_t)arg; /* argv */ - gr[_REG_AP] = (__greg_t)(sp + 5); - gr[_REG_SP] = (__greg_t)sp; - gr[_REG_FP] = (__greg_t)sp; - gr[_REG_PC] = (__greg_t)start + 2; + gr[_REG_AP] = (__greg_t)(uintptr_t)(sp + 5); + gr[_REG_SP] = (__greg_t)(uintptr_t)sp; + gr[_REG_FP] = (__greg_t)(uintptr_t)sp; + gr[_REG_PC] = (__greg_t)(uintptr_t)start + 2; + + /* + * Push the TLS pointer onto the new stack also. + * The _UC_TLSBASE flag tells the kernel to pop it and use it. + */ + *--sp = (int)(intptr_t)private; + gr[_REG_SP] = (__greg_t)(uintptr_t)sp; + u->uc_flags |= _UC_TLSBASE; } diff --git a/lib/libc/arch/vax/gen/_setjmp.S b/lib/libc/arch/vax/gen/_setjmp.S index 4cd0fca4a..932ee1371 100644 --- a/lib/libc/arch/vax/gen/_setjmp.S +++ b/lib/libc/arch/vax/gen/_setjmp.S @@ -27,9 +27,11 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)_setjmp.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: _setjmp.S,v 1.9 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: _setjmp.S,v 1.10 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ /* @@ -46,13 +48,10 @@ * in order to be consistent. */ -#include "DEFS.h" - ENTRY(_setjmp, R6) movl 4(%ap),%r0 movl 12(%fp),12(%r0) # save frame pointer of caller movl 16(%fp),20(%r0) # save pc of caller -#ifdef __ELF__ movl 8(%fp),16(%r0) # save ap of caller clrl %r1 # clear arg count bbc $13,6(%fp),1f # was this a callg? @@ -63,16 +62,15 @@ ENTRY(_setjmp, R6) movq %r6,44(%r0) # save r6/r7 movq %r8,52(%r0) # save r8/r9 movq %r10,60(%r0) # save r10/r11 -#endif clrl %r0 ret +END(_setjmp) ENTRY(_longjmp, 0) movl 8(%ap),%r0 # return(v) movl 4(%ap),%r1 # fetch buffer tstl 12(%r1) # is fp null beql botch -#ifdef __ELF__ movq 44(%r1),%r6 # restore r6/r7 movq 52(%r1),%r8 # restore r8/r9 movq 60(%r1),%r10 # restore r10/r11 @@ -81,41 +79,8 @@ ENTRY(_longjmp, 0) movl 12(%r1),%fp # restore fp movq 20(%r1),-(%sp) # save pc/psl to new stack rei # and go back to saved pc/psl -#else -loop: - bitw $1,6(%fp) # %r0 saved? - beql 1f - movl %r0,20(%fp) - bitw $2,6(%fp) # was %r1 saved? - beql 2f - movl %r1,24(%fp) - brb 2f -1: - bitw $2,6(%fp) # was %r1 saved? - beql 2f - movl %r1,20(%fp) -2: - cmpl 12(%r1),12(%fp) - beql done - blssu botch - movab loop,16(%fp) - ret # pop another frame - -done: - cmpb *16(%fp),$2 # returning to an "rei"? - bneq 1f - movab 3f,16(%fp) # do return w/ psl-pc pop - brw 2f -1: - movab 4f,16(%fp) # do standard return -2: - ret # unwind stack before signals enabled -3: - addl2 $8,%sp # compensate for PSL-PC push -4: - jmp *20(%r1) # done, return.... -#endif /* !__ELF__ */ botch: calls $0,_C_LABEL(longjmperror) halt +END(_longjmp) diff --git a/lib/libc/arch/vax/gen/alloca.S b/lib/libc/arch/vax/gen/alloca.S index d70bf2465..d6153040e 100644 --- a/lib/libc/arch/vax/gen/alloca.S +++ b/lib/libc/arch/vax/gen/alloca.S @@ -27,20 +27,21 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)alloca.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: alloca.S,v 1.3 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: alloca.S,v 1.5 2011/11/21 16:17:48 chs Exp $") #endif /* LIBC_SCCS and not lint */ -#include "DEFS.h" - ENTRY(alloca, 0) movl 4(%ap),%r0 # get allocation size - movl 16(%fp),%r2 # save return address before we smash it + movl 16(%fp),%r1 # save return address before we smash it movab here,16(%fp) ret here: subl2 %r0,%sp # create stack space bicl2 $3,%sp # align to longword boundary movl %sp,%r0 - jmp (%r2) + jmp (%r1) +END(alloca) diff --git a/lib/libc/arch/vax/gen/byte_swap_2.S b/lib/libc/arch/vax/gen/byte_swap_2.S index 6a94404fd..d3e64a109 100644 --- a/lib/libc/arch/vax/gen/byte_swap_2.S +++ b/lib/libc/arch/vax/gen/byte_swap_2.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)htons.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: byte_swap_2.S,v 1.3 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: byte_swap_2.S,v 1.4 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ -#include "DEFS.h" - ALTENTRY(ntohs) ALTENTRY(htons) ENTRY(__bswap16, 0) @@ -41,3 +41,4 @@ ENTRY(__bswap16, 0) movb 5(%ap),%r0 movzwl %r0,%r0 ret +END(__bswap16) diff --git a/lib/libc/arch/vax/gen/byte_swap_4.S b/lib/libc/arch/vax/gen/byte_swap_4.S index 13cb0519c..d5272a3ae 100644 --- a/lib/libc/arch/vax/gen/byte_swap_4.S +++ b/lib/libc/arch/vax/gen/byte_swap_4.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)htonl.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: byte_swap_4.S,v 1.4 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: byte_swap_4.S,v 1.5 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ -#include "DEFS.h" - ALTENTRY(ntohl) ALTENTRY(htonl) ENTRY(__bswap32, 0) @@ -41,3 +41,4 @@ ENTRY(__bswap32, 0) insv %r0,$16,$8,%r0 movb 7(%ap),%r0 ret +END(__bswap32) diff --git a/lib/libc/arch/vax/gen/fabs.S b/lib/libc/arch/vax/gen/fabs.S index a31bb9b75..1b5c5f501 100644 --- a/lib/libc/arch/vax/gen/fabs.S +++ b/lib/libc/arch/vax/gen/fabs.S @@ -27,18 +27,19 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)fabs.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: fabs.S,v 1.3 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: fabs.S,v 1.4 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ /* fabs - floating absolute value */ -#include "DEFS.h" - ENTRY(fabs, 0) movd 4(%ap),%r0 bgeq 1f mnegd %r0,%r0 1: ret +END(fabs) diff --git a/lib/libc/arch/vax/gen/frexp.c b/lib/libc/arch/vax/gen/frexp.c index 66db2499b..a2edb2bda 100644 --- a/lib/libc/arch/vax/gen/frexp.c +++ b/lib/libc/arch/vax/gen/frexp.c @@ -1,4 +1,4 @@ -/* $NetBSD: frexp.c,v 1.4 2003/08/07 16:42:31 agc Exp $ */ +/* $NetBSD: frexp.c,v 1.5 2012/06/25 22:32:43 abs Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)frexp.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: frexp.c,v 1.4 2003/08/07 16:42:31 agc Exp $"); +__RCSID("$NetBSD: frexp.c,v 1.5 2012/06/25 22:32:43 abs Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -42,9 +42,7 @@ __RCSID("$NetBSD: frexp.c,v 1.4 2003/08/07 16:42:31 agc Exp $"); #include double -frexp(value, eptr) - double value; - int *eptr; +frexp(double value, int *eptr) { union { double v; diff --git a/lib/libc/arch/vax/gen/ldexp.S b/lib/libc/arch/vax/gen/ldexp.S index ef36ccf08..477705e18 100644 --- a/lib/libc/arch/vax/gen/ldexp.S +++ b/lib/libc/arch/vax/gen/ldexp.S @@ -27,11 +27,6 @@ * SUCH DAMAGE. */ -#if defined(LIBC_SCCS) && !defined(lint) - /*.asciz "@(#)ldexp.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: ldexp.S,v 1.6 2003/08/07 16:42:31 agc Exp $" -#endif /* LIBC_SCCS and not lint */ - /* * double ldexp (value, exp) * double value; @@ -46,15 +41,16 @@ */ #include "DEFS.h" +#include "assym.h" -/* - * don't include errno.h, ANSI C says it defines errno. - * - * #include - */ -#define ERANGE 34 +#if defined(LIBC_SCCS) && !defined(lint) + /*.asciz "@(#)ldexp.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: ldexp.S,v 1.7 2011/01/25 02:38:15 matt Exp $") +#endif /* LIBC_SCCS and not lint */ +#ifndef _REENTRANT .globl _C_LABEL(errno) +#endif ENTRY(ldexp, 0) movd 4(%ap),%r0 /* fetch "value" */ @@ -72,7 +68,12 @@ ENTRY(ldexp, 0) clrd %r0 jbr 1f 3: - movd huge,%r0 /* largest possible floating magnitude */ + /* + * The largest number that can be represented in a long floating + * number. This is given in hex in order to avoid floating + * conversions + */ + movq $0x7fffffffffffffff,%r0 /* largest possible floating magnitude */ jbc $15,4(%ap),1f /* jump if argument was positive */ mnegd %r0,%r0 /* if arg < 0, make result negative */ 1: @@ -85,9 +86,4 @@ ENTRY(ldexp, 0) movl $ ERANGE,_C_LABEL(errno) #endif ret - - .data -huge: .word 0x7fff /* the largest number that can */ - .word 0xffff /* be represented in a long floating */ - .word 0xffff /* number. This is given in hex in order */ - .word 0xffff /* to avoid floating conversions */ +END(ldexp) diff --git a/lib/libc/arch/vax/gen/makecontext.c b/lib/libc/arch/vax/gen/makecontext.c index 87ee3bf90..7199f12c1 100644 --- a/lib/libc/arch/vax/gen/makecontext.c +++ b/lib/libc/arch/vax/gen/makecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: makecontext.c,v 1.4 2012/03/22 17:32:22 christos Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.4 2012/03/22 17:32:22 christos Exp $"); #endif #include @@ -69,11 +69,11 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...) sp[1] = 0x20000000; /* make this a CALLS frame */ sp[2] = 0; /* saved argument pointer */ sp[3] = 0; /* saved frame pointer */ - sp[4] = (int)_resumecontext+2; /* return via trampoline code */ + sp[4] = (int)(uintptr_t)_resumecontext+2;/* return via trampoline code */ - gr[_REG_AP] = (__greg_t)(sp + 5); - gr[_REG_SP] = (__greg_t)sp; - gr[_REG_FP] = (__greg_t)sp; - gr[_REG_PC] = (__greg_t)func+2; + gr[_REG_AP] = (__greg_t)(uintptr_t)(sp + 5); + gr[_REG_SP] = (__greg_t)(uintptr_t)sp; + gr[_REG_FP] = (__greg_t)(uintptr_t)sp; + gr[_REG_PC] = (__greg_t)(uintptr_t)func+2; } diff --git a/lib/libc/arch/vax/gen/modf.S b/lib/libc/arch/vax/gen/modf.S index e17570564..684875641 100644 --- a/lib/libc/arch/vax/gen/modf.S +++ b/lib/libc/arch/vax/gen/modf.S @@ -27,9 +27,11 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) /* .asciz "@(#)modf.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: modf.S,v 1.4 2003/08/07 16:42:31 agc Exp $" +RCSID("$NetBSD: modf.S,v 1.5 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ /* @@ -40,8 +42,6 @@ * and stores the integer part indirectly through "iptr". */ -#include "DEFS.h" - ENTRY(modf, 0) emodd 4(%ap),$0,$0f1.0,%r2,%r0 jvs 1f # integer overflow @@ -50,6 +50,7 @@ ENTRY(modf, 0) 1: subd3 %r0,4(%ap),*12(%ap) ret +END(modf) ENTRY(modff, 0) emodf 4(%ap),$0,$0f1.0,%r2,%r0 @@ -59,3 +60,4 @@ ENTRY(modff, 0) 1: subf3 %r0,4(%ap),*8(%ap) ret +END(modff) diff --git a/lib/libc/arch/vax/gen/resumecontext.c b/lib/libc/arch/vax/gen/resumecontext.c index 7baafea1e..f604739da 100644 --- a/lib/libc/arch/vax/gen/resumecontext.c +++ b/lib/libc/arch/vax/gen/resumecontext.c @@ -1,4 +1,4 @@ -/* $NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $ */ +/* $NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:58 joerg Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $"); +__RCSID("$NetBSD: resumecontext.c,v 1.4 2011/09/19 21:24:58 joerg Exp $"); #endif #include "namespace.h" @@ -41,7 +41,7 @@ __RCSID("$NetBSD: resumecontext.c,v 1.3 2008/04/28 20:22:57 martin Exp $"); #include "extern.h" void -_resumecontext() +_resumecontext(void) { ucontext_t uct; diff --git a/lib/libc/arch/vax/gen/swapcontext.S b/lib/libc/arch/vax/gen/swapcontext.S index 45f5afbd1..f80a29bc9 100644 --- a/lib/libc/arch/vax/gen/swapcontext.S +++ b/lib/libc/arch/vax/gen/swapcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.3 2008/04/28 20:22:58 martin Exp $ */ +/* $NetBSD: swapcontext.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -31,6 +31,10 @@ #include "SYS.h" +#ifdef LIBC_SCCS +RCSID("$NetBSD: swapcontext.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + ENTRY(swapcontext, 0) clrl %r0 /* assume getcontext succeeds */ chmk $SYS_getcontext /* getcontext(oucp) */ @@ -48,3 +52,4 @@ ENTRY(swapcontext, 0) pushl 8(%ap) calls $1,_C_LABEL(setcontext) /* setcontext(ucp) */ ret +END(swapcontext) diff --git a/lib/libc/arch/vax/genassym.cf b/lib/libc/arch/vax/genassym.cf index ddb2b0851..cad3361db 100644 --- a/lib/libc/arch/vax/genassym.cf +++ b/lib/libc/arch/vax/genassym.cf @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.4 2008/04/28 20:22:57 martin Exp $ +# $NetBSD: genassym.cf,v 1.5 2011/01/25 02:38:15 matt Exp $ # # Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,6 +31,7 @@ include include +include define UC_LEN sizeof(ucontext_t) define UC_FLAGS offsetof(ucontext_t, uc_flags) @@ -81,3 +82,5 @@ define SC_MASK offsetof(struct sigcontext, sc_mask) define SIG_BLOCK SIG_BLOCK define SS_LEN sizeof(sigset_t) + +define ERANGE ERANGE diff --git a/lib/libc/arch/vax/string/bcmp.S b/lib/libc/arch/vax/string/bcmp.S index e032c29b4..1ea154014 100644 --- a/lib/libc/arch/vax/string/bcmp.S +++ b/lib/libc/arch/vax/string/bcmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: bcmp.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: bcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -32,6 +32,10 @@ #include "DEFS.h" +#ifdef LIBC_SCCS +RCSID("$NetBSD: bcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + /* Since "cmpc3" is not portable across VAXen, do it the hard way */ /* still, this is four times faster than the generic C version on a uvax2 */ @@ -56,3 +60,4 @@ ENTRY(bcmp, 0) clrl %r0 # we have a match! 9: ret +END(bcmp) diff --git a/lib/libc/arch/vax/string/bcopy.S b/lib/libc/arch/vax/string/bcopy.S index 6a9c8fe78..b2f96a49f 100644 --- a/lib/libc/arch/vax/string/bcopy.S +++ b/lib/libc/arch/vax/string/bcopy.S @@ -1,4 +1,4 @@ -/* $NetBSD: bcopy.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: bcopy.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -28,14 +28,16 @@ * SUCH DAMAGE. */ -#if defined(LIBC_SCCS) && !defined(lint) - .asciz "@(#)bcopy.s 8.1 (Berkeley) 6/4/93" -#endif /* LIBC_SCCS and not lint */ - /* bcopy(from, to, size) */ #include "DEFS.h" +#if defined(LIBC_SCCS) + /* .asciz "@(#)bcopy.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: bcopy.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + + ENTRY(bcopy, R6) movl 4(%ap),%r1 movl 8(%ap),%r3 @@ -73,3 +75,4 @@ ENTRY(bcopy, R6) subl2 %r6,%r3 movc3 %r6,(%r1),(%r3) ret +END(bcopy) diff --git a/lib/libc/arch/vax/string/bzero.S b/lib/libc/arch/vax/string/bzero.S index 291bdf8d0..54b3046f4 100644 --- a/lib/libc/arch/vax/string/bzero.S +++ b/lib/libc/arch/vax/string/bzero.S @@ -1,4 +1,4 @@ -/* $NetBSD: bzero.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: bzero.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -28,13 +28,14 @@ * SUCH DAMAGE. */ -#if defined(LIBC_SCCS) && !defined(lint) - .asciz "@(#)bzero.s 8.1 (Berkeley) 6/4/93" -#endif /* LIBC_SCCS and not lint */ +#include "DEFS.h" -/* bzero(base, length) */ +#if defined(LIBC_SCCS) + /* .asciz "@(#)bzero.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: bzero.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif -#include "DEFS.h" +/* bzero(base, length) */ ENTRY(bzero, 0) movl 4(%ap),%r3 @@ -48,3 +49,4 @@ ENTRY(bzero, 0) jgtr 1b movc5 $0,(%r3),$0,8(%ap),(%r3) ret +END(bzero) diff --git a/lib/libc/arch/vax/string/ffs.S b/lib/libc/arch/vax/string/ffs.S index 04d78bf10..a87be2adf 100644 --- a/lib/libc/arch/vax/string/ffs.S +++ b/lib/libc/arch/vax/string/ffs.S @@ -1,4 +1,4 @@ -/* $NetBSD: ffs.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: ffs.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -28,14 +28,15 @@ * SUCH DAMAGE. */ +#include "DEFS.h" + #if defined(LIBC_SCCS) && !defined(lint) - .asciz "@(#)ffs.s 8.1 (Berkeley) 6/4/93" + /* .asciz "@(#)ffs.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: ffs.S,v 1.4 2011/01/25 02:38:15 matt Exp $") #endif /* LIBC_SCCS and not lint */ /* bit = ffs(value) */ -#include "DEFS.h" - ENTRY(ffs, 0) ffs $0,$32,4(%ap),%r0 bneq 1f @@ -43,3 +44,4 @@ ENTRY(ffs, 0) 1: incl %r0 ret +END(ffs) diff --git a/lib/libc/arch/vax/string/index.S b/lib/libc/arch/vax/string/index.S index 097f35c70..5d0516bd9 100644 --- a/lib/libc/arch/vax/string/index.S +++ b/lib/libc/arch/vax/string/index.S @@ -1,4 +1,4 @@ -/* $NetBSD: index.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: index.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 1980, 1993 * The Regents of the University of California. All rights reserved. @@ -38,6 +38,10 @@ */ #include "DEFS.h" +#ifdef LIBC_SCCS +RCSID("$NetSBD$") +#endif + /* Alas not quite twice as fast as the generic C version on a uvax2 */ ENTRY(index, 0) @@ -57,3 +61,4 @@ ENTRY(index, 0) jneq 3b decl %r0 jbr 2b +END(index) diff --git a/lib/libc/arch/vax/string/memcmp.S b/lib/libc/arch/vax/string/memcmp.S index a129fb4fe..89e9ac5e3 100644 --- a/lib/libc/arch/vax/string/memcmp.S +++ b/lib/libc/arch/vax/string/memcmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: memcmp.S,v 1.3 2003/08/07 16:42:32 agc Exp $ */ +/* $NetBSD: memcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. @@ -32,6 +32,10 @@ #include "DEFS.h" +#ifdef LIBC_SCCS +RCSID("$NetBSD: memcmp.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + ENTRY(memcmp, 0) movl 12(%ap),%r0 jeql 9f @@ -63,3 +67,4 @@ ENTRY(memcmp, 0) subl3 %r4,%r3,%r0 9: ret +END(memcmp) diff --git a/lib/libc/arch/vax/sys/__clone.S b/lib/libc/arch/vax/sys/__clone.S index 53dec1003..2d7246acd 100644 --- a/lib/libc/arch/vax/sys/__clone.S +++ b/lib/libc/arch/vax/sys/__clone.S @@ -1,4 +1,4 @@ -/* $NetBSD: __clone.S,v 1.3 2008/04/28 20:22:58 martin Exp $ */ +/* $NetBSD: __clone.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,6 +33,10 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: __clone.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(clone, __clone) #endif @@ -74,3 +78,4 @@ ENTRY(__clone, 0) 9: movl $EINVAL,%r0 jmp CERROR+2 +END(__clone) diff --git a/lib/libc/arch/vax/sys/__sigtramp3.S b/lib/libc/arch/vax/sys/__sigtramp3.S index e4703a26a..0631cceac 100644 --- a/lib/libc/arch/vax/sys/__sigtramp3.S +++ b/lib/libc/arch/vax/sys/__sigtramp3.S @@ -1,4 +1,4 @@ -/* $NetBSD: __sigtramp3.S,v 1.1 2003/09/30 19:05:41 matt Exp $ */ +/* $NetBSD: __sigtramp3.S,v 1.2 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 2003 Matt Thomas @@ -39,11 +39,16 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: __sigtramp3.S,v 1.2 2011/01/25 02:38:15 matt Exp $") +#endif + .text _ALIGN_TEXT .globl _C_LABEL(__sigtramp_siginfo_3) _C_LABEL(__sigtramp_siginfo_3): + nop; nop callg (%ap),(%fp) # use global arg list addl2 $8,%ap # arg is pointer to ucontext SYSTRAP(setcontext) # exit from here diff --git a/lib/libc/arch/vax/sys/__syscall.S b/lib/libc/arch/vax/sys/__syscall.S index 4ceb9bb43..1efa4a64e 100644 --- a/lib/libc/arch/vax/sys/__syscall.S +++ b/lib/libc/arch/vax/sys/__syscall.S @@ -32,13 +32,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)syscall.s 8.2 (Berkeley) 1/21/94" */ - .asciz "$NetBSD: __syscall.S,v 1.3 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: __syscall.S,v 1.4 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - ENTRY(__syscall, 0) movl 4(%ap),%r0 # syscall number addl2 $8,%ap # skip the first argument @@ -48,3 +48,4 @@ ENTRY(__syscall, 0) ret 1: jmp CERROR+2 +END(__syscall) diff --git a/lib/libc/arch/vax/sys/__vfork14.S b/lib/libc/arch/vax/sys/__vfork14.S index d9bdabdc9..440ac3f45 100644 --- a/lib/libc/arch/vax/sys/__vfork14.S +++ b/lib/libc/arch/vax/sys/__vfork14.S @@ -27,9 +27,11 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)Ovfork.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: __vfork14.S,v 1.5 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: __vfork14.S,v 1.7 2011/11/21 16:17:48 chs Exp $") #endif /* SYSLIBC_SCCS and not lint */ /* @@ -37,8 +39,6 @@ * C library -- vfork */ -#include "SYS.h" - /* * pid = vfork(); * @@ -51,10 +51,11 @@ */ ENTRY(__vfork14, 0) - movl 16(%fp),%r2 # save return address before we smash it + movl 16(%fp),%r0 # save return address before we smash it movab here,16(%fp) ret here: + movl %r0,%r2 chmk $ SYS___vfork14 bcs err # if failed, set errno and return -1 /* this next trick is Chris Torek's fault */ @@ -74,3 +75,4 @@ err: mnegl $1,%r0 jmp (%r2) #endif +END(__vfork14) diff --git a/lib/libc/arch/vax/sys/brk.S b/lib/libc/arch/vax/sys/brk.S index 63be221fb..d884b2a2a 100644 --- a/lib/libc/arch/vax/sys/brk.S +++ b/lib/libc/arch/vax/sys/brk.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)brk.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: brk.S,v 1.12 2003/12/26 11:21:48 martin Exp $" +RCSID("$NetBSD: brk.S,v 1.13 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - .globl CURBRK .globl _C_LABEL(__minbrk) @@ -52,3 +52,4 @@ ENTRY(_brk, 0) ret err: jmp CERROR+2 +END(_brk) diff --git a/lib/libc/arch/vax/sys/cerror.S b/lib/libc/arch/vax/sys/cerror.S index f9430318d..94f929ac4 100644 --- a/lib/libc/arch/vax/sys/cerror.S +++ b/lib/libc/arch/vax/sys/cerror.S @@ -27,15 +27,15 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)cerror.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: cerror.S,v 1.8 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: cerror.S,v 1.9 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - .globl _C_LABEL(errno) -CERROR: .word 0 +NENTRY(__cerror, 0) #ifdef _REENTRANT pushl %r0 calls $0,_C_LABEL(__errno) @@ -46,3 +46,4 @@ CERROR: .word 0 mnegl $1,%r0 movl %r0,%r1 ret +END(__cerror) diff --git a/lib/libc/arch/vax/sys/execl.S b/lib/libc/arch/vax/sys/execl.S index b1262f01d..c084b8a8c 100644 --- a/lib/libc/arch/vax/sys/execl.S +++ b/lib/libc/arch/vax/sys/execl.S @@ -1,4 +1,4 @@ -/* $NetBSD: execl.S,v 1.3 2003/08/24 21:04:53 ragge Exp $ */ +/* $NetBSD: execl.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 2001 Ludd, University of Lule}, Sweden. All rights reserved. * @@ -31,6 +31,10 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: execl.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(execl, _execl) #endif @@ -40,3 +44,4 @@ ENTRY(_execl, 0) pushl 4(%ap) # Push path calls $2,_C_LABEL(execv) ret +END(_execl) diff --git a/lib/libc/arch/vax/sys/execle.S b/lib/libc/arch/vax/sys/execle.S index 6c8c9ff4a..3a3a5288c 100644 --- a/lib/libc/arch/vax/sys/execle.S +++ b/lib/libc/arch/vax/sys/execle.S @@ -1,4 +1,4 @@ -/* $NetBSD: execle.S,v 1.4 2003/08/24 21:04:53 ragge Exp $ */ +/* $NetBSD: execle.S,v 1.5 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 2001 Ludd, University of Lule}, Sweden. All rights reserved. * @@ -31,6 +31,10 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: execle.S,v 1.5 2011/01/25 02:38:15 matt Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(execle, _execle) #endif @@ -42,3 +46,4 @@ ENTRY(_execle, 0) pushl 4(%ap) # Push path calls $3,_C_LABEL(execve) ret +END(_execle) diff --git a/lib/libc/arch/vax/sys/execlp.S b/lib/libc/arch/vax/sys/execlp.S index fd275ce28..3c866ea39 100644 --- a/lib/libc/arch/vax/sys/execlp.S +++ b/lib/libc/arch/vax/sys/execlp.S @@ -1,4 +1,4 @@ -/* $NetBSD: execlp.S,v 1.3 2003/08/24 21:04:53 ragge Exp $ */ +/* $NetBSD: execlp.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ /* * Copyright (c) 2001 Ludd, University of Lule}, Sweden. All rights reserved. * @@ -31,6 +31,10 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: execlp.S,v 1.4 2011/01/25 02:38:15 matt Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(execlp, _execlp) #endif @@ -40,3 +44,4 @@ ENTRY(_execlp, 0) pushl 4(%ap) # Push path calls $2,_C_LABEL(execvp) ret +END(_execlp) diff --git a/lib/libc/arch/vax/sys/exect.S b/lib/libc/arch/vax/sys/exect.S index 3061c6fa6..191fb6e99 100644 --- a/lib/libc/arch/vax/sys/exect.S +++ b/lib/libc/arch/vax/sys/exect.S @@ -27,15 +27,16 @@ * SUCH DAMAGE. */ +#include "SYS.h" +#include + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)exect.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: exect.S,v 1.5 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: exect.S,v 1.6 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" -#include - ENTRY(exect, 0) bispsw $PSL_T chmk $ SYS_execve jmp CERROR+2 # exect(file, argv, env) +END(exect) diff --git a/lib/libc/arch/vax/sys/fork.S b/lib/libc/arch/vax/sys/fork.S index 72ddf58fb..54d5b7d37 100644 --- a/lib/libc/arch/vax/sys/fork.S +++ b/lib/libc/arch/vax/sys/fork.S @@ -27,15 +27,16 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)fork.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: fork.S,v 1.5 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: fork.S,v 1.6 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - _SYSCALL(__fork,fork) jlbc %r1,1f # parent, since %r1 == 0 in parent, 1 in child clrl %r0 1: ret # pid = fork() +END(__fork) diff --git a/lib/libc/arch/vax/sys/getcontext.S b/lib/libc/arch/vax/sys/getcontext.S index b0d78e107..d33419312 100644 --- a/lib/libc/arch/vax/sys/getcontext.S +++ b/lib/libc/arch/vax/sys/getcontext.S @@ -1,4 +1,4 @@ -/* $NetBSD: getcontext.S,v 1.4 2008/04/28 20:22:58 martin Exp $ */ +/* $NetBSD: getcontext.S,v 1.6 2011/11/21 16:17:48 chs Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -31,6 +31,10 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: getcontext.S,v 1.6 2011/11/21 16:17:48 chs Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(getcontext, _getcontext) #endif @@ -44,8 +48,8 @@ ENTRY(_getcontext, 0) jcc 1f jmp CERROR+2 /* badness happened */ -1: movl 4(%ap),%r2 /* ptr to ucontext */ - movl 16(%fp),%r3 /* PC to return to */ +1: movl 4(%ap),%r0 /* ptr to ucontext */ + movl 16(%fp),%r1 /* PC to return to */ movab 2f,16(%fp) /* let's return early */ ret /* @@ -55,7 +59,9 @@ ENTRY(_getcontext, 0) * the callers state but we still have control. */ _ALIGN_TEXT -2: movq %ap,(36+12*4)(%r2) /* adjust AP + SP */ - movl %fp,(36+14*4)(%r2) /* adjust FP */ - movl %r3,(36+15*4)(%r2) /* adjust PC */ - jmp (%r3) /* and return */ +2: movq %ap,(36+12*4)(%r0) /* adjust AP + SP */ + movl %fp,(36+14*4)(%r0) /* adjust FP */ + movl %r3,(36+15*4)(%r0) /* adjust PC */ + clrl %r0 + jmp (%r1) /* and return */ +END(_getcontext) diff --git a/lib/libc/arch/vax/sys/pipe.S b/lib/libc/arch/vax/sys/pipe.S index 9163d1fe0..60ded6aed 100644 --- a/lib/libc/arch/vax/sys/pipe.S +++ b/lib/libc/arch/vax/sys/pipe.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ -#if defined(SYSLIBC_SCCS) && !defined(lint) - /* .asciz "@(#)pipe.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: pipe.S,v 1.4 2003/08/07 16:42:33 agc Exp $" -#endif /* SYSLIBC_SCCS and not lint */ - #include "SYS.h" +#if defined(SYSLIBC_SCCS) + /* .asciz "@(#)pipe.s 8.1 (Berkeley) 6/4/93" */ +RCSID("$NetBSD: pipe.S,v 1.5 2011/01/25 02:38:15 matt Exp $") +#endif + #ifdef WEAK_ALIAS WEAK_ALIAS(pipe, _pipe) #endif @@ -44,3 +44,4 @@ _SYSCALL(_pipe,pipe) movl %r1,(%r2) clrl %r0 ret +END(_pipe) diff --git a/lib/libc/arch/vax/sys/ptrace.S b/lib/libc/arch/vax/sys/ptrace.S index 0aa93b1f6..6e8519c02 100644 --- a/lib/libc/arch/vax/sys/ptrace.S +++ b/lib/libc/arch/vax/sys/ptrace.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)ptrace.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: ptrace.S,v 1.7 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: ptrace.S,v 1.8 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - ENTRY(ptrace, 0) #ifdef _REENTRANT calls $0,_C_LABEL(__errno) @@ -46,3 +46,4 @@ ENTRY(ptrace, 0) ret err: jmp CERROR+2 +END(ptrace) diff --git a/lib/libc/arch/vax/sys/sbrk.S b/lib/libc/arch/vax/sys/sbrk.S index 19fad3abe..ae42e7ba4 100644 --- a/lib/libc/arch/vax/sys/sbrk.S +++ b/lib/libc/arch/vax/sys/sbrk.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sbrk.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: sbrk.S,v 1.10 2003/08/07 16:42:33 agc Exp $" +RCSID("$NetBSD: sbrk.S,v 1.11 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - .globl _end .globl _C_LABEL(__minbrk) .globl CURBRK @@ -61,3 +61,4 @@ ENTRY(_sbrk, 0) ret err: jmp CERROR+2 +END(_sbrk) diff --git a/lib/libc/arch/vax/sys/syscall.S b/lib/libc/arch/vax/sys/syscall.S index b55c600fa..9cd8bce53 100644 --- a/lib/libc/arch/vax/sys/syscall.S +++ b/lib/libc/arch/vax/sys/syscall.S @@ -32,13 +32,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)syscall.s 8.2 (Berkeley) 1/21/94" */ - .asciz "$NetBSD: syscall.S,v 1.6 2003/08/07 16:42:34 agc Exp $" +RCSID("$NetBSD: syscall.S,v 1.7 2011/01/25 02:38:15 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - ENTRY(syscall, 0) movl 4(%ap),%r0 # syscall number subl3 $1,(%ap)+,(%ap) # one fewer arguments @@ -47,3 +47,4 @@ ENTRY(syscall, 0) ret 1: jmp CERROR+2 +END(syscall) diff --git a/lib/libc/cdb/cdbr.c b/lib/libc/cdb/cdbr.c index 90f1c526d..d5a357c96 100644 --- a/lib/libc/cdb/cdbr.c +++ b/lib/libc/cdb/cdbr.c @@ -128,7 +128,7 @@ cdbr_open(const char *path, int flags) return NULL; } - if (read(fd, cdbr->mmap_base, cdbr->mmap_size) != cdbr->mmap_size) + if ((size_t)read(fd, cdbr->mmap_base, cdbr->mmap_size) != cdbr->mmap_size) { free(cdbr->mmap_base); free(cdbr); diff --git a/lib/libc/compat/arch/alpha/sys/Makefile.inc b/lib/libc/compat/arch/alpha/sys/Makefile.inc index 1786884d0..821e4101e 100644 --- a/lib/libc/compat/arch/alpha/sys/Makefile.inc +++ b/lib/libc/compat/arch/alpha/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2005/09/16 18:21:19 drochner Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:12 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/alpha/sys/compat_quotactl.S b/lib/libc/compat/arch/alpha/sys/compat_quotactl.S new file mode 100644 index 000000000..aa367e039 --- /dev/null +++ b/lib/libc/compat/arch/alpha/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:12 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/hppa/sys/Makefile.inc b/lib/libc/compat/arch/hppa/sys/Makefile.inc index a38ba1171..7910a4612 100644 --- a/lib/libc/compat/arch/hppa/sys/Makefile.inc +++ b/lib/libc/compat/arch/hppa/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2006/03/11 19:54:56 christos Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:13 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/hppa/sys/compat_quotactl.S b/lib/libc/compat/arch/hppa/sys/compat_quotactl.S new file mode 100644 index 000000000..8df4a3de5 --- /dev/null +++ b/lib/libc/compat/arch/hppa/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:13 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/ia64/sys/Makefile.inc b/lib/libc/compat/arch/ia64/sys/Makefile.inc index f7d1a2c49..83d9c16d5 100644 --- a/lib/libc/compat/arch/ia64/sys/Makefile.inc +++ b/lib/libc/compat/arch/ia64/sys/Makefile.inc @@ -1,3 +1,3 @@ -# $NetBSD: Makefile.inc,v 1.1 2006/09/23 17:38:03 cherry Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:13 bouyer Exp $ -SRCS+= compat___semctl.S +SRCS+= compat___semctl.S compat_quotactl.S diff --git a/lib/libc/compat/arch/ia64/sys/compat_quotactl.S b/lib/libc/compat/arch/ia64/sys/compat_quotactl.S new file mode 100644 index 000000000..8df4a3de5 --- /dev/null +++ b/lib/libc/compat/arch/ia64/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:13 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/m68k/sys/Makefile.inc b/lib/libc/compat/arch/m68k/sys/Makefile.inc index 768d04cf0..47154b1b6 100644 --- a/lib/libc/compat/arch/m68k/sys/Makefile.inc +++ b/lib/libc/compat/arch/m68k/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2006/03/09 16:20:55 christos Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:13 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/m68k/sys/compat_quotactl.S b/lib/libc/compat/arch/m68k/sys/compat_quotactl.S new file mode 100644 index 000000000..8df4a3de5 --- /dev/null +++ b/lib/libc/compat/arch/m68k/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:13 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/mips/sys/Makefile.inc b/lib/libc/compat/arch/mips/sys/Makefile.inc index 73e76ccd9..07241b413 100644 --- a/lib/libc/compat/arch/mips/sys/Makefile.inc +++ b/lib/libc/compat/arch/mips/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2005/09/17 11:49:39 tsutsui Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:14 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/mips/sys/compat_quotactl.S b/lib/libc/compat/arch/mips/sys/compat_quotactl.S new file mode 100644 index 000000000..94630b816 --- /dev/null +++ b/lib/libc/compat/arch/mips/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:14 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/powerpc/sys/Makefile.inc b/lib/libc/compat/arch/powerpc/sys/Makefile.inc index 425cfc4da..13b76ee08 100644 --- a/lib/libc/compat/arch/powerpc/sys/Makefile.inc +++ b/lib/libc/compat/arch/powerpc/sys/Makefile.inc @@ -1,7 +1,7 @@ -# $NetBSD: Makefile.inc,v 1.1 2006/02/18 00:21:28 matt Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:14 bouyer Exp $ SRCS+= compat_Ovfork.S \ compat___sigreturn14.S compat___sigtramp1.S \ compat_msgctl.S compat___semctl.S compat_shmctl.S \ compat_sigaction13.S compat_sigpending13.S compat_sigprocmask13.S \ - compat_sigreturn13.S compat_sigsuspend13.S + compat_sigreturn13.S compat_sigsuspend13.S compat_quotactl.S diff --git a/lib/libc/compat/arch/powerpc/sys/compat_quotactl.S b/lib/libc/compat/arch/powerpc/sys/compat_quotactl.S new file mode 100644 index 000000000..94630b816 --- /dev/null +++ b/lib/libc/compat/arch/powerpc/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:14 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/powerpc64/sys/Makefile.inc b/lib/libc/compat/arch/powerpc64/sys/Makefile.inc index 2b441c41e..a814c1bda 100644 --- a/lib/libc/compat/arch/powerpc64/sys/Makefile.inc +++ b/lib/libc/compat/arch/powerpc64/sys/Makefile.inc @@ -1,3 +1,3 @@ -# $NetBSD: Makefile.inc,v 1.2 2006/07/07 06:59:04 ross Exp $ +# $NetBSD: Makefile.inc,v 1.3 2011/03/06 17:08:14 bouyer Exp $ -SRCS+= compat_msgctl.S compat___semctl.S compat_shmctl.S +SRCS+= compat_msgctl.S compat___semctl.S compat_shmctl.S compat_quotactl.S diff --git a/lib/libc/compat/arch/powerpc64/sys/compat_quotactl.S b/lib/libc/compat/arch/powerpc64/sys/compat_quotactl.S new file mode 100644 index 000000000..94630b816 --- /dev/null +++ b/lib/libc/compat/arch/powerpc64/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:14 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/sh3/sys/Makefile.inc b/lib/libc/compat/arch/sh3/sys/Makefile.inc index 44f37408d..07241b413 100644 --- a/lib/libc/compat/arch/sh3/sys/Makefile.inc +++ b/lib/libc/compat/arch/sh3/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2005/09/15 21:39:16 uwe Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:14 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/sh3/sys/compat_quotactl.S b/lib/libc/compat/arch/sh3/sys/compat_quotactl.S new file mode 100644 index 000000000..94630b816 --- /dev/null +++ b/lib/libc/compat/arch/sh3/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:14 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/sparc/sys/Makefile.inc b/lib/libc/compat/arch/sparc/sys/Makefile.inc index 0a7475a99..191a9903a 100644 --- a/lib/libc/compat/arch/sparc/sys/Makefile.inc +++ b/lib/libc/compat/arch/sparc/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2005/10/15 22:11:22 uwe Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:15 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/sparc/sys/compat_quotactl.S b/lib/libc/compat/arch/sparc/sys/compat_quotactl.S new file mode 100644 index 000000000..efb80312a --- /dev/null +++ b/lib/libc/compat/arch/sparc/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:15 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/sparc64/sys/Makefile.inc b/lib/libc/compat/arch/sparc64/sys/Makefile.inc index f45e2b8b8..191a9903a 100644 --- a/lib/libc/compat/arch/sparc64/sys/Makefile.inc +++ b/lib/libc/compat/arch/sparc64/sys/Makefile.inc @@ -1,6 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.1 2005/10/16 04:41:34 christos Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:15 bouyer Exp $ SRCS+=compat_Ovfork.S compat___semctl.S compat___sigreturn14.S \ compat___sigtramp1.S compat_msgctl.S compat_shmctl.S compat_sigaction.S \ compat_sigpending.S compat_sigprocmask.S compat_sigreturn.S \ - compat_sigsuspend.S + compat_sigsuspend.S compat_quotactl.S diff --git a/lib/libc/compat/arch/sparc64/sys/compat___sigtramp1.S b/lib/libc/compat/arch/sparc64/sys/compat___sigtramp1.S index 38810fbfb..3fbf49aa1 100644 --- a/lib/libc/compat/arch/sparc64/sys/compat___sigtramp1.S +++ b/lib/libc/compat/arch/sparc64/sys/compat___sigtramp1.S @@ -1,4 +1,4 @@ -/* $NetBSD: compat___sigtramp1.S,v 1.1 2005/10/16 04:41:34 christos Exp $ */ +/* $NetBSD: compat___sigtramp1.S,v 1.2 2011/07/12 07:51:33 mrg Exp $ */ /* * Copyright (c) 1996-2002 Eduardo Horvath @@ -58,6 +58,9 @@ .register %g2,#ignore .register %g3,#ignore +#define BLOCK_SIZE SPARC64_BLOCK_SIZE +#define BLOCK_ALIGN SPARC64_BLOCK_ALIGN + /* * When this code is run, the stack looks like: * [%sp] 128 bytes to which registers can be dumped diff --git a/lib/libc/compat/arch/sparc64/sys/compat_quotactl.S b/lib/libc/compat/arch/sparc64/sys/compat_quotactl.S new file mode 100644 index 000000000..efb80312a --- /dev/null +++ b/lib/libc/compat/arch/sparc64/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:15 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/vax/sys/Makefile.inc b/lib/libc/compat/arch/vax/sys/Makefile.inc index add529716..0ef016907 100644 --- a/lib/libc/compat/arch/vax/sys/Makefile.inc +++ b/lib/libc/compat/arch/vax/sys/Makefile.inc @@ -1,7 +1,7 @@ -# $NetBSD: Makefile.inc,v 1.1 2006/02/18 22:54:51 matt Exp $ +# $NetBSD: Makefile.inc,v 1.2 2011/03/06 17:08:15 bouyer Exp $ SRCS+= compat_Ovfork.S \ compat___sigreturn14.S compat___sigtramp2.S \ compat_msgctl.S compat___semctl.S compat_shmctl.S \ compat_sigaction13.S compat_sigpending13.S compat_sigprocmask13.S \ - compat_sigreturn13.S compat_sigsuspend13.S + compat_sigreturn13.S compat_sigsuspend13.S compat_quotactl.S diff --git a/lib/libc/compat/arch/vax/sys/compat_Ovfork.S b/lib/libc/compat/arch/vax/sys/compat_Ovfork.S index 0fdda43da..b425c5f5b 100644 --- a/lib/libc/compat/arch/vax/sys/compat_Ovfork.S +++ b/lib/libc/compat/arch/vax/sys/compat_Ovfork.S @@ -27,9 +27,11 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)Ovfork.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat_Ovfork.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat_Ovfork.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ /* @@ -37,8 +39,6 @@ * C library -- vfork */ -#include "SYS.h" - WARN_REFERENCES(vfork, \ "warning: reference to compatibility vfork(); include for correct reference") @@ -77,3 +77,4 @@ err: mnegl $1,%r0 jmp (%r2) #endif +END(vfork) diff --git a/lib/libc/compat/arch/vax/sys/compat___sigreturn14.S b/lib/libc/compat/arch/vax/sys/compat___sigreturn14.S index 4a530aaab..006aa6e7e 100644 --- a/lib/libc/compat/arch/vax/sys/compat___sigreturn14.S +++ b/lib/libc/compat/arch/vax/sys/compat___sigreturn14.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sigreturn.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat___sigreturn14.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat___sigreturn14.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - /* * We must preserve the state of the registers as the user has set them up. */ diff --git a/lib/libc/compat/arch/vax/sys/compat___sigtramp2.S b/lib/libc/compat/arch/vax/sys/compat___sigtramp2.S index 7f0b6883e..72693ac37 100644 --- a/lib/libc/compat/arch/vax/sys/compat___sigtramp2.S +++ b/lib/libc/compat/arch/vax/sys/compat___sigtramp2.S @@ -1,4 +1,4 @@ -/* $NetBSD: compat___sigtramp2.S,v 1.1 2006/02/18 22:54:51 matt Exp $ */ +/* $NetBSD: compat___sigtramp2.S,v 1.3 2011/01/29 22:58:47 matt Exp $ */ /* * Copyright (c) 2002 Anders Magnusson, (ragge@NetBSD.org). @@ -36,14 +36,20 @@ #include "SYS.h" +#ifdef SYSLIBC_SCCS +RCSID("$NetBSD: compat___sigtramp2.S,v 1.3 2011/01/29 22:58:47 matt Exp $") +#endif + .text _ALIGN_TEXT .globl _C_LABEL(__sigtramp_sigcontext_2) _C_LABEL(__sigtramp_sigcontext_2): + nop; nop; pushr $(R0|R1|R2|R3|R4|R5) # save scratch registers callg (%ap),(%fp) # use global arg list popr $(R0|R1|R2|R3|R4|R5) # restore regs movab 8(%ap),%ap # arg is pointer to sigctx SYSTRAP(compat_16___sigreturn14) # exit from here halt # illegal insn +END(__sigtramp_sigcontext_2) diff --git a/lib/libc/compat/arch/vax/sys/compat_quotactl.S b/lib/libc/compat/arch/vax/sys/compat_quotactl.S new file mode 100644 index 000000000..efb80312a --- /dev/null +++ b/lib/libc/compat/arch/vax/sys/compat_quotactl.S @@ -0,0 +1,38 @@ +/* $NetBSD: compat_quotactl.S,v 1.2 2011/03/06 17:08:15 bouyer Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "SYS.h" + +WARN_REFERENCES(quotactl, \ + "warning: reference to compatibility quotactl(); include for correct reference") + +PSEUDO(quotactl,compat_50_quotactl) diff --git a/lib/libc/compat/arch/vax/sys/compat_sigpending13.S b/lib/libc/compat/arch/vax/sys/compat_sigpending13.S index fa423f893..04fddc121 100644 --- a/lib/libc/compat/arch/vax/sys/compat_sigpending13.S +++ b/lib/libc/compat/arch/vax/sys/compat_sigpending13.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sigpending.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat_sigpending13.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat_sigpending13.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - WARN_REFERENCES(sigpending, \ "warning: reference to compatibility sigpending(); include for correct reference") @@ -41,3 +41,4 @@ _SYSCALL(sigpending,compat_13_sigpending13) movl %r0,*4(%ap) # store old mask clrl %r0 ret +END(sigpending) diff --git a/lib/libc/compat/arch/vax/sys/compat_sigprocmask13.S b/lib/libc/compat/arch/vax/sys/compat_sigprocmask13.S index 14df4faca..0c3129fa5 100644 --- a/lib/libc/compat/arch/vax/sys/compat_sigprocmask13.S +++ b/lib/libc/compat/arch/vax/sys/compat_sigprocmask13.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sigprocmask.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat_sigprocmask13.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - WARN_REFERENCES(sigprocmask, \ "warning: reference to compatibility sigprocmask(); include for correct reference") @@ -54,3 +54,4 @@ ENTRY(sigprocmask, 0) out: clrl %r0 ret +END(sigprocmask) diff --git a/lib/libc/compat/arch/vax/sys/compat_sigreturn13.S b/lib/libc/compat/arch/vax/sys/compat_sigreturn13.S index f66856d64..31686c57d 100644 --- a/lib/libc/compat/arch/vax/sys/compat_sigreturn13.S +++ b/lib/libc/compat/arch/vax/sys/compat_sigreturn13.S @@ -27,13 +27,13 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sigreturn.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat_sigreturn13.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat_sigreturn13.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - /* * We must preserve the state of the registers as the user has set them up. */ diff --git a/lib/libc/compat/arch/vax/sys/compat_sigsuspend13.S b/lib/libc/compat/arch/vax/sys/compat_sigsuspend13.S index 057ce40b2..cb468b069 100644 --- a/lib/libc/compat/arch/vax/sys/compat_sigsuspend13.S +++ b/lib/libc/compat/arch/vax/sys/compat_sigsuspend13.S @@ -27,20 +27,21 @@ * SUCH DAMAGE. */ +#include "SYS.h" + #if defined(SYSLIBC_SCCS) && !defined(lint) /* .asciz "@(#)sigsuspend.s 8.1 (Berkeley) 6/4/93" */ - .asciz "$NetBSD: compat_sigsuspend13.S,v 1.1 2006/02/18 22:54:51 matt Exp $" +RCSID("$NetBSD: compat_sigsuspend13.S,v 1.2 2011/01/25 02:38:16 matt Exp $") #endif /* SYSLIBC_SCCS and not lint */ -#include "SYS.h" - WARN_REFERENCES(sigsuspend, \ "warning: reference to compatibility sigsuspend(); include for correct reference") ENTRY(sigsuspend, 0) movl *4(%ap),4(%ap) # indirect to mask arg - chmk $ SYS_compat_13_sigsuspend13 + SYSTRAP(compat_13_sigsuspend13) jcc 1f jmp CERROR+2 1: clrl %r0 # shouldnt happen ret +END(sigsuspend) diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c deleted file mode 100644 index 2578b3200..000000000 --- a/lib/libc/stdlib/malloc.c +++ /dev/null @@ -1,1320 +0,0 @@ -/* $NetBSD: malloc.c,v 1.52 2008/02/03 22:56:53 christos Exp $ */ - -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * From FreeBSD: malloc.c,v 1.91 2006/01/12 07:28:20 jasone - * - */ - -#ifdef __minix -#define mmap minix_mmap -#define munmap minix_munmap -#ifdef _LIBSYS -#include -#define MALLOC_NO_SYSCALLS -#define wrtwarning(w) printf("libminc malloc warning: %s\n", w) -#define wrterror(w) panic("libminc malloc error: %s\n", w) -#endif -#endif - -/* - * Defining MALLOC_EXTRA_SANITY will enable extra checks which are related - * to internal conditions and consistency in malloc.c. This has a - * noticeable runtime performance hit, and generally will not do you - * any good unless you fiddle with the internals of malloc or want - * to catch random pointer corruption as early as possible. - */ -#ifndef MALLOC_EXTRA_SANITY -#undef MALLOC_EXTRA_SANITY -#endif - -/* - * What to use for Junk. This is the byte value we use to fill with - * when the 'J' option is enabled. - */ -#define SOME_JUNK 0xd0 /* as in "Duh" :-) */ - -/* - * The basic parameters you can tweak. - * - * malloc_minsize minimum size of an allocation in bytes. - * If this is too small it's too much work - * to manage them. This is also the smallest - * unit of alignment used for the storage - * returned by malloc/realloc. - * - */ - -#include "namespace.h" -#if defined(__FreeBSD__) -# if defined(__i386__) -# define malloc_minsize 16U -# endif -# if defined(__ia64__) -# define malloc_pageshift 13U -# define malloc_minsize 16U -# endif -# if defined(__alpha__) -# define malloc_pageshift 13U -# define malloc_minsize 16U -# endif -# if defined(__sparc64__) -# define malloc_pageshift 13U -# define malloc_minsize 16U -# endif -# if defined(__amd64__) -# define malloc_pageshift 12U -# define malloc_minsize 16U -# endif -# if defined(__arm__) -# define malloc_pageshift 12U -# define malloc_minsize 16U -# endif -#ifndef __minix -# define HAS_UTRACE -# define UTRACE_LABEL -#endif /* __minix */ - -#include -void utrace(struct ut *, int); - - /* - * Make malloc/free/realloc thread-safe in libc for use with - * kernel threads. - */ -# include "libc_private.h" -# include "spinlock.h" - static spinlock_t thread_lock = _SPINLOCK_INITIALIZER; -# define _MALLOC_LOCK() if (__isthreaded) _SPINLOCK(&thread_lock); -# define _MALLOC_UNLOCK() if (__isthreaded) _SPINUNLOCK(&thread_lock); -#endif /* __FreeBSD__ */ - -#include - -#include -#if defined(__NetBSD__) -# define malloc_minsize 16U -# define HAS_UTRACE -# define UTRACE_LABEL "malloc", -#include -#include "extern.h" -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: malloc.c,v 1.52 2008/02/03 22:56:53 christos Exp $"); -#endif /* LIBC_SCCS and not lint */ -int utrace(const char *, void *, size_t); - -#include -extern int __isthreaded; -static mutex_t thread_lock = MUTEX_INITIALIZER; -#define _MALLOC_LOCK() if (__isthreaded) mutex_lock(&thread_lock); -#define _MALLOC_UNLOCK() if (__isthreaded) mutex_unlock(&thread_lock); -#endif /* __NetBSD__ */ - -#if defined(__sparc__) && defined(sun) -# define malloc_minsize 16U -# define MAP_ANON (0) - static int fdzero; -# define MMAP_FD fdzero -# define INIT_MMAP() \ - { if ((fdzero = open(_PATH_DEVZERO, O_RDWR, 0000)) == -1) \ - wrterror("open of /dev/zero"); } -#endif /* __sparc__ */ - -/* Insert your combination here... */ -#if defined(__FOOCPU__) && defined(__BAROS__) -# define malloc_minsize 16U -#endif /* __FOOCPU__ && __BAROS__ */ - -#ifndef ZEROSIZEPTR -#define ZEROSIZEPTR ((void *)(uintptr_t)(1UL << (malloc_pageshift - 1))) -#endif - -/* - * No user serviceable parts behind this point. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * This structure describes a page worth of chunks. - */ - -struct pginfo { - struct pginfo *next; /* next on the free list */ - void *page; /* Pointer to the page */ - u_short size; /* size of this page's chunks */ - u_short shift; /* How far to shift for this size chunks */ - u_short free; /* How many free chunks */ - u_short total; /* How many chunk */ - u_int bits[1]; /* Which chunks are free */ -}; - -/* - * This structure describes a number of free pages. - */ - -struct pgfree { - struct pgfree *next; /* next run of free pages */ - struct pgfree *prev; /* prev run of free pages */ - void *page; /* pointer to free pages */ - void *end; /* pointer to end of free pages */ - size_t size; /* number of bytes free */ -}; - -/* - * How many bits per u_int in the bitmap. - * Change only if not 8 bits/byte - */ -#define MALLOC_BITS ((int)(8*sizeof(u_int))) - -/* - * Magic values to put in the page_directory - */ -#define MALLOC_NOT_MINE ((struct pginfo*) 0) -#define MALLOC_FREE ((struct pginfo*) 1) -#define MALLOC_FIRST ((struct pginfo*) 2) -#define MALLOC_FOLLOW ((struct pginfo*) 3) -#define MALLOC_MAGIC ((struct pginfo*) 4) - -/* - * Page size related parameters, computed at run-time. - */ -static size_t malloc_pagesize; -static size_t malloc_pageshift; -static size_t malloc_pagemask; - -#ifndef malloc_minsize -#define malloc_minsize 16U -#endif - -#ifndef malloc_maxsize -#define malloc_maxsize ((malloc_pagesize)>>1) -#endif - -#define pageround(foo) (((foo) + (malloc_pagemask))&(~(malloc_pagemask))) -#define ptr2idx(foo) \ - (((size_t)(uintptr_t)(foo) >> malloc_pageshift)-malloc_origo) - -#ifndef _MALLOC_LOCK -#define _MALLOC_LOCK() -#endif - -#ifndef _MALLOC_UNLOCK -#define _MALLOC_UNLOCK() -#endif - -#ifndef MMAP_FD -#define MMAP_FD (-1) -#endif - -#ifndef INIT_MMAP -#define INIT_MMAP() -#endif - -#ifndef __minix -#ifndef MADV_FREE -#define MADV_FREE MADV_DONTNEED -#endif -#endif /* !__minix */ - -/* Number of free pages we cache */ -static size_t malloc_cache = 16; - -/* The offset from pagenumber to index into the page directory */ -static size_t malloc_origo; - -/* The last index in the page directory we care about */ -static size_t last_idx; - -/* Pointer to page directory. Allocated "as if with" malloc */ -static struct pginfo **page_dir; - -/* How many slots in the page directory */ -static size_t malloc_ninfo; - -/* Free pages line up here */ -static struct pgfree free_list; - -/* Abort(), user doesn't handle problems. */ -static int malloc_abort; - -/* Are we trying to die ? */ -static int suicide; - -/* always realloc ? */ -static int malloc_realloc; - -/* pass the kernel a hint on free pages ? */ -#if defined(MADV_FREE) -static int malloc_hint = 0; -#endif - -/* xmalloc behaviour ? */ -static int malloc_xmalloc; - -/* sysv behaviour for malloc(0) ? */ -static int malloc_sysv; - -/* zero fill ? */ -static int malloc_zero; - -/* junk fill ? */ -static int malloc_junk; - -#ifdef HAS_UTRACE - -/* utrace ? */ -static int malloc_utrace; - -struct ut { void *p; size_t s; void *r; }; - -#define UTRACE(a, b, c) \ - if (malloc_utrace) { \ - struct ut u; \ - u.p=a; u.s = b; u.r=c; \ - utrace(UTRACE_LABEL (void *) &u, sizeof u); \ - } -#else /* !HAS_UTRACE */ -#define UTRACE(a,b,c) -#endif /* HAS_UTRACE */ - -/* my last break. */ -static void *malloc_brk; - -/* one location cache for free-list holders */ -static struct pgfree *px; - -/* compile-time options */ -const char *_malloc_options; - -/* Name of the current public function */ -static const char *malloc_func; - -/* Macro for mmap */ -#define MMAP(size) \ - mmap(NULL, (size), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, \ - MMAP_FD, (off_t)0); - -/* - * Necessary function declarations - */ -static int extend_pgdir(size_t idx); -static void *imalloc(size_t size); -static void ifree(void *ptr); -static void *irealloc(void *ptr, size_t size); - -#ifndef MALLOC_NO_SYSCALLS -static void -wrtmessage(const char *p1, const char *p2, const char *p3, const char *p4) -{ - - write(STDERR_FILENO, p1, strlen(p1)); - write(STDERR_FILENO, p2, strlen(p2)); - write(STDERR_FILENO, p3, strlen(p3)); - write(STDERR_FILENO, p4, strlen(p4)); -} - -void (*_malloc_message)(const char *p1, const char *p2, const char *p3, - const char *p4) = wrtmessage; -static void -wrterror(const char *p) -{ - - suicide = 1; - _malloc_message(getprogname(), malloc_func, " error: ", p); - abort(); -} - -static void -wrtwarning(const char *p) -{ - - /* - * Sensitive processes, somewhat arbitrarily defined here as setuid, - * setgid, root and wheel cannot afford to have malloc mistakes. - */ - if (malloc_abort || issetugid() || getuid() == 0 || getgid() == 0) - wrterror(p); -} -#endif - -/* - * Allocate a number of pages from the OS - */ -static void * -map_pages(size_t pages) -{ - caddr_t result, rresult, tail; - intptr_t bytes = pages << malloc_pageshift; - - if (bytes < 0 || (size_t)bytes < pages) { - errno = ENOMEM; - return NULL; - } - - if ((result = sbrk(bytes)) == (void *)-1) - return NULL; - - /* - * Round to a page, in case sbrk(2) did not do this for us - */ - rresult = (caddr_t)pageround((size_t)(uintptr_t)result); - if (result < rresult) { - /* make sure we have enough space to fit bytes */ - if (sbrk((intptr_t)(rresult - result)) == (void *) -1) { - /* we failed, put everything back */ - if (brk(result)) { - wrterror("brk(2) failed [internal error]\n"); - } - } - } - tail = rresult + (size_t)bytes; - - last_idx = ptr2idx(tail) - 1; - malloc_brk = tail; - - if ((last_idx+1) >= malloc_ninfo && !extend_pgdir(last_idx)) { - malloc_brk = result; - last_idx = ptr2idx(malloc_brk) - 1; - /* Put back break point since we failed. */ - if (brk(malloc_brk)) - wrterror("brk(2) failed [internal error]\n"); - return 0; - } - - return rresult; -} - -/* - * Extend page directory - */ -static int -extend_pgdir(size_t idx) -{ - struct pginfo **new, **old; - size_t newlen, oldlen; - - /* check for overflow */ - if ((((~(1UL << ((sizeof(size_t) * NBBY) - 1)) / sizeof(*page_dir)) + 1) - + (malloc_pagesize / sizeof *page_dir)) < idx) { - errno = ENOMEM; - return 0; - } - - /* Make it this many pages */ - newlen = pageround(idx * sizeof *page_dir) + malloc_pagesize; - - /* remember the old mapping size */ - oldlen = malloc_ninfo * sizeof *page_dir; - - /* - * NOTE: we allocate new pages and copy the directory rather than tempt - * fate by trying to "grow" the region.. There is nothing to prevent - * us from accidentally re-mapping space that's been allocated by our caller - * via dlopen() or other mmap(). - * - * The copy problem is not too bad, as there is 4K of page index per - * 4MB of malloc arena. - * - * We can totally avoid the copy if we open a file descriptor to associate - * the anon mappings with. Then, when we remap the pages at the new - * address, the old pages will be "magically" remapped.. But this means - * keeping open a "secret" file descriptor..... - */ - - /* Get new pages */ - new = MMAP(newlen); - if (new == MAP_FAILED) - return 0; - - /* Copy the old stuff */ - memcpy(new, page_dir, oldlen); - - /* register the new size */ - malloc_ninfo = newlen / sizeof *page_dir; - - /* swap the pointers */ - old = page_dir; - page_dir = new; - - /* Now free the old stuff */ - munmap(old, oldlen); - return 1; -} - -/* - * Initialize the world - */ -static void -malloc_init(void) -{ - int save_errno = errno; -#ifndef MALLOC_NO_SYSCALLS - const char *p; - char b[64]; - size_t i; - ssize_t j; - - /* - * Compute page-size related variables. - */ - malloc_pagesize = (size_t)sysconf(_SC_PAGESIZE); -#else - malloc_pagesize = PAGE_SIZE; -#endif - malloc_pagemask = malloc_pagesize - 1; - for (malloc_pageshift = 0; - (1UL << malloc_pageshift) != malloc_pagesize; - malloc_pageshift++) - /* nothing */ ; - - INIT_MMAP(); - -#ifdef MALLOC_EXTRA_SANITY - malloc_junk = 1; -#endif /* MALLOC_EXTRA_SANITY */ - -#ifndef MALLOC_NO_SYSCALLS - for (i = 0; i < 3; i++) { - if (i == 0) { - j = readlink("/etc/malloc.conf", b, sizeof b - 1); - if (j <= 0) - continue; - b[j] = '\0'; - p = b; - } else if (i == 1 && issetugid() == 0) { - p = getenv("MALLOC_OPTIONS"); - } else if (i == 1) { - continue; - } else { - p = _malloc_options; - } - for (; p != NULL && *p != '\0'; p++) { - switch (*p) { - case '>': malloc_cache <<= 1; break; - case '<': malloc_cache >>= 1; break; - case 'a': malloc_abort = 0; break; - case 'A': malloc_abort = 1; break; -#ifndef __minix - case 'h': malloc_hint = 0; break; - case 'H': malloc_hint = 1; break; -#endif /* !__minix */ - case 'r': malloc_realloc = 0; break; - case 'R': malloc_realloc = 1; break; - case 'j': malloc_junk = 0; break; - case 'J': malloc_junk = 1; break; -#ifdef HAS_UTRACE - case 'u': malloc_utrace = 0; break; - case 'U': malloc_utrace = 1; break; -#endif - case 'v': malloc_sysv = 0; break; - case 'V': malloc_sysv = 1; break; - case 'x': malloc_xmalloc = 0; break; - case 'X': malloc_xmalloc = 1; break; - case 'z': malloc_zero = 0; break; - case 'Z': malloc_zero = 1; break; - default: - _malloc_message(getprogname(), malloc_func, - " warning: ", "unknown char in MALLOC_OPTIONS\n"); - break; - } - } - } -#endif - - UTRACE(0, 0, 0); - - /* - * We want junk in the entire allocation, and zero only in the part - * the user asked for. - */ - if (malloc_zero) - malloc_junk = 1; - - /* Allocate one page for the page directory */ - page_dir = MMAP(malloc_pagesize); - - if (page_dir == MAP_FAILED) - wrterror("mmap(2) failed, check limits.\n"); - - /* - * We need a maximum of malloc_pageshift buckets, steal these from the - * front of the page_directory; - */ - malloc_origo = pageround((size_t)(uintptr_t)sbrk((intptr_t)0)) - >> malloc_pageshift; - malloc_origo -= malloc_pageshift; - - malloc_ninfo = malloc_pagesize / sizeof *page_dir; - - /* Recalculate the cache size in bytes, and make sure it's nonzero */ - - if (!malloc_cache) - malloc_cache++; - - malloc_cache <<= malloc_pageshift; - - /* - * This is a nice hack from Kaleb Keithly (kaleb@x.org). - * We can sbrk(2) further back when we keep this on a low address. - */ - px = imalloc(sizeof *px); - - errno = save_errno; -} - -/* - * Allocate a number of complete pages - */ -static void * -malloc_pages(size_t size) -{ - void *p, *delay_free = NULL; - size_t i; - struct pgfree *pf; - size_t idx; - - idx = pageround(size); - if (idx < size) { - errno = ENOMEM; - return NULL; - } else - size = idx; - - p = NULL; - - /* Look for free pages before asking for more */ - for(pf = free_list.next; pf; pf = pf->next) { - -#ifdef MALLOC_EXTRA_SANITY - if (pf->size & malloc_pagemask) - wrterror("(ES): junk length entry on free_list.\n"); - if (!pf->size) - wrterror("(ES): zero length entry on free_list.\n"); - if (pf->page == pf->end) - wrterror("(ES): zero entry on free_list.\n"); - if (pf->page > pf->end) - wrterror("(ES): sick entry on free_list.\n"); - if ((void*)pf->page >= (void*)sbrk(0)) - wrterror("(ES): entry on free_list past brk.\n"); - if (page_dir[ptr2idx(pf->page)] != MALLOC_FREE) - wrterror("(ES): non-free first page on free-list.\n"); - if (page_dir[ptr2idx(pf->end)-1] != MALLOC_FREE) - wrterror("(ES): non-free last page on free-list.\n"); -#endif /* MALLOC_EXTRA_SANITY */ - - if (pf->size < size) - continue; - - if (pf->size == size) { - p = pf->page; - if (pf->next != NULL) - pf->next->prev = pf->prev; - pf->prev->next = pf->next; - delay_free = pf; - break; - } - - p = pf->page; - pf->page = (char *)pf->page + size; - pf->size -= size; - break; - } - -#ifdef MALLOC_EXTRA_SANITY - if (p != NULL && page_dir[ptr2idx(p)] != MALLOC_FREE) - wrterror("(ES): allocated non-free page on free-list.\n"); -#endif /* MALLOC_EXTRA_SANITY */ - - size >>= malloc_pageshift; - - /* Map new pages */ - if (p == NULL) - p = map_pages(size); - - if (p != NULL) { - - idx = ptr2idx(p); - page_dir[idx] = MALLOC_FIRST; - for (i=1;ibits[0] * - (((malloc_pagesize >> bits)+MALLOC_BITS-1) / MALLOC_BITS); - - /* Don't waste more than two chunks on this */ - if ((1<<(bits)) <= l+l) { - bp = (struct pginfo *)pp; - } else { - bp = imalloc((size_t)l); - if (bp == NULL) { - ifree(pp); - return 0; - } - } - - bp->size = (1<shift = bits; - bp->total = bp->free = (u_short)(malloc_pagesize >> bits); - bp->page = pp; - - /* set all valid bits in the bitmap */ - k = bp->total; - i = 0; - - /* Do a bunch at a time */ - for(;k-i >= MALLOC_BITS; i += MALLOC_BITS) - bp->bits[i / MALLOC_BITS] = ~0U; - - for(; i < k; i++) - bp->bits[i/MALLOC_BITS] |= 1<<(i%MALLOC_BITS); - - if (bp == bp->page) { - /* Mark the ones we stole for ourselves */ - for(i = 0; l > 0; i++) { - bp->bits[i / MALLOC_BITS] &= ~(1 << (i % MALLOC_BITS)); - bp->free--; - bp->total--; - l -= (long)(1 << bits); - } - } - - /* MALLOC_LOCK */ - - page_dir[ptr2idx(pp)] = bp; - - bp->next = page_dir[bits]; - page_dir[bits] = bp; - - /* MALLOC_UNLOCK */ - - return 1; -} - -/* - * Allocate a fragment - */ -static void * -malloc_bytes(size_t size) -{ - size_t i; - int j; - u_int u; - struct pginfo *bp; - size_t k; - u_int *lp; - - /* Don't bother with anything less than this */ - if (size < malloc_minsize) - size = malloc_minsize; - - - /* Find the right bucket */ - j = 1; - i = size-1; - while (i >>= 1) - j++; - - /* If it's empty, make a page more of that size chunks */ - if (page_dir[j] == NULL && !malloc_make_chunks(j)) - return NULL; - - bp = page_dir[j]; - - /* Find first word of bitmap which isn't empty */ - for (lp = bp->bits; !*lp; lp++) - ; - - /* Find that bit, and tweak it */ - u = 1; - k = 0; - while (!(*lp & u)) { - u += u; - k++; - } - *lp ^= u; - - /* If there are no more free, remove from free-list */ - if (!--bp->free) { - page_dir[j] = bp->next; - bp->next = NULL; - } - - /* Adjust to the real offset of that chunk */ - k += (lp-bp->bits)*MALLOC_BITS; - k <<= bp->shift; - - if (malloc_junk) - memset((u_char*)bp->page + k, SOME_JUNK, (size_t)bp->size); - - return (u_char *)bp->page + k; -} - -/* - * Allocate a piece of memory - */ -static void * -imalloc(size_t size) -{ - void *result; - - if (suicide) - abort(); - - if ((size + malloc_pagesize) < size) /* Check for overflow */ - result = NULL; - else if ((size + malloc_pagesize) >= (uintptr_t)page_dir) - result = NULL; - else if (size <= malloc_maxsize) - result = malloc_bytes(size); - else - result = malloc_pages(size); - - if (malloc_abort && result == NULL) - wrterror("allocation failed.\n"); - - if (malloc_zero && result != NULL) - memset(result, 0, size); - - return result; -} - -/* - * Change the size of an allocation. - */ -static void * -irealloc(void *ptr, size_t size) -{ - void *p; - size_t osize, idx; - struct pginfo **mp; - size_t i; - - if (suicide) - abort(); - - idx = ptr2idx(ptr); - - if (idx < malloc_pageshift) { - wrtwarning("junk pointer, too low to make sense.\n"); - return 0; - } - - if (idx > last_idx) { - wrtwarning("junk pointer, too high to make sense.\n"); - return 0; - } - - mp = &page_dir[idx]; - - if (*mp == MALLOC_FIRST) { /* Page allocation */ - - /* Check the pointer */ - if ((size_t)(uintptr_t)ptr & malloc_pagemask) { - wrtwarning("modified (page-) pointer.\n"); - return NULL; - } - - /* Find the size in bytes */ - for (osize = malloc_pagesize; *++mp == MALLOC_FOLLOW;) - osize += malloc_pagesize; - - if (!malloc_realloc && /* unless we have to, */ - size <= osize && /* .. or are too small, */ - size > (osize - malloc_pagesize)) { /* .. or can free a page, */ - if (malloc_junk) - memset((u_char *)ptr + size, SOME_JUNK, osize-size); - return ptr; /* don't do anything. */ - } - - } else if (*mp >= MALLOC_MAGIC) { /* Chunk allocation */ - - /* Check the pointer for sane values */ - if (((size_t)(uintptr_t)ptr & ((*mp)->size-1))) { - wrtwarning("modified (chunk-) pointer.\n"); - return NULL; - } - - /* Find the chunk index in the page */ - i = ((size_t)(uintptr_t)ptr & malloc_pagemask) >> (*mp)->shift; - - /* Verify that it isn't a free chunk already */ - if ((*mp)->bits[i/MALLOC_BITS] & (1UL << (i % MALLOC_BITS))) { - wrtwarning("chunk is already free.\n"); - return NULL; - } - - osize = (*mp)->size; - - if (!malloc_realloc && /* Unless we have to, */ - size <= osize && /* ..or are too small, */ - (size > osize / 2 || /* ..or could use a smaller size, */ - osize == malloc_minsize)) { /* ..(if there is one) */ - if (malloc_junk) - memset((u_char *)ptr + size, SOME_JUNK, osize-size); - return ptr; /* ..Don't do anything */ - } - - } else { - wrtwarning("pointer to wrong page.\n"); - return NULL; - } - - p = imalloc(size); - - if (p != NULL) { - /* copy the lesser of the two sizes, and free the old one */ - if (!size || !osize) - ; - else if (osize < size) - memcpy(p, ptr, osize); - else - memcpy(p, ptr, size); - ifree(ptr); - } - return p; -} - -/* - * Free a sequence of pages - */ - -static inline void -free_pages(void *ptr, size_t idx, struct pginfo *info) -{ - size_t i; - struct pgfree *pf, *pt=NULL; - size_t l; - void *tail; - - if (info == MALLOC_FREE) { - wrtwarning("page is already free.\n"); - return; - } - - if (info != MALLOC_FIRST) { - wrtwarning("pointer to wrong page.\n"); - return; - } - - if ((size_t)(uintptr_t)ptr & malloc_pagemask) { - wrtwarning("modified (page-) pointer.\n"); - return; - } - - /* Count how many pages and mark them free at the same time */ - page_dir[idx] = MALLOC_FREE; - for (i = 1; page_dir[idx+i] == MALLOC_FOLLOW; i++) - page_dir[idx + i] = MALLOC_FREE; - - l = i << malloc_pageshift; - - if (malloc_junk) - memset(ptr, SOME_JUNK, l); - -#ifndef __minix - if (malloc_hint) - madvise(ptr, l, MADV_FREE); -#endif /* !__minix */ - - tail = (char *)ptr+l; - - /* add to free-list */ - if (px == NULL) - px = imalloc(sizeof *px); /* This cannot fail... */ - px->page = ptr; - px->end = tail; - px->size = l; - if (free_list.next == NULL) { - - /* Nothing on free list, put this at head */ - px->next = free_list.next; - px->prev = &free_list; - free_list.next = px; - pf = px; - px = NULL; - - } else { - - /* Find the right spot, leave pf pointing to the modified entry. */ - tail = (char *)ptr+l; - - for(pf = free_list.next; pf->end < ptr && pf->next != NULL; - pf = pf->next) - ; /* Race ahead here */ - - if (pf->page > tail) { - /* Insert before entry */ - px->next = pf; - px->prev = pf->prev; - pf->prev = px; - px->prev->next = px; - pf = px; - px = NULL; - } else if (pf->end == ptr ) { - /* Append to the previous entry */ - pf->end = (char *)pf->end + l; - pf->size += l; - if (pf->next != NULL && pf->end == pf->next->page ) { - /* And collapse the next too. */ - pt = pf->next; - pf->end = pt->end; - pf->size += pt->size; - pf->next = pt->next; - if (pf->next != NULL) - pf->next->prev = pf; - } - } else if (pf->page == tail) { - /* Prepend to entry */ - pf->size += l; - pf->page = ptr; - } else if (pf->next == NULL) { - /* Append at tail of chain */ - px->next = NULL; - px->prev = pf; - pf->next = px; - pf = px; - px = NULL; - } else { - wrterror("freelist is destroyed.\n"); - } - } - - /* Return something to OS ? */ - if (pf->next == NULL && /* If we're the last one, */ - pf->size > malloc_cache && /* ..and the cache is full, */ - pf->end == malloc_brk && /* ..and none behind us, */ - malloc_brk == sbrk((intptr_t)0)) { /* ..and it's OK to do... */ - int r; - /* - * Keep the cache intact. Notice that the '>' above guarantees that - * the pf will always have at least one page afterwards. - */ - pf->end = (char *)pf->page + malloc_cache; - pf->size = malloc_cache; - - r = brk(pf->end); - assert(r >= 0); - malloc_brk = pf->end; - - idx = ptr2idx(pf->end); - - for(i=idx;i <= last_idx;) - page_dir[i++] = MALLOC_NOT_MINE; - - last_idx = idx - 1; - - /* XXX: We could realloc/shrink the pagedir here I guess. */ - } - if (pt != NULL) - ifree(pt); -} - -/* - * Free a chunk, and possibly the page it's on, if the page becomes empty. - */ - -static inline void -free_bytes(void *ptr, size_t idx, struct pginfo *info) -{ - size_t i; - struct pginfo **mp; - void *vp; - - /* Find the chunk number on the page */ - i = ((size_t)(uintptr_t)ptr & malloc_pagemask) >> info->shift; - - if (((size_t)(uintptr_t)ptr & (info->size-1))) { - wrtwarning("modified (chunk-) pointer.\n"); - return; - } - - if (info->bits[i/MALLOC_BITS] & (1UL << (i % MALLOC_BITS))) { - wrtwarning("chunk is already free.\n"); - return; - } - - if (malloc_junk) - memset(ptr, SOME_JUNK, (size_t)info->size); - - info->bits[i/MALLOC_BITS] |= (u_int)(1UL << (i % MALLOC_BITS)); - info->free++; - - mp = page_dir + info->shift; - - if (info->free == 1) { - - /* Page became non-full */ - - mp = page_dir + info->shift; - /* Insert in address order */ - while (*mp && (*mp)->next && (*mp)->next->page < info->page) - mp = &(*mp)->next; - info->next = *mp; - *mp = info; - return; - } - - if (info->free != info->total) - return; - - /* Find & remove this page in the queue */ - while (*mp != info) { - mp = &((*mp)->next); -#ifdef MALLOC_EXTRA_SANITY - if (!*mp) - wrterror("(ES): Not on queue.\n"); -#endif /* MALLOC_EXTRA_SANITY */ - } - *mp = info->next; - - /* Free the page & the info structure if need be */ - page_dir[idx] = MALLOC_FIRST; - vp = info->page; /* Order is important ! */ - if(vp != (void*)info) - ifree(info); - ifree(vp); -} - -static void -ifree(void *ptr) -{ - struct pginfo *info; - size_t idx; - - /* This is legal */ - if (ptr == NULL) - return; - - /* If we're already sinking, don't make matters any worse. */ - if (suicide) - return; - - idx = ptr2idx(ptr); - - if (idx < malloc_pageshift) { - wrtwarning("junk pointer, too low to make sense.\n"); - return; - } - - if (idx > last_idx) { - wrtwarning("junk pointer, too high to make sense.\n"); - return; - } - - info = page_dir[idx]; - - if (info < MALLOC_MAGIC) - free_pages(ptr, idx, info); - else - free_bytes(ptr, idx, info); - return; -} - -static int malloc_active; /* Recusion flag for public interface. */ -static unsigned malloc_started; /* Set when initialization has been done */ - -static void * -pubrealloc(void *ptr, size_t size, const char *func) -{ - void *r; - int err = 0; - - /* - * If a thread is inside our code with a functional lock held, and then - * catches a signal which calls us again, we would get a deadlock if the - * lock is not of a recursive type. - */ - _MALLOC_LOCK(); - malloc_func = func; - if (malloc_active > 0) { - if (malloc_active == 1) { - wrtwarning("recursive call\n"); - malloc_active = 2; - } - _MALLOC_UNLOCK(); - errno = EINVAL; - return (NULL); - } - malloc_active = 1; - - if (!malloc_started) { - if (ptr != NULL) { - wrtwarning("malloc() has never been called\n"); - malloc_active = 0; - _MALLOC_UNLOCK(); - errno = EINVAL; - return (NULL); - } - malloc_init(); - malloc_started = 1; - } - - if (ptr == ZEROSIZEPTR) - ptr = NULL; - if (malloc_sysv && !size) { - if (ptr != NULL) - ifree(ptr); - r = NULL; - } else if (!size) { - if (ptr != NULL) - ifree(ptr); - r = ZEROSIZEPTR; - } else if (ptr == NULL) { - r = imalloc(size); - err = (r == NULL); - } else { - r = irealloc(ptr, size); - err = (r == NULL); - } - UTRACE(ptr, size, r); - malloc_active = 0; - _MALLOC_UNLOCK(); - if (malloc_xmalloc && err) - wrterror("out of memory\n"); - if (err) - errno = ENOMEM; - return (r); -} - -/* - * These are the public exported interface routines. - */ - -void * -malloc(size_t size) -{ - - return pubrealloc(NULL, size, " in malloc():"); -} - -int -posix_memalign(void **memptr, size_t alignment, size_t size) -{ - int err; - void *result; - - if (!malloc_started) { - malloc_init(); - malloc_started = 1; - } - /* Make sure that alignment is a large enough power of 2. */ - if (((alignment - 1) & alignment) != 0 || alignment < sizeof(void *) || - alignment > malloc_pagesize) - return EINVAL; - - /* - * (size | alignment) is enough to assure the requested alignment, since - * the allocator always allocates power-of-two blocks. - */ - err = errno; /* Protect errno against changes in pubrealloc(). */ - result = pubrealloc(NULL, (size | alignment), " in posix_memalign()"); - errno = err; - - if (result == NULL) - return ENOMEM; - - *memptr = result; - return 0; -} - -void * -calloc(size_t num, size_t size) -{ - void *ret; - - if (size != 0 && (num * size) / size != num) { - /* size_t overflow. */ - errno = ENOMEM; - return (NULL); - } - - ret = pubrealloc(NULL, num * size, " in calloc():"); - - if (ret != NULL) - memset(ret, 0, num * size); - - return ret; -} - -void -free(void *ptr) -{ - - pubrealloc(ptr, 0, " in free():"); -} - -void * -realloc(void *ptr, size_t size) -{ - - return pubrealloc(ptr, size, " in realloc():"); -} - -/* - * Begin library-private functions, used by threading libraries for protection - * of malloc during fork(). These functions are only called if the program is - * running in threaded mode, so there is no need to check whether the program - * is threaded here. - */ - -void -_malloc_prefork(void) -{ - - _MALLOC_LOCK(); -} - -void -_malloc_postfork(void) -{ - - _MALLOC_UNLOCK(); -} diff --git a/lib/libmthread/global.h b/lib/libmthread/global.h index 374fce17a..4488713d6 100644 --- a/lib/libmthread/global.h +++ b/lib/libmthread/global.h @@ -5,6 +5,9 @@ #endif #include +#include +#include + #define NO_THREADS 4 #define MAX_THREAD_POOL 1024 diff --git a/lib/libutil/pty.c b/lib/libutil/pty.c index fbc170fab..6a0e0c304 100644 --- a/lib/libutil/pty.c +++ b/lib/libutil/pty.c @@ -77,6 +77,7 @@ openpty(int *amaster, int *aslave, char *name, struct termios *term, /* term may be NULL */ /* winp may be NULL */ +#ifndef __minix if ((master = open("/dev/ptm", O_RDWR)) != -1) { struct ptmget pt; if (ioctl(master, TIOCPTMGET, &pt) != -1) { @@ -88,6 +89,7 @@ openpty(int *amaster, int *aslave, char *name, struct termios *term, } (void)close(master); } +#endif (void)getgrnam_r("tty", &grs, grbuf, sizeof(grbuf), &grp); if (grp != NULL) { @@ -115,9 +117,13 @@ openpty(int *amaster, int *aslave, char *name, struct termios *term, linep = line; if (chown(line, getuid(), ttygid) == 0 && chmod(line, mode) == 0 && +#ifndef __minix revoke(line) == 0 && +#endif (slave = open(line, O_RDWR, 0)) != -1) { +#ifndef __minix gotit: +#endif *amaster = master; *aslave = slave; if (name) diff --git a/lib/libvtreefs/inc.h b/lib/libvtreefs/inc.h index 89a98e8a0..a2d23fe70 100644 --- a/lib/libvtreefs/inc.h +++ b/lib/libvtreefs/inc.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/share/mk/bsd.README b/share/mk/bsd.README new file mode 100644 index 000000000..20f2199f6 --- /dev/null +++ b/share/mk/bsd.README @@ -0,0 +1,1841 @@ +# $NetBSD: bsd.README,v 1.300 2012/08/23 21:21:16 joerg Exp $ +# @(#)bsd.README 8.2 (Berkeley) 4/2/94 + +This is the README file for the make "include" files for the NetBSD +source tree. The files are installed in /usr/share/mk, and are, +by convention, named with the suffix ".mk". + +Note, this file is not intended to replace reading through the .mk +files for anything tricky. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +RANDOM THINGS WORTH KNOWING: + +The files are simply C-style #include files, and pretty much behave like +you'd expect. The syntax is slightly different in that a single '.' is +used instead of the hash mark, i.e. ".include ". + +One difference that will save you lots of debugging time is that inclusion +of the file is normally done at the *end* of the Makefile. The reason for +this is because .mk files often modify variables and behavior based on the +values of variables set in the Makefile. To make this work, remember that +the FIRST target found is the target that is used, i.e. if the Makefile has: + + a: + echo a + a: + echo a number two + +the command "make a" will echo "a". To make things confusing, the SECOND +variable assignment is the overriding one, i.e. if the Makefile has: + + a= foo + a= bar + + b: + echo ${a} + +the command "make b" will echo "bar". This is for compatibility with the +way the V7 make behaved. + +It's fairly difficult to make the BSD .mk files work when you're building +multiple programs in a single directory. It's a lot easier to split up the +programs than to deal with the problem. Most of the agony comes from making +the "obj" directory stuff work right, not because we switched to a new version +of make. So, don't get mad at us, figure out a better way to handle multiple +architectures so we can quit using the symbolic link stuff. (Imake doesn't +count.) + +The file .depend in the source directory is expected to contain dependencies +for the source files. This file is read automatically by make after reading +the Makefile. + +The variable DESTDIR works as before. It's not set anywhere but will change +the tree where the file gets installed. + +The profiled libraries are no longer built in a different directory than +the regular libraries. A new suffix, ".po", is used to denote a profiled +object, and ".pico" denotes a shared (position-independent) object. + +There are various make variables used during the build. + +Many variables support a (case sensitive) value of "no" or "yes", +and are tested with ${VAR} == "no" and ${VAR} != "no" . + + +The basic rule for the variable naming scheme is as follows: + +HOST_xxx A command that runs on the host machine regardless of + whether or not the system is being cross compiled, or + flags for such a command. + +MKxxx Can be set to "no" to disable functionality, or + "yes" to enable it. + Usually defaults to "yes", although some variables + default to "no". + Due to make(1) implementation issues, if a temporary + command-line override of a mk.conf(5) or + setting is required whilst still honoring a particular + Makefile's setting of MKxxx, use + env MKxxx=value make + instead of + make MKxxx=value + +NOxxx If defined, disables a feature. + Not intended for users. + This is to allow Makefiles to disable functionality + that they don't support (such as missing man pages). + NOxxx variables must be defined before + is included. + +TOOL_xxx A tool that is provided as part of the USETOOLS + framework. When not using the USETOOLS framework, + TOOL_xxx variables should refer to tools that are + already installed on the host system. + +The following variables that control how things are made/installed that +are not set by default. These should not be set by Makefiles; they're for +the user to define in MAKECONF (see , below, or mk.conf(5)) +or on the make(1) command line: + +BUILD If defined, 'make install' checks that the targets in the + source directories are up-to-date and remakes them if they + are out of date, instead of blindly trying to install + out of date or non-existent targets. + +MAKEVERBOSE Control how "verbose" the standard make(1) rules are. + Default: 2 + Supported values: + 0 Minimal output ("quiet") + 1 Describe what is occurring + 2 Describe what is occurring and echo the actual command + 3 Ignore the effect of the "@" prefix in make commands + 4 Trace shell commands using the shell's -x flag + +MKATF If "no", don't build libatf-c, libatf-c++ libraries associated + with the Automated Testing Framework (ATF). + Default: yes + +MKBFD Obsolete, use MKBINUTILS + +MKBINUTILS If "no", don't build binutils (gas, ld, etc and libbfd, + libopcodes) + Default: yes + +MKBSDTAR If "yes", use the libarchive based cpio and tar instead of + the pax frontends. + Default: no + +MKCATPAGES If "no", don't build or install the catman pages. + Default: no + +MKCOMPAT If "no", don't build or install the src/compat. + Default: yes on amd64/sparc64, no elsewhere. + +MKCOMPLEX If "no", don't build libm support for + Default: yes + +MKCRYPTO If "no", no cryptography support will be built into the system, + and also acts as "MKKERBEROS=no". + Default: yes + +MKCRYPTO_RC5 If not "no", RC5 support will be built into libcrypto_rc5 + Default: no + +MKCVS If "no", don't build or install cvs(1). + Default: yes + +MKDEBUG If "no", don't build and install separate debugging symbols + into /usr/libdata/debug. + Default: no + +MKDEBUGLIB Build *_g.a debugging libraries, which are compiled + with -DDEBUG. + Default: no + +MKDOC If "no", don't build or install the documentation. + Default: yes + +MKDYNAMICROOT If "no", build programs in /bin and /sbin statically, + don't install certain libraries in /lib, and don't + install the shared linker into /libexec. + Default: yes + +MKEXTSRC If not "no", 'make build' also descends into either src/extsrc + to cross-build programs and libraries externally added by + users, and automatically enables creation of those sets. + Default: no + +MKGCC If "no", don't build gcc(1) or any of the GCC-related + libraries (libgcc, libobjc, libstdc++). + Default: yes + +MKGCCCMDS If "no", don't build gcc(1), but do build the GCC-related + libraries (libgcc, libobjc, libstdc++). + Default: yes + +MKGDB If "no", don't build gdb(1). + Default: yes + +MKHESIOD If "no", disables building of Hesiod infrastructure + (libraries and support programs). + Default: yes + +MKHOSTOBJ If not "no", for programs intended to be run on the compile + host, the name, release, and architecture of the host + operating system will be suffixed to the name of the object + directory created by "make obj". + Default: no + +MKHTML If "no", don't build or install the HTML man pages. + Default: yes + +MKIEEEFP If "no", don't add code for IEEE754/IEC60559 conformance. + Has no effect on most platforms. + Default: yes + +MKSTRIPIDENT Strip the RCS IDs from program binaries and shared libraries. + Default: no + +MKINET6 If "no", disables building of INET6 (IPv6) infrastructure + (libraries and support programs). This option must not be + set to "no" if MKX11 is not "no". + Default: yes + +MKINFO If "no", don't build or install Info documentation from + Texinfo source files. + Default: yes + +MKIPFILTER If "no", don't build or install the IP Filter programs and LKM. + Default: yes + +MKISCSI If "no", don't build or install iSCSI library or applications + (depends on libpthread.) + Default: yes + +MKKERBEROS If "no", disables building of Kerberos v5 + infrastructure (libraries and support programs). + Default: yes + +MKLDAP If "no", disables building of LDAP infrastructure + (libraries and support programs). + Default: yes + +MKLINKLIB If "no", act as "MKLINT=no MKPICINSTALL=no MKPROFILE=no". + Also: + - don't install the .a libraries + - don't install _pic.a libraries on PIC systems + - don't build .a libraries on PIC systems + - don't install the .so symlink on ELF systems + I.e, only install the shared library (and the .so.major + symlink on ELF). + Default: yes + +MKLINT If "no", don't build or install the lint libraries. + Default: yes + +MKLVM If "no", don't build or install the logical volume manager + and device mapper tools and libraries + Default: yes + +MKMAN If "no", don't build or install the man or catman pages, + and also acts as "MKCATPAGES=no MKHTML=no". + Default: yes + +MKMANDOC If "yes", mandoc is built as tool and used to compile + catman or html pages. A directory can be exempted by + defining NOMANDOC. Individual man pages are exempted + if NOMANDOC.${target} is set to "yes". + Default: yes + +MKMANZ If not "no", compress manual pages at installation time. + Default: no + +MKMDNS If "no", disables building of mDNS infrastructure + (libraries and support programs). + Default: yes + +MKNLS If "no", don't build or install the NLS files and locale + definition files. + Default: yes + +MKNPF If "no", don't build or install the NPF and its modules. + Default: yes + +MKOBJ If "no", don't enable the rule which creates objdirs, + and also acts as "MKOBJDIRS=no". + Default: yes + +MKOBJDIRS If "no", don't create objdirs during a "make build". + Default: no + +MKPAM If "no", disables building of PAM authentication + infrastructure (libraries and support programs). + Default: yes + +MKPCC If "no", don't build pcc(1) or any of the PCC-related + libraries (libpcc, libpccsoftfloat). + Default: no + +MKPF If "no", don't build or install the pf programs and LKM. + Default: yes + +MKPIC If "no", don't build or install shared libraries, and + also acts as "MKPICLIB=no" + Default: yes (for MACHINE_ARCHs that support it) + +MKPICINSTALL If "no", don't install the *_pic.a libraries. + Default: yes + +MKPICLIB If "no", don't build *_pic.a libraries, and build the + shared object libraries from the .a libraries. + A symlink is installed in ${DESTDIR}/usr/lib for the + _pic.a library pointing to the .a library. + Default: yes + +MKPIE If "no", create regular executables. Otherwise create + PIE (Position Independent Executables). + Default: no + +MKPIGZGZIP If "no", only install pigz as pigz, not gzip. + Default: no + +MKPOSTFIX If "no", don't build or install postfix(1). + Default: yes + +MKPROFILE If "no", don't build or install the profiling (*_p.a) libraries. + Default: yes + +MKREPRO If "yes", create reproducable builds. This enables + different switches to make two builds from the same source tree + result in the same build results. + Default: no + +MKSHARE If "no", act as "MKCATPAGES=no MKDOC=no MKHTML=no MKINFO=no + MKMAN=no MKNLS=no". + I.e, don't build catman pages, documentation, Info + documentation, man pages, NLS files, ... + Default: yes + +MKSKEY If "no", disables building of S/key authentication + infrastructure (libraries and support programs). + Default: yes + +MKSOFTFLOAT If not "no", build with options to enable the compiler to + generate output containing library calls for floating + point and possibly soft-float library support. + Default: no + +MKSTATICLIB If "no", don't build or install the normal static (*.a) + libraries. + Default: yes + +MKUNPRIVED If not "no", don't set the owner/group/mode when installing + files or directories, and keep a metadata log of what + the owner/group/mode should be. This allows a + non-root "make install". + Default: no + +MKUPDATE If not "no", 'make install' only installs targets that are + more recently modified in the source directories that their + installed counterparts. + Default: no + +MKX11 If not "no", depending on the value of ${X11FLAVOUR}, + 'make build' also descends into either src/x11 (XFree86) or + src/external/mit/xorg (modular Xorg) to cross-build X11 and + automatically enables creation of X sets. + Default: no + +MKX11FONTS If not "no", if ${X11FLAVOUR} is "Xorg", do not build or + install the X fonts. The xfont set is still created but + will be empty. + Default: yes + +MKYP If "no", disables building of YP (NIS) + infrastructure (libraries and support programs). + Default: yes + +MKZFS If "no", do not build and install utilities and libraries + used to manage ZFS file system. Do not build zfs and solaris + compatibility kernel modules. + Default: yes on i386/amd64, no elsewhere. + +MKRUMP If "no", do not build and install rump related headers, + libraries, and programs. + Default: yes + +USE_HESIOD If "no", disables building Hesiod support into + various system utilities/libraries that support it. + If ${MKHESIOD} is "no", USE_HESIOD will also be + forced to "no". + +USE_INET6 If "no", disables building INET6 (IPv6) support into + various system utilities/libraries that support it. + If ${MKINET6} is "no", USE_INET6 will also be + forced to "no". + +USE_JEMALLOC If "no", disables building the "jemalloc" allocator + designed for improved performance with threaded + applications. The "phkmalloc" allocator as used up + before NetBSD-5.0 will be substituted. + +USE_KERBEROS If "no", disables building Kerberos v5 + support into various system utilities/libraries that + support it. If ${MKKERBEROS} is "no", USE_KERBEROS + will also be forced to "no". + +USE_LDAP If "no", disables building LDAP support into various + system utilities/libraries that support it. + If ${MKLDAP} is "no", USE_LDAP will also be forced to "no". + +USE_PAM If "no", disables building PAM authentication support + into various system utilities/libraries that support it. + If ${MKPAM} is "no", USE_PAM will also be forced to "no". + +USE_SKEY If "no", disables building S/key authentication + support into various system utilities/libraries that + support it. If ${MKSKEY} is "no", USE_SKEY will + also be forced to "no". + Default: no + +USE_SSP If "no", disables GCC stack protection code, which + detects stack overflows and aborts the program. The + stack protection code imposes a performance penalty + of about 5%. + Default: "no", unless "USE_FORT" is set to "yes" + +USE_FORT If "yes" turns on substitute wrappers for commonly used + functions that do not do bounds checking regularly, but + they could in some cases by using the gcc + __builtin_object_size() function to determine the buffer + size where it is known and detect buffer overflows. + These substitute functions are in /usr/include/ssp. + Default: depends on the part of the source tree + +USE_YP If "no", disables building YP (NIS) support into + various system utilities/libraries that support it. + If ${MKYP} is "no", USE_YP will also be forced to "no". + +USE_PIGZGZIP If "no", use the host "gzip" program to compress things. + Otherwise, build tools/pigz and use nbpigz to compress + things. + Default: "no". + +X11FLAVOUR Set to "Xorg" or "XFree86", depending on whether to build + XFree86 or modular Xorg. Only matters if MKX11!=no. + Default: "Xorg" on amd64, i386, macppc, shark and sparc64, + "XFree86" on everything else. + +COPTS.lib +OBJCOPTS.lib +LDADD.lib +CPPFLAGS.lib +CXXFLAGS.lib +COPTS. +OBJCCOPTS. +LDADD. +CPPFLAGS. +CXXFLAGS. These provide a way to specify additions to the associated + variables in a way that applies only to a particular library + or program. corresponds to the LIB variable set in + the library's makefile. corresponds to either PROG + or PROG_CXX (if set). For example, if COPTS.libcrypto is + set to "-g", "-g" will be added to COPTS only when compiling + the crypto library. + +The active compiler is selected using the following variables: +AVAILABLE_COMPILER + List of available compiler suites. Processed in order + for selecting the active compiler for each frontend. +HAVE_PCC If defined, PCC is present and enabled. +HAVE_LLVM If defined, LLVM/Clang is present and enabled. +UNSUPPORTED_COMPILER.xxx + If defined, the support for compiler "xxx" is disabled. + +For the frontends (CC, CPP, CXX, FC and OBJC) the following variables exist: +ACTIVE_CC Active compile suite for the CC frontend. +SUPPORTED_CC Compile suite with support for the CC frontend. +TOOL_CC.xxx Path to the CC frontend for compiler "xxx" + +=-=-=-=-= sys.mk =-=-=-=-= + +The include file has the default rules for all makes, in the BSD +environment or otherwise. You probably don't want to touch this file. + +=-=-=-=-= bsd.own.mk =-=-=-=-= + +The include file contains source tree configuration parameters, +such as the owners, groups, etc. for both manual pages and binaries, and +a few global "feature configuration" parameters. + +It has no targets. + +To get system-specific configuration parameters, will try to +include the file specified by the "MAKECONF" variable. If MAKECONF is not +set, or no such file exists, the system make configuration file, /etc/mk.conf +is included. These files may define any of the variables described below. + + sets the following variables, if they are not already defined +(defaults are in brackets): + +NETBSDSRCDIR Top of the NetBSD source tree. + If _SRC_TOP_ != "", that will be used as the default, + otherwise BSDSRCDIR will be used as the default. + Various makefiles within the NetBSD source tree will + use this to reference the top level of the source tree. + +_SRC_TOP_ Top of the system source tree, as determined by + based on the presence of tools/ and build.sh. This variable + is "internal" to , although its value is only + determined once and then propagated to all sub-makes. + +BSDSRCDIR The real path to the system sources, so that 'make obj' + will work correctly. [/usr/src] + +BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj' + will work correctly. [/usr/obj] + +BINGRP Binary group. [wheel] + +BINOWN Binary owner. [root] + +BINMODE Binary mode. [555] + +NONBINMODE Mode for non-executable files. [444] + +MANDIR Base path for manual installation. [/usr/share/man/cat] + +MANGRP Manual group. [wheel] + +MANOWN Manual owner. [root] + +MANMODE Manual mode. [${NONBINMODE}] + +MANINSTALL Manual installation type. Space separated list: + catinstall, htmlinstall, maninstall + Default value derived from MKCATPAGES and MKHTML. + +LDSTATIC Control program linking; if set blank, link everything + dynamically. If set to "-static", link everything statically. + If not set, programs link according to their makefile. + +LIBDIR Base path for library installation. [/usr/lib] + +LINTLIBDIR Base path for lint(1) library installation. [/usr/libdata/lint] + +LIBGRP Library group. [${BINGRP}] + +LIBOWN Library owner. [${BINOWN}] + +LIBMODE Library mode. [${NONBINMODE}] + +DOCDIR Base path for system documentation (e.g. PSD, USD, etc.) + installation. [/usr/share/doc] + +HTMLDOCDIR Base path for html system documentation installation. + [/usr/share/doc/html] + +DOCGRP Documentation group. [wheel] + +DOCOWN Documentation owner. [root] + +DOCMODE Documentation mode. [${NONBINMODE}] + +NLSDIR Base path for Native Language Support files installation. + [/usr/share/nls] + +NLSGRP Native Language Support files group. [wheel] + +NLSOWN Native Language Support files owner. [root] + +NLSMODE Native Language Support files mode. [${NONBINMODE}] + +X11SRCDIR The path to the xsrc tree. [${NETBSDSRCDIR}/../xsrc, + if that exists; otherwise /usr/xsrc] + +X11SRCDIR.xc The path to the (old) X11 xc src tree. [${X11SRCDIR}/xfree/xc] + +X11SRCDIR.local The path to the local X11 src tree. [${X11SRCDIR}/local] + +X11SRCDIR.lib +X11SRCDIR. + The path to the xorg src tree for the specificed package>. + [${X11SRCDIR}/external/mit/xorg//dist] + +X11ROOTDIR Root directory of the X11 installation. [/usr/X11R6 or + [/usr/X11R7] + +X11BINDIR X11 bin directory. [${X11ROOTDIR}/bin] + +X11FONTDIR X11 font directory. [${X11ROOTDIR}/lib/X11/fonts] + +X11INCDIR X11 include directory. [${X11ROOTDIR}/include] + +X11LIBDIR X11 lib/x11 (config) directory. [${X11ROOTDIR}/lib/X11] + +X11MANDIR X11 manual directory. [${X11ROOTDIR}/man] + +X11USRLIBDIR X11 library directory. [${X11ROOTDIR}/lib] + +STRIPFLAG The flag passed to the install program to cause the binary + to be stripped. This is to be used when building your + own install script so that the entire system can be made + stripped/not-stripped using a single knob. [] + +COPY The flag passed to the install program to cause the binary + to be copied rather than moved. This is to be used when + building our own install script so that the entire system + can either be installed with copies, or with moves using + a single knob. [-c] + +MAKEDIRTARGET dir target [params] + Runs "cd $${dir} && ${MAKE} [params] $${target}", + displaying a "pretty" message whilst doing so. + +RELEASEMACHINEDIR + Subdirectory used below RELEASEDIR when building + a release. [${MACHINE}] + +RELEASEMACHINE Subdirectory or path component used for the following + paths: + distrib/${RELEASEMACHINE} + distrib/notes/${RELEASEMACHINE} + etc/etc.${RELEASEMACHINE} + Used when building a release. [${MACHINE}] + +Additionally, the following variables may be set by or in a +make configuration file to modify the behavior of the system build +process (default values are in brackets along with comments, if set by +): + +USETOOLS Indicates whether the tools specified by ${TOOLDIR} should + be used as part of a build in progress. + Supported values: + + yes Use the tools from TOOLDIR. + Must be set to this if cross-compiling. + + no Do not use the tools from TOOLDIR, but refuse to + build native compilation tool components that are + version-specific for that tool. + + never Do not use the tools from TOOLDIR, even when + building native tool components. This is similar to + the traditional NetBSD build method, but does not + verify that the compilation tools in use are + up-to-date enough in order to build the tree + successfully. This may cause build or runtime + problems when building the whole NetBSD source tree. + + Default: "yes" if building all or part of a whole NetBSD + source tree (detected automatically); "no" otherwise + (to preserve traditional semantics of the + make(1) include files). + +OBJECT_FMT Object file format. [set to "ELF" on architectures that + use ELF -- currently all architectures]. + +TOOLCHAIN_MISSING + If not "no", this indicates that the platform being built + does not have a working in-tree toolchain. If the + ${MACHINE_ARCH} in question falls into this category, + TOOLCHAIN_MISSING is conditionally assigned the value "yes". + Otherwise, the variable is unconditionally assigned the + value "no". + If not "no", ${MKBINUTILS}, ${MKGCC}, and ${MKGDB} are + unconditionally assigned the value "no". + +EXTERNAL_TOOLCHAIN + This variable is not directly set by , but + including is the canonical way to gain + access to this variable. The variable should be defined + either in the user's environment or in the user's mk.conf + file. If defined, this variable indicates the root of + an external toolchain which will be used to build the + tree. For example, if a platform is a ${TOOLCHAIN_MISSING} + platform, EXTERNAL_TOOLCHAIN can be used to re-enable the + cross-compile framework. + + If EXTERNAL_TOOLCHAIN is defined, ${MKGCC} is unconditionally + assigned the value "no", since the external version of the + compiler may not be able to build the library components of + the in-tree compiler. + + NOTE: This variable is not yet used in as many places as + it should be. Expect the exact semantics of this variable + to change in the short term as parts of the cross-compile + framework continue to be cleaned up. + +The following variables are defined to commands to perform the +appropriate operation, with the default in [brackets]. Note that +the defaults change if USETOOLS == "yes": + +TOOL_AMIGAAOUT2BB aout to Amiga bootblock converter. [amiga-aout2bb] + +TOOL_AMIGAELF2BB ELF to Amiga bootblock converter. [amiga-elf2bb] + +TOOL_AMIGATXLT Amige assembly language format translator. [amiga-txlt] + +TOOL_ASN1_COMPILE ASN1 compiler. [asn1_compile] + +TOOL_AWK Pattern-directed scanning/processing language. [awk] + +TOOL_CAP_MKDB Create capability database. [cap_mkdb] + +TOOL_CAT Concatenate and print files. [cat] + +TOOL_CKSUM Display file checksums. [cksum] + +TOOL_COMPILE_ET Error table compiler. [compile_et] + +TOOL_CONFIG Build kernel compilation directories. [config] + +TOOL_CRUNCHGEN Generate crunched binary build environment. [crunchgen] + +TOOL_CTAGS Create a tags file. [ctags] + +TOOL_DB Manipulate db(3) databases. [db] + +TOOL_DISKLABEL Read and write disk pack label. [disklabel] + +TOOL_EQN Format equations for groff. [eqn] + +TOOL_FDISK MS-DOS partition maintenance program. [fdisk] + +TOOL_FGEN IEEE 1275 Open Firmware FCode Tokenizer. [fgen] + +TOOL_GENASSYM Generate constants for assembly files. [genassym] + +TOOL_GENCAT Generate NLS message catalogs. [gencat] + +TOOL_GMAKE GNU make utility. [gmake] + +TOOL_GREP Print lines matching a pattern. [grep] + +TOOL_GROFF Front end for groff document formatting system. [groff] + +TOOL_HEXDUMP Ascii, decimal, hexadecimal, octal dump. [hexdump] + +TOOL_HP300MKBOOT Make bootable image for hp300. [hp300-mkboot] + +TOOL_HP700MKBOOT Make bootable image for hp700. [hp700-mkboot] + +TOOL_INDXBIB Make bibliographic database's inverted index. [indxbib] + +TOOL_INSTALLBOOT Install disk bootstrap software. [installboot] + +TOOL_INSTALL_INFO Update info/dir entries. [install-info] + +TOOL_JOIN Relational database operator. [join] + +TOOL_M4 M4 macro language processor. [m4] + +TOOL_MACPPCFIXCOFF Fix up xcoff headers for macppc. [macppc-fixcoff] + +TOOL_MAKEFS Create file system image from directory tree. [makefs] + +TOOL_MAKEINFO Translate Texinfo documents. [makeinfo] + +TOOL_MAKEWHATIS Create a whatis.db database. [makewhatis] + +TOOL_MDSETIMAGE Set kernel RAM disk image. [mdsetimage] + +TOOL_MENUC Menu compiler. [menuc] + +TOOL_MIPSELF2ECOFF Convert ELF-format executable to ECOFF for mips. + [mips-elf2ecoff] + +TOOL_MKCSMAPPER Make charset mapping table. [mkcsmapper] + +TOOL_MKESDB Make encoding scheme database. [mkesdb] + +TOOL_MKLOCALE Make LC_CTYPE locale files. [mklocale] + +TOOL_MKMAGIC Create database for file(1). [file] + +TOOL_MKTEMP Make (unique) temporary file name. [mktemp] + +TOOL_MSGC Simple message list compiler. [msgc] + +TOOL_MTREE Map a directory hierarchy. [mtree] + +TOOL_PAX Manipulate file archives and copy directories. [pax] + +TOOL_PIC Compile pictures for groff. [pic] + +TOOL_PIGZ Parallel compressor. [pigz] + +TOOL_POWERPCMKBOOTIMAGE Make bootable image for powerpc. [powerpc-mkbootimage] + +TOOL_PWD_MKDB Generate the password databases. [pwd_mkdb] + +TOOL_REFER Preprocess bibliographic references for groff. [refer] + +TOOL_ROFF_ASCII Generate ASCII groff output. [nroff] + +TOOL_ROFF_DVI Generate DVI groff output. [${TOOL_GROFF} -Tdvi] + +TOOL_ROFF_HTML Generate HTML groff output. + [${TOOL_GROFF} -Tlatin1 -mdoc2html] + +TOOL_ROFF_PS Generate PS groff output. [${TOOL_GROFF} -Tps] + +TOOL_ROFF_RAW Generate "raw" groff output. [${TOOL_GROFF} -Z] + +TOOL_RPCGEN Remote Procedure Call (RPC) protocol compiler. [rpcgen] + +TOOL_SED Stream editor. [sed] + +TOOL_SOELIM Eliminate .so's from groff input. [soelim] + +TOOL_SPARKCRC Generate a crc suitable for use in a sparkive file. + [sparkcrc] + +TOOL_STAT Display file status. [stat] + +TOOL_STRFILE Create a random access file for storing strings. + [strfile] + +TOOL_SUNLABEL Read or modify a SunOS disk label. [sunlabel] + +TOOL_TBL Format tables for groff. [tbl] + +TOOL_UUDECODE Uudecode a binary file. [uudecode] + +TOOL_VGRIND Grind nice listings of programs. [vgrind -f] + +TOOL_ZIC Time zone compiler. [zic] + + is generally useful when building your own Makefiles so that +they use the same default owners etc. as the rest of the tree. + + +=-=-=-=-= bsd.clean.mk =-=-=-=-= + +The include file defines the clean and cleandir +targets. It uses the following variables: + +CLEANFILES Files to remove for both the clean and cleandir targets. + +CLEANDIRFILES Files to remove for the cleandir target, but not for + the clean target. + +MKCLEANSRC Controls whether or not the clean and cleandir targets + will delete files from both the object directory, + ${.OBJDIR}, and the source directory, ${.CURDIR}. + + If MKCLEANSRC is set to "no", then the file names in + CLEANFILES or CLEANDIRFILES are interpreted relative + to the object directory, ${.OBJDIR}. This is the + traditional behaviour. + + If MKCLEANSRC is set to "yes", then the file deletion + is performed relative to both the object directory, + ${.OBJDIR}, and the source directory, ${.CURDIR}. (This + has no effect if ${.OBJDIR} is the same as ${.CURDIR}.) + Deleting files from ${.CURDIR} is intended to remove + stray output files that had been left in the source + directory by an earlier build that did not use object + directories. + + The default is MKCLEANSRC=yes. If you always build with + separate object directories, and you are sure that there + are no stray files in the source directories, then you + may set MKCLEANSRC=no to save some time. + +MKCLEANVERIFY Controls whether or not the clean and cleandir targets + will verify that files have been deleted. + + If MKCLEANVERIFY is set to "no", then the files will + be deleted using a "rm -f" command, and its success or + failure will be ignored. + + If MKCLEANVERIFY is set to "yes", then the success of + the "rm -f" command will be verified using an "ls" + command. + + The default is MKCLEANVERIFY=yes. If you are sure that + there will be no problems caused by file permissions, + read-only file systems, or the like, then you may set + MKCLEANVERIFY=no to save some time. + +To use the clean and cleandir targets defined in , other +Makefiles or bsd.*.mk files should append file names to the CLEANFILES +or CLEANDIRFILES variables. For example: + + CLEANFILES+= a.out + CLEANDIRFILES+= .depend + + .include + + +=-=-=-=-= bsd.dep.mk =-=-=-=-= + +The include file contains the default targets for building +.depend files. It creates .d files from entries in SRCS and DPSRCS +that are C, C++, or Objective C source files, and builds .depend from the +.d files. All other files in SRCS and all of DPSRCS will be used as +dependencies for the .d files. In order for this to function correctly, +it should be .included after all other .mk files and directives that may +modify SRCS or DPSRCS. It uses the following variables: + +SRCS List of source files to build the program. + +DPSRCS List of source files which are needed for generating + dependencies, but are not needed in ${SRCS}. + + +=-=-=-=-= bsd.files.mk =-=-=-=-= + +The include file handles the FILES variables and is included +from and , and uses the following variables: + +FILES The list of files to install. + +CONFIGFILES Similar semantics to FILES, except that the files + are installed by the `configinstall' target, + not the `install' target. + The FILES* variables documented below also apply. + +FILESOWN File owner. [${BINOWN}] + +FILESGRP File group. [${BINGRP}] + +FILESMODE File mode. [${NONBINMODE}] + +FILESDIR The location to install the files. + +FILESNAME Optional name to install each file as. + +FILESOWN_ File owner of the specific file . + +FILESGRP_ File group of the specific file . + +FILESMODE_ File mode of the specific file . + +FILESDIR_ The location to install the specific file . + +FILESNAME_ Optional name to install as. + +FILESBUILD If this variable is defined, then its value will be + used as the default for all FILESBUILD_ variables. + Otherwise, the default will be "no". + +FILESBUILD_ A value different from "no" will add the file to the list of + targets to be built by `realall'. Users of that variable + should provide a target to build the file. + + +BUILDSYMLINKS List of two word items: + lnsrc lntgt + For each lnsrc item, create a symlink named lntgt. + The lntgt symlinks are removed by the cleandir target. + +UUDECODE_FILES List of files which are stored as .uue in the source + tree. Each one will be decoded with ${TOOL_UUDECODE}. + The source files have a `.uue' suffix, the generated files do + not. + +UUDECODE_FILES_RENAME_ + Rename the output from the decode to the provided name. + + *NOTE: These files are simply decoded, with no install or other + rule applying implicitly except being added to the clean + target. + +=-=-=-=-= bsd.gcc.mk =-=-=-=-= + +The include file computes various parameters related to GCC +support libraries. It defines no targets. MUST be included +before . + +The primary users of are and , each +of which need to know where to find certain GCC support libraries. + +The behavior of is influenced by the EXTERNAL_TOOLCHAIN variable, +which is generally set by the user. If EXTERNAL_TOOLCHAIN it set, then +the compiler is asked where to find the support libraries, otherwise the +support libraries are found in ${DESTDIR}/usr/lib. + + sets the following variables: + +_GCC_CRTBEGIN The full path name to crtbegin.o. + +_GCC_CRTBEGINS The full path name to crtbeginS.o. + +_GCC_CRTEND The full path name to crtend.o. + +_GCC_CRTENDS The full path name to crtendS.o. + +_GCC_LIBGCCDIR The directory where libgcc.a is located. + + +=-=-=-=-= bsd.inc.mk =-=-=-=-= + +The include file defines the includes target and uses the +variables: + +INCS The list of include files. + +INCSDIR The location to install the include files. + +INCSNAME Target name of the include file, if only one; same as + FILESNAME, but for include files. + +INCSYMLINKS Similar to SYMLINKS in , except that these + are installed in the 'includes' target and not the + (much later) 'install' target. + +INCSNAME_ The name file should be installed as, if not , + same as FILESNAME_, but for include files. + + +=-=-=-=-= bsd.info.mk =-=-=-=-= + +The include file is used to generate and install GNU Info +documentation from respective Texinfo source files. It defines three +implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the +following variables: + +TEXINFO List of Texinfo source files. Info documentation will + consist of single files with the extension replaced by + .info. + +INFOFLAGS Flags to pass to makeinfo. [] + + +=-=-=-=-= bsd.kernobj.mk =-=-=-=-= + +The include file defines variables related to the +location of kernel sources and object directories. + +KERNSRCDIR Is the location of the top of the kernel src. + [${_SRC_TOP_}/sys] + +KERNARCHDIR Is the location of the machine dependent kernel sources. + [arch/${MACHINE}] + +KERNCONFDIR Is where the configuration files for kernels are found. + [${KERNSRCDIR}/${KERNARCHDIR}/conf] + +KERNOBJDIR Is the kernel build directory. The kernel GENERIC for + instance will be compiled in ${KERNOBJDIR}/GENERIC. + The default value is + ${MAKEOBJDIRPREFIX}${KERNSRCDIR}/${KERNARCHDIR}/compile + if it exists or the target 'obj' is being made. + Otherwise the default is + ${KERNSRCDIR}/${KERNARCHDIR}/compile. + +It is important that Makefiles (such as those under src/distrib) that +wish to find compiled kernels use and ${KERNOBJDIR} +rather than make assumptions about the location of the compiled kernel. + + +=-=-=-=-= bsd.kinc.mk =-=-=-=-= + +The include file defines the many targets (includes, +subdirectories, etc.), and is used by kernel makefiles to handle +include file installation. It is intended to be included alone, by +kernel Makefiles. It uses similar variables to . +Please see for more details, and keep the documentation +in that file up to date. + + +=-=-=-=-= bsd.lib.mk =-=-=-=-= + +The include file has support for building libraries. It has +the same eight targets as : all, clean, cleandir, depend, +includes, install, lint, and tags. Additionally, it has a checkver target +which checks for installed shared object libraries whose version is greater +that the version of the source. It has a limited number of suffixes, +consistent with the current needs of the BSD tree. includes + to get shared library parameters. + +It sets/uses the following variables: + +LIB The name of the library to build. + +LIBDIR Target directory for libraries. + +MKARZERO Normally, ar(1) sets the timestamps, uid, gid and + permissions in files inside its archives to those of + the file it was fed. This leads to non-reproduceable + builds. If MKARZERO is set to "yes" (default is "no") + then the "D" flag is passed to ar, causing the + timestamp, uid and gid to be zeroed and the file + permissions to be set to 644. This allows .a files + from different builds to be bit identical. + +SHLIBINSTALLDIR Target directory for shared libraries if ${USE_SHLIBDIR} + is not "no". + +SHLIB_MAJOR +SHLIB_MINOR +SHLIB_TEENY Major, minor, and teeny version numbers of shared library + +USE_SHLIBDIR If not "no", use ${SHLIBINSTALLDIR} instead of ${LIBDIR} + as the path to install shared libraries to. + USE_SHLIBDIR must be defined before is included. + Default: no + +LIBISMODULE If not "no", install as ${LIB}.so (without the "lib" prefix), + and act as "MKDEBUGLIB=no MKLINT=no MKPICINSTALL=no + MKPROFILE=no MKSTATICLIB=no". + Default: no + +LIBISPRIVATE If not "no", act as "MKDEBUGLIB=no MKLINT=no MKPIC=no + MKPROFILE=no", and don't install the (.a) library. + This is useful for "build only" helper libraries. + Default: no + +LIBISCXX If not "no", Use ${CXX} instead of ${CC} to link + shared libraries. + This is useful for C++ libraries. + Default: no + +LINTLIBDIR Target directory for lint libraries. + +LIBGRP Library group. + +LIBOWN Library owner. + +LIBMODE Library mode. + +LDADD Additional loader objects. + +MAN The manual pages to be installed (use a .1 - .9 suffix). + +NOCHECKVER_ +NOCHECKVER If set, disables checking for installed shared object + libraries with versions greater than the source. A + particular library name, without the "lib" prefix, may + be appended to the variable name to disable the check for + only that library. + +SRCS List of source files to build the library. Suffix types + .s, .c, and .f are supported. Note, .s files are preferred + to .c files of the same name. (This is not the default for + versions of make.) + +LIBDPLIBS A list of the tuples: + libname path-to-srcdir-of-libname + + For each tuple; + * LIBDO.libname contains the .OBJDIR of the library + `libname', and if it is not set it is determined + from the srcdir and added to MAKEOVERRIDES (the + latter is to allow for build time optimization). + * LDADD gets -L${LIBDO.libname} -llibname added. + * DPADD gets ${LIBDO.libname}/liblibname.so or + ${LIBDO.libname}/liblibname.a added. + + This variable may be used for individual libraries, as + well as in parent directories to cache common libraries + as a build-time optimization. + +The include file includes the file named "../Makefile.inc" +if it exists, as well as the include file . + +It has rules for building profiled objects; profiled libraries are +built by default. + +Libraries are ranlib'd when made. + + +=-=-=-=-= bsd.links.mk =-=-=-=-= + +The include file handles the LINKS and SYMLINKS variables +and is included from from and . + +LINKSOWN, LINKSGRP, and LINKSMODE, are relevant only if a metadata log +is used. The defaults may be modified by other bsd.*.mk files which +include bsd.links.mk. In the future, these variables may be replaced +by a method for explicitly recording hard links in a metadata log. + +LINKS The list of hard links, consisting of pairs of paths: + source-file target-file + ${DESTDIR} is prepended to both paths before linking. + For example, to link /bin/test and /bin/[, use: + LINKS=/bin/test /bin/[ + +CONFIGLINKS Similar semantics to LINKS, except that the links + are installed by the `configinstall' target, + not the `install' target. + +SYMLINKS The list of symbolic links, consisting of pairs of paths: + source-file target-file + ${DESTDIR} is only prepended to target-file before linking. + For example, to symlink /usr/bin/tar to /bin/tar resulting + in ${DESTDIR}/usr/bin/tar -> /bin/tar: + SYMLINKS=/bin/tar /usr/bin/tar + +CONFIGSYMLINKS Similar semantics to SYMLINKS, except that the symbolic links + are installed by the `configinstall' target, + not the `install' target. + +LINKSOWN Link owner. [${BINOWN}] + +LINKSGRP Link group. [${BINGRP}] + +LINKSMODE Link mode. [${NONBINMODE}] + +LINKSOWN_ Link owner of the specific file . + +LINKSGRP_ Link group of the specific file . + +LINKSMODE_ Link mode of the specific file . + + +=-=-=-=-= bsd.man.mk =-=-=-=-= + +The include file handles installing manual pages and their +links. + +It has a three targets: + + catinstall: + Install the preformatted manual pages and their links. + htmlinstall: + Install the HTML manual pages and their links. + maninstall: + Install the manual page sources and their links. + +It sets/uses the following variables: + +MANDIR Base path for manual installation. + +MANGRP Manual group. + +MANOWN Manual owner. + +MANMODE Manual mode. + +MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" + or "/tahoe" for machine specific manual pages. + +MAN The manual pages to be installed (use a .1 - .9 suffix). + +MLINKS List of manual page links (using a .1 - .9 suffix). The + linked-to file must come first, the linked file second, + and there may be multiple pairs. + +The include file includes a file named "../Makefile.inc" if +it exists. + + +=-=-=-=-= bsd.obj.mk =-=-=-=-= + +The include file defines targets related to the creation +and use of separated object and source directories. + +If an environment variable named MAKEOBJDIRPREFIX is set, make(1) uses +${MAKEOBJDIRPREFIX}${.CURDIR} as the name of the object directory if +it exists. Otherwise make(1) looks for the existence of a +subdirectory (or a symlink to a directory) of the source directory +into which built targets should be placed. If an environment variable +named MAKEOBJDIR is set, make(1) uses its value as the name of the +object directory; failing that, make first looks for a subdirectory +named "obj.${MACHINE}", and if that doesn't exist, it looks for "obj". + +Object directories are not created automatically by make(1) if they +don't exist; you need to run a separate "make obj". (This will happen +during a top-level build if "MKOBJDIRS" is set to a value other than +"no"). When the source directory is a subdirectory of ${BSDSRCDIR} -- +and this is determined by a simple string prefix comparison -- object +directories are created in a separate object directory tree, and a +symlink to the object directory in that tree is created in the source +directory; otherwise, "make obj" assumes that you're not in the main +source tree and that it's not safe to use a separate object tree. + +Several variables used by control exactly what +directories and links get created during a "make obj": + +MAKEOBJDIR If set, this is the component name of the object + directory. + +OBJMACHINE If this is set but MAKEOBJDIR is not set, creates + object directories or links named "obj.${MACHINE}"; + otherwise, just creates ones named "obj". + +USR_OBJMACHINE If set, and the current directory is a subdirectory of + ${BSDSRCDIR}, create object directory in the + corresponding subdirectory of ${BSDOBJDIR}.${MACHINE}; + otherwise, create it in the corresponding subdirectory + of ${BSDOBJDIR} + +BUILDID If set, the contents of this variable are appended + to the object directory name. If OBJMACHINE is also + set, ".${BUILDID}" is added after ".${MACHINE}". + + +=-=-=-=-= bsd.prog.mk =-=-=-=-= + +The include file handles building programs from one or +more source files, along with their manual pages. It has a limited number +of suffixes, consistent with the current needs of the BSD tree. + includes to get shared library parameters. + +It has eight targets: + + all: + build the program and its manual page. This also + creates a GDB initialization file (.gdbinit) in + the objdir. The .gdbinit file sets the shared library + prefix to ${DESTDIR} to facilitate cross-debugging. + clean: + remove the program, any object files and the files a.out, + Errs, errs, mklog, and ${PROG}.core. + cleandir: + remove all of the files removed by the target clean, as + well as .depend, tags, and any manual pages. + `distclean' is a synonym for `cleandir'. + depend: + make the dependencies for the source files, and store + them in the file .depend. + includes: + install any header files. + install: + install the program and its manual pages; if the Makefile + does not itself define the target install, the targets + beforeinstall and afterinstall may also be used to cause + actions immediately before and after the install target + is executed. + lint: + run lint on the source files + tags: + create a tags file for the source files. + +It sets/uses the following variables: + +BINGRP Binary group. + +BINOWN Binary owner. + +BINMODE Binary mode. + +CLEANDIRFILES Additional files to remove for the cleandir target. + +CLEANFILES Additional files to remove for the clean and cleandir targets. + +COPTS Additional flags to the compiler when creating C objects. + +COPTS. Additional flags to the compiler when creating the + C objects for . + For .[ly], ".c" must be used. + +CPUFLAGS Additional flags to the compiler/assembler to select + CPU instruction set options, CPU tuning options, etc. + +CPUFLAGS. Additional flags to the compiler/assembler for . + For .[ly], ".c" must be used. + +CPPFLAGS Additional flags to the C pre-processor. + +CPPFLAGS. Additional flags to the C pre-processor for . + For .[ly], ".c" must be used. + +GDBINIT List of GDB initialization files to add to "source" + directives in the .gdbinit file that is created in the + objdir. + +LDADD Additional loader objects. Usually used for libraries. + For example, to load with the compatibility and utility + libraries, use: + + LDADD+=-lutil -lcompat + +LDFLAGS Additional linker flags (passed to ${CC} during link). + +LINKS See + +OBJCOPTS Additional flags to the compiler when creating ObjC objects. + +OBJCOPTS. Additional flags to the compiler when creating the + ObjC objects for . + For .[ly], ".c" must be used. + +SYMLINKS See + +MAN Manual pages (should end in .1 - .9). If no MAN variable is + defined, "MAN=${PROG}.1" is assumed. + +PAXCTL_FLAGS If defined, run paxctl(1) on the program binary after link + time, with the value of this variable as args to paxctl(1). + +PAXCTL_FLAGS.${PROG} Custom override for PAXCTL_FLAGS. + +PROG The name of the program to build. If not supplied, nothing + is built. + +PROG_CXX If defined, the name of the program to build. Also + causes to link the program with the C++ + compiler rather than the C compiler. PROG_CXX overrides + the value of PROG if PROG is also set. + +PROGNAME The name that the above program will be installed as, if + different from ${PROG}. + +SRCS List of source files to build the program. If SRCS is not + defined, it's assumed to be ${PROG}.c. + +DPSRCS List of source files which are needed for generating + dependencies, but are not needed in ${SRCS}. + +DPADD Additional dependencies for the program. Usually used for + libraries. For example, to depend on the compatibility and + utility libraries use: + + DPADD+=${LIBCOMPAT} ${LIBUTIL} + + The following system libraries are predefined for DPADD: + + LIBARCHIVE?= ${DESTDIR}/usr/lib/libarchive.a + LIBASN1?= ${DESTDIR}/usr/lib/libasn1.a + LIBATF_C?= ${DESTDIR}/usr/lib/libatf-c.a + LIBATF_CXX?= ${DESTDIR}/usr/lib/libatf-c++.a + LIBBIND9?= ${DESTDIR}/usr/lib/libbind9.a + LIBBLUETOOTH?= ${DESTDIR}/usr/lib/libbluetooth.a + LIBBSDMALLOC?= ${DESTDIR}/usr/lib/libbsdmalloc.a + LIBBZ2?= ${DESTDIR}/usr/lib/libbz2.a + LIBC?= ${DESTDIR}/usr/lib/libc.a + LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a + LIBCOM_ERR?= ${DESTDIR}/usr/lib/libcom_err.a + LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o + LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a + LIBCRYPTO?= ${DESTDIR}/usr/lib/libcrypto.a + LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a + LIBCRYPTO_MDC2?=${DESTDIR}/usr/lib/libcrypto_mdc2.a + LIBCRYPTO_RC5?= ${DESTDIR}/usr/lib/libcrypto_rc5.a + LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a + LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a + LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a + LIBDES?= ${DESTDIR}/usr/lib/libdes.a + LIBDNS?= ${DESTDIR}/usr/lib/libdns.a + LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a + LIBEVENT?= ${DESTDIR}/usr/lib/libevent.a + LIBEXPAT?= ${DESTDIR}/usr/lib/libexpat.a + LIBFETCH?= ${DESTDIR}/usr/lib/libfetch.a + LIBFORM?= ${DESTDIR}/usr/lib/libform.a + LIBFL?= ${DESTDIR}/usr/lib/libfl.a + LIBG2C?= ${DESTDIR}/usr/lib/libg2c.a + LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a + LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a + LIBGSSAPI?= ${DESTDIR}/usr/lib/libgssapi.a + LIBHDB?= ${DESTDIR}/usr/lib/libhdb.a + LIBHEIMBASE?= ${DESTDIR}/usr/lib/libheimbase.a + LIBHEIMNTLM?= ${DESTDIR}/usr/lib/libheimntlm.a + LIBHX500?= ${DESTDIR}/usr/lib/libhx500.a + LIBINTL?= ${DESTDIR}/usr/lib/libintl.a + LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a + LIBISC?= ${DESTDIR}/usr/lib/libisc.a + LIBISCCC?= ${DESTDIR}/usr/lib/libisccc.a + LIBISCFG?= ${DESTDIR}/usr/lib/libiscfg.a + LIBKADM5CLNT?= ${DESTDIR}/usr/lib/libkadm5clnt.a + LIBKADM5SRV?= ${DESTDIR}/usr/lib/libkadm5srv.a + LIBKAFS?= ${DESTDIR}/usr/lib/libkafs.a + LIBKRB5?= ${DESTDIR}/usr/lib/libkrb5.a + LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a + LIBL?= ${DESTDIR}/usr/lib/libl.a + LIBLBER?= ${DESTDIR}/usr/lib/liblber.a + LIBLDAP?= ${DESTDIR}/usr/lib/libldap.a + LIBLDAP_R?= ${DESTDIR}/usr/lib/libldap_r.a + LIBLUA?= ${DESTDIR}/usr/lib/liblua.a + LIBLWRES?= ${DESTDIR}/usr/lib/liblwres.a + LIBM?= ${DESTDIR}/usr/lib/libm.a + LIBMAGIC?= ${DESTDIR}/usr/lib/libmagic.a + LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a + LIBOBJC?= ${DESTDIR}/usr/lib/libobjc.a + LIBOSSAUDIO?= ${DESTDIR}/usr/lib/libossaudio.a + LIBPAM?= ${DESTDIR}/usr/lib/libpam.a + LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a + LIBPCI?= ${DESTDIR}/usr/lib/libpci.a + LIBPMC?= ${DESTDIR}/usr/lib/libpmc.a + LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a + LIBPTHREAD?= ${DESTDIR}/usr/lib/libpthread.a + LIBPTHREAD_DBG?=${DESTDIR}/usr/lib/libpthread_dbg.a + LIBPUFFS?= ${DESTDIR}/usr/lib/libpuffs.a + LIBQUOTA?= ${DESTDIR}/usr/lib/libquota.a + LIBRADIUS?= ${DESTDIR}/usr/lib/libradius.a + LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a + LIBRMT?= ${DESTDIR}/usr/lib/librmt.a + LIBROKEN?= ${DESTDIR}/usr/lib/libroken.a + LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a + LIBRT?= ${DESTDIR}/usr/lib/librt.a + LIBRUMP?= ${DESTDIR}/usr/lib/librump.a + LIBRUMPFS_CD9660FS?=${DESTDIR}/usr/lib/librumpfs_cd9660fs.a + LIBRUMPFS_EFS?= ${DESTDIR}/usr/lib/librumpfs_efs.a + LIBRUMPFS_EXT2FS?=${DESTDIR}/usr/lib/librumpfs_ext2fs.a + LIBRUMPFS_FFS?= ${DESTDIR}/usr/lib/librumpfs_ffs.a + LIBRUMPFS_HFS?= ${DESTDIR}/usr/lib/librumpfs_hfs.a + LIBRUMPFS_LFS?= ${DESTDIR}/usr/lib/librumpfs_lfs.a + LIBRUMPFS_MSDOSFS?=${DESTDIR}/usr/lib/librumpfs_msdosfs.a + LIBRUMPFS_NFS?= ${DESTDIR}/usr/lib/librumpfs_nfs.a + LIBRUMPFS_NTFS?=${DESTDIR}/usr/lib/librumpfs_ntfs.a + LIBRUMPFS_SYSPUFFS?=${DESTDIR}/usr/lib/librumpfs_syspuffs.a + LIBRUMPFS_TMPFS?=${DESTDIR}/usr/lib/librumpfs_tmpfs.a + LIBRUMPFS_UDF?= ${DESTDIR}/usr/lib/librumpfs_udf.a + LIBRUMPFS_UFS?= ${DESTDIR}/usr/lib/librumpfs_ufs.a + LIBRUMPUSER?= ${DESTDIR}/usr/lib/librumpuser.a + LIBSASLC?= ${DESTDIR}/usr/lib/libsaslc.a + LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a + LIBSL?= ${DESTDIR}/usr/lib/libsl.a + LIBSQLITE3?= ${DESTDIR}/usr/lib/libsqlite3.a + LIBSS?= ${DESTDIR}/usr/lib/libss.a + LIBSSH?= ${DESTDIR}/usr/lib/libssh.a + LIBSSL?= ${DESTDIR}/usr/lib/libssl.a + LIBSSP?= ${DESTDIR}/usr/lib/libssp.a + LIBSTDCXX?= ${DESTDIR}/usr/lib/libstdc++.a + LIBSUPCXX?= ${DESTDIR}/usr/lib/libsupc++.a + LIBTERMINFO?= ${DESTDIR}/usr/lib/libterminfo.a + LIBTRE?= ${DESTDIR}/usr/lib/libtre.a + LIBUSBHID?= ${DESTDIR}/usr/lib/libusbhid.a + LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a + LIBWIND?= ${DESTDIR}/usr/lib/libwind.a + LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a + LIBY?= ${DESTDIR}/usr/lib/liby.a + LIBZ?= ${DESTDIR}/usr/lib/libz.a + + The following X-Windows libraries are predefined for DPADD: + + LIBFS?= ${DESTDIR}/usr/X11R7/lib/libFS.a + LIBGL?= ${DESTDIR}/usr/X11R7/lib/libGL.a + LIBGLU?= ${DESTDIR}/usr/X11R7/lib/libGLU.a + LIBICE?= ${DESTDIR}/usr/X11R7/lib/libICE.a + LIBSM?= ${DESTDIR}/usr/X11R7/lib/libSM.a + LIBX11?= ${DESTDIR}/usr/X11R7/lib/libX11.a + LIBXTRAP?= ${DESTDIR}/usr/X11R7/lib/libXTrap.a + LIBXAU?= ${DESTDIR}/usr/X11R7/lib/libXau.a + LIBXAW?= ${DESTDIR}/usr/X11R7/lib/libXaw.a + LIBXDMCP?= ${DESTDIR}/usr/X11R7/lib/libXdmcp.a + LIBXEXT?= ${DESTDIR}/usr/X11R7/lib/libXext.a + LIBXFONT?= ${DESTDIR}/usr/X11R7/lib/libXfont.a + LIBXFT?= ${DESTDIR}/usr/X11R7/lib/libXft.a + LIBXI?= ${DESTDIR}/usr/X11R7/lib/libXi.a + LIBXINERAMA?= ${DESTDIR}/usr/X11R7/lib/libXinerama.a + LIBXMU?= ${DESTDIR}/usr/X11R7/lib/libXmu.a + LIBXMUU?= ${DESTDIR}/usr/X11R7/lib/libXmuu.a + LIBXPM?= ${DESTDIR}/usr/X11R7/lib/libXpm.a + LIBXRANDR?= ${DESTDIR}/usr/X11R7/lib/libXrandr.a + LIBXRENDER?= ${DESTDIR}/usr/X11R7/lib/libXrender.a + LIBXSS?= ${DESTDIR}/usr/X11R7/lib/libXss.a + LIBXT?= ${DESTDIR}/usr/X11R7/lib/libXt.a + LIBXTST?= ${DESTDIR}/usr/X11R7/lib/libXtst.a + LIBXV?= ${DESTDIR}/usr/X11R7/lib/libXv.a + LIBXXF86DGA?= ${DESTDIR}/usr/X11R7/lib/libXxf86dga.a + LIBXXF86MISC?= ${DESTDIR}/usr/X11R7/lib/libXxf86misc.a + LIBXXF86VM?= ${DESTDIR}/usr/X11R7/lib/libXxf86vm.a + LIBDPS?= ${DESTDIR}/usr/X11R7/lib/libdps.a + LIBFNTSTUBS?= ${DESTDIR}/usr/X11R7/lib/libfntstubs.a + LIBFONTCACHE?= ${DESTDIR}/usr/X11R7/lib/libfontcache.a + LIBFONTCONFIG?= ${DESTDIR}/usr/X11R7/lib/libfontconfig.a + LIBFONTENC?= ${DESTDIR}/usr/X11R7/lib/libfontenc.a + LIBFREETYPE?= ${DESTDIR}/usr/X11R7/lib/libfreetype.a + LIBLBXUTIL?= ${DESTDIR}/usr/X11R7/lib/liblbxutil.a + LIBXKBFILE?= ${DESTDIR}/usr/X11R7/lib/libxkbfile.a + +SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared + strings, using xstr(1). Note that this will not work with + parallel makes. + +STRIPFLAG The flag passed to the install program to cause the binary + to be stripped. + +SUBDIR A list of subdirectories that should be built as well. + Each of the targets will execute the same target in the + subdirectories. + +SCRIPTS A list of interpreter scripts [file.{sh,csh,pl,awk,...}]. + These are installed exactly like programs. + +SCRIPTSDIR The location to install the scripts. Each script can be + installed to a separate path by setting SCRIPTSDIR_