RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Per Øyvind Karlsen
  Root:   /v/rpm/cvs                       Email:  pkarl...@rpm5.org
  Module: rpm                              Date:   25-Dec-2010 21:39:05
  Branch: HEAD                             Handle: 2010122520390302

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmrc.c
    rpm/rpmio               librpmio.vers lookup3.c rpmio.c

  Log:
    lookup3: fix valgrind #ifdef and perform runtime check for valgrind in
    stead.

  Summary:
    Revision    Changes     Path
    1.3521      +2  -0      rpm/CHANGES
    2.290       +4  -0      rpm/lib/rpmrc.c
    2.200       +1  -0      rpm/rpmio/librpmio.vers
    1.7         +72 -62     rpm/rpmio/lookup3.c
    1.231       +4  -0      rpm/rpmio/rpmio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3520 -r1.3521 CHANGES
  --- rpm/CHANGES       25 Dec 2010 19:31:46 -0000      1.3520
  +++ rpm/CHANGES       25 Dec 2010 20:39:03 -0000      1.3521
  @@ -1,4 +1,6 @@
   5.3.7 -> 5.4a1:
  +    - proyvind: lookup3: fix valgrind #ifdef and perform runtime check for
  +     valgrind in stead.
       - jbj: ISPRAS: upgrade to abi-compliance-checker-1.21.9.
       - jbj: ISPRAS: upgrade to api-sanity-autotest-1.11.
       - jbj: rpmdb: disable Depcache, --install and "make test" todo++.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmrc.c
  ============================================================================
  $ cvs diff -u -r2.289 -r2.290 rpmrc.c
  --- rpm/lib/rpmrc.c   10 Dec 2009 18:52:18 -0000      2.289
  +++ rpm/lib/rpmrc.c   25 Dec 2010 20:39:05 -0000      2.290
  @@ -1070,6 +1070,10 @@
   {
       int rc = 0;
   
  +#ifdef WITH_VALGRIND
  +    _running_on_valgrind = RUNNING_ON_VALGRIND;
  +#endif
  +
       if (!defaultsInitialized) {
        setDefaults();
        defaultsInitialized = 1;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.199 -r2.200 librpmio.vers
  --- rpm/rpmio/librpmio.vers   11 Oct 2010 18:39:37 -0000      2.199
  +++ rpm/rpmio/librpmio.vers   25 Dec 2010 20:39:04 -0000      2.200
  @@ -881,6 +881,7 @@
       mongo_simple_int_command;
       mongo_simple_str_command;
       mongo_update;
  +    _running_on_valgrind;
     local:
       *;
   };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/lookup3.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 lookup3.c
  --- rpm/rpmio/lookup3.c       25 Dec 2008 18:36:36 -0000      1.6
  +++ rpm/rpmio/lookup3.c       25 Dec 2010 20:39:04 -0000      1.7
  @@ -255,7 +255,7 @@
       u.ptr = key;
       if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
        const rpmuint32_t *k = (const rpmuint32_t *)key;        /* read 32-bit 
chunks */
  -#ifdef       VALGRIND
  +#ifdef       WITH_VALGRIND
        const rpmuint8_t  *k8;
   #endif
   
  @@ -279,29 +279,13 @@
         * still catch it and complain.  The masking trick does make the hash
         * noticably faster for short strings (like English words).
         */
  -#ifndef VALGRIND
  -
  -     switch (size) {
  -     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  -     case 11:        c += k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
  -     case 10:        c += k[2]&0xffff; b+=k[1]; a+=k[0]; break;
  -     case  9:        c += k[2]&0xff; b+=k[1]; a+=k[0]; break;
  -     case  8:        b += k[1]; a+=k[0]; break;
  -     case  7:        b += k[1]&0xffffff; a+=k[0]; break;
  -     case  6:        b += k[1]&0xffff; a+=k[0]; break;
  -     case  5:        b += k[1]&0xff; a+=k[0]; break;
  -     case  4:        a += k[0]; break;
  -     case  3:        a += k[0]&0xffffff; break;
  -     case  2:        a += k[0]&0xffff; break;
  -     case  1:        a += k[0]&0xff; break;
  -     case  0:        goto exit;
  -     }
  -
  -#else /* make valgrind happy */
  +#ifdef WITH_VALGRIND
  +     if(UNLIKELY(_running_on_valgrind)) {
  +     /* make valgrind happy */
   
        k8 = (const rpmuint8_t *)k;
        switch (size) {
  -     case 12:        c += k[2]; b+=k[1]; a+=k[0]     break;
  +     case 12:        c += k[2]; b+=k[1]; a+=k[0];    break;
        case 11:        c += ((rpmuint32_t)k8[10])<<16; /*...@fallthrough@*/
        case 10:        c += ((rpmuint32_t)k8[9])<<8;   /*...@fallthrough@*/
        case  9:        c += k8[8];                     /*...@fallthrough@*/
  @@ -316,6 +300,25 @@
        case  0:        goto exit;
        }
   
  +     } else {
  +#endif
  +     switch (size) {
  +     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  +     case 11:        c += k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
  +     case 10:        c += k[2]&0xffff; b+=k[1]; a+=k[0]; break;
  +     case  9:        c += k[2]&0xff; b+=k[1]; a+=k[0]; break;
  +     case  8:        b += k[1]; a+=k[0]; break;
  +     case  7:        b += k[1]&0xffffff; a+=k[0]; break;
  +     case  6:        b += k[1]&0xffff; a+=k[0]; break;
  +     case  5:        b += k[1]&0xff; a+=k[0]; break;
  +     case  4:        a += k[0]; break;
  +     case  3:        a += k[0]&0xffffff; break;
  +     case  2:        a += k[0]&0xffff; break;
  +     case  1:        a += k[0]&0xff; break;
  +     case  0:        goto exit;
  +     }
  +#ifdef WITH_VALGRIND
  +     }
   #endif /* !valgrind */
   
       } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
  @@ -465,7 +468,7 @@
       u.ptr = key;
       if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
        const rpmuint32_t *k = (const rpmuint32_t *)key;        /* read 32-bit 
chunks */
  -#ifdef       VALGRIND
  +#ifdef       WITH_VALGRIND
        const rpmuint8_t  *k8;
   #endif
   
  @@ -488,25 +491,9 @@
         * still catch it and complain.  The masking trick does make the hash
         * noticably faster for short strings (like English words).
         */
  -#ifndef VALGRIND
  -
  -     switch (size) {
  -     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  -     case 11:        c += k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
  -     case 10:        c += k[2]&0xffff; b+=k[1]; a+=k[0]; break;
  -     case  9:        c += k[2]&0xff; b+=k[1]; a+=k[0]; break;
  -     case  8:        b += k[1]; a+=k[0]; break;
  -     case  7:        b += k[1]&0xffffff; a+=k[0]; break;
  -     case  6:        b += k[1]&0xffff; a+=k[0]; break;
  -     case  5:        b += k[1]&0xff; a+=k[0]; break;
  -     case  4:        a += k[0]; break;
  -     case  3:        a += k[0]&0xffffff; break;
  -     case  2:        a += k[0]&0xffff; break;
  -     case  1:        a += k[0]&0xff; break;
  -     case  0:        goto exit;
  -     }
  -
  -#else /* make valgrind happy */
  +#ifdef WITH_VALGRIND
  +     if(UNLIKELY(_running_on_valgrind)) {
  +     /* make valgrind happy */
   
        k8 = (const rpmuint8_t *)k;
        switch (size) {
  @@ -525,6 +512,26 @@
        case  0:        goto exit;
        }
   
  +     } else {
  +#endif
  +     switch (size) {
  +     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  +     case 11:        c += k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
  +     case 10:        c += k[2]&0xffff; b+=k[1]; a+=k[0]; break;
  +     case  9:        c += k[2]&0xff; b+=k[1]; a+=k[0]; break;
  +     case  8:        b += k[1]; a+=k[0]; break;
  +     case  7:        b += k[1]&0xffffff; a+=k[0]; break;
  +     case  6:        b += k[1]&0xffff; a+=k[0]; break;
  +     case  5:        b += k[1]&0xff; a+=k[0]; break;
  +     case  4:        a += k[0]; break;
  +     case  3:        a += k[0]&0xffffff; break;
  +     case  2:        a += k[0]&0xffff; break;
  +     case  1:        a += k[0]&0xff; break;
  +     case  0:        goto exit;
  +     }
  +
  +#ifdef WITH_VALGRIND
  +     }       
   #endif /* !valgrind */
   
       } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
  @@ -668,7 +675,7 @@
       u.ptr = key;
       if (HASH_BIG_ENDIAN && ((u.i & 0x3) == 0)) {
        const rpmuint32_t *k = (const rpmuint32_t *)key;        /* read 32-bit 
chunks */
  -#ifdef       VALGRIND
  +#ifdef       WITH_VALGRIND
        const rpmuint8_t  *k8;
   #endif
   
  @@ -692,25 +699,9 @@
         * still catch it and complain.  The masking trick does make the hash
         * noticably faster for short strings (like English words).
         */
  -#ifndef VALGRIND
  -
  -     switch (size) {
  -     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  -     case 11:        c += k[2]&0xffffff00; b+=k[1]; a+=k[0]; break;
  -     case 10:        c += k[2]&0xffff0000; b+=k[1]; a+=k[0]; break;
  -     case  9:        c += k[2]&0xff000000; b+=k[1]; a+=k[0]; break;
  -     case  8:        b += k[1]; a+=k[0]; break;
  -     case  7:        b += k[1]&0xffffff00; a+=k[0]; break;
  -     case  6:        b += k[1]&0xffff0000; a+=k[0]; break;
  -     case  5:        b += k[1]&0xff000000; a+=k[0]; break;
  -     case  4:        a += k[0]; break;
  -     case  3:        a += k[0]&0xffffff00; break;
  -     case  2:        a += k[0]&0xffff0000; break;
  -     case  1:        a += k[0]&0xff000000; break;
  -     case  0:        goto exit;
  -    }
  -
  -#else  /* make valgrind happy */
  +#ifdef WITH_VALGRIND
  +     if(UNLIKELY(_running_on_valgrind)) {
  +     /* make valgrind happy */
   
        k8 = (const rpmuint8_t *)k;
        switch (size) { /* all the case statements fall through */
  @@ -727,8 +718,27 @@
        case  2:        a += ((rpmuint32_t)k8[1])<<16;  /*...@fallthrough@*/
        case  1:        a += ((rpmuint32_t)k8[0])<<24;  break;
        case  0:        goto exit;
  -    }
  +        }
   
  +     } else {
  +#endif
  +     switch (size) {
  +     case 12:        c += k[2]; b+=k[1]; a+=k[0]; break;
  +     case 11:        c += k[2]&0xffffff00; b+=k[1]; a+=k[0]; break;
  +     case 10:        c += k[2]&0xffff0000; b+=k[1]; a+=k[0]; break;
  +     case  9:        c += k[2]&0xff000000; b+=k[1]; a+=k[0]; break;
  +     case  8:        b += k[1]; a+=k[0]; break;
  +     case  7:        b += k[1]&0xffffff00; a+=k[0]; break;
  +     case  6:        b += k[1]&0xffff0000; a+=k[0]; break;
  +     case  5:        b += k[1]&0xff000000; a+=k[0]; break;
  +     case  4:        a += k[0]; break;
  +     case  3:        a += k[0]&0xffffff00; break;
  +     case  2:        a += k[0]&0xffff0000; break;
  +     case  1:        a += k[0]&0xff000000; break;
  +     case  0:        goto exit;
  +     }
  +#ifdef WITH_VALGRIND
  +     }
   #endif /* !VALGRIND */
   
       } else {                        /* need to read the key one byte at a 
time */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.230 -r1.231 rpmio.c
  --- rpm/rpmio/rpmio.c 27 Sep 2010 17:01:32 -0000      1.230
  +++ rpm/rpmio/rpmio.c 25 Dec 2010 20:39:04 -0000      1.231
  @@ -86,6 +86,10 @@
   #include <rpmsp.h>
   #include <rpmsx.h>
   
  +#ifdef WITH_VALGRIND
  +int _running_on_valgrind = 0;
  +#endif
  +
   #if defined(HAVE_LIBIO_H) && defined(_G_IO_IO_FILE_VERSION)
   #define      _USE_LIBIO      1
   #endif
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to