@@ -61,7 +61,8 @@ function build_custom_db() { | |||||
extraconfrules+=" --host=${TOOLCHAIN_PREFIX}" | extraconfrules+=" --host=${TOOLCHAIN_PREFIX}" | ||||
fi | fi | ||||
if [ "${MACOS}" -eq 1 ]; then | if [ "${MACOS}" -eq 1 ]; then | ||||
extraconfrules+=" --enable-posixmutexes" | |||||
# NOTE: this doesn't actually work.. | |||||
extraconfrules+=" --with-mutex=x86_64/gcc-assembly" | |||||
fi | fi | ||||
if [ "${WIN32}" -eq 1 ]; then | if [ "${WIN32}" -eq 1 ]; then | ||||
extraconfrules+=" --enable-mingw" | extraconfrules+=" --enable-mingw" | ||||
@@ -93,15 +94,11 @@ function build_custom_db() { | |||||
_postbuild | _postbuild | ||||
} | } | ||||
patch_file db "${DB_VERSION}" "src/dbinc/atomic.h" 's/__atomic_compare_exchange/__db_atomic_compare_exchange/' | |||||
# FIXME: db fails for macOS universal builds | |||||
if [ "${MACOS_UNIVERSAL}" -eq 0 ]; then | |||||
# FIXME: db fails to work properly under macOS, even if it builds fine | |||||
if [ "${MACOS}" -eq 0 ]; then | |||||
build_custom_db db "${DB_VERSION}" "--disable-java --disable-replication --disable-sql --disable-tcl" | build_custom_db db "${DB_VERSION}" "--disable-java --disable-replication --disable-sql --disable-tcl" | ||||
fi | fi | ||||
# --enable-posixmutexes --enable-compat185 --enable-cxx --enable-dbm --enable-stl | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
# rtaudio (download, win32 only) | # rtaudio (download, win32 only) | ||||
@@ -0,0 +1,252 @@ | |||||
--- a/dist/configure.orig 2013-09-10 01:35:02.000000000 +1000 | |||||
+++ b/dist/configure 2021-02-02 22:31:20.000000000 +1100 | |||||
@@ -21275,7 +21275,7 @@ | |||||
static lwp_cond_t ci = SHAREDCV; | |||||
lwp_mutex_t mutex = mi; | |||||
lwp_cond_t cond = ci; | |||||
- exit ( | |||||
+ return ( | |||||
_lwp_mutex_lock(&mutex) || | |||||
_lwp_mutex_unlock(&mutex)); | |||||
@@ -21305,7 +21305,7 @@ | |||||
mutex_t mutex; | |||||
cond_t cond; | |||||
int type = USYNC_PROCESS; | |||||
- exit ( | |||||
+ return ( | |||||
mutex_init(&mutex, type, NULL) || | |||||
cond_init(&cond, type, NULL) || | |||||
mutex_lock(&mutex) || | |||||
@@ -21335,7 +21335,7 @@ | |||||
mutex_t mutex; | |||||
cond_t cond; | |||||
int type = USYNC_PROCESS; | |||||
- exit ( | |||||
+ return ( | |||||
mutex_init(&mutex, type, NULL) || | |||||
cond_init(&cond, type, NULL) || | |||||
mutex_lock(&mutex) || | |||||
@@ -21370,7 +21370,7 @@ | |||||
{ | |||||
#if (defined(i386) || defined(__i386__)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21393,7 +21393,7 @@ | |||||
{ | |||||
#if (defined(x86_64) || defined(__x86_64__)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21445,7 +21445,7 @@ | |||||
#if defined(__sparc__) && defined(__GNUC__) | |||||
asm volatile ("membar #StoreStore|#StoreLoad|#LoadStore"); | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21516,7 +21516,7 @@ | |||||
msem_init(&x, 0); | |||||
msem_lock(&x, 0); | |||||
msem_unlock(&x, 0); | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21548,7 +21548,7 @@ | |||||
msem_init(&x, 0); | |||||
msem_lock(&x, 0); | |||||
msem_unlock(&x, 0); | |||||
- exit(0); | |||||
+ return (0); | |||||
; | |||||
return 0; | |||||
@@ -21600,7 +21600,7 @@ | |||||
{ | |||||
#if defined(__USLC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21731,7 +21731,7 @@ | |||||
{ | |||||
#if defined(__alpha) && defined(__DECC) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21756,7 +21756,7 @@ | |||||
{ | |||||
#if defined(__alpha) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21781,7 +21781,7 @@ | |||||
{ | |||||
#if defined(__arm__) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21806,7 +21806,7 @@ | |||||
{ | |||||
#if (defined(__mips) || defined(__mips__)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21831,7 +21831,7 @@ | |||||
{ | |||||
#if (defined(__hppa) || defined(__hppa__)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21856,7 +21856,7 @@ | |||||
{ | |||||
#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21881,7 +21881,7 @@ | |||||
{ | |||||
#if (defined(mc68020) || defined(sun3)) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21906,7 +21906,7 @@ | |||||
{ | |||||
#if defined(__MVS__) && defined(__IBMC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21931,7 +21931,7 @@ | |||||
{ | |||||
#if defined(__s390__) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21956,7 +21956,7 @@ | |||||
{ | |||||
#if defined(__ia64) && defined(__GNUC__) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -21981,7 +21981,7 @@ | |||||
{ | |||||
#if defined(_UTS) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -22464,9 +22464,9 @@ | |||||
{ | |||||
#if ((defined(i386) || defined(__i386__)) && defined(__GNUC__)) | |||||
- exit(0); | |||||
+ return (0); | |||||
#elif ((defined(x86_64) || defined(__x86_64__)) && defined(__GNUC__)) | |||||
- exit(0); | |||||
+ return (0); | |||||
#else | |||||
FAIL TO COMPILE/LINK | |||||
#endif | |||||
@@ -22491,7 +22491,7 @@ | |||||
{ | |||||
volatile unsigned val = 1; | |||||
- exit (atomic_inc_uint_nv(&val) != 2 || | |||||
+ return (atomic_inc_uint_nv(&val) != 2 || | |||||
atomic_dec_uint_nv(&val) != 1 || | |||||
atomic_cas_32(&val, 1, 3) != 3); | |||||
@@ -24192,6 +24192,11 @@ | |||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |||||
/* end confdefs.h. */ | |||||
+#include <stdio.h> | |||||
+#if HAVE_STRING_H | |||||
+#include <string.h> | |||||
+#endif | |||||
+ | |||||
int | |||||
main () | |||||
{ | |||||
@@ -24226,7 +24231,12 @@ | |||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |||||
/* end confdefs.h. */ | |||||
- main() { | |||||
+#include <stdio.h> | |||||
+#if HAVE_STRING_H | |||||
+#include <string.h> | |||||
+#endif | |||||
+ | |||||
+ int main() { | |||||
$db_cv_seq_type l; | |||||
unsigned $db_cv_seq_type u; | |||||
char buf[100]; | |||||
@@ -24309,6 +24319,9 @@ | |||||
#include <fcntl.h> | |||||
#include <sys/mman.h> | |||||
#include <signal.h> | |||||
+ #if HAVE_UNISTD_H | |||||
+ #include <unistd.h> | |||||
+ #endif | |||||
#define TEST_MMAP_BUFSIZE (16 * 1024) | |||||
#define TEST_MMAP_EXTENDSIZE (16 * 1024 * 1024) | |||||
@@ -24319,10 +24332,10 @@ | |||||
int catch_sig(sig) | |||||
int sig; | |||||
{ | |||||
- exit(1); | |||||
+ return (1); | |||||
} | |||||
- main() { | |||||
+ int main() { | |||||
const char *underlying; | |||||
unsigned gapsize; | |||||
char *base; |
@@ -0,0 +1,144 @@ | |||||
http://www.databaseusers.com/article/6047407/Bug%3A+Build+failure+on+Linux+with+clang+libc%2B%2B+(atomic+issues) | |||||
https://gist.githubusercontent.com/LnL7/5153b251fd525fe15de69b67e63a6075/raw/7778e9364679093a32dec2908656738e16b6bdcb/clang.patch | |||||
diff --git src/dbinc/atomic.h src/dbinc/atomic.h | |||||
index 6a858f7..9f338dc 100644 | |||||
--- a/src/dbinc/atomic.h | |||||
+++ b/src/dbinc/atomic.h | |||||
@@ -70,7 +70,7 @@ typedef struct { | |||||
* These have no memory barriers; the caller must include them when necessary. | |||||
*/ | |||||
#define atomic_read(p) ((p)->value) | |||||
-#define atomic_init(p, val) ((p)->value = (val)) | |||||
+#define atomic_init_db(p, val) ((p)->value = (val)) | |||||
#ifdef HAVE_ATOMIC_SUPPORT | |||||
@@ -144,7 +144,7 @@ typedef LONG volatile *interlocked_val; | |||||
#define atomic_inc(env, p) __atomic_inc(p) | |||||
#define atomic_dec(env, p) __atomic_dec(p) | |||||
#define atomic_compare_exchange(env, p, o, n) \ | |||||
- __atomic_compare_exchange((p), (o), (n)) | |||||
+ __atomic_compare_exchange_db((p), (o), (n)) | |||||
static inline int __atomic_inc(db_atomic_t *p) | |||||
{ | |||||
int temp; | |||||
@@ -176,7 +176,7 @@ static inline int __atomic_dec(db_atomic_t *p) | |||||
* http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html | |||||
* which configure could be changed to use. | |||||
*/ | |||||
-static inline int __atomic_compare_exchange( | |||||
+static inline int __atomic_compare_exchange_db( | |||||
db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) | |||||
{ | |||||
atomic_value_t was; | |||||
@@ -206,7 +206,7 @@ static inline int __atomic_compare_exchange( | |||||
#define atomic_dec(env, p) (--(p)->value) | |||||
#define atomic_compare_exchange(env, p, oldval, newval) \ | |||||
(DB_ASSERT(env, atomic_read(p) == (oldval)), \ | |||||
- atomic_init(p, (newval)), 1) | |||||
+ atomic_init_db(p, (newval)), 1) | |||||
#else | |||||
#define atomic_inc(env, p) __atomic_inc(env, p) | |||||
#define atomic_dec(env, p) __atomic_dec(env, p) | |||||
diff --git src/mp/mp_fget.c src/mp/mp_fget.c | |||||
index 16de695..d0dcc29 100644 | |||||
--- a/src/mp/mp_fget.c | |||||
+++ b/src/mp/mp_fget.c | |||||
@@ -649,7 +649,7 @@ alloc: /* Allocate a new buffer header and data space. */ | |||||
/* Initialize enough so we can call __memp_bhfree. */ | |||||
alloc_bhp->flags = 0; | |||||
- atomic_init(&alloc_bhp->ref, 1); | |||||
+ atomic_init_db(&alloc_bhp->ref, 1); | |||||
#ifdef DIAGNOSTIC | |||||
if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) { | |||||
__db_errx(env, DB_STR("3025", | |||||
@@ -955,7 +955,7 @@ alloc: /* Allocate a new buffer header and data space. */ | |||||
MVCC_MPROTECT(bhp->buf, mfp->pagesize, | |||||
PROT_READ); | |||||
- atomic_init(&alloc_bhp->ref, 1); | |||||
+ atomic_init_db(&alloc_bhp->ref, 1); | |||||
MUTEX_LOCK(env, alloc_bhp->mtx_buf); | |||||
alloc_bhp->priority = bhp->priority; | |||||
alloc_bhp->pgno = bhp->pgno; | |||||
diff --git src/mp/mp_mvcc.c src/mp/mp_mvcc.c | |||||
index 770bad8..e28cce0 100644 | |||||
--- a/src/mp/mp_mvcc.c | |||||
+++ b/src/mp/mp_mvcc.c | |||||
@@ -276,7 +276,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp) | |||||
#else | |||||
memcpy(frozen_bhp, bhp, SSZA(BH, buf)); | |||||
#endif | |||||
- atomic_init(&frozen_bhp->ref, 0); | |||||
+ atomic_init_db(&frozen_bhp->ref, 0); | |||||
if (mutex != MUTEX_INVALID) | |||||
frozen_bhp->mtx_buf = mutex; | |||||
else if ((ret = __mutex_alloc(env, MTX_MPOOL_BH, | |||||
@@ -428,7 +428,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp) | |||||
#endif | |||||
alloc_bhp->mtx_buf = mutex; | |||||
MUTEX_LOCK(env, alloc_bhp->mtx_buf); | |||||
- atomic_init(&alloc_bhp->ref, 1); | |||||
+ atomic_init_db(&alloc_bhp->ref, 1); | |||||
F_CLR(alloc_bhp, BH_FROZEN); | |||||
} | |||||
diff --git src/mp/mp_region.c src/mp/mp_region.c | |||||
index 4952030..47645f8 100644 | |||||
--- a/src/mp/mp_region.c | |||||
+++ b/src/mp/mp_region.c | |||||
@@ -245,7 +245,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) | |||||
MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0) | |||||
return (ret); | |||||
SH_TAILQ_INIT(&htab[i].hash_bucket); | |||||
- atomic_init(&htab[i].hash_page_dirty, 0); | |||||
+ atomic_init_db(&htab[i].hash_page_dirty, 0); | |||||
} | |||||
/* | |||||
@@ -302,7 +302,7 @@ no_prealloc: | |||||
} else | |||||
hp->mtx_hash = mtx_base + (i % dbenv->mp_mtxcount); | |||||
SH_TAILQ_INIT(&hp->hash_bucket); | |||||
- atomic_init(&hp->hash_page_dirty, 0); | |||||
+ atomic_init_db(&hp->hash_page_dirty, 0); | |||||
#ifdef HAVE_STATISTICS | |||||
hp->hash_io_wait = 0; | |||||
hp->hash_frozen = hp->hash_thawed = hp->hash_frozen_freed = 0; | |||||
diff --git src/mutex/mut_method.c src/mutex/mut_method.c | |||||
index 09353b0..177353c 100644 | |||||
--- a/src/mutex/mut_method.c | |||||
+++ b/src/mutex/mut_method.c | |||||
@@ -474,7 +474,7 @@ atomic_compare_exchange(env, v, oldval, newval) | |||||
MUTEX_LOCK(env, mtx); | |||||
ret = atomic_read(v) == oldval; | |||||
if (ret) | |||||
- atomic_init(v, newval); | |||||
+ atomic_init_db(v, newval); | |||||
MUTEX_UNLOCK(env, mtx); | |||||
return (ret); | |||||
diff --git src/mutex/mut_tas.c src/mutex/mut_tas.c | |||||
index 106b161..fc4de9d 100644 | |||||
--- a/src/mutex/mut_tas.c | |||||
+++ b/src/mutex/mut_tas.c | |||||
@@ -47,7 +47,7 @@ __db_tas_mutex_init(env, mutex, flags) | |||||
#ifdef HAVE_SHARED_LATCHES | |||||
if (F_ISSET(mutexp, DB_MUTEX_SHARED)) | |||||
- atomic_init(&mutexp->sharecount, 0); | |||||
+ atomic_init_db(&mutexp->sharecount, 0); | |||||
else | |||||
#endif | |||||
if (MUTEX_INIT(&mutexp->tas)) { | |||||
@@ -536,7 +536,7 @@ __db_tas_mutex_unlock(env, mutex) | |||||
F_CLR(mutexp, DB_MUTEX_LOCKED); | |||||
/* Flush flag update before zeroing count */ | |||||
MEMBAR_EXIT(); | |||||
- atomic_init(&mutexp->sharecount, 0); | |||||
+ atomic_init_db(&mutexp->sharecount, 0); | |||||
} else { | |||||
DB_ASSERT(env, sharecount > 0); | |||||
MEMBAR_EXIT(); |