agora inbox for postgres@postgres.berkeley.edu  
help / color / mirror / Atom feed
From: Paul M. Aoki <aoki@CS.Berkeley.EDU>
To: postgres-arch@postgres.Berkeley.EDU
Subject: notes on hpux port
Date: Thu, 17 Aug 95 20:13:26 -0700
Message-ID: <199508180313.UAA04651@faerie.CS.Berkeley.EDU> (raw)

hpux thread info from sipb.mit.edu pthreads package.

/* ==== machdep.h ============================================================
 * Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu
 *
 */

#include <unistd.h>
#include <setjmp.h>
#include <sys/time.h>

/*
 * 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



reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: postgres@postgres.berkeley.edu
  Cc: aoki@CS.Berkeley.EDU, postgres-arch@postgres.Berkeley.EDU
  Subject: Re: notes on hpux port
  In-Reply-To: <199508180313.UAA04651@faerie.CS.Berkeley.EDU>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox