Changeset 1460 for trunk


Ignore:
Timestamp:
2013-11-09T03:17:15+01:00 (10 months ago)
Author:
moo
Message:

relocate: fix handling hash table, TODO: fix dst/src stuff

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/mod_cacher/xc_cacher.c

    r1455 r1460  
    177177    php->refcount = 0; 
    178178    stored_php = xc_processor_store_xc_entry_data_php_t(cache->shm, cache->allocator, php TSRMLS_CC); 
    179 #if 1 
     179#if 0 
    180180    { 
    181181        xc_entry_data_php_t *p = malloc(stored_php->size); 
  • trunk/processor/hashtable.m4

    r1459 r1460  
    4848    dnl }}} 
    4949    Bucket *srcBucket; 
    50     IFCOPY(`Bucket *dstBucket = NULL, *prev = NULL;') 
    51     zend_bool first = 1; 
     50    IFFIXPOINTER(`Bucket *next;') 
     51    IFRELOCATE(`Bucket *dstBucket = NULL;') 
     52    IFCOPY(`Bucket *dstBucket = NULL, *first = NULL, *last = NULL;') 
    5253    dnl only used for copy 
    5354    IFCOPY(`uint n;') 
    54     IFCALCCOPY(`size_t bucketsize;') 
     55    IFRELOCATE(`uint n;') 
     56    IFCALCCOPY(`size_t bucketSize;') 
    5557 
    5658#if defined(HARDENING_PATCH_HASH_PROTECT) && HARDENING_PATCH_HASH_PROTECT 
     
    6769    PROCESS(ulong, nNextFreeElement) 
    6870    IFCOPY(`DST(`pInternalPointer') = NULL; /* Used for element traversal */') DONE(pInternalPointer) 
    69     IFCOPY(`DST(`pListHead') = NULL;') DONE(pListHead) 
    7071#ifdef ZEND_ENGINE_2_4 
    7172    if (SRC(`nTableMask')) { 
     
    7576        DISABLECHECK(` 
    7677        for (srcBucket = SRCPTR_EX(`Bucket', SRC(`pListHead')); srcBucket != NULL; srcBucket = SRCPTR_EX(`Bucket', `srcBucket->pListNext')) { 
    77             IFCALCCOPY(`bucketsize = BUCKET_SIZE(srcBucket);') 
    78             ALLOC(dstBucket, char, bucketsize, , Bucket) 
     78            IFCALCCOPY(`bucketSize = BUCKET_SIZE(srcBucket);') 
     79            ALLOC(dstBucket, char, bucketSize, , Bucket) 
    7980            IFCOPY(` 
    8081#ifdef ZEND_ENGINE_2_4 
     
    8889                } 
    8990#else 
    90                 memcpy(dstBucket, srcBucket, bucketsize); 
     91                memcpy(dstBucket, srcBucket, bucketSize); 
    9192#endif 
    9293                n = srcBucket->h & SRC(`nTableMask'); 
     
    9899                } 
    99100            ') 
     101 
    100102            IFDPRINT(` 
    101103                INDENT() 
     
    116118            } 
    117119 
    118             if (first) { 
    119                 IFCOPY(`DST(`pListHead') = dstBucket;') 
    120                 first = 0; 
    121             } 
     120            IFCOPY(` 
     121                if (!first) { 
     122                    first = dstBucket; 
     123                } 
    122124 
    123             IFCOPY(` 
    124125                /* flat link */ 
    125                 dstBucket->pListLast = prev; 
     126                dstBucket->pListLast = last; 
    126127                dstBucket->pListNext = NULL; 
    127                 if (prev) { 
    128                     prev->pListNext = dstBucket; 
     128                if (last) { 
     129                    last->pListNext = dstBucket; 
    129130                } 
    130                 prev = dstBucket; 
    131             ') 
    132             FIXPOINTER_EX(`Bucket', `dstBucket') 
    133             IFCOPY(` 
     131                last = dstBucket; 
     132 
     133                n = srcBucket->h & SRC(`nTableMask'); 
     134                /* dstBucket into hash node chain */ 
     135                dstBucket->pLast = NULL; 
     136                dstBucket->pNext = DST(`arBuckets[n]'); 
     137                if (dstBucket->pNext) { 
     138                    dstBucket->pNext->pLast = dstBucket; 
     139                } 
    134140                DST(`arBuckets[n]') = dstBucket; 
    135141            ') 
    136142        } 
    137143        ') dnl DISABLECHECK 
     144        IFCOPY(`DST(`pListHead') = first;') DONE(pListHead) 
     145        IFCOPY(`DST(`pListTail') = dstBucket;') DONE(pListTail) 
     146 
     147        IFFIXPOINTER(` 
     148        for (n = 0; n < SRC(`nTableSize'); ++n) { 
     149            if (SRC(`arBuckets[n]')) { 
     150                next = DSTPTR_EX(`Bucket', `DST(`arBuckets[n]')'); 
     151                do { 
     152                        dstBucket = next; 
     153                        next = DSTPTR_EX(`Bucket', `next->pNext'); 
     154                        if (dstBucket->pListLast) { 
     155                            FIXPOINTER_EX(Bucket, dstBucket->pListLast) 
     156                        } 
     157                        if (dstBucket->pListNext) { 
     158                            FIXPOINTER_EX(Bucket, dstBucket->pListNext) 
     159                        } 
     160                        if (dstBucket->pNext) { 
     161                            FIXPOINTER_EX(Bucket, dstBucket->pNext) 
     162                        } 
     163                        if (dstBucket->pLast) { 
     164                            FIXPOINTER_EX(Bucket, dstBucket->pLast) 
     165                        } 
     166                } while (next); 
     167 
     168                FIXPOINTER(Bucket, arBuckets[n]) 
     169            } 
     170        } 
     171        ') 
     172        FIXPOINTER(Bucket, pListHead) 
     173        FIXPOINTER(Bucket, pListTail) 
    138174        FIXPOINTER(Bucket *, arBuckets) 
    139175#ifdef ZEND_ENGINE_2_4 
    140176    } 
    141177    else { /* if (SRC(`nTableMask')) */ 
     178        IFCOPY(`DST(`pListHead') = NULL;') DONE(pListHead) 
     179        IFCOPY(`DST(`pListTail') = NULL;') DONE(pListTail) 
    142180        DONE(arBuckets) 
    143181    } 
    144182#endif 
    145     IFCOPY(`DST(`pListTail') = dstBucket;') DONE(pListTail) 
    146183    IFCOPY(`DST(`pDestructor') = SRC(`pDestructor');') DONE(pDestructor) 
    147184    PROCESS(zend_bool, persistent) 
  • trunk/processor/head.m4

    r1458 r1460  
    8787    #define notnullable(ptr) (ptr) 
    8888#else 
    89 static inline void *notnullable(void *ptr) 
     89static inline void *notnullable(const void *ptr) 
    9090{ 
    9191    assert(ptr); 
    92     return ptr; 
     92    return (void *) ptr; 
    9393} 
    9494#endif 
  • trunk/processor/main.m4

    r1458 r1460  
    2626dnl }}} 
    2727dnl {{{ SRCPTR_EX(1:type, 2:elm) 
    28 define(`SRCPTR_EX', `IFRELOCATE(`ptradd($1 *, notnullable($2), ptrdiff)', `$2')') 
     28define(`SRCPTR_EX', `DSTPTR_EX(`$1', `$2')') 
     29dnl }}} 
     30dnl {{{ DSTPTR_EX(1:type, 2:elm) 
     31define(`DSTPTR_EX', `$2') 
    2932dnl }}} 
    3033dnl {{{ ALLOC(1:dst, 2:type, 3:count=1, 4:clean=false, 5:realtype=$2) 
     
    137140dnl }}} 
    138141dnl {{{ FIXPOINTER_EX(1:type, 2:dst) 
    139 define(`FIXPOINTER_EX', ` 
    140     IFSTORE(`$2 = ($1 *) processor->shm->handlers->to_readonly(processor->shm, (void *)$2);') 
    141     IFRELOCATE(` 
    142         pushdef(`relocatee', `patsubst($2, `dst', `src')') 
    143         relocatee = ($1 *) (((char *) relocatee) + relocatediff); 
    144         popdef(`relocatee') 
    145     ') 
    146 ') 
     142define(`FIXPOINTER_EX', `') 
    147143dnl }}} 
    148144dnl {{{ IFNOTMEMCPY 
     
    243239define(`IFCALCSTORE', `IFSTORE(`$1', `IFCALC(`$1', `$2')')') 
    244240define(`IFRESTORE', `ifelse(PROCESSOR_TYPE, `restore', `$1', `$2')') 
    245 define(`IFRELOCATE', `ifelse(PROCESSOR_TYPE, `relocate', `$1', `$2')') 
    246241define(`IFCOPY', `IFSTORE(`$1', `IFRESTORE(`$1', `$2')')') 
    247242define(`IFCALCCOPY', `IFCALC(`$1', `IFCOPY(`$1', `$2')')') 
     243define(`IFRELOCATE', `ifelse(PROCESSOR_TYPE, `relocate', `$1', `$2')') 
     244define(`IFFIXPOINTER', `IFSTORE(`$1', `IFRELOCATE(`$1', `$2')')') 
    248245define(`IFDPRINT', `ifelse(PROCESSOR_TYPE, `dprint', `$1', `$2')') 
    249246define(`IFDASM', `ifelse(PROCESSOR_TYPE, `dasm', `$1', `$2')') 
     
    262259 
    263260REDEF(`PROCESSOR_TYPE', `calc') include(srcdir`/processor/processor.m4') 
     261 
     262pushdef(`FIXPOINTER_EX', `$2 = ($1 *) processor->shm->handlers->to_readonly(processor->shm, (void *)$2);') 
    264263REDEF(`PROCESSOR_TYPE', `store') include(srcdir`/processor/processor.m4') 
     264popdef(`FIXPOINTER_EX') 
     265 
    265266REDEF(`PROCESSOR_TYPE', `restore') include(srcdir`/processor/processor.m4') 
     267 
     268define(`DSTPTR_EX', `ptradd($1 *, notnullable($2), ptrdiff)') 
     269pushdef(`FIXPOINTER_EX', `$2 = ptradd($1 *, notnullable($2), relocatediff);') 
     270define(`SRC', `DST(`$1')') 
    266271REDEF(`PROCESSOR_TYPE', `relocate') include(srcdir`/processor/processor.m4') 
     272popdef(`SRC') 
     273popdef(`FIXPOINTER_EX') 
     274popdef(`DSTPTR_EX') 
    267275 
    268276#ifdef HAVE_XCACHE_DPRINT 
  • trunk/processor/struct.m4

    r1454 r1460  
    1515        IFSTORE(  `xc_processor_t *processor, $1 *dst, const $1 * const src') 
    1616        IFRESTORE(`xc_processor_t *processor, $1 *dst, const $1 * const src') 
    17         IFRELOCATE(`$1 *const src, ptrdiff_t ptrdiff, ptrdiff_t relocatediff') 
     17        IFRELOCATE(`$1 *const dst, ptrdiff_t ptrdiff, ptrdiff_t relocatediff') 
    1818        IFDASM(`xc_dasm_t *dasm, zval *dst, const $1 * const src') 
    1919        TSRMLS_DC 
     
    149149        IFRESTORE(`processor, $6 $2, $6 $3') 
    150150        IFRELOCATE(` 
    151             ifelse(`$6', `', `SRCPTR_EX(`$1', `$3')', `$6 $3') 
     151            ifelse(`$6', `', `DSTPTR_EX(`$1', `$3')', `$6 $3') 
    152152            , ptrdiff 
    153153            , relocatediff 
Note: See TracChangeset for help on using the changeset viewer.