Re: [sqlite] [PATCH] Fix Symbol not found: _OSAtomicCompareAndSwapPtrBarrier on Mac OS X 10.4 (Tiger)

2012-08-23 Thread Richard Hipp
On Tue, Aug 21, 2012 at 8:54 PM, Dwayne Litzenberger dl...@dropbox.comwrote:

 Recent versions of SQLite fail to run on Mac OS X 10.4 (Tiger) with
 the following error message:


We don't test SQLite in MacOS 10.4, but we do test every release on MacOS
10.2.  For that platform, we add the compile-time option:

-DSQLITE_WITHOUT_ZONEMALLOC

Doing the same should clear the problem on MacOS 10.4 as well.  And using
that approach will save us from having to maintain a bunch of hard-to-test
preprocessor logic.



 $ DYLD_LIBRARY_PATH=. ./sqlite3
 dyld: lazy symbol binding failed: Symbol not found:
 _OSAtomicCompareAndSwapPtrBarrier
   Referenced from: ./libsqlite3.0.dylib
   Expected in: /usr/lib/libSystem.B.dylib

 dyld: Symbol not found: _OSAtomicCompareAndSwapPtrBarrier
   Referenced from: ./libsqlite3.0.dylib
   Expected in: /usr/lib/libSystem.B.dylib

 Trace/BPT trap

 This is because OSAtomicCompareAndSwapPtrBarrier was not introduced
 until Mac OS X 10.5 (Leopard).

 Affected versions:

 - Latest trunk (fossil 45cdc32f1e cloned from https://sqlite.org/src/)
 - SQLite 3.7.13
 - SQLite 3.7.12

 Not affected:

 - SQLite 3.7.11
 - SQLite 3.7.10
 - SQLite 3.7.9

 Build environment:

 Mac OS X SDK: MacOSX10.6.sdk

 $ xcodebuild -version
 Xcode 3.2.5
 Component versions: DevToolsCore-1763.0; DevToolsSupport-1758.0
 BuildVersion: 10M2423

 $ gcc --version
 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

 How to reproduce:

 I built SQLite on a Mac OS X 10.5 (Leopard) machine, then copied
 .libs/ to a machine running 10.4 (Tiger) and ran sqlite3 from there:

 tar xzf sqlite-autoconf-3071300.tar.gz
 mkdir bld
 cd bld
 CFLAGS='-arch ppc -arch i386 -mmacosx-version-min=10.4' \
 LDFLAGS='-arch ppc -arch i386 -mmacosx-version-min=10.4' \
 ../sqlite-autoconf-3071300/configure --without-dependency-tracking
 make
 rsync --delete -a .libs/ tigerbox:~/sqlite-scratch/
 ssh -t tigerbox cd ~/sqlite-scratch  DYLD_LIBRARY_PATH=. ./sqlite3

 I should get a regular sqlite prompt.  What I actually got was the
 Symbol not found error above.

 It looks like other people have seen this issue before[1], but it does
 not look like it's actually been fixed.

 Please apply the attached patch against the latest trunk (45cdc32f1e),
 which fixes this bug.  (You can ignore the git commit id in the patch.
  It wasn't obvious to me how to make fossil output a commit as a
 patch, so just I did a git init inside the fossil working directory
 and then worked from that.)

 Cheers,
 - Dwayne

 [1] http://sqlite.org:8080/pipermail/sqlite-users/2012-January/036184.html

 ___
 sqlite-users mailing list
 sqlite-users@sqlite.org
 http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users




-- 
D. Richard Hipp
d...@sqlite.org
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] [PATCH] Fix Symbol not found: _OSAtomicCompareAndSwapPtrBarrier on Mac OS X 10.4 (Tiger)

2012-08-21 Thread Dwayne Litzenberger
Recent versions of SQLite fail to run on Mac OS X 10.4 (Tiger) with
the following error message:

$ DYLD_LIBRARY_PATH=. ./sqlite3
dyld: lazy symbol binding failed: Symbol not found:
_OSAtomicCompareAndSwapPtrBarrier
  Referenced from: ./libsqlite3.0.dylib
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _OSAtomicCompareAndSwapPtrBarrier
  Referenced from: ./libsqlite3.0.dylib
  Expected in: /usr/lib/libSystem.B.dylib

Trace/BPT trap

This is because OSAtomicCompareAndSwapPtrBarrier was not introduced
until Mac OS X 10.5 (Leopard).

Affected versions:

- Latest trunk (fossil 45cdc32f1e cloned from https://sqlite.org/src/)
- SQLite 3.7.13
- SQLite 3.7.12

Not affected:

- SQLite 3.7.11
- SQLite 3.7.10
- SQLite 3.7.9

Build environment:

Mac OS X SDK: MacOSX10.6.sdk

$ xcodebuild -version
Xcode 3.2.5
Component versions: DevToolsCore-1763.0; DevToolsSupport-1758.0
BuildVersion: 10M2423

$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

How to reproduce:

I built SQLite on a Mac OS X 10.5 (Leopard) machine, then copied
.libs/ to a machine running 10.4 (Tiger) and ran sqlite3 from there:

tar xzf sqlite-autoconf-3071300.tar.gz
mkdir bld
cd bld
CFLAGS='-arch ppc -arch i386 -mmacosx-version-min=10.4' \
LDFLAGS='-arch ppc -arch i386 -mmacosx-version-min=10.4' \
../sqlite-autoconf-3071300/configure --without-dependency-tracking
make
rsync --delete -a .libs/ tigerbox:~/sqlite-scratch/
ssh -t tigerbox cd ~/sqlite-scratch  DYLD_LIBRARY_PATH=. ./sqlite3

I should get a regular sqlite prompt.  What I actually got was the
Symbol not found error above.

It looks like other people have seen this issue before[1], but it does
not look like it's actually been fixed.

Please apply the attached patch against the latest trunk (45cdc32f1e),
which fixes this bug.  (You can ignore the git commit id in the patch.
 It wasn't obvious to me how to make fossil output a commit as a
patch, so just I did a git init inside the fossil working directory
and then worked from that.)

Cheers,
- Dwayne

[1] http://sqlite.org:8080/pipermail/sqlite-users/2012-January/036184.html
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] [PATCH] Fix Symbol not found: _OSAtomicCompareAndSwapPtrBarrier on Mac OS X 10.4 (Tiger)

2012-08-21 Thread Dwayne Litzenberger
On Tue, Aug 21, 2012 at 5:54 PM, Dwayne Litzenberger dl...@dropbox.com wrote:
 Please apply the attached patch against the latest trunk (45cdc32f1e),
 which fixes this bug.

It looks like the mailman archives stripped the patch, so here it is
again, as text:

commit adf442e047fcf8523b43ff975be872a36e3d5b40
Author: Dwayne Litzenberger dl...@dropbox.com
Date:   Tue Aug 21 14:59:05 2012 -0700

Don't try to use OSAtomicCompareAndSwapPtrBarrier when building
for Mac OS X 10.4 and earlier.

OSAtomicCompareAndSwapPtrBarrier was introduced in Mac OS X 10.5,
so we get a
dyld error when starting on 10.4 if we build using a newer SDK.

diff --git a/src/mem1.c b/src/mem1.c
index 3578496..c42db01 100644
--- a/src/mem1.c
+++ b/src/mem1.c
@@ -68,6 +68,7 @@
 #include sys/sysctl.h
 #include malloc/malloc.h
 #include libkern/OSAtomic.h
+#include AvailabilityMacros.h
 static malloc_zone_t* _sqliteZone_;
 #define SQLITE_MALLOC(x) malloc_zone_malloc(_sqliteZone_, (x))
 #define SQLITE_FREE(x) malloc_zone_free(_sqliteZone_, (x));
@@ -235,8 +236,16 @@ static int sqlite3MemInit(void *NotUsed){
 malloc_zone_t* newzone = malloc_create_zone(4096, 0);
 malloc_set_zone_name(newzone, Sqlite_Heap);
 do{
+#if MAC_OS_X_VERSION_MIN_REQUIRED = 1050
   success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone,
  (void * volatile *)_sqliteZone_);
+#elif defined(__LP64__)
+  success = OSAtomicCompareAndSwap64Barrier((int64_t)NULL,
(int64_t)newzone,
+ (int64_t volatile *)_sqliteZone_);
+#else
+  success = OSAtomicCompareAndSwap32Barrier((int32_t)NULL,
(int32_t)newzone,
+ (int32_t volatile *)_sqliteZone_);
+#endif
 }while(!_sqliteZone_);
 if( !success ){
   /* somebody registered a zone first */
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users