summaryrefslogtreecommitdiff
path: root/devel/unproven-pthreads/patches/patch-am
diff options
context:
space:
mode:
Diffstat (limited to 'devel/unproven-pthreads/patches/patch-am')
-rw-r--r--devel/unproven-pthreads/patches/patch-am211
1 files changed, 211 insertions, 0 deletions
diff --git a/devel/unproven-pthreads/patches/patch-am b/devel/unproven-pthreads/patches/patch-am
new file mode 100644
index 00000000000..c1fe579e1a4
--- /dev/null
+++ b/devel/unproven-pthreads/patches/patch-am
@@ -0,0 +1,211 @@
+$NetBSD: patch-am,v 1.1 2001/01/09 16:14:21 briggs Exp $
+
+--- /dev/null Wed Dec 31 19:00:00 1969
++++ machdep/engine-powerpc-netbsd.h Tue Jan 9 02:42:26 2001
+@@ -0,0 +1,206 @@
++/* ==== machdep.h ============================================================
++ * Copyright (c) 1994 Chris Provenzano (proven@athena.mit.edu) and
++ * Ken Raeburn (raeburn@mit.edu).
++ *
++ * engine-alpha-osf1.h,v 1.4.4.1 1995/12/13 05:41:42 proven Exp
++ *
++ */
++
++#include <unistd.h>
++#include <setjmp.h>
++#include <sys/time.h>
++#include <sys/cdefs.h>
++#include <sys/signal.h> /* for _NSIG */
++#include <sys/syscall.h>
++
++#include <unistd.h>
++#include <setjmp.h>
++#include <stdlib.h>
++#include <fcntl.h>
++
++#include <pthread/sysfunc.h>
++
++/*
++ * The first machine dependent functions are the SEMAPHORES
++ * needing the test and set instruction.
++ */
++#define SEMAPHORE_CLEAR 0
++#define SEMAPHORE_SET 0xffff
++
++#define SEMAPHORE_TEST_AND_SET(lock) \
++({ \
++ volatile long t1, temp = SEMAPHORE_SET; \
++ __asm__ volatile( \
++ "1: lwarx %0,0,%1; \
++ cmpwi %0, 0; \
++ bne 2f; \
++ stwcx. %2,0,%1; \
++ bne- 1b; \
++ 2: " \
++ :"=r" (t1) \
++ :"m" (lock), "r" (temp)); \
++ t1; \
++})
++
++#define SEMAPHORE_RESET(lock) *lock = SEMAPHORE_CLEAR
++
++/*
++ * New types
++ */
++typedef int semaphore;
++
++/*
++ * sigset_t macros
++ */
++#define SIG_ANY(sig) (sig)
++#define SIGMAX (_NSIG-1)
++
++/*
++ * New Strutures
++ */
++struct machdep_pthread {
++ void *(*start_routine)(void *);
++ void *start_argument;
++ void *machdep_stack;
++ struct itimerval machdep_timer;
++ jmp_buf machdep_istate;
++ unsigned long machdep_fstate[66];
++ /* 64-bit fp regs 0-31 + fpscr */
++ /* We pretend the fpscr is 64 bits */
++};
++
++/*
++ * Static machdep_pthread initialization values.
++ * For initial thread only.
++ */
++#define MACHDEP_PTHREAD_INIT \
++ { NULL, NULL, NULL, { { 0, 0 }, { 0, 100000 } }, { 0 }, { 0 } }
++
++/*
++ * Minimum stack size
++ */
++#define PTHREAD_STACK_MIN 2048
++
++/*
++ * Some fd flag defines that are necessary to distinguish between posix
++ * behavior and bsd4.3 behavior.
++ */
++#define __FD_NONBLOCK O_NONBLOCK
++
++/*
++ * New functions
++ */
++
++__BEGIN_DECLS
++
++#if defined(PTHREAD_KERNEL)
++
++#define __machdep_stack_get(x) (x)->machdep_stack
++#define __machdep_stack_set(x, y) (x)->machdep_stack = y
++#define __machdep_stack_repl(x, y) \
++{ \
++ if ((stack = __machdep_stack_get(x))) { \
++ __machdep_stack_free(stack); \
++ } \
++ __machdep_stack_set(x, y); \
++}
++
++int machdep_save_state(void);
++
++void __machdep_save_fp_state(unsigned long *);
++void __machdep_restore_fp_state(unsigned long *);
++
++void *machdep_pthread_cleanup(struct machdep_pthread *machdep_pthread);
++void machdep_pthread_start(void);
++
++/* ==========================================================================
++ * __machdep_stack_free()
++ */
++inline static
++void __machdep_stack_free(void * stack)
++{
++ free(stack);
++}
++
++/* ==========================================================================
++ * __machdep_stack_alloc()
++ */
++inline static
++void * __machdep_stack_alloc(size_t size)
++{
++ return(malloc(size));
++}
++
++/* ==========================================================================
++ * machdep_sys_creat()
++ */
++static inline int
++machdep_sys_creat(char * path, int mode)
++{
++ return(machdep_sys_open(path, O_WRONLY | O_CREAT | O_TRUNC, mode));
++}
++
++/* ==========================================================================
++ * machdep_sys_wait3()
++ */
++static inline int
++machdep_sys_wait3(int * b, int c, struct rusage *d)
++{
++ return(machdep_sys_wait4(0, b, c, d));
++}
++
++/* ==========================================================================
++ * machdep_sys_waitpid()
++ */
++static inline int
++machdep_sys_waitpid(int a, int * b, int c)
++{
++ return(machdep_sys_wait4(a, b, c, NULL));
++}
++
++/* ==========================================================================
++ * machdep_sys_getdtablesize()
++ */
++static inline int
++machdep_sys_getdtablesize(void)
++{
++ return(sysconf(_SC_OPEN_MAX));
++}
++
++/* ==========================================================================
++ * machdep_sys_lseek()
++ */
++static inline
++off_t machdep_sys_lseek(int fd, off_t offset, int whence)
++{
++ return(__syscall((quad_t)SYS_lseek, fd, 0, offset, whence));
++}
++
++static inline
++int machdep_sys_ftruncate( int fd, off_t length)
++{
++ quad_t q;
++ int rv;
++
++ q = __syscall((quad_t)SYS_ftruncate, fd,0, length);
++ if( /* LINTED constant */ sizeof( quad_t ) == sizeof( register_t ) ||
++ /* LINTED constant */ BYTE_ORDER == LITTLE_ENDIAN )
++ rv = (int)q;
++ else
++ rv = (int)((u_quad_t)q >> 32);
++
++ return rv;
++}
++
++
++/* ==========================================================================
++ * machdep_sys_getdirentries()
++ */
++static inline int
++machdep_sys_getdirentries(int fd, char * buf, int len, int * seek)
++{
++ return(machdep_sys_getdents(fd, buf, len));
++}
++#endif
++
++__END_DECLS