[valgrind-variant] r120 committed - Add the files necessary to run `make check` in valgrind/...

1 view
Skip to first unread message

valgrind...@googlecode.com

unread,
Nov 7, 2011, 5:10:37 AM11/7/11
to valgrind-var...@googlegroups.com
Revision: 120
Author: gli...@google.com
Date: Mon Nov 7 02:08:12 2011
Log: Add the files necessary to run `make check` in valgrind/
and run the regtests in valgrind/memcheck/

http://code.google.com/p/valgrind-variant/source/detail?r=120

Added:
/trunk/valgrind/drd/tests/free_is_write.c
/trunk/valgrind/drd/tests/free_is_write.stderr.exp
/trunk/valgrind/drd/tests/free_is_write.vgtest
/trunk/valgrind/drd/tests/free_is_write2.stderr.exp
/trunk/valgrind/drd/tests/free_is_write2.vgtest
/trunk/valgrind/drd/tests/pth_detached3.c
/trunk/valgrind/drd/tests/pth_detached3.stderr.exp1
/trunk/valgrind/drd/tests/pth_detached3.stderr.exp2
/trunk/valgrind/drd/tests/pth_detached3.vgtest
/trunk/valgrind/drd/tests/threaded-fork.c
/trunk/valgrind/drd/tests/threaded-fork.stderr.exp
/trunk/valgrind/drd/tests/threaded-fork.vgtest
/trunk/valgrind/memcheck/tests/amd64/bug279698.c
/trunk/valgrind/memcheck/tests/amd64/bug279698.stderr.exp
/trunk/valgrind/memcheck/tests/amd64/bug279698.stdout.exp
/trunk/valgrind/memcheck/tests/amd64/bug279698.vgtest
/trunk/valgrind/memcheck/tests/big_blocks_freed_list.c
/trunk/valgrind/memcheck/tests/big_blocks_freed_list.stderr.exp
/trunk/valgrind/memcheck/tests/big_blocks_freed_list.vgtest
/trunk/valgrind/memcheck/tests/err_disable1.c
/trunk/valgrind/memcheck/tests/err_disable1.stderr.exp
/trunk/valgrind/memcheck/tests/err_disable1.vgtest
/trunk/valgrind/memcheck/tests/err_disable2.c
/trunk/valgrind/memcheck/tests/err_disable2.stderr.exp
/trunk/valgrind/memcheck/tests/err_disable2.vgtest
/trunk/valgrind/memcheck/tests/err_disable3.c
/trunk/valgrind/memcheck/tests/err_disable3.stderr.exp
/trunk/valgrind/memcheck/tests/err_disable3.vgtest
/trunk/valgrind/memcheck/tests/err_disable4.c
/trunk/valgrind/memcheck/tests/err_disable4.stderr.exp
/trunk/valgrind/memcheck/tests/err_disable4.vgtest
/trunk/valgrind/memcheck/tests/execve1.c
/trunk/valgrind/memcheck/tests/execve1.stderr.exp
/trunk/valgrind/memcheck/tests/execve1.stderr.exp-kfail
/trunk/valgrind/memcheck/tests/execve1.vgtest
/trunk/valgrind/memcheck/tests/holey_buffer_too_small.c
/trunk/valgrind/memcheck/tests/holey_buffer_too_small.stderr.exp
/trunk/valgrind/memcheck/tests/holey_buffer_too_small.stdout.exp
/trunk/valgrind/memcheck/tests/holey_buffer_too_small.vgtest
/trunk/valgrind/memcheck/tests/leak-delta.c
/trunk/valgrind/memcheck/tests/leak-delta.stderr.exp
/trunk/valgrind/memcheck/tests/leak-delta.vgtest
/trunk/valgrind/memcheck/tests/sbfragment.c
/trunk/valgrind/memcheck/tests/sbfragment.stderr.exp
/trunk/valgrind/memcheck/tests/sbfragment.stdout.exp
/trunk/valgrind/memcheck/tests/sbfragment.vgtest
/trunk/valgrind/memcheck/tests/writev1.c
/trunk/valgrind/memcheck/tests/writev1.stderr.exp
/trunk/valgrind/memcheck/tests/writev1.vgtest
/trunk/valgrind/none/tests/amd64/asorep.c
/trunk/valgrind/none/tests/amd64/asorep.stderr.exp
/trunk/valgrind/none/tests/amd64/asorep.stdout.exp
/trunk/valgrind/none/tests/amd64/asorep.vgtest
/trunk/valgrind/none/tests/mmap_fcntl_bug.c
/trunk/valgrind/none/tests/mmap_fcntl_bug.stderr.exp
/trunk/valgrind/none/tests/mmap_fcntl_bug.stdout.exp
/trunk/valgrind/none/tests/mmap_fcntl_bug.vgtest
/trunk/valgrind/none/tests/x86/shift_ndep.c
/trunk/valgrind/none/tests/x86/shift_ndep.stderr.exp
/trunk/valgrind/none/tests/x86/shift_ndep.stdout.exp
/trunk/valgrind/none/tests/x86/shift_ndep.vgtest
Modified:
/trunk/valgrind/memcheck/tests/filter_leak_cases_possible
/trunk/valgrind/memcheck/tests/filter_memcheck

=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/free_is_write.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,70 @@
+/* Stress test for the --free-is-write command-line option. */
+
+#include <pthread.h>
+#include <assert.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <pthread.h>
+#include <string.h>
+
+#define MALLOC_SIZE 22816
+#define THREAD_COUNT 10
+#define MALLOC_COUNT 1000
+
+static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+// 'mutex' protects 'count'.
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+static unsigned count;
+
+void* thread_func(void* arg)
+{
+ unsigned i;
+
+ for (i = 0; i < MALLOC_COUNT; ++i) {
+ void* ptr;
+
+ ptr = malloc(MALLOC_SIZE);
+ memset(ptr, 0, MALLOC_SIZE);
+ free(ptr);
+ }
+
+ pthread_mutex_lock(&mutex);
+ ++count;
+ pthread_cond_signal(&cond);
+ pthread_mutex_unlock(&mutex);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ pthread_t thread[THREAD_COUNT];
+ int result;
+ int i;
+
+ for (i = 0; i < THREAD_COUNT; i++) {
+ result = pthread_create(&thread[i], 0, thread_func, 0);
+ assert(result == 0);
+ }
+
+ pthread_mutex_lock(&mutex);
+ while (count < THREAD_COUNT && pthread_cond_wait(&cond, &mutex) == 0)
+ ;
+ pthread_mutex_unlock(&mutex);
+
+ for (i = 0; i < THREAD_COUNT; i++)
+ pthread_join(thread[i], 0);
+
+ fflush(stdout);
+
+ fprintf(stderr, "Done.\n");
+
+ return 0;
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 2
+ * End:
+ */
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/free_is_write.stderr.exp Mon Nov 7 02:08:12
2011
@@ -0,0 +1,4 @@
+
+Done.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/free_is_write.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,4 @@
+prereq: test -e free_is_write && ./supported_libpthread
+vgopts: --read-var-info=yes --free-is-write=yes --show-confl-seg=no
+prog: free_is_write
+args: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/free_is_write2.stderr.exp Mon Nov 7 02:08:12
2011
@@ -0,0 +1,4 @@
+
+Done.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/free_is_write2.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,4 @@
+prereq: test -e free_is_write && ./supported_libpthread
+vgopts: --read-var-info=yes --free-is-write=yes --check-stack-var=yes
--show-confl-seg=no
+prog: free_is_write
+args: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/pth_detached3.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,29 @@
+/* Invoke pthread_detach() with an invalid thread ID. */
+
+#include <assert.h>
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+
+static void* thread_func(void* arg)
+{
+ return 0;
+}
+
+int main(int argc, char** argv)
+{
+ pthread_t thread;
+
+ pthread_create(&thread, NULL, thread_func, NULL);
+ pthread_join(thread, NULL);
+
+ /* Invoke pthread_detach() with the thread ID of a joined thread. */
+ pthread_detach(thread);
+
+ /* Invoke pthread_detach() with an invalid thread ID. */
+ pthread_detach(thread + 1);
+
+ fprintf(stderr, "Finished.\n");
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/pth_detached3.stderr.exp1 Mon Nov 7 02:08:12
2011
@@ -0,0 +1,12 @@
+
+pthread_detach(): invalid thread ID 0x........
+ at 0x........: pthread_detach (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_detached3.c:21)
+
+pthread_detach(): invalid thread ID 0x........
+ at 0x........: pthread_detach (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_detached3.c:24)
+
+Finished.
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/pth_detached3.stderr.exp2 Mon Nov 7 02:08:12
2011
@@ -0,0 +1,14 @@
+
+pthread_detach(): invalid thread ID 0x........
+ at 0x........: vgDrd_set_joinable (drd_pthread_intercepts.c:?)
+ by 0x........: pthread_detach (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_detached3.c:21)
+
+pthread_detach(): invalid thread ID 0x........
+ at 0x........: vgDrd_set_joinable (drd_pthread_intercepts.c:?)
+ by 0x........: pthread_detach (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_detached3.c:24)
+
+Finished.
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/pth_detached3.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,2 @@
+prereq: ./supported_libpthread
+prog: pth_detached3
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/threaded-fork.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,55 @@
+/* fork a process that has created a detached thread. */
+
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+
+static void *threadmain(void *dummy)
+{
+ sleep((unsigned long)dummy);
+ return NULL;
+}
+
+int main(int argc, char **argv)
+{
+ int ctr;
+ pid_t childpid;
+ pthread_t childthread;
+ void *res;
+ int status;
+
+ pthread_create(&childthread, NULL, threadmain, (void *)2);
+ pthread_detach(childthread);
+
+ childpid = fork();
+ switch (childpid) {
+ case 0:
+ pthread_create(&childthread, NULL, threadmain, 0);
+ pthread_join(childthread, &res);
+ exit(0);
+ break;
+ case -1:
+ perror("FAILED: fork failed\n");
+ break;
+ default:
+ break;
+ }
+
+ ctr = 0;
+ while (waitpid(childpid, &status, 0) != childpid) {
+ sleep(1);
+ ctr++;
+ if (ctr >= 10) {
+ fprintf(stderr, "FAILED - timeout waiting for child\n");
+ return 0;
+ }
+ }
+
+ fprintf(stderr, "PASS\n");
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/threaded-fork.stderr.exp Mon Nov 7 02:08:12
2011
@@ -0,0 +1,6 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+PASS
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/drd/tests/threaded-fork.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,2 @@
+prereq: ./supported_libpthread
+prog: threaded-fork
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/amd64/bug279698.c Mon Nov 7 02:08:12
2011
@@ -0,0 +1,27 @@
+/* A very trivial test for undefinedness propagation through
+ saturating narrowing. Obviously need a much more thorough test.
+*/
+#include <stdio.h>
+#include <assert.h>
+#include "../../memcheck.h"
+int main()
+{
+ unsigned char data[32], vbits[32];
+ __asm__ __volatile__
+ ("movdqu (%0), %%xmm0 \n"
+ "packuswb %%xmm0, %%xmm0 \n"
+ "movdqu %%xmm0, 16(%0) \n"
+ ::"r"(data)
+ :"memory","xmm0"
+ );
+ unsigned int res =
+ VALGRIND_GET_VBITS( data, vbits, 32 );
+ assert(res == 1); /* 1 == success */
+ int i, j;
+ for(i=0; i<2; i++) {
+ for(j=0; j<16; j++)
+ printf("%02x ", vbits[i*16+j]);
+ printf("\n");
+ }
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/amd64/bug279698.stdout.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,2 @@
+ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/amd64/bug279698.vgtest Mon Nov 7
02:08:12 2011
@@ -0,0 +1,2 @@
+prog: bug279698
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/big_blocks_freed_list.c Mon Nov 7
02:08:12 2011
@@ -0,0 +1,57 @@
+#include <stdlib.h>
+/* To be run with --freelist-vol=1000000 --freelist-big-blocks=50000 */
+static void jumped(void)
+{
+ ;
+}
+int main(int argc, char *argv[])
+{
+ char *semi_big = NULL;
+ char *big = NULL;
+ char *small = NULL;
+ char *other_small = NULL;
+ int i;
+ int j;
+
+ /* Verify that access via a dangling pointer to a big block bigger than
+ the free list is found by memcheck (still on the free list). */
+ semi_big = malloc (900000);
+ big = malloc (1000001);
+ free(semi_big);
+ free(big);
+ if (big[1000] > 0x0) jumped();
+ if (semi_big[1000] > 0x0) jumped();
+
+ /* Then verify that dangling pointers for small blocks is not hampered
+ by doing big alloc/free. */
+ small = malloc (10000);
+ free(small);
+
+ /* We should still have a nice error msg for the semi_big
+ but not for the big block, which has been removed from the free list
+ with the malloc of small above. */
+ if (big[2000] > 0x0) jumped();
+ if (semi_big[2000] > 0x0) jumped();
+
+ big = NULL;
+
+ {
+ big = malloc (1000001);
+ free(big);
+ if (small[10] > 0x0) jumped();
+
+ /* Do not common up the below in a loop. We
+ want a different error/stack trace for each of
+ these. */
+ if (big[10] > 0x0) jumped();
+ }
+
+
+ for (i = 0; i < 100; i++) {
+ other_small = malloc(10000);
+ for (j = 0; j < 10000; j++)
+ other_small[j] = 0x1;
+ }
+ if (small[10] > 0x0) jumped();
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/big_blocks_freed_list.stderr.exp Mon
Nov 7 02:08:12 2011
@@ -0,0 +1,50 @@
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:22)
+ Address 0x........ is 1,000 bytes inside a block of size 1,000,001 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:21)
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:23)
+ Address 0x........ is 1,000 bytes inside a block of size 900,000 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:20)
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:33)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:34)
+ Address 0x........ is 2,000 bytes inside a block of size 900,000 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:20)
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:41)
+ Address 0x........ is 10 bytes inside a block of size 10,000 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:28)
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:46)
+ Address 0x........ is 10 bytes inside a block of size 1,000,001 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:40)
+
+Invalid read of size 1
+ at 0x........: main (big_blocks_freed_list.c:55)
+ Address 0x........ is 10 bytes inside a block of size 10,000 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (big_blocks_freed_list.c:28)
+
+
+HEAP SUMMARY:
+ in use at exit: 1,000,000 bytes in 100 blocks
+ total heap usage: 104 allocs, 4 frees, 3,910,002 bytes allocated
+
+For a detailed leak analysis, rerun with: --leak-check=full
+
+For counts of detected and suppressed errors, rerun with: -v
+ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/big_blocks_freed_list.vgtest Mon Nov 7
02:08:12 2011
@@ -0,0 +1,2 @@
+prog: big_blocks_freed_list
+vgopts: --freelist-vol=1000000 --freelist-big-blocks=50000
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable1.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,75 @@
+
+/* Test simple use of the disable/enable macros. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+ // Spook gcc into believing mysterious bad things are
+ // happening behind its back, and that 'c' is definitely
+ // used in some (unknown) way.
+ __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+ usechar( block[5] );
+}
+
+int main ( void )
+{
+ block = malloc(10);
+ free(block);
+
+ fprintf(stderr, "\n--------- SIMPLE TEST ---------\n\n");
+ fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n");
+
+ err();
+
+ fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n");
+ VALGRIND_DISABLE_ERROR_REPORTING;
+
+ err();
+
+ fprintf(stderr, "\n--------- re-enabled (expect 1) ---------\n\n");
+ VALGRIND_ENABLE_ERROR_REPORTING;
+
+ err();
+
+
+
+ fprintf(stderr, "\n--------- MULTI-LEVEL TEST (expect 2) ---------\n\n");
+
+ // 4 times
+ VALGRIND_DISABLE_ERROR_REPORTING;
+ VALGRIND_DISABLE_ERROR_REPORTING;
+ VALGRIND_DISABLE_ERROR_REPORTING;
+ VALGRIND_DISABLE_ERROR_REPORTING; // lev = 4
+
+ // now gradually undo them until an error appears
+ err(); // hidden
+
+ VALGRIND_ENABLE_ERROR_REPORTING; // lev = 3
+ err(); // hidden
+
+ VALGRIND_ENABLE_ERROR_REPORTING; // lev = 2
+ err(); // hidden
+
+ VALGRIND_ENABLE_ERROR_REPORTING; // lev = 1
+ err(); // hidden
+
+ VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0
+ err(); // visible
+
+ VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0 (won't go down further)
+ err(); // visible
+
+ fprintf(stderr, "\n--------- MULTI-LEVEL TEST end ---------\n\n");
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable1.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,46 @@
+
+--------- SIMPLE TEST ---------
+
+
+--------- enabled (expect 1) ---------
+
+Invalid read of size 1
+ at 0x........: err (err_disable1.c:21)
+ by 0x........: main (err_disable1.c:32)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable1.c:27)
+
+
+--------- disabled (expect 0) ---------
+
+
+--------- re-enabled (expect 1) ---------
+
+Invalid read of size 1
+ at 0x........: err (err_disable1.c:21)
+ by 0x........: main (err_disable1.c:42)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable1.c:27)
+
+
+--------- MULTI-LEVEL TEST (expect 2) ---------
+
+Invalid read of size 1
+ at 0x........: err (err_disable1.c:21)
+ by 0x........: main (err_disable1.c:67)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable1.c:27)
+
+Invalid read of size 1
+ at 0x........: err (err_disable1.c:21)
+ by 0x........: main (err_disable1.c:70)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable1.c:27)
+
+
+--------- MULTI-LEVEL TEST end ---------
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable1.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,2 @@
+prog: err_disable1
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable2.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,42 @@
+
+/* Test that we get a complaint if a thread exits with error reporting
+ disabled. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+ // Spook gcc into believing mysterious bad things are
+ // happening behind its back, and that 'c' is definitely
+ // used in some (unknown) way.
+ __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+ usechar( block[5] );
+}
+
+int main ( void )
+{
+ block = malloc(10);
+ free(block);
+
+ fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n");
+
+ err();
+
+ fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n");
+ VALGRIND_DISABLE_ERROR_REPORTING;
+
+ err();
+
+ fprintf(stderr, "\n--------- exiting (expect complaint) ---------\n\n");
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable2.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,19 @@
+
+--------- enabled (expect 1) ---------
+
+Invalid read of size 1
+ at 0x........: err (err_disable2.c:22)
+ by 0x........: main (err_disable2.c:32)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable2.c:28)
+
+
+--------- disabled (expect 0) ---------
+
+
+--------- exiting (expect complaint) ---------
+
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable2.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,2 @@
+prog: err_disable2
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable3.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,63 @@
+
+/* Check that a child thread doesn't inherit its parent's disablement
+ status. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <pthread.h>
+#include <unistd.h> // sleep
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+ // Spook gcc into believing mysterious bad things are
+ // happening behind its back, and that 'c' is definitely
+ // used in some (unknown) way.
+ __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+ usechar( block[5] );
+}
+
+void* child_fn ( void* arg )
+{
+ fprintf(stderr, "\n--------- c: start (expect 1) ---------\n\n");
+ err();
+ fprintf(stderr, "\n--------- c: end ---------\n\n");
+ return NULL;
+}
+
+int main ( void )
+{
+ int r;
+ pthread_t child;
+
+ block = malloc(10);
+ free(block);
+
+ fprintf(stderr, "\n--------- p: disabling errors (expect 0)
---------\n\n");
+
+ VALGRIND_DISABLE_ERROR_REPORTING;
+ err();
+
+ fprintf(stderr, "\n--------- p: creating child ---------\n\n");
+
+ r = pthread_create(&child, NULL, child_fn, NULL);
+ assert(!r);
+ sleep(1); // let the child run first (determinism fix)
+ fprintf(stderr, "\n--------- p: join child ---------\n\n");
+ r = pthread_join(child, NULL);
+ assert(!r);
+
+ fprintf(stderr, "\n--------- p: re_enabled (expect 1) ---------\n\n");
+ VALGRIND_ENABLE_ERROR_REPORTING;
+ err();
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable3.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,35 @@
+
+--------- p: disabling errors (expect 0) ---------
+
+
+--------- p: creating child ---------
+
+
+--------- c: start (expect 1) ---------
+
+Thread 2:
+Invalid read of size 1
+ at 0x........: err (err_disable3.c:25)
+ by 0x........: child_fn (err_disable3.c:31)
+ ...
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable3.c:42)
+
+
+--------- c: end ---------
+
+
+--------- p: join child ---------
+
+
+--------- p: re_enabled (expect 1) ---------
+
+Thread 1:
+Invalid read of size 1
+ at 0x........: err (err_disable3.c:25)
+ by 0x........: main (err_disable3.c:60)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (err_disable3.c:42)
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable3.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,2 @@
+prog: err_disable3
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable4.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,128 @@
+
+/* Check that recycling thread slots doesn't cause new threads to
+ inherit the disablement status of the previous thread to occupy
+ that slot.
+
+ 1. Create N threads, disable error reporting in them, and get them
+ all to exit (join with them). That creates N thread slots that
+ were vacated by threads with error reporting disabled. There
+ should be N complaints about threads exiting with errors
+ disabled.
+
+ 2. Create N new threads and get them to wait at a barrier.
+
+ 3. Let them all go past the barrier and call err(). There
+ should be N resulting error reports.
+
+ 4. Join with the N threads.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <pthread.h>
+#include <semaphore.h>
+#include <limits.h> /* PTHREAD_STACK_MIN */
+#include "../include/valgrind.h"
+
+char* block = NULL;
+sem_t sem;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+ // Spook gcc into believing mysterious bad things are
+ // happening behind its back, and that 'c' is definitely
+ // used in some (unknown) way.
+ __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+ usechar( block[5] );
+}
+
+void* child_fn_1 ( void* arg )
+{
+ // Disable error reporting, then wait to exit
+ VALGRIND_DISABLE_ERROR_REPORTING;
+ int r = sem_wait(&sem); assert(!r);
+ return NULL;
+}
+
+void* child_fn_2 ( void* arg )
+{
+ // make an error, then wait to exit
+ err();
+ int r = sem_wait(&sem); assert(!r);
+ return NULL;
+}
+
+#define NTHREADS 498 // VG_N_THREADS - 2
+
+int main ( void )
+{
+ int r, i;
+ pthread_t child[NTHREADS];
+
+ block = malloc(10);
+ free(block);
+
+ // part 1
+ fprintf(stderr, "\n-------- Letting %d threads exit "
+ "w/ errs disabled ------\n\n",
+ NTHREADS);
+
+ // set up the semaphore
+ r = sem_init(&sem, 0, 0); assert(!r);
+
+ pthread_attr_t attr;
+ r = pthread_attr_init(&attr); assert(!r);
+ r = pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);
+
+ // create N threads to do child_fn_1 ...
+ for (i = 0; i < NTHREADS; i++) {
+ r = pthread_create(&child[i], &attr, child_fn_1, NULL);
+ assert(!r);
+ }
+
+ // let them all exit
+ for (i = 0; i < NTHREADS; i++) {
+ r = sem_post(&sem); assert(!r);
+ }
+
+ // join
+ for (i = 0; i < NTHREADS; i++) {
+ r = pthread_join(child[i], NULL); assert(!r);
+ }
+
+ // part 2
+
+ fprintf(stderr, "\n-------- Letting %d threads make an error "
+ "------\n\n",
+ NTHREADS);
+ // semaphore is already back at zero
+
+ // create N threads to do child_fn_2 ...
+ for (i = 0; i < NTHREADS; i++) {
+ r = pthread_create(&child[i], &attr, child_fn_2, NULL);
+ assert(!r);
+ }
+
+ // let them all exit
+ for (i = 0; i < NTHREADS; i++) {
+ r = sem_post(&sem); assert(!r);
+ }
+
+ // join
+ for (i = 0; i < NTHREADS; i++) {
+ r = pthread_join(child[i], NULL); assert(!r);
+ }
+
+ // Print the final error counts. There need to be 498 errors
+ // in 1 context. Anything else, and something is not right.
+ int nerrors = VALGRIND_COUNT_ERRORS;
+ fprintf(stderr, "\n-------- Got %d errors (expected %d ==> %s)
------\n\n",
+ nerrors, NTHREADS, nerrors == NTHREADS ? "PASS" : "FAIL" );
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable4.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,1512 @@
+
+-------- Letting 498 threads exit w/ errs disabled ------
+
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/err_disable4.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,6 @@
+prog: err_disable4
+vgopts: -q --num-callers=3
+stderr_filter: ../../helgrind/tests/filter_stderr
+## This is so as to get rid of the "Thread #" lines, which
+## otherwise perturb the output due to differences in
+## thread scheduling between runs.
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/execve1.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,13 @@
+#include <unistd.h>
+
+int main(void)
+{
+ char* null_filename = NULL;
+ char* bad[2] = { (char*)1, NULL };
+ char* good[1] = { NULL };
+
+ execve(null_filename, bad, bad);
+ execve("/bin/true", good, good);
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/execve1.stderr.exp Mon Nov 7 02:08:12
2011
@@ -0,0 +1,15 @@
+Syscall param execve(filename) points to unaddressable byte(s)
+ ...
+ by 0x........: main (execve1.c:9)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param execve(argv[i]) points to unaddressable byte(s)
+ ...
+ by 0x........: main (execve1.c:9)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param execve(envp[i]) points to unaddressable byte(s)
+ ...
+ by 0x........: main (execve1.c:9)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/execve1.stderr.exp-kfail Mon Nov 7
02:08:12 2011
@@ -0,0 +1,12 @@
+Syscall param execve(filename) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param execve(argv[i]) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param execve(envp[i]) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/execve1.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,2 @@
+prog: execve1
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/holey_buffer_too_small.c Mon Nov 7
02:08:12 2011
@@ -0,0 +1,43 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../memcheck.h"
+
+/* This test checks that VALGRIND_CHECK_MEM_IS_DEFINED correctly
+ reports two errors when presented with a buffer which contains both
+ undefined data and some out of range component(s), and the
+ undefined data appears before the out of range components. Should
+ report 5 errors in total: the first test should report 2, the rest
+ 1 each. */
+
+int main ( void )
+{
+ char* a;
+
+ fprintf(stderr, "\n---- part defined, address error at end ----\n\n");
+ a = malloc(8);
+ a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
+ free(a);
+
+ fprintf(stderr, "\n---- part defined, address error at start ----\n\n");
+ a = malloc(8);
+ a[0] = a[1] = a[2] = a[3] = a[6] = a[7] = 'x';
+ VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
+ free(a);
+
+ fprintf(stderr, "\n---- fully defined, address error at end ----\n\n");
+ a = malloc(8);
+ a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
+ VALGRIND_CHECK_MEM_IS_DEFINED(a, 9);
+ free(a);
+
+ fprintf(stderr, "\n---- fully defined, address error at start
----\n\n");
+ a = malloc(8);
+ a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 'x';
+ VALGRIND_CHECK_MEM_IS_DEFINED(a-1, 9);
+ free(a);
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/holey_buffer_too_small.stderr.exp Mon
Nov 7 02:08:12 2011
@@ -0,0 +1,45 @@
+
+---- part defined, address error at end ----
+
+Uninitialised byte(s) found during client check request
+ at 0x........: main (holey_buffer_too_small.c:21)
+ Address 0x........ is 4 bytes inside a block of size 8 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:19)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:19)
+
+Unaddressable byte(s) found during client check request
+ at 0x........: main (holey_buffer_too_small.c:21)
+ Address 0x........ is 0 bytes after a block of size 8 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:19)
+
+
+---- part defined, address error at start ----
+
+Unaddressable byte(s) found during client check request
+ at 0x........: main (holey_buffer_too_small.c:27)
+ Address 0x........ is 1 bytes before a block of size 8 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:25)
+
+
+---- fully defined, address error at end ----
+
+Unaddressable byte(s) found during client check request
+ at 0x........: main (holey_buffer_too_small.c:33)
+ Address 0x........ is 0 bytes after a block of size 8 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:31)
+
+
+---- fully defined, address error at start ----
+
+Unaddressable byte(s) found during client check request
+ at 0x........: main (holey_buffer_too_small.c:39)
+ Address 0x........ is 1 bytes before a block of size 8 alloc'd
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: main (holey_buffer_too_small.c:37)
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/holey_buffer_too_small.vgtest Mon Nov 7
02:08:12 2011
@@ -0,0 +1,2 @@
+prog: holey_buffer_too_small
+vgopts: -q --track-origins=yes
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/leak-delta.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "../memcheck.h"
+#include "leak.h"
+
+char *b10;
+char *b21;
+char *b32_33[2];
+static void breakme() {};
+void f(void)
+{
+ int i;
+
+ b10 = malloc (10);
+
+ fprintf(stderr, "expecting details 10 bytes reachable\n");
fflush(stderr); breakme();
+ VALGRIND_DO_LEAK_CHECK;
+
+ fprintf(stderr, "expecting to have NO details\n"); fflush(stderr);
breakme();
+ VALGRIND_DO_ADDED_LEAK_CHECK;
+
+ b10--; // lose b10
+ b21 = malloc (21);
+ fprintf(stderr, "expecting details +10 bytes lost, +21 bytes
reachable\n"); fflush(stderr); breakme();
+ VALGRIND_DO_ADDED_LEAK_CHECK;
+
+ for (i = 0; i < 2; i ++)
+ b32_33[i] = malloc (32+i);
+ fprintf(stderr, "expecting details +65 bytes reachable\n");
fflush(stderr); breakme();
+ VALGRIND_DO_ADDED_LEAK_CHECK;
+
+ fprintf(stderr, "expecting to have NO details\n"); fflush(stderr);
breakme();
+ VALGRIND_DO_ADDED_LEAK_CHECK;
+
+ b10++;
+ fprintf(stderr, "expecting details +10 bytes reachable\n");
fflush(stderr); breakme();
+ VALGRIND_DO_ADDED_LEAK_CHECK;
+
+ b10--;
+ fprintf(stderr, "expecting details -10 bytes reachable, +10 bytes
lost\n"); fflush(stderr); breakme();
+ VALGRIND_DO_CHANGED_LEAK_CHECK;
+
+ b10++;
+ fprintf(stderr, "expecting details -10 bytes lost, +10 bytes
reachable\n"); fflush(stderr); breakme();
+ VALGRIND_DO_CHANGED_LEAK_CHECK;
+
+ b32_33[0]--;
+ fprintf(stderr, "expecting details 32 (+32) bytes lost, 33 (-32) bytes
reachable\n"); fflush(stderr); breakme();
+ VALGRIND_DO_CHANGED_LEAK_CHECK;
+
+ fprintf(stderr, "finished\n");
+}
+
+int main(void)
+{
+ DECLARE_LEAK_COUNTERS;
+
+ GET_INITIAL_LEAK_COUNTS;
+
+ f(); // see leak-cases.c
+
+
+ GET_FINAL_LEAK_COUNTS;
+
+ PRINT_LEAK_COUNTS(stderr);
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/leak-delta.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,89 @@
+expecting details 10 bytes reachable
+10 bytes in 1 blocks are still reachable in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+expecting to have NO details
+expecting details +10 bytes lost, +21 bytes reachable
+10 (+10) bytes in 1 (+1) blocks are definitely lost in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+21 (+21) bytes in 1 (+1) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:23)
+ by 0x........: main (leak-delta.c:60)
+
+expecting details +65 bytes reachable
+65 (+65) bytes in 2 (+2) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:28)
+ by 0x........: main (leak-delta.c:60)
+
+expecting to have NO details
+expecting details +10 bytes reachable
+10 (+10) bytes in 1 (+1) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+expecting details -10 bytes reachable, +10 bytes lost
+0 (-10) bytes in 0 (-1) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+10 (+10) bytes in 1 (+1) blocks are definitely lost in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+expecting details -10 bytes lost, +10 bytes reachable
+0 (-10) bytes in 0 (-1) blocks are definitely lost in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+10 (+10) bytes in 1 (+1) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+expecting details 32 (+32) bytes lost, 33 (-32) bytes reachable
+32 (+32) bytes in 1 (+1) blocks are definitely lost in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:28)
+ by 0x........: main (leak-delta.c:60)
+
+33 (-32) bytes in 1 (-1) blocks are still reachable in loss record ...
of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:28)
+ by 0x........: main (leak-delta.c:60)
+
+finished
+leaked: 32 bytes in 1 blocks
+dubious: 0 bytes in 0 blocks
+reachable: 64 bytes in 3 blocks
+suppressed: 0 bytes in 0 blocks
+10 bytes in 1 blocks are still reachable in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:14)
+ by 0x........: main (leak-delta.c:60)
+
+21 bytes in 1 blocks are still reachable in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:23)
+ by 0x........: main (leak-delta.c:60)
+
+32 bytes in 1 blocks are definitely lost in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:28)
+ by 0x........: main (leak-delta.c:60)
+
+33 bytes in 1 blocks are still reachable in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-delta.c:28)
+ by 0x........: main (leak-delta.c:60)
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/leak-delta.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,2 @@
+prog: leak-delta
+vgopts: -q --leak-check=yes --show-reachable=yes --leak-resolution=high
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/sbfragment.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,104 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "../../config.h"
+#if defined(HAVE_MALLINFO)
+#include <malloc.h>
+#endif
+
+#define BIGINCREASE 32000
+int debug = 0;
+
+void stats(char *msg)
+{
+#if defined(HAVE_MALLINFO)
+ struct mallinfo mallinfo_result;
+ mallinfo_result = mallinfo();
+#endif
+
+ /* from /usr/include/malloc.h */
+ printf("%s\n", msg);
+
+#if defined(HAVE_MALLINFO)
+ printf("%10d int arena; /* non-mmapped space allocated from system
*/\n", mallinfo_result.arena);
+ printf("%10d int ordblks; /* number of free chunks */\n",
mallinfo_result.ordblks);
+ printf("%10d int smblks; /* number of fastbin blocks */\n",
mallinfo_result.smblks);
+ printf("%10d int hblks; /* number of mmapped regions */\n",
mallinfo_result.hblks);
+ printf("%10d int hblkhd; /* space in mmapped regions */\n",
mallinfo_result.hblkhd);
+ printf("%10d int usmblks; /* maximum total allocated space */\n",
mallinfo_result.usmblks);
+ printf("%10d int fsmblks; /* space available in freed fastbin blocks
*/\n", mallinfo_result.fsmblks);
+ printf("%10d int uordblks; /* total allocated space */\n",
mallinfo_result.uordblks);
+ printf("%10d int fordblks; /* total free space */\n",
mallinfo_result.fordblks);
+ printf("%10d int keepcost; /* top-most, releasable (via malloc_trim)
space */\n", mallinfo_result.keepcost);
+ printf("\n");
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+
+ char *big = NULL;
+
+ char *newbig;
+ int malloc_failure = 0;
+ unsigned long bigsize = 8; // current size of the (reallocated) big
block.
+ int i;
+ int loop;
+
+ // two optional arguments: [nr of loop] [debug]
+ if (argc > 1)
+ loop = atoi(argv[1]);
+ else
+ loop = 3000;
+
+ if (argc > 2)
+ debug = 1;
+
+ bigsize += BIGINCREASE;
+ big = malloc (bigsize);
+ if (big == NULL)
+ printf ("failure %d could not allocate size %lu\n",
+ ++malloc_failure, bigsize);
+ if (debug)
+ printf("big 0x%p\n", big);
+
+ for (i = 0; i < loop; i++)
+ {
+ bigsize += BIGINCREASE;
+ newbig = malloc(bigsize);
+ if (newbig == NULL)
+ printf ("failure %d could not allocate size %lu\n",
+ ++malloc_failure, bigsize);
+ free (big);
+ big = newbig;
+ if (debug)
+ printf("big 0x%p\n", big);
+ }
+
+ printf ("after %d loops, last size block requested %lu\n", loop,
bigsize);
+ // verify if superblock fragmentation occured
+ // We consider that an arena of up to 3 times more than bigsize is ok.
+ {
+#if defined(HAVE_MALLINFO)
+ struct mallinfo mallinfo_result;
+ mallinfo_result = mallinfo();
+ // Under valgrind, hblkhd is 0 : all the space is in arena.
+ // Under native linux, some space is counted hblkhd.
+ if (malloc_failure > 0)
+ printf ("%d mallocs failed, below output is doubful\n",
malloc_failure);
+ if (mallinfo_result.arena + mallinfo_result.hblkhd > 3 * bigsize)
+ printf("unexpected heap fragmentation %lu\n",
+ (unsigned long) mallinfo_result.arena
+ + (unsigned long) mallinfo_result.hblkhd);
+ else
+#endif
+ printf("reasonable heap usage\n");
+ }
+
+ if (debug)
+ stats ("before freeing last block");
+ free (big);
+ if (debug)
+ stats ("after freeing last block");
+
+ return 0;
+}
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/sbfragment.stderr.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,10 @@
+
+
+HEAP SUMMARY:
+ in use at exit: ... bytes in ... blocks
+ total heap usage: ... allocs, ... frees, ... bytes allocated
+
+For a detailed leak analysis, rerun with: --leak-check=full
+
+For counts of detected and suppressed errors, rerun with: -v
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/sbfragment.stdout.exp Mon Nov 7
02:08:12 2011
@@ -0,0 +1,2 @@
+after 3000 loops, last size block requested 96032008
+reasonable heap usage
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/sbfragment.vgtest Mon Nov 7 02:08:12
2011
@@ -0,0 +1,2 @@
+prog: sbfragment
+stderr_filter: filter_allocs
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/writev1.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+
+#define K_1 8192
+#define NBUFS 2
+#define CHUNK K_1 /* single chunk */
+#define MAX_IOVEC 2
+#define DATA_FILE "writev_data_file"
+
+static char buf1[K_1];
+static char buf2[K_1];
+static char *buf_list[NBUFS], f_name[]="writev_data_file";
+static int fd;
+
+struct iovec wr_iovec[MAX_IOVEC] = {
+ {(caddr_t)-1, CHUNK},
+ {(caddr_t)NULL, 0}
+};
+
+int main(void)
+{
+ int nbytes;
+
+ /* Fill the buf_list[0] and buf_list[1] with 0 zeros */
+ buf_list[0] = buf1;
+ buf_list[1] = buf2;
+ memset(buf_list[0], 0, K_1);
+ memset(buf_list[1], 0, K_1);
+
+ if ((fd = open(f_name, O_WRONLY | O_CREAT, 0666)) < 0) {
+ fprintf(stderr, "open(2) failed: fname = %s, errno = %d\n",
+ f_name, errno);
+ return 1;
+ } else if ((nbytes = write(fd, buf_list[1], K_1)) != K_1) {
+ fprintf(stderr, "write(2) failed: nbytes = %d, errno = %d\n",
+ nbytes, errno);
+ return 1;
+ }
+ if (close(fd) < 0) {
+ fprintf(stderr, "close failed: errno = %d\n", errno);
+ return 1;
+ }
+ fprintf(stderr, "Test file created.\n");
+ if ((fd = open(f_name, O_RDWR, 0666)) < 0) {
+ fprintf(stderr, "open failed: fname = %s, errno = %d\n",
+ f_name, errno);
+ return 1;
+ }
+
+ lseek(fd, 0, 0);
+ if (writev(fd, wr_iovec, 2) < 0) {
+ if (errno == EFAULT)
+ fprintf(stderr, "Received EFAULT as expected\n");
+ else
+ fprintf(stderr, "Expected EFAULT, got %d\n", errno);
+ lseek(fd, K_1, 0);
+ if ((nbytes = read(fd, buf_list[0], CHUNK)) != 0)
+ fprintf(stderr, "Expected nbytes = 0, got %d\n", nbytes);
+ }
+ else
+ fprintf(stderr, "Error writev returned a positive value\n");
+ // Now check invalid vector count
+ if (writev(fd, wr_iovec, -1) < 0) {
+ if (errno == EINVAL)
+ fprintf(stderr, "Received EINVAL as expected\n");
+ else
+ fprintf(stderr, "expected errno = EINVAL, got %d\n",
errno);
+ }
+ else
+ fprintf(stderr, "Error writev returned a positive value\n");
+ if (readv(fd, wr_iovec, -1) < 0) {
+ if (errno == EINVAL)
+ fprintf(stderr, "Received EINVAL as expected\n");
+ else
+ fprintf(stderr, "expected errno = EINVAL, got %d\n",
errno);
+ }
+ else
+ fprintf(stderr, "Error writev returned a positive value\n");
+
+ unlink(f_name);
+
+ return 0;
+}
+
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/writev1.stderr.exp Mon Nov 7 02:08:12
2011
@@ -0,0 +1,19 @@
+Test file created.
+Syscall param writev(vector[...]) points to unaddressable byte(s)
+ ...
+ by 0x........: main (writev1.c:56)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Received EFAULT as expected
+Syscall param writev(vector) points to unaddressable byte(s)
+ ...
+ by 0x........: main (writev1.c:68)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Received EINVAL as expected
+Syscall param readv(vector) points to unaddressable byte(s)
+ ...
+ by 0x........: main (writev1.c:76)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Received EINVAL as expected
=======================================
--- /dev/null
+++ /trunk/valgrind/memcheck/tests/writev1.vgtest Mon Nov 7 02:08:12 2011
@@ -0,0 +1,2 @@
+prog: writev1
+vgopts: -q
=======================================
--- /dev/null
+++ /trunk/valgrind/none/tests/amd64/asorep.c Mon Nov 7 02:08:12 2011
@@ -0,0 +1,77 @@
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+
+char buf1[64], buf2[64];
+
+int
+main (void)
+{
+ unsigned long rdi, rsi, rcx, rax;
+ uintptr_t b1 = (uintptr_t) buf1, b2 = (uintptr_t) buf2;
+
+ if (b1 > 0xffffffffULL || b2 > 0xffffffffULL)
+ return 0;
+
+ b1 += 0x100000000ULL;
+ b2 += 0xfff00000000ULL;
+ memcpy (buf1, "abcde", 4);
+ asm volatile ("addr32 rep movsb"
+ : "=D" (rdi), "=S" (rsi), "=c" (rcx)
+ : "D" (b2), "S" (b1), "c" (0x100000004ULL)
+ : "memory");
+ if (memcmp (buf2, "abcd", 5) != 0
+ || rdi != (uintptr_t) buf2 + 4
+ || rsi != (uintptr_t) buf1 + 4
+ || rcx)
+ fprintf (stderr, "addr32 rep movsb wrong\n");
+
+ rax = 0x751234560000ULL + (' ' << 8) + '0';
+ asm volatile ("addr32 rep stosw"
+ : "=D" (rdi), "=c" (rcx), "+a" (rax)
+ : "D" (b2), "c" (0x100000003ULL)
+ : "memory");
+ if (memcmp (buf2, "0 0 0 ", 7) != 0
+ || rdi != (uintptr_t) buf2 + 6
+ || rcx
+ || rax != 0x751234560000ULL + (' ' << 8) + '0')
+ fprintf (stderr, "addr32 rep stosw wrong\n");
+
+ asm volatile ("addr32 lodsl"
+ : "=S" (rsi), "=a" (rax)
+ : "S" (b2), "a" (2ULL));
+ if (rsi != (uintptr_t) buf2 + 4
+ || rax != 0x20302030ULL)
+ fprintf (stderr, "addr32 lodsl wrong\n");
+
+ memcpy (buf1, "abcdefghijklmno", 16);
+ memcpy (buf2, "abcdefghijklmnO", 16);
+ asm volatile ("addr32 repe cmpsb"
+ : "=D" (rdi), "=S" (rsi), "=c" (rcx)
+ : "D" (b2), "S" (b1), "c" (0x100000020ULL));
+ if (rdi != (uintptr_t) buf2 + 15
+ || rsi != (uintptr_t) buf1 + 15
+ || rcx != 17ULL)
+ fprintf (stderr, "addr32 repe cmpsb wrong\n");
+
+ memcpy (buf2, "ababababababababcdab", 20);
+ rax = 0x123450000ULL + ('d' << 8) + 'c';
+ asm volatile ("addr32 repne scasw"
+ : "=D" (rdi), "=c" (rcx), "+a" (rax)
+ : "D" (b2), "c" (0x100000020ULL));
+ if (rdi != (uintptr_t) buf2 + 18
+ || rcx != 23ULL
+ || rax != 0x123450000ULL + ('d' << 8) + 'c')
+ fprintf (stderr, "addr32 repne scasw wrong\n");
+
+ rax = 0x543210000ULL + ('b' << 8) + 'a';
+ asm volatile ("addr32 repe scasw"
+ : "=D" (rdi), "=c" (rcx), "+a" (rax)
+ : "D" (b2), "c" (0x100000020ULL));
+ if (rdi != (uintptr_t) buf2 + 18
+ || rcx != 23ULL
+ || rax != 0x543210000ULL + ('b' << 8) + 'a')
+ fprintf (stderr, "addr32 repe scasw wrong\n");
+
+ return 0;
+}
=======================================
***Additional files exist in this changeset.***

Reply all
Reply to author
Forward
0 new messages