summaryrefslogtreecommitdiff
path: root/sol_compat.h
diff options
context:
space:
mode:
authorwez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d>2006-03-10 02:45:59 +0000
committerwez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d>2006-03-10 02:45:59 +0000
commitb83ff2ab9d2939c71d8acdf865a901cc6a58f7e3 (patch)
tree20a8873df9a44fda57bd129b64c85c1d059330bc /sol_compat.h
parentea7a8f10a4c21ef7130e22cf0a1195deebf3514d (diff)
downloadportableumem-b83ff2ab9d2939c71d8acdf865a901cc6a58f7e3.tar.gz
Initial revision
git-svn-id: https://labs.omniti.com/portableumem/trunk@2 1665872d-e22b-0410-9e5d-a57ad4215e6d
Diffstat (limited to 'sol_compat.h')
-rw-r--r--sol_compat.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/sol_compat.h b/sol_compat.h
new file mode 100644
index 0000000..254a8b1
--- /dev/null
+++ b/sol_compat.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2006 OmniTI, Inc. All rights reserved
+ * This header file distributed under the terms of the CDDL.
+ * Portions Copyright 2004 Sun Microsystems, Inc. All Rights reserved.
+ */
+#ifndef _EC_UMEM_SOL_COMPAT_H_
+#define _EC_UMEM_SOL_COMPAT_H_
+
+#if defined(__MACH__) || defined(_WIN32)
+#define NO_WEAK_SYMBOLS
+#define _umem_cache_alloc(a,b) umem_cache_alloc(a,b)
+#define _umem_cache_free(a,b) umem_cache_free(a,b)
+#define _umem_zalloc(a,b) umem_zalloc(a,b)
+#define _umem_alloc(a,b) umem_alloc(a,b)
+#define _umem_alloc_align(a,b,c) umem_alloc_align(a,b,c)
+#define _umem_free(a,b) umem_free(a,b)
+#define _umem_free_align(a,b) umem_free_align(a,b)
+#endif
+
+#ifdef _WIN32
+#define bcopy(s, d, n) memcpy(d, s, n)
+#define bzero(m, s) memset(m, 0, s)
+#endif
+
+typedef pthread_t thread_t;
+typedef pthread_mutex_t mutex_t;
+typedef pthread_cond_t cond_t;
+typedef u_int64_t hrtime_t;
+typedef uint32_t uint_t;
+typedef unsigned long ulong_t;
+typedef struct timespec timestruc_t;
+typedef long long longlong_t;
+typedef struct timespec timespec_t;
+static INLINE hrtime_t gethrtime(void) {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return (((u_int64_t)tv.tv_sec) << 32) | tv.tv_usec;
+}
+# define thr_self() pthread_self()
+static INLINE thread_t _thr_self(void) {
+ return thr_self();
+}
+#if defined(_MACH_PORT_T)
+#define CPUHINT() (pthread_mach_thread_np(pthread_self()))
+#endif
+# define thr_sigsetmask pthread_sigmask
+
+#define THR_BOUND 1
+#define THR_DETACHED 2
+#define THR_DAEMON 4
+
+static INLINE int thr_create(void *stack_base,
+ size_t stack_size, THR_RETURN (THR_API *start_func)(void*),
+ void *arg, long flags, thread_t *new_thread_ID)
+{
+ int ret;
+ pthread_attr_t attr;
+
+ pthread_attr_init(&attr);
+
+ if (flags & THR_DETACHED) {
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ }
+ ret = pthread_create(new_thread_ID, &attr, start_func, arg);
+ pthread_attr_destroy(&attr);
+ return ret;
+}
+
+
+# define mutex_init(mp, type, arg) pthread_mutex_init(mp, NULL)
+# define mutex_lock(mp) pthread_mutex_lock(mp)
+# define mutex_unlock(mp) pthread_mutex_unlock(mp)
+# define mutex_destroy(mp) pthread_mutex_destroy(mp)
+# define mutex_trylock(mp) pthread_mutex_trylock(mp)
+# define DEFAULTMUTEX PTHREAD_MUTEX_INITIALIZER
+# define DEFAULTCV PTHREAD_COND_INITIALIZER
+# define MUTEX_HELD(mp) 1 /* not really, but only used in an assert */
+
+# define cond_init(c, type, arg) pthread_cond_init(c, NULL)
+# define cond_wait(c, m) pthread_cond_wait(c, m)
+# define _cond_wait(c, m) pthread_cond_wait(c, m)
+# define cond_signal(c) pthread_cond_signal(c)
+# define cond_broadcast(c) pthread_cond_broadcast(c)
+# define cond_destroy(c) pthread_cond_destroy(c)
+# define cond_timedwait pthread_cond_timedwait
+# define _cond_timedwait pthread_cond_timedwait
+
+#ifndef RTLD_FIRST
+# define RTLD_FIRST 0
+#endif
+
+#include "ec_atomic.h"
+
+#define P2PHASE(x, align) ((x) & ((align) - 1))
+#define P2ALIGN(x, align) ((x) & -(align))
+#define P2NPHASE(x, align) (-(x) & ((align) - 1))
+#define P2ROUNDUP(x, align) (-(-(x) & -(align)))
+#define P2END(x, align) (-(~(x) & -(align)))
+#define P2PHASEUP(x, align, phase) ((phase) - (((phase) - (x)) & -(align)))
+#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1)
+#define P2SAMEHIGHBIT(x, y) (((x) ^ (y)) < ((x) & (y)))
+#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
+#define ISP2(x) (((x) & ((x) - 1)) == 0)
+
+/* beware! umem only uses these atomic adds for incrementing by 1 */
+#define atomic_add_64(lvalptr, delta) ec_atomic_inc64(lvalptr)
+#define atomic_add_32_nv(a, b) ec_atomic_inc(a)
+
+#ifndef NANOSEC
+#define NANOSEC 1000000000
+#endif
+
+#ifdef _WIN32
+#define issetugid() 0
+#else
+#define issetugid() (geteuid() == 0)
+#endif
+
+#define _sysconf(a) sysconf(a)
+#define __NORETURN __attribute__ ((noreturn))
+
+#define EC_UMEM_DUMMY_PCSTACK 1
+static INLINE int __nthreads(void)
+{
+ /* or more; just to force multi-threaded mode */
+ return 2;
+}
+
+#if (SIZEOF_VOID_P == 8)
+# define _LP64 1
+#endif
+
+#endif