Return-Path: owner-postman Received: from faerie.CS.Berkeley.EDU (faerie.CS.Berkeley.EDU [128.32.37.53]) by nobozo.CS.Berkeley.EDU (8.6.10/8.6.3) with ESMTP id UAA11358 for ; Thu, 17 Aug 1995 20:13:27 -0700 Received: from localhost.Berkeley.EDU (localhost.Berkeley.EDU [127.0.0.1]) by faerie.CS.Berkeley.EDU (8.6.10/8.6.3) with SMTP id UAA04651 for postgres-arch; Thu, 17 Aug 1995 20:13:27 -0700 Message-Id: <199508180313.UAA04651@faerie.CS.Berkeley.EDU> X-Authentication-Warning: faerie.CS.Berkeley.EDU: Host localhost.Berkeley.EDU didn't use HELO protocol From: aoki@CS.Berkeley.EDU (Paul M. Aoki) To: postgres-arch@postgres.Berkeley.EDU Reply-To: aoki@CS.Berkeley.EDU (Paul M. Aoki) Subject: notes on hpux port Date: Thu, 17 Aug 95 20:13:26 -0700 Sender: aoki@postgres.Berkeley.EDU X-Mts: smtp hpux thread info from sipb.mit.edu pthreads package. /* ==== machdep.h ============================================================ * Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu * */ #include #include #include /* * Stuff for compiling */ #if defined(__GNUC__) #if defined(__cplusplus) #define __BEGIN_DECLS extern "C" { #define __END_DECLS }; #define __P(protos) protos #else #define __BEGIN_DECLS #define __END_DECLS #if defined(__STDC__) #define __P(protos) protos #else #define __P(protos) #define const __const #define inline __inline #define signed __signed #define volatile __volatile #endif #endif #else /* !__GNUC__ */ #define __BEGIN_DECLS #define __END_DECLS #define const #define inline #define signed #define volatile #endif /* * The first machine dependent functions are the SEMAPHORES * needing the test and set instruction. * * Note: The set and clear defines are backwards. */ #define SEMAPHORE_CLEAR { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } #define SEMAPHORE_SET 0 #define SEMAPHORE_TEST_AND_SET(lock) \ ({ \ long real_addr; \ long temp; \ \ real_addr = ((long)((*lock) + 15) & ~15); \ \ __asm__ volatile("ldcwx %%r0(%2),%0" \ :"=r" (temp) \ :"0" (temp),"r" (real_addr)); \ temp ? 0 : 1; \ }) #define SEMAPHORE_RESET(lock) \ ({ \ char *real_addr; \ \ real_addr = (char*)((long)((*lock) + 15) & ~15); \ *real_addr = 0xff; \ }) /* * New types * The semaphore is really 16 bytes but must be aligened on a 16 byte * boundary. By specifing 31 bytes the macros can frob it correctly. */ typedef char semaphore[31]; /* * Macros for sigset_t */ #define SIGMAX 31 #define SIG_ANY(sig) \ ({ \ sigset_t *sig_addr = &sig; \ int ret = 0; \ int i; \ \ for (i = 1; i <= SIGMAX; i++) { \ if (sigismember(sig_addr, i)) { \ ret = 1; \ break; \ } \ } \ ret; \ }) /* * New Strutures */ struct machdep_pthread { void *(*start_routine)(void *); void *start_argument; void *machdep_stack; struct itimerval machdep_timer; long machdep_state[_JBLEN]; }; /* * Static machdep_pthread initialization values. * For initial thread only. */ #define MACHDEP_PTHREAD_INIT \ { NULL, NULL, NULL, { { 0, 0 }, { 0, 100000 } }, 0 } /* * Minimum stack size */ #define PTHREAD_STACK_MIN 4096 /* * Some fd flag defines that are necessary to distinguish between posix * behavior and bsd4.3 behavior. */ #define __FD_NONBLOCK O_NONBLOCK /* * page size */ #define getpagesize() 4096 /* * New functions */ __BEGIN_DECLS #if defined(PTHREAD_KERNEL) int machdep_save_state __P((void)); #endif __END_DECLS -- Paul M. Aoki | University of California at Berkeley aoki@CS.Berkeley.EDU | Dept. of EECS, Computer Science Division (#1776) | Berkeley, CA 94720-1776