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.
#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__) */
/*
#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
-/* $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.
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] */
-/* $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.
#include <sys/cdefs.h>
#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"
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;
}
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
+#include <machine/ieeefp.h>
#include <machine/float.h>
-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 <float.h> 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;
}
-/* $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
#include <sys/cdefs.h>
#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"
#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);
}
-/* $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
#include <sys/cdefs.h>
#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"
#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;
}
-/* $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.
#include <sys/cdefs.h>
#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 <stddef.h>
#include <stdarg.h>
+void __resumecontext(void) __dead;
+
void
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);
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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.
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. */
-/* $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.
#include <sys/cdefs.h>
#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"
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;
}
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
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];
}
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
uint64_t fpsr;
__asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr));
- return ((fpsr >> 32) & 0x1f);
+ return ((fp_except)(fpsr >> 32) & 0x1f);
}
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
uint64_t fpsr;
__asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr));
- return ((fpsr >> 41) & 0x3);
+ return ((fp_rnd)(fpsr >> 41) & 0x3);
}
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
uint64_t fpsr;
__asm volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr));
- return ((fpsr >> 59) & 0x1f);
+ return ((fp_except)(fpsr >> 59) & 0x1f);
}
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
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);
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
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");
-/* $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 $ */
#include <sys/cdefs.h>
#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 <sys/types.h>
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");
-/* $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.
#include <sys/cdefs.h>
#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 <inttypes.h>
#include <sys/types.h>
#include <machine/frame.h>
+void __resumecontext(void) __dead;
+
void
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 */
}
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. */
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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.
#include <machine/mcontext.h>
#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)
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
-/* $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 $ */
#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)
.data
.export __minbrk, data
__minbrk:
- .long end
+ .long _end
ENTRY(_brk,0)
#ifdef PIC
-/* $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 $ */
#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)
.data
.export curbrk, data
curbrk:
- .long end
+ .long _end
ENTRY(_sbrk,0)
#ifdef PIC
-# $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
-# $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
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
-/* $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.
#include <sys/cdefs.h>
#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 <sys/types.h>
+#include <sys/tls.h>
#include <ucontext.h>
#include <lwp.h>
#include <stdlib.h>
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;
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;
}
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)
{
-/* $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. */
-------------------------------------------------------------------------------
*/
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
/*
-------------------------------------------------------------------------------
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 );
--- /dev/null
+#include "SYS.h"
+
+ENTRY(__m68k_read_tp)
+ SYSTRAP(_lwp_getprivate)
+ movl %d0,%a0
+ rts
+ .size __m68k_read_tp, .-__m68k_read_tp
-# $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 <bsd.own.mk>
SRCS+= __sigaction14_sigtramp.c __sigtramp2.S
.if ${MKSOFTFLOAT} != "no"
.include <softfloat/Makefile.inc>
-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
-# $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
# 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}
-/* $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.
#include <sys/cdefs.h>
#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"
#include <lwp.h>
#include <stdlib.h>
-#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;
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;
}
-/* $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.
#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
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:
-/* $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
#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 */
*/
#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)
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)
#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.
#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:
/*
* our caller's GP.
*/
jal _C_LABEL(longjmperror)
+ nop
PIC_TAILCALL(abort)
+ nop
END(_longjmp)
-/* $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.
#include <mips/sysarch.h>
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);
}
-/* $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
#include <sys/cdefs.h>
#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 <machine/float.h>
};
int
-__flt_rounds()
+__flt_rounds(void)
{
#ifdef SOFTFLOAT_FOR_GCC
return map[fpgetround()];
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_except
-fpgetmask()
+fpgetmask(void)
{
- int x;
+ fp_except x;
__asm("cfc1 %0,$31" : "=r" (x));
return (x >> 7) & 0x1f;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_rnd
-fpgetround()
+fpgetround(void)
{
- int x;
+ fp_rnd x;
__asm("cfc1 %0,$31" : "=r" (x));
return x & 0x03;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_except
-fpgetsticky()
+fpgetsticky(void)
{
- int x;
+ fp_except x;
__asm("cfc1 %0,$31" : "=r" (x));
return (x >> 2) & 0x1f;
-/* $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
#include <sys/cdefs.h>
#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"
#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));
-/* $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
#include <sys/cdefs.h>
#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"
#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));
-/* $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
#include <sys/cdefs.h>
#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"
#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));
-/* $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.
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 */
-/* $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.
#include <sys/cdefs.h>
#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 <inttypes.h>
#include <stdarg.h>
+void __resumecontext(void) __dead;
+
void
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);
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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.
#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
REG_S v0, _OFFSETOF_UC_GREGS_SP(v1)
REG_EPILOGUE
- SYSTRAP(setcontext)
+ PIC_TAILCALL(setcontext)
/* NOTREACHED */
1:
PTR_ADDU sp, sp, CALLFRAME_SIZ
-/* $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 $ */
/*
-------------------------------------------------------------------------------
/*
-------------------------------------------------------------------------------
-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.
-------------------------------------------------------------------------------
*/
-/* $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. */
-------------------------------------------------------------------------------
*/
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
/*
-------------------------------------------------------------------------------
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 );
-/* $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
#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
-# $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
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}
-/* $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.
#include <sys/cdefs.h>
#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 <sys/param.h>
#include <sys/types.h>
#include <ucontext.h>
#include <lwp.h>
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;
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);
}
-/* $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
#include <sys/cdefs.h>
#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 <ieeefp.h>
#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
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
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);
}
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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. */
-------------------------------------------------------------------------------
*/
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
/*
-------------------------------------------------------------------------------
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 );
-/* $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 <mjl@NetBSD.org>
#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
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
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
#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 */
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
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
-/* $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)
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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.
#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)
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)
-/* $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"
blr # return 0
1:
- b .__cerror
+ b PIC_PLT(_C_LABEL(__cerror))
+
-/* $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 <machine/asm.h>
#include "SYS.h"
#ifndef _REENTRANT
.globl _C_LABEL(errno)
#endif
+#ifdef PIC
+ .protected _C_LABEL(__cerror)
+#endif
ENTRY(__cerror)
#ifdef _REENTRANT
-/* $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.
#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
stw %r3,(48 + 3 * 4)(%r5) # arrange for return value 0
blr
1:
- b .__cerror
+ b PIC_PLT(_C_LABEL(__cerror))
* 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 <machine/asm.h>
#include <sys/syscall.h>
#ifdef __STDC__
+#define IMMEDIATE #
#define SYSTRAP(x) \
mov.l 903f, r0; \
- .long 0xc380; /* trapa #0x80 */ \
+ trapa IMMEDIATE 0x80; \
bra 904f; \
nop; \
.align 2; \
-/* $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.
#include <sys/cdefs.h>
#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"
_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;
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;
}
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
extern int __flt_rounds __P((void));
int
-__flt_rounds()
+__flt_rounds(void)
{
return(map[fpgetround()]);
}
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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. */
-------------------------------------------------------------------------------
*/
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
/*
-------------------------------------------------------------------------------
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 );
-# $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
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}
* @(#)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 <machine/asm.h>
*/
#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) \
/*
* 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()
*/
#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)
-/* $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.
#include <sys/cdefs.h>
#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"
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) */
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? */
-/* $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.
#include <machine/trap.h>
#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 */
/*
*/
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
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
* 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 $
*/
/*
/* 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')')
/*
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
};
int
-__flt_rounds()
+__flt_rounds(void)
{
- int x;
+ unsigned int x;
__asm("st %%fsr,%0" : "=m" (*&x));
return map[(x >> 30) & 0x03];
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_except
-fpgetmask()
+fpgetmask(void)
{
- int x;
+ unsigned int x;
__asm("st %%fsr,%0" : "=m" (*&x));
return (x >> 23) & 0x1f;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_rnd
-fpgetround()
+fpgetround(void)
{
- int x;
+ unsigned int x;
__asm("st %%fsr,%0" : "=m" (*&x));
return (x >> 30) & 0x03;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_except
-fpgetsticky()
+fpgetsticky(void)
{
- int x;
+ unsigned int x;
__asm("st %%fsr,%0" : "=m" (*&x));
return (x >> 5) & 0x1f;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_except
-fpsetmask(mask)
- fp_except mask;
+fpsetmask(fp_except mask)
{
fp_except old;
fp_except new;
-/* $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
#include <sys/cdefs.h>
#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"
#endif
fp_rnd
-fpsetround(rnd_dir)
- fp_rnd rnd_dir;
+fpsetround(fp_rnd rnd_dir)
{
fp_rnd old;
fp_rnd new;
__asm("ld %0,%%fsr" : : "m" (*&new));
- return (old >> 30) & 0x03;
+ return ((unsigned int)old >> 30) & 0x03;
}
-/* $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.
#include <signal.h>
#include <stdlib.h>
#include <string.h>
+#include <stddef.h>
#define __LIBC12_SOURCE__
#include <setjmp.h>
#include <compat/include/setjmp.h>
+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 <pc,npc>, and
* set the return value in %o0. The %i and %l registers will be reloaded
__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.
/* 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);
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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
#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 */
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
-/* $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.
#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)
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
-# $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 <softfloat/Makefile.inc>
.else
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
-/* $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
/*
* 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()
/*
* 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)
-/* $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.
#include <sys/cdefs.h>
#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"
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);
sp[14] = (ulong)sp - 2047;
sp[15] = (ulong)_lwp_exit - 8;
+ /*LINTED*/
sp = (ulong *)((caddr_t)sp - 2047);
gr[_REG_PC] = (ulong) start;
gr[_REG_O0] = (ulong) arg;
gr[_REG_O6] = (ulong) sp;
gr[_REG_O7] = (ulong)_lwp_exit - 8;
+ gr[_REG_G7] = (ulong)private;
}
-/* $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
#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
*
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
* 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
+++ /dev/null
-/* $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 <machine/asm.h>
-#include <machine/trap.h>
-
-/*
- * 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')
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
};
int
-__flt_rounds()
+__flt_rounds(void)
{
- int x;
+ uint32_t x;
__asm("st %%fsr,%0" : "=m" (*&x));
return map[(x >> 30) & 0x03];
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#ifdef __weak_alias
#endif
fp_except
-fpgetmask()
+fpgetmask(void)
{
- int x;
+ uint32_t x;
__asm("st %%fsr,%0" : "=m" (*&x));
return (x >> 23) & 0x1f;
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#ifdef __weak_alias
#endif
fp_rnd
-fpgetround()
+fpgetround(void)
{
- int x;
+ uint32_t x;
__asm("st %%fsr,%0" : "=m" (*&x));
return (x >> 30) & 0x03;
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#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;
}
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#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;
__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;
}
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#ifdef __weak_alias
__asm("ld %0,%%fsr" : : "m" (*&new));
- return (old >> 30) & 0x03;
+ return ((uint32_t)old >> 30) & 0x03;
}
-/* $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
#include <sys/cdefs.h>
#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 <sys/types.h>
#include <ieeefp.h>
#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;
__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;
}
-/* $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.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <stddef.h>
#define __LIBC12_SOURCE__
#include <setjmp.h>
#include <compat/include/setjmp.h>
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)
{
/* 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;
-/* $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.
#include <sys/cdefs.h>
#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 <inttypes.h>
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);
sp[14] = (ulong)sp - 2047;
sp[15] = (ulong)_resumecontext - 8;
+ /*LINTED*/
sp = (ulong *)((caddr_t)sp - 2047);
gr[_REG_O6] = (__greg_t)sp;
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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
#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 */
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
-/* $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.
#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
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
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;
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;
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
-/* $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.
#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 */
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
-/* $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.
/*
* 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);
}
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);
}
-/* $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. */
-------------------------------------------------------------------------------
*/
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
/*
-------------------------------------------------------------------------------
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 );
-/* $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
#include <machine/psl.h>
#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
#define ASI_STORE ASI_BLK_P
#endif
+#ifndef _ALIGN
+#define _ALIGN .align 8
+#endif
+
#if 1
/*
* kernel bcopy/memcpy
.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
-/* $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.
#include <machine/asm.h>
#include <sys/syscall.h>
+#define CERROR _C_LABEL(__cerror)
+#define CURBRK _C_LABEL(__curbrk)
+
#ifdef __STDC__
#define SYSTRAP(x) chmk $ SYS_ ## x
#else
SYSTRAP(y)
#define _SYSCALL(x,y) \
+ .p2align 2; \
err: nop; nop; jmp CERROR+2; \
_SYSCALL_NOERROR(x,y); \
jcs err+2
#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)
#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
* 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
*
#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
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)
* SUCH DAMAGE.
*/
+#include "DEFS.h"
+#include <machine/setjmp.h>
+
#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 */
/*
* signal mask.
*/
-#include "DEFS.h"
-#include <machine/setjmp.h>
-
ENTRY(__sigsetjmp14, R6)
movl 4(%ap),%r0 # get env pointer
movl 8(%ap),(_JBLEN*4)(%r0) # save "savemask"
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
beql L2
jmp _C_LABEL(__longjmp14)+2 # yep, do full longjmp
L2: jmp _C_LABEL(_longjmp)+2 # nope, skip to _longjmp
-
+END(__siglongjmp14)
-/* $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.
#include <sys/cdefs.h>
#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"
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;
}
* 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 */
/*
* 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?
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
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)
* 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)
* 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)
movb 5(%ap),%r0
movzwl %r0,%r0
ret
+END(__bswap16)
* 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)
insv %r0,$16,$8,%r0
movb 7(%ap),%r0
ret
+END(__bswap32)
* 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)
-/* $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
#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 */
#include <math.h>
double
-frexp(value, eptr)
- double value;
- int *eptr;
+frexp(double value, int *eptr)
{
union {
double v;
* 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;
*/
#include "DEFS.h"
+#include "assym.h"
-/*
- * don't include errno.h, ANSI C says it defines errno.
- *
- * #include <errno.h>
- */
-#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" */
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:
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)
-/* $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.
#include <sys/cdefs.h>
#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 <stddef.h>
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;
}
* 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 */
/*
* 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
1:
subd3 %r0,4(%ap),*12(%ap)
ret
+END(modf)
ENTRY(modff, 0)
emodf 4(%ap),$0,$0f1.0,%r2,%r0
1:
subf3 %r0,4(%ap),*8(%ap)
ret
+END(modff)
-/* $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.
#include <sys/cdefs.h>
#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"
#include "extern.h"
void
-_resumecontext()
+_resumecontext(void)
{
ucontext_t uct;
-/* $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.
#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) */
pushl 8(%ap)
calls $1,_C_LABEL(setcontext) /* setcontext(ucp) */
ret
+END(swapcontext)
-# $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.
include <ucontext.h>
include <signal.h>
+include <errno.h>
define UC_LEN sizeof(ucontext_t)
define UC_FLAGS offsetof(ucontext_t, uc_flags)
define SIG_BLOCK SIG_BLOCK
define SS_LEN sizeof(sigset_t)
+
+define ERANGE ERANGE
-/* $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.
#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 */
clrl %r0 # we have a match!
9:
ret
+END(bcmp)
-/* $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.
* 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
subl2 %r6,%r3
movc3 %r6,(%r1),(%r3)
ret
+END(bcopy)
-/* $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.
* 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
jgtr 1b
movc5 $0,(%r3),$0,8(%ap),(%r3)
ret
+END(bzero)
-/* $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.
* 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
1:
incl %r0
ret
+END(ffs)
-/* $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.
*/
#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)
jneq 3b
decl %r0
jbr 2b
+END(index)
-/* $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.
#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
subl3 %r4,%r3,%r0
9:
ret
+END(memcmp)
-/* $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.
#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
9: movl $EINVAL,%r0
jmp CERROR+2
+END(__clone)
-/* $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 <matt@3am-software.com>
#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
* 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
ret
1:
jmp CERROR+2
+END(__syscall)
* 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 */
/*
* C library -- vfork
*/
-#include "SYS.h"
-
/*
* pid = vfork();
*
*/
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 */
mnegl $1,%r0
jmp (%r2)
#endif
+END(__vfork14)
* 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)
ret
err:
jmp CERROR+2
+END(_brk)
* 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)
mnegl $1,%r0
movl %r0,%r1
ret
+END(__cerror)
-/* $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.
*
#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
pushl 4(%ap) # Push path
calls $2,_C_LABEL(execv)
ret
+END(_execl)
-/* $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.
*
#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
pushl 4(%ap) # Push path
calls $3,_C_LABEL(execve)
ret
+END(_execle)
-/* $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.
*
#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
pushl 4(%ap) # Push path
calls $2,_C_LABEL(execvp)
ret
+END(_execlp)
* SUCH DAMAGE.
*/
+#include "SYS.h"
+#include <machine/psl.h>
+
#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 <machine/psl.h>
-
ENTRY(exect, 0)
bispsw $PSL_T
chmk $ SYS_execve
jmp CERROR+2 # exect(file, argv, env)
+END(exect)
* 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)
-/* $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.
#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
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
/*
* 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)
* 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
movl %r1,(%r2)
clrl %r0
ret
+END(_pipe)
* 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)
ret
err:
jmp CERROR+2
+END(ptrace)
* 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
ret
err:
jmp CERROR+2
+END(_sbrk)
* 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
ret
1:
jmp CERROR+2
+END(syscall)
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);
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
-/* $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
.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
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
-# $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
* 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 */
/*
* C library -- vfork
*/
-#include "SYS.h"
-
WARN_REFERENCES(vfork, \
"warning: reference to compatibility vfork(); include <unistd.h> for correct reference")
mnegl $1,%r0
jmp (%r2)
#endif
+END(vfork)
* 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.
*/
-/* $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).
#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)
--- /dev/null
+/* $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 <sys/quota.h> for correct reference")
+
+PSEUDO(quotactl,compat_50_quotactl)
* 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 <signal.h> for correct reference")
movl %r0,*4(%ap) # store old mask
clrl %r0
ret
+END(sigpending)
* 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 <signal.h> for correct reference")
out:
clrl %r0
ret
+END(sigprocmask)
* 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.
*/
* 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 <signal.h> 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)
+++ /dev/null
-/* $NetBSD: malloc.c,v 1.52 2008/02/03 22:56:53 christos Exp $ */
-
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@FreeBSD.ORG> 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 <minix/sysutil.h>
-#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 <sys/cdefs.h>
-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 <assert.h>
-
-#include <sys/types.h>
-#if defined(__NetBSD__)
-# define malloc_minsize 16U
-# define HAS_UTRACE
-# define UTRACE_LABEL "malloc",
-#include <sys/cdefs.h>
-#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 <reentrant.h>
-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 <sys/types.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <paths.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-/*
- * 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;i<size;i++)
- page_dir[idx+i] = MALLOC_FOLLOW;
-
- if (malloc_junk)
- memset(p, SOME_JUNK, size << malloc_pageshift);
- }
-
- if (delay_free) {
- if (px == NULL)
- px = delay_free;
- else
- ifree(delay_free);
- }
-
- return p;
-}
-
-/*
- * Allocate a page of fragments
- */
-
-static inline int
-malloc_make_chunks(int bits)
-{
- struct pginfo *bp;
- void *pp;
- int i, k;
- long l;
-
- /* Allocate a new bucket */
- pp = malloc_pages(malloc_pagesize);
- if (pp == NULL)
- return 0;
-
- /* Find length of admin structure */
- l = (long)offsetof(struct pginfo, bits[0]);
- l += (long)sizeof bp->bits[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<<bits);
- bp->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();
-}
#endif
#include <assert.h>
+#include <sys/types.h>
+#include <sys/signal.h>
+
#define NO_THREADS 4
#define MAX_THREAD_POOL 1024
/* 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) {
}
(void)close(master);
}
+#endif
(void)getgrnam_r("tty", &grs, grbuf, sizeof(grbuf), &grp);
if (grp != NULL) {
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)
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/queue.h>
+#include <sys/ucred.h>
#include <limits.h>
#include <unistd.h>
#include <signal.h>
--- /dev/null
+# $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 <bsd.prog.mk>".
+
+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 <bsd.own.mk>
+ 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 <bsd.own.mk>
+ 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 <bsd.own.mk>, 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 <complex.h>
+ 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<lib>
+OBJCOPTS.lib<lib>
+LDADD.lib<lib>
+CPPFLAGS.lib<lib>
+CXXFLAGS.lib<lib>
+COPTS.<prog>
+OBJCCOPTS.<prog>
+LDADD.<prog>
+CPPFLAGS.<prog>
+CXXFLAGS.<prog> These provide a way to specify additions to the associated
+ variables in a way that applies only to a particular library
+ or program. <lib> corresponds to the LIB variable set in
+ the library's makefile. <prog> 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 <sys.mk> 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 <bsd.own.mk> 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, <bsd.own.mk> 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.
+
+<bsd.own.mk> 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 <bsd.own.mk>
+ based on the presence of tools/ and build.sh. This variable
+ is "internal" to <bsd.own.mk>, 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<package>
+X11SRCDIR.<package>
+ The path to the xorg src tree for the specificed package>.
+ [${X11SRCDIR}/external/mit/xorg/<package>/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 <bsd.own.mk> 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
+<bsd.own.mk>):
+
+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 <bsd.*.mk>
+ 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 <bsd.own.mk>, but
+ including <bsd.own.mk> 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]
+
+<bsd.own.mk> 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 <bsd.clean.mk> 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 <bsd.clean.mk>, 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.clean.mk>
+
+
+=-=-=-=-= bsd.dep.mk =-=-=-=-=
+
+The include file <bsd.dep.mk> 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 <bsd.files.mk> handles the FILES variables and is included
+from <bsd.lib.mk> and <bsd.prog.mk>, 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_<fn> File owner of the specific file <fn>.
+
+FILESGRP_<fn> File group of the specific file <fn>.
+
+FILESMODE_<fn> File mode of the specific file <fn>.
+
+FILESDIR_<fn> The location to install the specific file <fn>.
+
+FILESNAME_<fn> Optional name to install <fn> as.
+
+FILESBUILD If this variable is defined, then its value will be
+ used as the default for all FILESBUILD_<fn> variables.
+ Otherwise, the default will be "no".
+
+FILESBUILD_<fn> 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 <file>.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_<fn>
+ 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 <bsd.gcc.mk> computes various parameters related to GCC
+support libraries. It defines no targets. <bsd.own.mk> MUST be included
+before <bsd.gcc.mk>.
+
+The primary users of <bsd.gcc.mk> are <bsd.prog.mk> and <bsd.lib.mk>, each
+of which need to know where to find certain GCC support libraries.
+
+The behavior of <bsd.gcc.mk> 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.
+
+<bsd.gcc.mk> 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 <bsd.inc.mk> 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 <bsd.links.mk>, except that these
+ are installed in the 'includes' target and not the
+ (much later) 'install' target.
+
+INCSNAME_<file> The name file <file> should be installed as, if not <file>,
+ same as FILESNAME_<file>, but for include files.
+
+
+=-=-=-=-= bsd.info.mk =-=-=-=-=
+
+The include file <bsd.info.mk> 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 <bsd.kernobj.mk> 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 <bsd.kernobj.mk> and ${KERNOBJDIR}
+rather than make assumptions about the location of the compiled kernel.
+
+
+=-=-=-=-= bsd.kinc.mk =-=-=-=-=
+
+The include file <bsd.kinc.mk> 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 <bsd.inc.mk>.
+Please see <bsd.kinc.mk> for more details, and keep the documentation
+in that file up to date.
+
+
+=-=-=-=-= bsd.lib.mk =-=-=-=-=
+
+The include file <bsd.lib.mk> has support for building libraries. It has
+the same eight targets as <bsd.prog.mk>: 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. <bsd.lib.mk> includes
+<bsd.shlib.mk> 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 <bsd.own.mk> 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_<library>
+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 <bsd.lib.mk> includes the file named "../Makefile.inc"
+if it exists, as well as the include file <bsd.man.mk>.
+
+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 <bsd.links.mk> handles the LINKS and SYMLINKS variables
+and is included from from <bsd.lib.mk> and <bsd.prog.mk>.
+
+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_<fn> Link owner of the specific file <fn>.
+
+LINKSGRP_<fn> Link group of the specific file <fn>.
+
+LINKSMODE_<fn> Link mode of the specific file <fn>.
+
+
+=-=-=-=-= bsd.man.mk =-=-=-=-=
+
+The include file <bsd.man.mk> 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 <bsd.man.mk> includes a file named "../Makefile.inc" if
+it exists.
+
+
+=-=-=-=-= bsd.obj.mk =-=-=-=-=
+
+The include file <bsd.obj.mk> 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 <bsd.obj.mk> 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 <bsd.prog.mk> 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.
+<bsd.prog.mk> includes <bsd.shlib.mk> 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.<fn> Additional flags to the compiler when creating the
+ C objects for <fn>.
+ For <fn>.[ly], "<fn>.c" must be used.
+
+CPUFLAGS Additional flags to the compiler/assembler to select
+ CPU instruction set options, CPU tuning options, etc.
+
+CPUFLAGS.<fn> Additional flags to the compiler/assembler for <fn>.
+ For <fn>.[ly], "<fn>.c" must be used.
+
+CPPFLAGS Additional flags to the C pre-processor.
+
+CPPFLAGS.<fn> Additional flags to the C pre-processor for <fn>.
+ For <fn>.[ly], "<fn>.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 <bsd.links.mk>
+
+OBJCOPTS Additional flags to the compiler when creating ObjC objects.
+
+OBJCOPTS.<fn> Additional flags to the compiler when creating the
+ ObjC objects for <fn>.
+ For <fn>.[ly], "<fn>.c" must be used.
+
+SYMLINKS See <bsd.links.mk>
+
+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 <bsd.prog.mk> 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_<script>.
+
+SCRIPTSNAME The name that the above program will be installed as, if
+ different from ${SCRIPTS}. These can be further specialized
+ by setting SCRIPTSNAME_<script>.
+
+FILES See description of <bsd.files.mk>.
+
+SHLINKDIR Target directory for shared linker. See description of
+ <bsd.own.mk> for additional information about this variable.
+
+The include file <bsd.prog.mk> includes the file named "../Makefile.inc"
+if it exists, as well as the include file <bsd.man.mk>.
+
+Some simple examples:
+
+To build foo from foo.c with a manual page foo.1, use:
+
+ PROG= foo
+
+ .include <bsd.prog.mk>
+
+To build foo from foo.c with a manual page foo.2, add the line:
+
+ MAN= foo.2
+
+If foo does not have a manual page at all, add the line:
+
+ MKMAN= no
+
+If foo has multiple source files, add the line:
+
+ SRCS= a.c b.c c.c d.c
+
+
+=-=-=-=-= bsd.rpc.mk =-=-=-=-=
+
+The include file <bsd.rpc.mk> contains a makefile fragment used to
+construct source files built by rpcgen.
+
+The following macros may be defined in makefiles which include
+<bsd.rpc.mk> in order to control which files get built and how they
+are to be built:
+
+RPC_INCS: construct .h file from .x file
+RPC_XDRFILES: construct _xdr.c from .x file
+ (for marshalling/unmarshalling data types)
+RPC_SVCFILES: construct _svc.c from .x file
+ (server-side stubs)
+RPC_SVCFLAGS: Additional flags passed to builds of RPC_SVCFILES.
+
+RPC_XDIR: Directory containing .x/.h files
+
+
+=-=-=-=-= bsd.shlib.mk =-=-=-=-=
+
+The include file <bsd.shlib.mk> computes parameters for shared library
+installation and use. It defines no targets. <bsd.own.mk> MUST be
+included before <bsd.shlib.mk>.
+
+<bsd.own.mk> sets the following variables, if they are not already defined
+(defaults are in brackets):
+
+SHLIBINSTALLDIR If ${USE_SHLIBDIR} is not "no", use ${SHLIBINSTALLDIR}
+ instead of ${LIBDIR} as the base path for shared library
+ installation. [/lib]
+
+SHLIBDIR The path to USE_SHLIBDIR shared libraries to use when building
+ a program. [/lib for programs in /bin and /sbin, /usr/lib
+ for all others.]
+
+_LIBSODIR Set to ${SHLIBINSTALLDIR} if ${USE_SHLIBDIR} is not "no",
+ otherwise set to ${LIBDIR}
+
+SHLINKINSTALLDIR Base path for shared linker. [/libexec]
+
+SHLINKDIR Path to use for shared linker when building a program.
+ [/libexec for programs in /bin and /sbin, /usr/libexec for
+ all others.]
+
+
+=-=-=-=-= bsd.subdir.mk =-=-=-=-=
+
+The include file <bsd.subdir.mk> contains the default targets for building
+subdirectories. It has the same eight targets as <bsd.prog.mk>: all,
+clean, cleandir, depend, includes, install, lint, and tags. It uses the
+following variables:
+
+NOSUBDIR If this variable is defined, then the SUBDIR variable
+ will be ignored and subdirectories will not be processed.
+
+SUBDIR For all of the directories listed in ${SUBDIR}, the
+ specified directory will be visited and the target made.
+
+ As a special case, the use of a token .WAIT as an
+ entry in SUBDIR acts as a synchronization barrier
+ when multiple make jobs are run; subdirs before the
+ .WAIT must complete before any subdirs after .WAIT are
+ started. See make(1) for some caveats on use of .WAIT
+ and other special sources.
+
+
+=-=-=-=-= bsd.sys.mk =-=-=-=-=
+
+The include file <bsd.sys.mk> is used by <bsd.prog.mk> and
+<bsd.lib.mk>. It contains overrides that are used when building
+the NetBSD source tree.
+
+The following variables control how various files are compiled/built.
+(Note that these may be overridden in <bsd.own.mk> if USETOOLS == "yes"):
+
+AR Create, modify, and extract from archives. [ar]
+
+ARFLAGS Options to ${AR}. [rl]
+
+AS Assembler. [as]
+
+AFLAGS Options to ${CC} when compiling or linking .s or .S
+ assembly source files. []
+
+BUILDSEED GCC uses random numbers when compiling C++ code.
+ If this option is present, seed the random number
+ generator based on the value, source file names and
+ the output file name to make builds more deterministic.
+ Additional information is available in the GCC
+ documentation of -frandom-seed.
+
+CC C compiler. [cc]
+
+CFLAGS Options to ${CC}. [Usually -O or -O2]
+
+CPP C Pre-Processor. [cpp]
+
+CPPFLAGS Options to ${CPP}. []
+
+CPUFLAGS Optimization flags for ${CC}. []
+
+CXX C++ compiler. [c++]
+
+CXXFLAGS Options to ${CXX}. [${CFLAGS}]
+
+ELF2ECOFF Convert ELF-format executable to ECOFF. [elf2ecoff]
+
+FC Fortran compiler. [f77]
+
+FFLAGS Options to {$FC}. [-O]
+
+HOST_SH Shell. This must be an absolute path, because it may be
+ substituted into "#!" lines in scripts. [/bin/sh]
+
+INSTALL install(1) command. [install]
+
+LEX Lexical analyzer. [lex]
+
+LFLAGS Options to ${LEX}. []
+
+LPREFIX Symbol prefix for ${LEX} (see -P option in lex(1)) [yy]
+
+LD Linker. [ld]
+
+LDFLAGS Options to ${CC} during the link process. []
+
+LINT C program verifier. [lint]
+
+LINTFLAGS Options to ${LINT}. [-chapbxzFS]
+
+LORDER List dependencies for object files. [lorder]
+
+MAKE make(1). [make]
+
+MKDEP Construct Makefile dependency list. [mkdep]
+
+NM List symbols from object files. [nm]
+
+PC Pascal compiler. [pc] (Not present)
+
+PFLAGS Options to ${PC}. []
+
+OBJC Objective C compiler. [${CC}]
+
+OBJCFLAGS Options to ${OBJC}. [${CFLAGS}]
+
+OBJCOPY Copy and translate object files. [objcopy]
+
+OBJCOPYLIBFLAGS Flags to pass to objcopy when library objects are
+ being built. [${.TARGET} =~ "*.po" ? -X : -x]
+
+OBJDUMP Display information from object files. [objdump]
+
+RANLIB Generate index to archive. [ranlib]
+
+SIZE List section sizes and total size. [size]
+
+STRIP Discard symbols from object files. [strip]
+
+TSORT Topological sort of a directed graph. [tsort -q]
+
+YACC LALR(1) parser generator. [yacc]
+
+YFLAGS Options to ${YACC}. []
+
+YHEADER If defined, add "-d" to YFLAGS, and add dependencies
+ from <file>.y to <file>.h and <file>.c, and add
+ <foo>.h to CLEANFILES.
+
+YPREFIX If defined, add "-p ${YPREFIX}" to YFLAGS.
+
+
+Other variables of note (incomplete list):
+
+NOGCCERROR If defined, prevents passing certain ${CFLAGS} to GCC
+ that cause warnings to be fatal, such as:
+ -Werror -Wa,--fatal-warnings
+ (The latter being for as(1).)
+
+NOCLANGERROR If defined and clang is used as C compiler, -Werror is not
+ passed to it.
+
+WARNS Crank up compiler warning options; the distinct levels are:
+ WARNS=1
+ WARNS=2
+ WARNS=3
+ WARNS=4
+ WARNS=5
+
+=-=-=-=-= bsd.x11.mk =-=-=-=-=
+
+The include file <bsd.x11.mk> contains parameters and targets for
+cross-building X11 from ${X11SRCDIR.xc} / ${X11MITSRCDIR.*}.
+It should be included after the general Makefile contents but before
+the include files such as <bsd.prog.mk> and <bsd.lib.mk>.
+
+It provides the following targets:
+ .man.1 .man.3 .man.4 .man.5 .man.7:
+ If ${MAN} or ${PROG} is set and ${MKMAN} != "no",
+ these rules convert from X11's manual page source
+ into an mdoc.old source file.
+
+It sets the following variables:
+
+BINDIR Set to ${X11BINDIR}.
+ To override, define after including <bsd.x11.mk>
+
+LIBDIR Set to ${X11USRLIBDIR}.
+ To override, define after including <bsd.x11.mk>
+
+MANDIR Set to ${X11MANDIR}.
+ To override, define after including <bsd.x11.mk>
+
+CPPFLAGS Appended with definitions to include from
+ ${DESTDIR}${X11INCDIR}
+
+LDFLAGS Appended with definitions to link from
+ ${DESTDIR}${X11USRLIBDIR}
+
+X11FLAGS.CONNECTION Equivalent to X11's CONNECTION_FLAGS.
+
+X11FLAGS.EXTENSION Equivalent to X11's EXT_DEFINES.
+
+X11FLAGS.LOADABLE Equivalent to X11's LOADABLE.
+
+X11FLAGS.OS_DEFINES Equivalent to X11's OS_DEFINES.
+
+X11FLAGS.SERVER Equivalent to X11's ServerDefines.
+
+X11FLAGS.THREADLIB Equivalent to X11's THREADS_DEFINES for libraries.
+
+X11FLAGS.THREADS Equivalent to X11's THREADS_DEFINES.
+
+X11FLAGS.VERSION cpp(1) definitions of OSMAJORVERSION and OSMINORVERSION.
+
+X11FLAGS.DIX Equivalent to X11's DIX_DEFINES.
+
+X11TOOL_UNXCOMM Commandline to convert `XCOMM' comments to `#'
+
+It uses the following variables:
+
+APPDEFS List of app-default files to install.
+
+CPPSCRIPTS List of files/scripts to run through cpp(1)
+ and then ${X11TOOL_UNXCOMM}. The source files
+ have a `.cpp' suffix, the generated files do not.
+
+CPPSCRIPTFLAGS Additional flags to cpp(1) when building CPPSCRIPTS.
+
+CPPSCRIPTFLAGS_<fn> Additional flags to cpp(1) when building CPPSCRIPT <fn>.
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=