Ick.

WITH_VALGRIND is a compile, not a run-time, option,

And I haven't a clue why there's a change needed
for lib/rpmc.c. Presumably its for --showrc ...
... do you really think anyone cares?

And there's already a means to just set a macro,
where the display with --showrc Just Happens.

And WITH_VALGRIND turns on memory pool annotations
without which valgrind is useless.

I'd say just don't obsess like this.

Or go create 100+ external libraries, with and without
valgrind options, so the entire world, not just RPM, benefits
from squeaky clean valgrind spewage.

73 de Jeff

On Dec 25, 2010, at 3:39 PM, Per Øyvind Karlsen wrote:

>  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-...@rpm5.org

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to