Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Functions
_solaris.h File Reference
#include "prinrval.h"
#include "prthread.h"
#include <errno.h>
#include <ucontext.h>
#include <sys/stack.h>
#include <synch.h>
#include <time.h>
#include <stropts.h>
#include <poll.h>

Go to the source code of this file.

Classes

struct  addrinfo
struct  _md_in6_addr
struct  _md_sockaddr_in6
struct  _MDLock
struct  _MDCVar
struct  _MDSemaphore
struct  _MDThread
struct  _MDThreadStack
struct  _MDSegment
struct  _MDCPU_Unix
struct  _MDCPU
union  _md_in6_addr._S6_un

Defines

#define PR_LINKER_ARCH   "solaris"
#define _PR_SI_SYSNAME   "SOLARIS"
#define PR_DLL_SUFFIX   ".so"
#define _PR_VMBASE   0x30000000
#define _PR_STACK_VMBASE   0x50000000
#define _MD_DEFAULT_STACK_SIZE   (2*65536L)
#define _MD_MMAP_FLAGS   MAP_SHARED
#define HAVE_WEAK_IO_SYMBOLS
#define HAVE_DLL
#define USE_DLFCN
#define NEED_STRFTIME_LOCK
#define _PR_POLL_AVAILABLE
#define _PR_USE_POLL
#define _PR_STAT_HAS_ST_ATIM
#define _PR_HAVE_POSIX_SEMAPHORES
#define PR_HAVE_POSIX_NAMED_SHARED_MEMORY
#define _PR_HAVE_GETIPNODEBYNAME
#define _PR_HAVE_GETIPNODEBYADDR
#define _PR_HAVE_GETADDRINFO
#define _PR_INET6_PROBE
#define _PR_ACCEPT_INHERIT_NONBLOCK
#define AF_INET6   26
#define AI_CANONNAME   0x0010
#define AI_V4MAPPED   0x0001
#define AI_ALL   0x0002
#define AI_ADDRCONFIG   0x0004
#define _PR_HAVE_MD_SOCKADDR_IN6
#define _MD_GET_INTERVAL   _MD_Solaris_GetInterval
#define _MD_INTERVAL_PER_SEC   _MD_Solaris_TicksPerSecond
#define _MD_EARLY_INIT   _MD_EarlyInit
#define _MD_FINAL_INIT   _MD_SolarisInit
#define _MD_INIT_THREAD   _MD_InitializeThread
#define _PR_CONTEXT_TYPE   unsigned int edi; sigset_t oldMask, blockMask; ucontext_t
#define _MD_GET_SP(_t)   (_t)->md.context.uc_mcontext.gregs[USP]
#define PR_NUM_GCREGS   _JBLEN
#define CONTEXT(_thread)   (&(_thread)->md.context)
#define GETTIME(tt)   clock_gettime(CLOCK_REALTIME, (tt))
#define _MD_SAVE_ERRNO(_thread)   (_thread)->md.errcode = errno;
#define _MD_RESTORE_ERRNO(_thread)   errno = (_thread)->md.errcode;
#define WINDOWSIZE   0
#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)
#define _MD_SWITCH_CONTEXT(_thread)
#define _MD_RESTORE_CONTEXT(_newthread)
#define _PR_MD_MAX_OSFD   FD_SETSIZE
#define _PR_IOQ(_cpu)   ((_cpu)->md.md_unix.ioQ)
#define _PR_ADD_TO_IOQ(_pq, _cpu)   PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
#define _PR_FD_READ_SET(_cpu)   ((_cpu)->md.md_unix.fd_read_set)
#define _PR_FD_READ_CNT(_cpu)   ((_cpu)->md.md_unix.fd_read_cnt)
#define _PR_FD_WRITE_SET(_cpu)   ((_cpu)->md.md_unix.fd_write_set)
#define _PR_FD_WRITE_CNT(_cpu)   ((_cpu)->md.md_unix.fd_write_cnt)
#define _PR_FD_EXCEPTION_SET(_cpu)   ((_cpu)->md.md_unix.fd_exception_set)
#define _PR_FD_EXCEPTION_CNT(_cpu)   ((_cpu)->md.md_unix.fd_exception_cnt)
#define _PR_IOQ_TIMEOUT(_cpu)   ((_cpu)->md.md_unix.ioq_timeout)
#define _PR_IOQ_MAX_OSFD(_cpu)   ((_cpu)->md.md_unix.ioq_max_osfd)
#define _PR_IOQ_OSFD_CNT(_cpu)   ((_cpu)->md.md_unix.ioq_osfd_cnt)
#define _PR_IOQ_POLLFDS(_cpu)   ((_cpu)->md.md_unix.ioq_pollfds)
#define _PR_IOQ_POLLFDS_SIZE(_cpu)   ((_cpu)->md.md_unix.ioq_pollfds_size)
#define _PR_IOQ_MIN_POLLFDS_SIZE(_cpu)   32
#define _MD_INIT_LOCKS()
#define _MD_NEW_LOCK(lock)   PR_SUCCESS
#define _MD_FREE_LOCK(lock)
#define _MD_LOCK(lock)
#define _MD_UNLOCK(lock)
#define _MD_INIT_IO()
#define _MD_IOQ_LOCK()
#define _MD_IOQ_UNLOCK()
#define _MD_INIT_RUNNING_CPU(cpu)   _MD_unix_init_running_cpu(cpu)
#define _MD_INIT_THREAD   _MD_InitializeThread
#define _MD_EXIT_THREAD(thread)
#define _MD_SUSPEND_THREAD(thread)
#define _MD_RESUME_THREAD(thread)
#define _MD_CLEAN_THREAD(_thread)
#define _MD_GET_INTERVAL   _MD_Solaris_GetInterval
#define _MD_INTERVAL_PER_SEC   _MD_Solaris_TicksPerSecond
#define _MD_SELECT   _select
#define _MD_POLL   _poll

Functions

 NSPR_API (PRIntervalTime) _MD_Solaris_GetInterval(void)
 NSPR_API (void) _MD_EarlyInit(void)
 Prototypes for machine dependent function implementations.
int getedi (void)
void setedi (int)
PRStatus _MD_WAIT (struct PRThread *, PRIntervalTime timeout)
PRStatus _MD_WAKEUP_WAITER (struct PRThread *)
void _MD_YIELD (void)
PRStatus _MD_InitializeThread (PRThread *thread)
void _MD_SET_PRIORITY (struct _MDThread *thread, PRThreadPriority newPri)
PRStatus _MD_CREATE_THREAD (PRThread *thread, void(*start)(void *), PRThreadPriority priority, PRThreadScope scope, PRThreadState state, PRUint32 stackSize)
int _select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
int _poll (struct pollfd *fds, unsigned long nfds, int timeout)
PR_BEGIN_EXTERN_C int gethostname (char *name, int namelen)
PR_END_EXTERN_C void _MD_solaris_map_sendfile_error (int err)

Class Documentation

struct addrinfo

Definition at line 120 of file _openvms.h.

Collaboration diagram for addrinfo:
Class Members
struct sockaddr * ai_addr
size_t ai_addrlen
char * ai_canonname
int ai_family
int ai_flags
struct addrinfo * ai_next
int ai_protocol
int ai_socktype
struct _md_in6_addr

Definition at line 115 of file _hpux.h.

Class Members
union _md_in6_addr _S6_un
union _md_in6_addr _S6_un
union _md_in6_addr _s6_un
union _md_in6_addr _S6_un
union _md_in6_addr _S6_un
struct _md_sockaddr_in6

Definition at line 124 of file _hpux.h.

Class Members
PRUint32 __sin6_src_id
PRInt16 sin6_family
PRUint16 sin6_family
PRUint32 sin6_flowinfo
PRUint16 sin6_port
PRUint32 sin6_scope_id
struct _MDLock

Definition at line 169 of file _aix.h.

Class Members
usptr_t * arena
int32 benaphoreCount
ulock_t lock
PRUint32 magic
PRUint32 mutex
CRITICAL_SECTION mutex
HMTX mutex
PRInt8 notused
sem_id semaphoreID
struct _MDCVar

Definition at line 177 of file _aix.h.

Collaboration diagram for _MDCVar:
Class Members
int16 count
PRUint32 magic
ulock_t mdcvar_lock
PRInt8 notused
PRIntn nwait
sem_id sem1
sem_id sem2
PRUint32 unused
struct PRThread * waitHead
struct PRThread * waitTail
struct _MDSemaphore

Definition at line 173 of file _aix.h.

Class Members
PRInt8 notused
HEV sem
HANDLE sem
usema_t * sem
sem_id sid
PRInt32 unused
struct _MDThreadStack

Definition at line 165 of file _aix.h.

Class Members
PRIntn cxByteCount
PRUint32 magic
PRInt8 notused
char * stackTop
struct _MDSegment

Definition at line 181 of file _aix.h.

Class Members
PRUint32 magic
PRInt8 notused
struct _MDCPU_Unix

Definition at line 190 of file _aix.h.

Collaboration diagram for _MDCPU_Unix:
Class Members
PRInt16 fd_exception_cnt
fd_set fd_exception_set
PRInt16 fd_read_cnt
fd_set fd_read_set
PRInt16 fd_write_cnt
fd_set fd_write_set
PRCList ioQ
PRInt32 ioq_max_osfd
PRInt32 ioq_osfd_cnt
struct pollfd * ioq_pollfds
int ioq_pollfds_size
PRUint32 ioq_timeout
struct _MDCPU

Definition at line 221 of file _aix.h.

Collaboration diagram for _MDCPU:
Class Members
PRInt16 fd_exception_cnt
fd_set fd_exception_set
PRInt16 fd_read_cnt
fd_set fd_read_set
PRInt16 fd_write_cnt
fd_set fd_write_set
PRInt32 id
PRCList ioQ
PRInt32 ioq_max_osfd
PRUint32 ioq_timeout
AbsoluteTime lastThreadSwitch
AbsoluteTime lastWakeUpProcess
PRInt32 suspending_id
PRBool trackScheduling
int unused
int8 unused
union _md_in6_addr._S6_un

Definition at line 127 of file _solaris.h.

Class Members
PRUint32 __S6_align
PRUint32 _S6_u32
PRUint8 _S6_u8

Define Documentation

#define _MD_CLEAN_THREAD (   _thread)

Definition at line 765 of file _solaris.h.

#define _MD_DEFAULT_STACK_SIZE   (2*65536L)

Definition at line 60 of file _solaris.h.

Definition at line 470 of file _solaris.h.

#define _MD_EXIT_THREAD (   thread)

Definition at line 762 of file _solaris.h.

#define _MD_FINAL_INIT   _MD_SolarisInit

Definition at line 471 of file _solaris.h.

Definition at line 753 of file _solaris.h.

Definition at line 778 of file _solaris.h.

Definition at line 778 of file _solaris.h.

#define _MD_GET_SP (   _t)    (_t)->md.context.uc_mcontext.gregs[USP]

Definition at line 503 of file _solaris.h.

#define _MD_INIT_CONTEXT (   _thread,
  _sp,
  _main,
  status 
)
Value:
PR_BEGIN_MACRO                                   \
       ucontext_t *uc = CONTEXT(_thread);        \
        *status = PR_TRUE;              \
       getcontext(uc);                                  \
       /* Force sp to be double aligned! */             \
       uc->uc_mcontext.gregs[USP] = (int) ((unsigned long)(_sp - WINDOWSIZE - SA(MINFRAME)) & 0xfffffff8);      \
       uc->uc_mcontext.gregs[PC] = (int) _main;  \
       (_thread)->no_sched = 0; \
       PR_END_MACRO

Definition at line 633 of file _solaris.h.

Definition at line 756 of file _solaris.h.

Definition at line 750 of file _solaris.h.

Definition at line 760 of file _solaris.h.

Definition at line 761 of file _solaris.h.

Definition at line 761 of file _solaris.h.

Definition at line 780 of file _solaris.h.

Definition at line 780 of file _solaris.h.

Definition at line 757 of file _solaris.h.

Definition at line 758 of file _solaris.h.

Definition at line 754 of file _solaris.h.

#define _MD_MMAP_FLAGS   MAP_SHARED

Definition at line 61 of file _solaris.h.

Definition at line 752 of file _solaris.h.

Definition at line 789 of file _solaris.h.

#define _MD_RESTORE_CONTEXT (   _newthread)
Value:
PR_BEGIN_MACRO                                   \
       ucontext_t *uc = CONTEXT(_newthread);            \
       uc->uc_mcontext.gregs[EAX] = 1;                  \
       _MD_RESTORE_ERRNO(_newthread)                    \
       _MD_SET_CURRENT_THREAD(_newthread);              \
       (_newthread)->no_sched = 1;               \
       setcontext(uc);                                  \
       PR_END_MACRO

Definition at line 670 of file _solaris.h.

#define _MD_RESTORE_ERRNO (   _thread)    errno = (_thread)->md.errcode;

Definition at line 524 of file _solaris.h.

#define _MD_RESUME_THREAD (   thread)

Definition at line 764 of file _solaris.h.

#define _MD_SAVE_ERRNO (   _thread)    (_thread)->md.errcode = errno;

Definition at line 523 of file _solaris.h.

Definition at line 785 of file _solaris.h.

#define _MD_SUSPEND_THREAD (   thread)

Definition at line 763 of file _solaris.h.

#define _MD_SWITCH_CONTEXT (   _thread)
Value:
PR_BEGIN_MACRO                                   \
       ucontext_t *uc = CONTEXT(_thread);        \
       PR_ASSERT(_thread->no_sched);                    \
       sigfillset(&((_thread)->md.blockMask));          \
       sigprocmask(SIG_BLOCK, &((_thread)->md.blockMask),      \
              &((_thread)->md.oldMask));         \
       (_thread)->md.edi = getedi();                    \
       if (! getcontext(uc)) {                          \
              sigprocmask(SIG_SETMASK, &((_thread)->md.oldMask), NULL); \
              uc->uc_mcontext.gregs[EDI] = (_thread)->md.edi;  \
              _MD_SAVE_ERRNO(_thread)            \
               _MD_SET_LAST_THREAD(_thread);             \
              _PR_Schedule();                           \
       } else {                                  \
              sigprocmask(SIG_SETMASK, &((_thread)->md.oldMask), NULL); \
              setedi((_thread)->md.edi);         \
              PR_ASSERT(_MD_LAST_THREAD() !=_MD_CURRENT_THREAD()); \
              _MD_LAST_THREAD()->no_sched = 0;   \
       }                                         \
       PR_END_MACRO

Definition at line 645 of file _solaris.h.

Definition at line 755 of file _solaris.h.

Definition at line 105 of file _solaris.h.

#define _PR_ADD_TO_IOQ (   _pq,
  _cpu 
)    PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))

Definition at line 730 of file _solaris.h.

#define _PR_CONTEXT_TYPE   unsigned int edi; sigset_t oldMask, blockMask; ucontext_t

Definition at line 502 of file _solaris.h.

#define _PR_FD_EXCEPTION_CNT (   _cpu)    ((_cpu)->md.md_unix.fd_exception_cnt)

Definition at line 736 of file _solaris.h.

#define _PR_FD_EXCEPTION_SET (   _cpu)    ((_cpu)->md.md_unix.fd_exception_set)

Definition at line 735 of file _solaris.h.

#define _PR_FD_READ_CNT (   _cpu)    ((_cpu)->md.md_unix.fd_read_cnt)

Definition at line 732 of file _solaris.h.

#define _PR_FD_READ_SET (   _cpu)    ((_cpu)->md.md_unix.fd_read_set)

Definition at line 731 of file _solaris.h.

#define _PR_FD_WRITE_CNT (   _cpu)    ((_cpu)->md.md_unix.fd_write_cnt)

Definition at line 734 of file _solaris.h.

#define _PR_FD_WRITE_SET (   _cpu)    ((_cpu)->md.md_unix.fd_write_set)

Definition at line 733 of file _solaris.h.

Definition at line 103 of file _solaris.h.

Definition at line 102 of file _solaris.h.

Definition at line 101 of file _solaris.h.

Definition at line 124 of file _solaris.h.

Definition at line 98 of file _solaris.h.

Definition at line 104 of file _solaris.h.

#define _PR_IOQ (   _cpu)    ((_cpu)->md.md_unix.ioQ)

Definition at line 729 of file _solaris.h.

#define _PR_IOQ_MAX_OSFD (   _cpu)    ((_cpu)->md.md_unix.ioq_max_osfd)

Definition at line 738 of file _solaris.h.

#define _PR_IOQ_MIN_POLLFDS_SIZE (   _cpu)    32

Definition at line 743 of file _solaris.h.

#define _PR_IOQ_OSFD_CNT (   _cpu)    ((_cpu)->md.md_unix.ioq_osfd_cnt)

Definition at line 739 of file _solaris.h.

#define _PR_IOQ_POLLFDS (   _cpu)    ((_cpu)->md.md_unix.ioq_pollfds)

Definition at line 740 of file _solaris.h.

#define _PR_IOQ_POLLFDS_SIZE (   _cpu)    ((_cpu)->md.md_unix.ioq_pollfds_size)

Definition at line 741 of file _solaris.h.

#define _PR_IOQ_TIMEOUT (   _cpu)    ((_cpu)->md.md_unix.ioq_timeout)

Definition at line 737 of file _solaris.h.

Definition at line 712 of file _solaris.h.

Definition at line 91 of file _solaris.h.

#define _PR_SI_SYSNAME   "SOLARIS"

Definition at line 46 of file _solaris.h.

#define _PR_STACK_VMBASE   0x50000000

Definition at line 59 of file _solaris.h.

Definition at line 93 of file _solaris.h.

Definition at line 92 of file _solaris.h.

#define _PR_VMBASE   0x30000000

Definition at line 58 of file _solaris.h.

#define AF_INET6   26

Definition at line 109 of file _solaris.h.

#define AI_ADDRCONFIG   0x0004

Definition at line 123 of file _solaris.h.

#define AI_ALL   0x0002

Definition at line 122 of file _solaris.h.

#define AI_CANONNAME   0x0010

Definition at line 120 of file _solaris.h.

#define AI_V4MAPPED   0x0001

Definition at line 121 of file _solaris.h.

#define CONTEXT (   _thread)    (&(_thread)->md.context)

Definition at line 507 of file _solaris.h.

#define GETTIME (   tt)    clock_gettime(CLOCK_REALTIME, (tt))

Definition at line 520 of file _solaris.h.

Definition at line 70 of file _solaris.h.

Definition at line 66 of file _solaris.h.

Definition at line 72 of file _solaris.h.

#define PR_DLL_SUFFIX   ".so"

Definition at line 56 of file _solaris.h.

Definition at line 99 of file _solaris.h.

#define PR_LINKER_ARCH   "solaris"

Definition at line 45 of file _solaris.h.

#define PR_NUM_GCREGS   _JBLEN

Definition at line 504 of file _solaris.h.

Definition at line 71 of file _solaris.h.

#define WINDOWSIZE   0

Definition at line 628 of file _solaris.h.


Function Documentation

PRStatus _MD_CREATE_THREAD ( PRThread thread,
void(*)(void *)  start,
PRThreadPriority  priority,
PRThreadScope  scope,
PRThreadState  state,
PRUint32  stackSize 
)

Definition at line 193 of file aix.c.

{
    PR_NOT_REACHED("_MD_CREATE_THREAD should not be called for AIX.");
}

Definition at line 163 of file aix.c.

{
       return PR_SUCCESS;
}
void _MD_SET_PRIORITY ( struct _MDThread thread,
PRThreadPriority  newPri 
)
PRStatus _MD_WAIT ( struct PRThread ,
PRIntervalTime  timeout 
)

Definition at line 169 of file aix.c.

{
    PR_ASSERT(!(thread->flags & _PR_GLOBAL_SCOPE));
    _PR_MD_SWITCH_CONTEXT(thread);
    return PR_SUCCESS;
}

Here is the call graph for this function:

Definition at line 177 of file aix.c.

{
    if (thread) {
       PR_ASSERT(!(thread->flags & _PR_GLOBAL_SCOPE));
    }
    return PR_SUCCESS;
}

Definition at line 187 of file aix.c.

{
    PR_NOT_REACHED("_MD_YIELD should not be called for AIX.");
}
int _poll ( struct pollfd *  fds,
unsigned long  nfds,
int  timeout 
)
int _select ( int  nfds,
fd_set readfds,
fd_set writefds,
fd_set exceptfds,
struct timeval timeout 
)
int getedi ( void  )
PR_BEGIN_EXTERN_C int gethostname ( char *  name,
int  namelen 
)
NSPR_API ( void  )

Prototypes for machine dependent function implementations.

(Too bad NSPR's MD system blows so much that we have to reiterate every stinking thing we implement here in our MD header file.)

void setedi ( int  )