]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure all data structures have 8-byte alignment - necessary for the
authordrh <drh@noemail.net>
Tue, 3 May 2005 12:30:33 +0000 (12:30 +0000)
committerdrh <drh@noemail.net>
Tue, 3 May 2005 12:30:33 +0000 (12:30 +0000)
sparc architecture and helpful on other 64-bit platforms.  Ticket #1232.
Also update some comments in build.c. (CVS 2452)

FossilOrigin-Name: d9418851cebc1605d8d62aad7987c0d61a905e81

manifest
manifest.uuid
src/btree.c
src/build.c
src/util.c

index b2473ae1b5950f330459babaf59106feb2da5f27..0e4c9fd7278ced27e4e428db5a26155a72f479f3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\sthe\spsAligned\svalue\sfrom\sthe\sBTree\sstructure\s-\sthe\spageSize\sis\snow\nalways\saligned\sto\san\s8-byte\sboundary.\s\sAdd\scomments\son\sa\sconfusing\sbit\nof\scode.\s\sTicket\s#1231.\s(CVS\s2451)
-D 2005-05-01T22:52:42
+C Make\ssure\sall\sdata\sstructures\shave\s8-byte\salignment\s-\snecessary\sfor\sthe\nsparc\sarchitecture\sand\shelpful\son\sother\s64-bit\splatforms.\s\sTicket\s#1232.\nAlso\supdate\ssome\scomments\sin\sbuild.c.\s(CVS\s2452)
+D 2005-05-03T12:30:34
 F Makefile.in 5c00d0037104de2a50ac7647a5f12769795957a3
 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -30,9 +30,9 @@ F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
 F src/alter.c 9570af388bc99471ea6e1258817fbf06e3120030
 F src/attach.c 3615dbe960cbee4aa5ea300b8a213dad36527b0f
 F src/auth.c 18c5a0befe20f3a58a41e3ddd78f372faeeefe1f
-F src/btree.c 659cbf8b9ab4fa3d33fa46f9a8d7fa60ae5d802a
+F src/btree.c 238ebc9b5c867cc7def795ef623d98ece9ec5b42
 F src/btree.h 41a71ce027db9ddee72cb43df2316bbe3a1d92af
-F src/build.c 8afb06c791adcde7787f157bbc55aeef27fb27c1
+F src/build.c 61a0beac459a495f05622132559926d88757e20c
 F src/date.c 2134ef4388256e8247405178df8a61bd60dc180a
 F src/delete.c 75b53db21aa1879d3655bbbc208007db31d58a63
 F src/experimental.c 50c1e3b34f752f4ac10c36f287db095c2b61766d
@@ -73,7 +73,7 @@ F src/tokenize.c 103cbaa932c790f540f8eceb63cd3010e117bdff
 F src/trigger.c 1a6d0c7c51b70bdc58d5068be72034071eff23ad
 F src/update.c 04ea9dd784ccfeaf38a681b3edfe3b1c4edfdda7
 F src/utf.c bda5eb85039ef16f2d17004c1e18c96e1ab0a80c
-F src/util.c 02bc2750336b021b3f10e61538f665c4b0033b5d
+F src/util.c ac74ac096cbe61fe0139f041833a47c97a2dec07
 F src/vacuum.c 84a3bebac2c79a1463b98ba35fb9fb6aa2374250
 F src/vdbe.c d2574042c44baf6b1016c61e8072dec529ac748a
 F src/vdbe.h 7f586cb6d6b57764e5aac1f87107d6a95ddce24c
@@ -279,7 +279,7 @@ F www/tclsqlite.tcl 425be741b8ae664f55cb1ef2371aab0a75109cf9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b
-P 0667eae9a97059125a77bd90452d19dc17c30a12
-R aa09f451ce42a99806e3bada16ee996b
+P 535523e1be692adc940d256a7b3d23c62a4cc947
+R a72ac68975ae652f87834c74a143990a
 U drh
-Z dd1e0985c973b9299d9ae9a3aabf02aa
+Z bc2beeb96490a6d1f455c1c7be0e1755
index a55f7fd3a2e5945338e3ee5acc88ba0db4b79939..5647fba6663f13b591de5bce64748d7148c06bf2 100644 (file)
@@ -1 +1 @@
-535523e1be692adc940d256a7b3d23c62a4cc947
\ No newline at end of file
+d9418851cebc1605d8d62aad7987c0d61a905e81
\ No newline at end of file
index 72b2dbc6098b698b405f2d5aa67f232d58e7cfce..bd66a28ce60fab297443e4278a3c923fa29e0191 100644 (file)
@@ -9,7 +9,7 @@
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: btree.c,v 1.257 2005/05/01 22:52:42 drh Exp $
+** $Id: btree.c,v 1.258 2005/05/03 12:30:34 drh Exp $
 **
 ** This file implements a external (disk-based) database using BTrees.
 ** For a detailed discussion of BTrees, refer to
 #include "os.h"
 #include <assert.h>
 
+/* Round up a number to the next larger multiple of 8.  This is used
+** to force 8-byte alignment on 64-bit architectures.
+*/
+#define ROUND8(x)   ((x+7)&~7)
+
+
 /* The following value is the maximum cell size assuming a maximum page
 ** size give above.
 */
@@ -3896,9 +3902,9 @@ static int balance_nonroot(MemPage *pPage){
   apCell = sqliteMallocRaw( 
        nMaxCells*sizeof(u8*)                           /* apCell */
      + nMaxCells*sizeof(int)                           /* szCell */
-     + sizeof(MemPage)*NB                              /* aCopy */
+     + ROUND8(sizeof(MemPage))*NB                      /* aCopy */
      + pBt->pageSize*(5+NB)                            /* aSpace */
-     + (ISAUTOVACUUM ? nMaxCells : 0)     /* aFrom */
+     + (ISAUTOVACUUM ? nMaxCells : 0)                  /* aFrom */
   );
   if( apCell==0 ){
     rc = SQLITE_NOMEM;
@@ -3906,10 +3912,13 @@ static int balance_nonroot(MemPage *pPage){
   }
   szCell = (int*)&apCell[nMaxCells];
   aCopy[0] = (u8*)&szCell[nMaxCells];
+  assert( ((aCopy[0] - (u8*)apCell) & 7)==0 ); /* 8-byte alignment required */
   for(i=1; i<NB; i++){
-    aCopy[i] = &aCopy[i-1][pBt->pageSize+sizeof(MemPage)];
+    aCopy[i] = &aCopy[i-1][pBt->pageSize+ROUND8(sizeof(MemPage))];
+    assert( ((aCopy[i] - (u8*)apCell) & 7)==0 ); /* 8-byte alignment required */
   }
-  aSpace = &aCopy[NB-1][pBt->pageSize+sizeof(MemPage)];
+  aSpace = &aCopy[NB-1][pBt->pageSize+ROUND8(sizeof(MemPage))];
+  assert( ((aSpace - (u8*)apCell) & 7)==0 ); /* 8-byte alignment required */
 #ifndef SQLITE_OMIT_AUTOVACUUM
   if( pBt->autoVacuum ){
     aFrom = &aSpace[5*pBt->pageSize];
@@ -3924,12 +3933,10 @@ static int balance_nonroot(MemPage *pPage){
   */
   for(i=0; i<nOld; i++){
     MemPage *p = apCopy[i] = (MemPage*)&aCopy[i][pBt->pageSize];
-    assert( (((long long unsigned int)p) & 7)==0 );
     p->aData = &((u8*)p)[-pBt->pageSize];
     memcpy(p->aData, apOld[i]->aData, pBt->pageSize + sizeof(MemPage));
     /* The memcpy() above changes the value of p->aData so we have to
     ** set it again. */
-    assert( (((long long unsigned int)p) & 7)==0 );
     p->aData = &((u8*)p)[-pBt->pageSize];
   }
 
index bff72c40c05582934c516a608ec559f5d3ea8643..a5c400d8d14e1d0497de7c1e717fb71d5d54c143 100644 (file)
@@ -22,7 +22,7 @@
 **     COMMIT
 **     ROLLBACK
 **
-** $Id: build.c,v 1.318 2005/03/29 03:10:59 danielk1977 Exp $
+** $Id: build.c,v 1.319 2005/05/03 12:30:34 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -266,9 +266,10 @@ static void sqliteDeleteIndex(sqlite3 *db, Index *p){
 }
 
 /*
-** Unlink the given index from its table, then remove
-** the index from the index hash table and free its memory
-** structures.
+** For the index called zIdxName which is found in the database iDb,
+** unlike that index from its Table then remove the index from
+** the index hash table and free all memory structures associated
+** with the index.
 */
 void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
   Index *pIndex;
@@ -496,7 +497,7 @@ void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
 ** is obtained from sqliteMalloc() and must be freed by the calling
 ** function.
 **
-** Tokens are really just pointers into the original SQL text and so
+** Tokens are often just pointers into the original SQL text and so
 ** are not \000 terminated and are not persistent.  The returned string
 ** is \000 terminated and is persistent.
 */
index 4f19302384e5513f5818c6547ace3220f1bada26..fc16141516e04452288b6e550f64d0c48eadbe6c 100644 (file)
@@ -14,7 +14,7 @@
 ** This file contains functions for allocating memory, comparing
 ** strings, and stuff like that.
 **
-** $Id: util.c,v 1.132 2005/03/18 14:03:15 drh Exp $
+** $Id: util.c,v 1.133 2005/05/03 12:30:34 drh Exp $
 */
 #include "sqliteInt.h"
 #include <stdarg.h>
@@ -65,9 +65,11 @@ static int memcnt = 0;
 #endif
 
 /*
-** Number of 32-bit guard words
+** Number of 32-bit guard words.  This should probably be a multiple of
+** 2 since on 64-bit machines we want the value returned by sqliteMalloc()
+** to be 8-byte aligned.
 */
-#define N_GUARD 1
+#define N_GUARD 2
 
 /*
 ** Allocate new memory and set it to zero.  Return NULL if