~ubuntu-branches/ubuntu/saucy/nspr/saucy-updates

« back to all changes in this revision

Viewing changes to mozilla/nsprpub/pr/include/md/_openvms.h

  • Committer: Bazaar Package Importer
  • Author(s): Alexander Sack
  • Date: 2009-08-10 11:34:26 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20090810113426-3uv4diflrkcbdimm
Tags: 4.8-0ubuntu1
* New upstream release: 4.8 (LP: #387812)
* adjust patches to changed upstreanm codebase
  - update debian/patches/99_configure.patch
* update shlibs symbols to include new API elements
  - update debian/libnspr4-0d.symbols

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
 
/* ***** BEGIN LICENSE BLOCK *****
3
 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
 
 *
5
 
 * The contents of this file are subject to the Mozilla Public License Version
6
 
 * 1.1 (the "License"); you may not use this file except in compliance with
7
 
 * the License. You may obtain a copy of the License at
8
 
 * http://www.mozilla.org/MPL/
9
 
 *
10
 
 * Software distributed under the License is distributed on an "AS IS" basis,
11
 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
 
 * for the specific language governing rights and limitations under the
13
 
 * License.
14
 
 *
15
 
 * The Original Code is the Netscape Portable Runtime (NSPR).
16
 
 *
17
 
 * The Initial Developer of the Original Code is
18
 
 * Netscape Communications Corporation.
19
 
 * Portions created by the Initial Developer are Copyright (C) 1998-2000
20
 
 * the Initial Developer. All Rights Reserved.
21
 
 *
22
 
 * Contributor(s):
23
 
 *
24
 
 * Alternatively, the contents of this file may be used under the terms of
25
 
 * either the GNU General Public License Version 2 or later (the "GPL"), or
26
 
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27
 
 * in which case the provisions of the GPL or the LGPL are applicable instead
28
 
 * of those above. If you wish to allow use of your version of this file only
29
 
 * under the terms of either the GPL or the LGPL, and not to allow others to
30
 
 * use your version of this file under the terms of the MPL, indicate your
31
 
 * decision by deleting the provisions above and replace them with the notice
32
 
 * and other provisions required by the GPL or the LGPL. If you do not delete
33
 
 * the provisions above, a recipient may use your version of this file under
34
 
 * the terms of any one of the MPL, the GPL or the LGPL.
35
 
 *
36
 
 * ***** END LICENSE BLOCK ***** */
37
 
 
38
 
/*
39
 
** This is the OpenVMS machine dependant configuration file. It is based
40
 
** on the OSF/1 machine dependant file.
41
 
*/
42
 
 
43
 
#ifndef nspr_openvms_defs_h___
44
 
#define nspr_openvms_defs_h___
45
 
 
46
 
/*
47
 
 * Internal configuration macros
48
 
 */
49
 
 
50
 
#define PR_LINKER_ARCH  "OpenVMS"
51
 
#define _PR_SI_SYSNAME  "OpenVMS"
52
 
#ifdef __alpha
53
 
#define _PR_SI_ARCHITECTURE "alpha"
54
 
#else
55
 
#define _PR_SI_ARCHITECTURE "vax"
56
 
#endif
57
 
#define PR_DLL_SUFFIX           ".so"
58
 
 
59
 
#define _PR_VMBASE              0x30000000
60
 
#define _PR_STACK_VMBASE        0x50000000
61
 
#define _MD_DEFAULT_STACK_SIZE  131072L
62
 
#define _MD_MINIMUM_STACK_SIZE  131072L
63
 
 
64
 
/*
65
 
** This is not defined on OpenVMS. I believe its only used in GC code, and
66
 
** isn't that only used in Java? Anyway, for now, let's keep the compiler
67
 
** happy.
68
 
*/
69
 
#define SA_RESTART 0
70
 
 
71
 
/*
72
 
** OpenVMS doesn't have these in socket.h.
73
 
** Does in later versions!
74
 
*/
75
 
#if 0
76
 
struct ip_mreq {
77
 
    struct in_addr  imr_multiaddr;      /* IP multicast address of group */
78
 
    struct in_addr  imr_interface;      /* local IP address of interface */
79
 
};
80
 
#endif
81
 
 
82
 
/*
83
 
 * OSF1 needs the MAP_FIXED flag to ensure that mmap returns a pointer
84
 
 * with the upper 32 bits zero.  This is because Java sticks a pointer
85
 
 * into an int.
86
 
 */
87
 
#define _MD_MMAP_FLAGS          MAP_PRIVATE|MAP_FIXED
88
 
 
89
 
#undef  HAVE_STACK_GROWING_UP
90
 
#undef  HAVE_WEAK_IO_SYMBOLS
91
 
#undef  HAVE_WEAK_MALLOC_SYMBOLS
92
 
#undef  HAVE_BSD_FLOCK
93
 
 
94
 
#define NEED_TIME_R
95
 
 
96
 
#define HAVE_DLL
97
 
#define USE_DLFCN
98
 
 
99
 
#define _PR_POLL_AVAILABLE
100
 
#define _PR_USE_POLL
101
 
#define _PR_STAT_HAS_ONLY_ST_ATIME
102
 
#define _PR_NO_LARGE_FILES
103
 
#define _PR_STRICT_ADDR_LEN
104
 
#define _PR_NEED_SECRET_AF
105
 
 
106
 
/* IPv6 support */
107
 
#ifdef _SOCKADDR_LEN
108
 
#define _PR_HAVE_SOCKADDR_LEN
109
 
#endif
110
 
#define _PR_HAVE_GETIPNODEBYNAME
111
 
#define _PR_HAVE_GETIPNODEBYADDR
112
 
#define _PR_HAVE_GETADDRINFO
113
 
#define _PR_INET6_PROBE
114
 
#ifdef _PR_INET6
115
 
#define _PR_HAVE_INET_NTOP
116
 
#else
117
 
#define AF_INET6 26
118
 
#ifndef AI_CANONNAME
119
 
#define AI_CANONNAME 0x00000002
120
 
struct addrinfo {
121
 
    int ai_flags;
122
 
    int ai_family;
123
 
    int ai_socktype;
124
 
    int ai_protocol;
125
 
    size_t ai_addrlen;
126
 
    char *ai_canonname;
127
 
    struct sockaddr *ai_addr;
128
 
    struct addrinfo *ai_next;
129
 
};
130
 
#endif
131
 
#define AI_V4MAPPED 0x00000010
132
 
#define AI_ALL      0x00000008
133
 
#define AI_ADDRCONFIG 0x00000020
134
 
#endif
135
 
 
136
 
#define _PR_HAVE_MD_SOCKADDR_IN6
137
 
/* if we have a quadword field defined in the structure, then its length */
138
 
/* will be a multiple of 8, and connect() won't accept 32 (it wants 28) */
139
 
struct _md_in6_addr {
140
 
    union {
141
 
        PRUint8  _S6_u8[16];
142
 
        PRUint16 _S6_u16[8];
143
 
        PRUint32 _S6_u32[4];
144
 
    } _S6_un;
145
 
};
146
 
struct _md_sockaddr_in6 {
147
 
    PRUint16 sin6_family;
148
 
    PRUint16 sin6_port;
149
 
    PRUint32 sin6_flowinfo;
150
 
    struct _md_in6_addr sin6_addr;
151
 
    PRUint32 sin6_scope_id;
152
 
};
153
 
 
154
 
#undef  USE_SETJMP
155
 
 
156
 
#include <setjmp.h>
157
 
 
158
 
/*
159
 
 * A jmp_buf is actually a struct sigcontext.  The sc_sp field of
160
 
 * struct sigcontext is the stack pointer.
161
 
 */
162
 
#define _MD_GET_SP(_t) (((struct sigcontext *) (_t)->md.context)->sc_sp)
163
 
#define PR_NUM_GCREGS _JBLEN
164
 
#define CONTEXT(_th) ((_th)->md.context)
165
 
 
166
 
/*
167
 
** I am ifdef'ing these out because that's the way they are in FT.
168
 
*/
169
 
#ifndef __VMS
170
 
 
171
 
/*
172
 
** Initialize a thread context to run "_main()" when started
173
 
*/
174
 
#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)         \
175
 
{                                                                         \
176
 
        *status = PR_TRUE;              \
177
 
    if (setjmp(CONTEXT(_thread))) {                             \
178
 
        (*_main)();                                             \
179
 
    }                                                           \
180
 
    _MD_GET_SP(_thread) = (long) ((_sp) - 64);                  \
181
 
    _MD_GET_SP(_thread) &= ~15;                                 \
182
 
}
183
 
 
184
 
#define _MD_SWITCH_CONTEXT(_thread)  \
185
 
    if (!setjmp(CONTEXT(_thread))) { \
186
 
        (_thread)->md.errcode = errno;  \
187
 
        _PR_Schedule();              \
188
 
    }
189
 
 
190
 
/*
191
 
** Restore a thread context, saved by _MD_SWITCH_CONTEXT
192
 
*/
193
 
#define _MD_RESTORE_CONTEXT(_thread) \
194
 
{                                    \
195
 
    errno = (_thread)->md.errcode;     \
196
 
    _MD_SET_CURRENT_THREAD(_thread);    \
197
 
    longjmp(CONTEXT(_thread), 1);    \
198
 
}
199
 
 
200
 
#endif /* __VMS */
201
 
 
202
 
/* Machine-dependent (MD) data structures */
203
 
 
204
 
struct _MDThread {
205
 
    jmp_buf context;
206
 
    int id;
207
 
    int errcode;
208
 
};
209
 
 
210
 
struct _MDThreadStack {
211
 
    PRInt8 notused;
212
 
};
213
 
 
214
 
struct _MDLock {
215
 
    PRInt8 notused;
216
 
};
217
 
 
218
 
struct _MDSemaphore {
219
 
    PRInt8 notused;
220
 
};
221
 
 
222
 
struct _MDCVar {
223
 
    PRInt8 notused;
224
 
};
225
 
 
226
 
struct _MDSegment {
227
 
    PRInt8 notused;
228
 
};
229
 
 
230
 
/*
231
 
 * md-specific cpu structure field
232
 
 */
233
 
#define _PR_MD_MAX_OSFD FD_SETSIZE
234
 
 
235
 
struct _MDCPU_Unix {
236
 
    PRCList ioQ;
237
 
    PRUint32 ioq_timeout;
238
 
    PRInt32 ioq_max_osfd;
239
 
    PRInt32 ioq_osfd_cnt;
240
 
#ifndef _PR_USE_POLL
241
 
    fd_set fd_read_set, fd_write_set, fd_exception_set;
242
 
    PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD],
243
 
                              fd_exception_cnt[_PR_MD_MAX_OSFD];
244
 
#else
245
 
      struct pollfd *ioq_pollfds;
246
 
      int ioq_pollfds_size;
247
 
#endif        /* _PR_USE_POLL */
248
 
};
249
 
 
250
 
#define _PR_IOQ(_cpu)                 ((_cpu)->md.md_unix.ioQ)
251
 
#define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))
252
 
#define _PR_FD_READ_SET(_cpu)         ((_cpu)->md.md_unix.fd_read_set)
253
 
#define _PR_FD_READ_CNT(_cpu)         ((_cpu)->md.md_unix.fd_read_cnt)
254
 
#define _PR_FD_WRITE_SET(_cpu)                ((_cpu)->md.md_unix.fd_write_set)
255
 
#define _PR_FD_WRITE_CNT(_cpu)                ((_cpu)->md.md_unix.fd_write_cnt)
256
 
#define _PR_FD_EXCEPTION_SET(_cpu)    ((_cpu)->md.md_unix.fd_exception_set)
257
 
#define _PR_FD_EXCEPTION_CNT(_cpu)    ((_cpu)->md.md_unix.fd_exception_cnt)
258
 
#define _PR_IOQ_TIMEOUT(_cpu)         ((_cpu)->md.md_unix.ioq_timeout)
259
 
#define _PR_IOQ_MAX_OSFD(_cpu)                ((_cpu)->md.md_unix.ioq_max_osfd)
260
 
#define _PR_IOQ_OSFD_CNT(_cpu)                ((_cpu)->md.md_unix.ioq_osfd_cnt)
261
 
#define _PR_IOQ_POLLFDS(_cpu)         ((_cpu)->md.md_unix.ioq_pollfds)
262
 
#define _PR_IOQ_POLLFDS_SIZE(_cpu)    ((_cpu)->md.md_unix.ioq_pollfds_size)
263
 
 
264
 
#define _PR_IOQ_MIN_POLLFDS_SIZE(_cpu)        32
265
 
 
266
 
struct _MDCPU {
267
 
        struct _MDCPU_Unix md_unix;
268
 
};
269
 
 
270
 
#ifndef _PR_PTHREADS
271
 
#define _MD_INIT_LOCKS()
272
 
#endif
273
 
#define _MD_NEW_LOCK(lock) PR_SUCCESS
274
 
#define _MD_FREE_LOCK(lock)
275
 
#define _MD_LOCK(lock)
276
 
#define _MD_UNLOCK(lock)
277
 
#define _MD_INIT_IO()
278
 
#define _MD_IOQ_LOCK()
279
 
#define _MD_IOQ_UNLOCK()
280
 
 
281
 
/*
282
 
 * The following are copied from _sunos.h, _aix.h.  This means
283
 
 * some of them should probably be moved into _unixos.h.  But
284
 
 * _irix.h seems to be quite different in regard to these macros.
285
 
 */
286
 
#define _MD_GET_INTERVAL                  _PR_UNIX_GetInterval
287
 
extern PRIntervalTime _PR_UNIX_GetInterval(void);
288
 
#define _MD_INTERVAL_PER_SEC              _PR_UNIX_TicksPerSecond
289
 
extern PRIntervalTime _PR_UNIX_TicksPerSecond(void);
290
 
 
291
 
#define _MD_EARLY_INIT          _MD_EarlyInit
292
 
void _MD_EarlyInit(void);
293
 
#define _MD_FINAL_INIT          _PR_UnixInit
294
 
#define _MD_INIT_RUNNING_CPU(cpu) _MD_unix_init_running_cpu(cpu)
295
 
#define _MD_INIT_THREAD         _MD_InitializeThread
296
 
#ifdef _VMS_NOT_YET
297
 
NSPR_API(void) _PR_InitThreads(
298
 
  PRThreadType type, PRThreadPriority priority, PRUintn maxPTDs);
299
 
#endif
300
 
#define _MD_EXIT_THREAD(thread)
301
 
#define _MD_SUSPEND_THREAD(thread)
302
 
#define _MD_RESUME_THREAD(thread)
303
 
#define _MD_CLEAN_THREAD(_thread)
304
 
 
305
 
/* The following defines unwrapped versions of select() and poll(). */
306
 
extern int __select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
307
 
#define _MD_SELECT              __select
308
 
 
309
 
#ifndef __VMS
310
 
#define _MD_POLL __poll
311
 
extern int __poll(struct pollfd filedes[], unsigned int nfds, int timeout);
312
 
#endif
313
 
 
314
 
#ifdef __VMS
315
 
NSPR_API(void) _PR_InitCPUs(void);
316
 
NSPR_API(void) _PR_MD_START_INTERRUPTS(void);
317
 
#endif
318
 
 
319
 
/*
320
 
 * Atomic operations
321
 
 */
322
 
#include <machine/builtins.h>
323
 
#define _PR_HAVE_ATOMIC_OPS
324
 
#define _MD_INIT_ATOMIC()
325
 
#define _MD_ATOMIC_ADD(ptr,val) (__ATOMIC_ADD_LONG(ptr,val) + val)
326
 
#define _MD_ATOMIC_INCREMENT(val) (__ATOMIC_INCREMENT_LONG(val) + 1)
327
 
#define _MD_ATOMIC_DECREMENT(val) (__ATOMIC_DECREMENT_LONG(val) - 1)
328
 
#define _MD_ATOMIC_SET(val, newval) __ATOMIC_EXCH_LONG(val, newval)
329
 
 
330
 
extern int thread_suspend(PRThread *thr_id);
331
 
extern int thread_resume(PRThread *thr_id);
332
 
 
333
 
#endif /* nspr_openvms_defs_h___ */