nsprpub/pr/include/md/_aix.h

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef nspr_aix_defs_h___
     7 #define nspr_aix_defs_h___
     9 #include <sys/types.h>
    10 #if defined(_PR_PTHREADS) || defined(PTHREADS_USER)
    11 #include <pthread.h>
    12 #endif
    14 /*
    15  * To pick up fd_set and the poll events.
    16  */
    17 #include <sys/select.h>
    18 #include <sys/poll.h>
    20 /*
    21  * Internal configuration macros
    22  */
    24 #define PR_LINKER_ARCH          "aix"
    25 #define _PR_SI_SYSNAME		    "AIX"
    26 #define _PR_SI_ARCHITECTURE	    "rs6000"
    27 #define PR_DLL_SUFFIX		    ".so"
    29 #define _PR_VMBASE	 	        0x30000000
    30 #define _PR_STACK_VMBASE	    0x50000000
    31 #define _MD_DEFAULT_STACK_SIZE	(2*65536L)
    32 #define _MD_MINIMUM_STACK_SIZE	(2*65536L)
    33 #define _MD_MMAP_FLAGS		    MAP_PRIVATE
    35 #define NEED_TIME_R
    36 #undef  HAVE_STACK_GROWING_UP
    37 #undef	HAVE_WEAK_IO_SYMBOLS
    38 #undef	HAVE_WEAK_MALLOC_SYMBOLS
    39 #define	HAVE_DLL
    40 #define	USE_DLFCN
    41 #define _PR_HAVE_SOCKADDR_LEN
    42 #define _PR_POLL_AVAILABLE
    43 #define _PR_USE_POLL
    44 #define _PR_STAT_HAS_ONLY_ST_ATIME
    45 #ifdef _PR_INET6
    46 #define _PR_HAVE_INET_NTOP
    47 #define _PR_HAVE_GETHOSTBYNAME2
    48 #ifdef _AIX51 /* AIX 4.3.3 does not have AI_NUMERICHOST. */
    49 #define _PR_HAVE_GETADDRINFO
    50 #endif
    51 #endif
    52 #define _PR_HAVE_SYSV_SEMAPHORES
    53 #define PR_HAVE_SYSV_NAMED_SHARED_MEMORY
    54 #define _PR_ACCEPT_INHERIT_NONBLOCK
    56 /* Timer operations */
    57 #if defined(AIX_TIMERS)
    58 #define _MD_INTERVAL_INIT()
    60 extern PRIntervalTime _MD_AixGetInterval(void);
    61 #define _MD_GET_INTERVAL _MD_AixGetInterval
    63 extern PRIntervalTime _MD_AixIntervalPerSec(void);
    64 #define _MD_INTERVAL_PER_SEC _MD_AixIntervalPerSec
    66 #else  /* defined(AIX_TIMERS) */
    67 #define _MD_INTERVAL_USE_GTOD
    68 #endif  /* defined(AIX_TIMERS) */
    70 #ifdef AIX_HAVE_ATOMIC_OP_H
    71 /* The atomic operations */
    72 #include <sys/atomic_op.h>
    73 #define _PR_HAVE_ATOMIC_OPS
    74 #ifndef IS_64
    75 #define _PR_HAVE_ATOMIC_CAS
    76 #endif
    77 #define _MD_INIT_ATOMIC()
    78 #define _MD_ATOMIC_INCREMENT(val)   ((PRInt32)fetch_and_add((atomic_p)val, 1) + 1)
    79 #define _MD_ATOMIC_ADD(ptr, val)   ((PRInt32)fetch_and_add((atomic_p)ptr, val) + val)
    80 #define _MD_ATOMIC_DECREMENT(val)   ((PRInt32)fetch_and_add((atomic_p)val, -1) - 1)
    81 #define _MD_ATOMIC_SET(val, newval) _AIX_AtomicSet(val, newval)
    82 #endif /* AIX_HAVE_ATOMIC_OP_H */
    84 #define USE_SETJMP
    86 #include <setjmp.h>
    88 #define _MD_GET_SP(_t)				(_t)->md.jb[3]
    89 #define _MD_SET_THR_SP(_t, _sp)		((_t)->md.jb[3] = (int) (_sp - 2 * 64))
    90 #define PR_NUM_GCREGS				_JBLEN
    92 #define CONTEXT(_th) 				((_th)->md.jb)
    93 #define SAVE_CONTEXT(_th)			_setjmp(CONTEXT(_th))
    94 #define GOTO_CONTEXT(_th)			_longjmp(CONTEXT(_th), 1)
    96 #ifdef PTHREADS_USER
    97 #include "_nspr_pthread.h"
    98 #else
   100 /*
   101 ** Initialize the thread context preparing it to execute _main.
   102 */
   103 #define _MD_INIT_CONTEXT(_thread, _sp, _main, status)	      \
   104     PR_BEGIN_MACRO				      \
   105         *status = PR_TRUE;              \
   106 	if (setjmp(CONTEXT(_thread))) {	\
   107 	    (*_main)();			\
   108 	}				\
   109 	_MD_GET_SP(_thread) = (int) (_sp - 2 * 64);		\
   110     PR_END_MACRO
   112 #define _MD_SWITCH_CONTEXT(_thread)  \
   113     if (!setjmp(CONTEXT(_thread))) { \
   114 	(_thread)->md.errcode = errno;  \
   115 	_PR_Schedule();		     \
   116     }
   118 /*
   119 ** Restore a thread context, saved by _MD_SWITCH_CONTEXT
   120 */
   121 #define _MD_RESTORE_CONTEXT(_thread) \
   122 {				     \
   123     errno = (_thread)->md.errcode; \
   124     _MD_SET_CURRENT_THREAD(_thread); \
   125     longjmp(CONTEXT(_thread), 1); \
   126 }
   128 /* Machine-dependent (MD) data structures */
   130 struct _MDThread {
   131     jmp_buf jb;
   132     int id;
   133     int errcode;
   134 };
   136 struct _MDThreadStack {
   137     PRInt8 notused;
   138 };
   140 struct _MDLock {
   141     PRInt8 notused;
   142 };
   144 struct _MDSemaphore {
   145     PRInt8 notused;
   146 };
   148 struct _MDCVar {
   149     PRInt8 notused;
   150 };
   152 struct _MDSegment {
   153     PRInt8 notused;
   154 };
   156 /*
   157  * md-specific cpu structure field
   158  */
   159 #define _PR_MD_MAX_OSFD FD_SETSIZE
   161 struct _MDCPU_Unix {
   162     PRCList ioQ;
   163     PRUint32 ioq_timeout;
   164     PRInt32 ioq_max_osfd;
   165     PRInt32 ioq_osfd_cnt;
   166 #ifndef _PR_USE_POLL
   167     fd_set fd_read_set, fd_write_set, fd_exception_set;
   168     PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD],
   169 				fd_exception_cnt[_PR_MD_MAX_OSFD];
   170 #else
   171 	struct pollfd *ioq_pollfds;
   172 	int ioq_pollfds_size;
   173 #endif	/* _PR_USE_POLL */
   174 };
   176 #define _PR_IOQ(_cpu)			((_cpu)->md.md_unix.ioQ)
   177 #define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
   178 #define _PR_FD_READ_SET(_cpu)		((_cpu)->md.md_unix.fd_read_set)
   179 #define _PR_FD_READ_CNT(_cpu)		((_cpu)->md.md_unix.fd_read_cnt)
   180 #define _PR_FD_WRITE_SET(_cpu)		((_cpu)->md.md_unix.fd_write_set)
   181 #define _PR_FD_WRITE_CNT(_cpu)		((_cpu)->md.md_unix.fd_write_cnt)
   182 #define _PR_FD_EXCEPTION_SET(_cpu)	((_cpu)->md.md_unix.fd_exception_set)
   183 #define _PR_FD_EXCEPTION_CNT(_cpu)	((_cpu)->md.md_unix.fd_exception_cnt)
   184 #define _PR_IOQ_TIMEOUT(_cpu)		((_cpu)->md.md_unix.ioq_timeout)
   185 #define _PR_IOQ_MAX_OSFD(_cpu)		((_cpu)->md.md_unix.ioq_max_osfd)
   186 #define _PR_IOQ_OSFD_CNT(_cpu)		((_cpu)->md.md_unix.ioq_osfd_cnt)
   187 #define _PR_IOQ_POLLFDS(_cpu)		((_cpu)->md.md_unix.ioq_pollfds)
   188 #define _PR_IOQ_POLLFDS_SIZE(_cpu)	((_cpu)->md.md_unix.ioq_pollfds_size)
   190 #define _PR_IOQ_MIN_POLLFDS_SIZE(_cpu)	32
   192 struct _MDCPU {
   193     struct _MDCPU_Unix md_unix;
   194 };
   196 #if !defined(_PR_PTHREADS)
   197 #define _MD_INIT_LOCKS()
   198 #endif
   200 #define _MD_NEW_LOCK(lock) PR_SUCCESS
   201 #define _MD_FREE_LOCK(lock)
   202 #define _MD_LOCK(lock)
   203 #define _MD_UNLOCK(lock)
   204 #define _MD_INIT_IO()
   205 #define _MD_IOQ_LOCK()
   206 #define _MD_IOQ_UNLOCK()
   208 #define _MD_EARLY_INIT          	_MD_EarlyInit
   209 #define _MD_FINAL_INIT			_PR_UnixInit
   210 #define _MD_INIT_RUNNING_CPU(cpu)	_MD_unix_init_running_cpu(cpu)
   211 #define _MD_INIT_THREAD			_MD_InitializeThread
   212 #define _MD_EXIT_THREAD(thread)
   213 #define	_MD_SUSPEND_THREAD(thread)
   214 #define	_MD_RESUME_THREAD(thread)
   215 #define _MD_CLEAN_THREAD(_thread)
   216 #endif /* PTHREADS_USER */
   218 #ifdef AIX_RENAME_SELECT
   219 #define _MD_SELECT	select
   220 #define _MD_POLL	poll
   221 #endif
   223 extern void _MD_aix_map_sendfile_error(int err);
   225 #endif /* nspr_aix_defs_h___ */

mercurial