# [PATCH] valgrind: do not require valgrind 3.4.0 or newer

9 messages from 2009-02-05 to 2009-02-06. Participants: Johannes Schindelin, Peter Baumann, Junio C Hamano.
Thread: https://gitlist.dev/t/17592

## Johannes Schindelin, 2009-02-05 18:34

Subject: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <b204f01577584835f1c0252c77ffbfab33442a79.1233858507u.git.johannes.schindelin@gmx.de>
URL: https://gitlist.dev/e/b204f01577584835f1c0252c77ffbfab33442a79.1233858507u.git.johannes.schindelin%40gmx.de
In-Reply-To: <cover.1233858507u.git.johannes.schindelin@gmx.de>

```
Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
feature, it is not the end of the world if that is not available.  So
play nice and use that option only when only an older version of
valgrind is available.

In the same spirit, refrain from the use of '...' in suppression
files, which is also a feature only valgrind 3.4 and newer understand.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	This patch is on top of my valgrind series.

	In related news, Mark Adler has prepared a patch for the zlib vs 
	valgrind issue which has a low impact on performance, yet keeps 
	valgrind happy.

	I fully expect this patch to hit the next zlib version.

	Note that with the current suppressions, there was only a 
	hard-to-fix issue with certain gcc compilers in conjunction with 
	-DUNALIGNED_OK -O3 flags when compiling zlib, so not many users 
	are affected anyway (ahem, except for all the Ubuntu users, ahem).

 t/valgrind/default.supp |    4 +++-
 t/valgrind/valgrind.sh  |    8 +++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/t/valgrind/default.supp b/t/valgrind/default.supp
index 5f341b8..9e013fa 100644
--- a/t/valgrind/default.supp
+++ b/t/valgrind/default.supp
@@ -38,6 +38,8 @@
 	writing-data-from-zlib-triggers-even-more-errors
 	Memcheck:Param
 	write(buf)
-	...
+	obj:/lib/ld-*.so
+	fun:write_in_full
+	fun:write_buffer
 	fun:write_loose_object
 }
diff --git a/t/valgrind/valgrind.sh b/t/valgrind/valgrind.sh
index dc92612..a77023a 100755
--- a/t/valgrind/valgrind.sh
+++ b/t/valgrind/valgrind.sh
@@ -2,11 +2,17 @@
 
 base=$(basename "$0")
 
+TRACK_ORIGINS=
+case "$(valgrind --version)" in
+valgrind-{3.[4-9],3.[1-3][0-9],[4-9],[1-3][0-9]}*)
+	TRACK_ORIGINS=--track-origins=yes
+esac
+
 exec valgrind -q --error-exitcode=126 \
 	--leak-check=no \
 	--suppressions="$GIT_VALGRIND/default.supp" \
 	--gen-suppressions=all \
-	--track-origins=yes \
+	$TRACK_ORIGINS \
 	--log-fd=4 \
 	--input-fd=4 \
 	$GIT_VALGRIND_OPTIONS \
-- 
1.6.1.1.598.g140d5

```

## Peter Baumann, 2009-02-05 19:00

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <20090205190059.GA16216@m62s10.vlinux.de>
URL: https://gitlist.dev/e/20090205190059.GA16216%40m62s10.vlinux.de
In-Reply-To: <b204f01577584835f1c0252c77ffbfab33442a79.1233858507u.git.johannes.schindelin@gmx.de>

```
On Thu, Feb 05, 2009 at 07:34:27PM +0100, Johannes Schindelin wrote:
> Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> feature, it is not the end of the world if that is not available.  So
> play nice and use that option only when only an older version of
> valgrind is available.

Reading the patch/the sentence above suggests that you actuallly ment: 

"So play nice and don't use that option when only an older version of
 valgrind is available."

Greetings,
Peter

```

## Johannes Schindelin, 2009-02-05 20:20

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <alpine.DEB.1.00.0902052120130.7491@intel-tinevez-2-302>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0902052120130.7491%40intel-tinevez-2-302
In-Reply-To: <20090205190059.GA16216@m62s10.vlinux.de>

```
Hi,

On Thu, 5 Feb 2009, Peter Baumann wrote:

> On Thu, Feb 05, 2009 at 07:34:27PM +0100, Johannes Schindelin wrote:
> > Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> > feature, it is not the end of the world if that is not available.  So
> > play nice and use that option only when only an older version of
> > valgrind is available.
> 
> Reading the patch/the sentence above suggests that you actuallly ment: 
> 
> "So play nice and don't use that option when only an older version of
>  valgrind is available."

Yes.  How did you guess?

:-)

Ciao,
Dscho

```

## Junio C Hamano, 2009-02-05 20:32

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <7vzlh0bp6f.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vzlh0bp6f.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <b204f01577584835f1c0252c77ffbfab33442a79.1233858507u.git.johannes.schindelin@gmx.de>

```
Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> feature, it is not the end of the world if that is not available.  So
> play nice and use that option only when only an older version of
> valgrind is available.

s/older/newer/?

> +TRACK_ORIGINS=
> +case "$(valgrind --version)" in
> +valgrind-{3.[4-9],3.[1-3][0-9],[4-9],[1-3][0-9]}*)
> +	TRACK_ORIGINS=--track-origins=yes
> +esac

What kind of case pattern is that?

```

## Johannes Schindelin, 2009-02-05 20:51

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <alpine.DEB.1.00.0902052150230.7491@intel-tinevez-2-302>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0902052150230.7491%40intel-tinevez-2-302
In-Reply-To: <7vzlh0bp6f.fsf@gitster.siamese.dyndns.org>

```
Hi,

On Thu, 5 Feb 2009, Junio C Hamano wrote:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> > Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> > feature, it is not the end of the world if that is not available.  So
> > play nice and use that option only when only an older version of
> > valgrind is available.
> 
> s/older/newer/?

s/only an older/a newer/  even.

> > +TRACK_ORIGINS=
> > +case "$(valgrind --version)" in
> > +valgrind-{3.[4-9],3.[1-3][0-9],[4-9],[1-3][0-9]}*)
> > +	TRACK_ORIGINS=--track-origins=yes
> > +esac
> 
> What kind of case pattern is that?

A non-working one.

Grumbles,
Dscho

```

## Johannes Schindelin, 2009-02-05 21:03

Subject: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <349b2bb9b8f5a6762cccb7834d82125ee4382436.1233867737u.git.johannes.schindelin@gmx.de>
URL: https://gitlist.dev/e/349b2bb9b8f5a6762cccb7834d82125ee4382436.1233867737u.git.johannes.schindelin%40gmx.de
In-Reply-To: <7vzlh0bp6f.fsf@gitster.siamese.dyndns.org>

```
Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
feature, it is not the end of the world if that is not available.  So
play nice and use that option only when only an older version of
valgrind is available.

In the same spirit, refrain from the use of '...' in suppression
files, which is also a feature only valgrind 3.4 and newer understand.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/valgrind/default.supp |    4 +++-
 t/valgrind/valgrind.sh  |   11 ++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/t/valgrind/default.supp b/t/valgrind/default.supp
index 5f341b8..9e013fa 100644
--- a/t/valgrind/default.supp
+++ b/t/valgrind/default.supp
@@ -38,6 +38,8 @@
 	writing-data-from-zlib-triggers-even-more-errors
 	Memcheck:Param
 	write(buf)
-	...
+	obj:/lib/ld-*.so
+	fun:write_in_full
+	fun:write_buffer
 	fun:write_loose_object
 }
diff --git a/t/valgrind/valgrind.sh b/t/valgrind/valgrind.sh
index dc92612..582b4dc 100755
--- a/t/valgrind/valgrind.sh
+++ b/t/valgrind/valgrind.sh
@@ -2,11 +2,20 @@
 
 base=$(basename "$0")
 
+TRACK_ORIGINS=
+
+VALGRIND_VERSION=$(valgrind --version)
+VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
+VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
+test 3 -gt "$VALGRIND_MAJOR" ||
+test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
+TRACK_ORIGINS=--track-origins=yes
+
 exec valgrind -q --error-exitcode=126 \
 	--leak-check=no \
 	--suppressions="$GIT_VALGRIND/default.supp" \
 	--gen-suppressions=all \
-	--track-origins=yes \
+	$TRACK_ORIGINS \
 	--log-fd=4 \
 	--input-fd=4 \
 	$GIT_VALGRIND_OPTIONS \
-- 
1.6.1.1.636.gf819e

```

## Junio C Hamano, 2009-02-06 00:12

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <7vljska0ep.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vljska0ep.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <349b2bb9b8f5a6762cccb7834d82125ee4382436.1233867737u.git.johannes.schindelin@gmx.de>

```
Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> feature, it is not the end of the world if that is not available.  So
> play nice and use that option only when only an older version of
> valgrind is available.
>
> In the same spirit, refrain from the use of '...' in suppression
> files, which is also a feature only valgrind 3.4 and newer understand.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

Thanks.

> +TRACK_ORIGINS=
> +
> +VALGRIND_VERSION=$(valgrind --version)
> +VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
> +VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
> +test 3 -gt "$VALGRIND_MAJOR" ||
> +test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
> +TRACK_ORIGINS=--track-origins=yes

It took me a while to convince myself that

	"3 > major || (3 == major && 4 > minor) || do-this"

is equivalent to

	"if (3 < major || (3 == major && 4 <= minor)) { do-this }"

which would be:

	if test 3 -lt "$VALGRIND_MAJOR" ||
           test 3 -eq "$VALGRIND_MAJOR" -a 4 -le "$VALGRIND_MINOR"
        then
		TRACK_ORIGINS=--track-origins=yes
	fi
        
or more commonly:

	if test "$VALGRIND_MAJOR" -gt 3 ||
           test "$VALGRIND_MAJOR" -eq 3 -a "$VALGRIND_MINOR" -ge 4
        then
		TRACK_ORIGINS=--track-origins=yes
	fi
        

```

## Johannes Schindelin, 2009-02-06 00:40

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <alpine.DEB.1.00.0902060139490.10279@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0902060139490.10279%40pacific.mpi-cbg.de
In-Reply-To: <7vljska0ep.fsf@gitster.siamese.dyndns.org>

```
Hi,

On Thu, 5 Feb 2009, Junio C Hamano wrote:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> > Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
> > feature, it is not the end of the world if that is not available.  So
> > play nice and use that option only when only an older version of
> > valgrind is available.
> >
> > In the same spirit, refrain from the use of '...' in suppression
> > files, which is also a feature only valgrind 3.4 and newer understand.
> >
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> 
> Thanks.
> 
> > +TRACK_ORIGINS=
> > +
> > +VALGRIND_VERSION=$(valgrind --version)
> > +VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
> > +VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
> > +test 3 -gt "$VALGRIND_MAJOR" ||
> > +test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
> > +TRACK_ORIGINS=--track-origins=yes
> 
> It took me a while to convince myself that
> 
> 	"3 > major || (3 == major && 4 > minor) || do-this"
> 
> is equivalent to
> 
> 	"if (3 < major || (3 == major && 4 <= minor)) { do-this }"
> 
> which would be:
> 
> 	if test 3 -lt "$VALGRIND_MAJOR" ||
>            test 3 -eq "$VALGRIND_MAJOR" -a 4 -le "$VALGRIND_MINOR"
>         then
> 		TRACK_ORIGINS=--track-origins=yes
> 	fi
>         
> or more commonly:
> 
> 	if test "$VALGRIND_MAJOR" -gt 3 ||
>            test "$VALGRIND_MAJOR" -eq 3 -a "$VALGRIND_MINOR" -ge 4
>         then
> 		TRACK_ORIGINS=--track-origins=yes
> 	fi

Okay.  Want me to resubmit?

Ciao,
Dscho

```

## Junio C Hamano, 2009-02-06 00:52

Subject: Re: [PATCH] valgrind: do not require valgrind 3.4.0 or newer
Message-ID: <7vd4dw9yjm.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vd4dw9yjm.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <alpine.DEB.1.00.0902060139490.10279@pacific.mpi-cbg.de>

```
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> Hi,
>
> On Thu, 5 Feb 2009, Junio C Hamano wrote:
>
>> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>> 
>> > Valgrind 3.4.0 is pretty new, and even if --track-origins is a nice
>> > feature, it is not the end of the world if that is not available.  So
>> > play nice and use that option only when only an older version of
>> > valgrind is available.
>> >
>> > In the same spirit, refrain from the use of '...' in suppression
>> > files, which is also a feature only valgrind 3.4 and newer understand.
>> >
>> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
>> 
>> Thanks.
>> 
>> > +TRACK_ORIGINS=
>> > +
>> > +VALGRIND_VERSION=$(valgrind --version)
>> > +VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
>> > +VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
>> > +test 3 -gt "$VALGRIND_MAJOR" ||
>> > +test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
>> > +TRACK_ORIGINS=--track-origins=yes
>> 
>> It took me a while to convince myself that
>> 
>> 	"3 > major || (3 == major && 4 > minor) || do-this"
>> 
>> is equivalent to
>> 
>> 	"if (3 < major || (3 == major && 4 <= minor)) { do-this }"
>> 
>> which would be:
>> 
>> 	if test 3 -lt "$VALGRIND_MAJOR" ||
>>            test 3 -eq "$VALGRIND_MAJOR" -a 4 -le "$VALGRIND_MINOR"
>>         then
>> 		TRACK_ORIGINS=--track-origins=yes
>> 	fi
>>         
>> or more commonly:
>> 
>> 	if test "$VALGRIND_MAJOR" -gt 3 ||
>>            test "$VALGRIND_MAJOR" -eq 3 -a "$VALGRIND_MINOR" -ge 4
>>         then
>> 		TRACK_ORIGINS=--track-origins=yes
>> 	fi
>
> Okay.  Want me to resubmit?

Nah, sorry for being unclear that I was only stating an observation, not
complaints.

```
