diff options
Diffstat (limited to 'devel/unproven-pthreads/patches/patch-am')
-rw-r--r-- | devel/unproven-pthreads/patches/patch-am | 211 |
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 |