]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add another test of permissions range copying (copy_address_range_perms).
authorJulian Seward <jseward@acm.org>
Wed, 3 May 2006 00:43:20 +0000 (00:43 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 3 May 2006 00:43:20 +0000 (00:43 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5875

memcheck/tests/Makefile.am
memcheck/tests/pdb-realloc2.c [new file with mode: 0644]
memcheck/tests/pdb-realloc2.stderr.exp [new file with mode: 0644]
memcheck/tests/pdb-realloc2.stdout.exp [new file with mode: 0644]
memcheck/tests/pdb-realloc2.vgtest [new file with mode: 0644]

index 28bf2d20b8171d71664bae441d3b0e338f8f0942..cd1566984bb877eb496aea935e543ab1d5aa1904 100644 (file)
@@ -86,6 +86,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        partial_load_ok.vgtest partial_load_ok.stderr.exp partial_load_ok.stderr.exp64 \
        partial_load_dflt.vgtest partial_load_dflt.stderr.exp partial_load_dflt.stderr.exp64 \
        pdb-realloc.stderr.exp pdb-realloc.vgtest \
+       pdb-realloc2.stderr.exp pdb-realloc2.stdout.exp pdb-realloc2.vgtest \
        pipe.stderr.exp pipe.vgtest \
        pointer-trace.vgtest \
        pointer-trace.stderr.exp pointer-trace.stderr.exp64 \
@@ -150,7 +151,7 @@ check_PROGRAMS = \
        nanoleak new_nothrow \
        null_socket oset_test overlap \
        partiallydefinedeq \
-       partial_load pdb-realloc \
+       partial_load pdb-realloc pdb-realloc2 \
        pipe pointer-trace \
        post-syscall \
        realloc1 realloc2 realloc3 \
diff --git a/memcheck/tests/pdb-realloc2.c b/memcheck/tests/pdb-realloc2.c
new file mode 100644 (file)
index 0000000..81d9f4e
--- /dev/null
@@ -0,0 +1,111 @@
+
+/* A test which involves copying (using realloc) a block containing
+   some partially defined bytes.  Really this is to check that
+   copy_address_range_perms in mc_main.c works.  I don't think it's a
+   good test - it may well not exercise all the code in
+   copy_address_range_perms. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "memcheck/memcheck.h"
+
+typedef unsigned char UChar;
+typedef unsigned int  UInt;
+
+
+static UInt seed = 0;
+static inline UInt myrand ( UInt size )
+{
+   /* From "Numerical Recipes in C" 2nd Edition */
+   seed = 1664525UL * seed + 1013904223UL;
+   return seed % size;
+}
+
+static void barf ( int size, int offset )
+{
+   printf("pdb-realloc2: fail: size %d, offset %d\n", size,offset);
+   exit(1);
+}
+
+void do_test ( int size )
+{
+   int i,j,r;
+   UChar* v;
+   UChar* p = malloc(size);
+   assert(p);
+   // fill
+   seed = 0;
+   for (i = 0; i < size; i++) {
+
+      j = myrand( 256 * 25 );
+      //printf("%d\n", j);
+      if (j >= 256 * 13) {
+         // def 1s
+         p[i] = 0xFF;
+      } else 
+      if (j >= 256 && j < 256*13) {
+         // def 0s
+         p[i] = 0;
+      } else {
+         // pdb
+         p[i] &= (UChar)j;
+      }
+
+   }
+
+   // copy
+   for (i = 1; i <= 100; i++) {
+      p = realloc(p, size+i);
+      assert(p);
+   }
+
+   // check
+   v = malloc(size+100);
+   assert(v);
+   r = VALGRIND_GET_VBITS(p,v, size+100);
+   assert(r == 1);
+
+   //for (i = 0; i < size+100; i++)
+   //  printf("%02x ", (UInt)v[i]);
+   //printf("\n");
+
+   seed = 0;
+   for (i = 0; i < size; i++) {
+
+      j = myrand( 256 * 25 );
+
+      if (j >= 256) {
+         // expecting a defined value
+         if (v[i] != 0)
+            barf(size, i);
+      } else {
+         // expecting a PDB == j
+         if (v[i] != (UChar)j)
+            barf(size,i);
+      }
+
+   }
+
+   // in the extension area, everything should be undefined
+   for (i = 0; i < 100; i++) {
+      if (v[size+i] != 0xFF)
+         barf(size, i);
+   }
+
+   free(v);
+   free(p);
+}
+
+int main ( void )
+{
+  int z;
+  for (z = 0; z < 100; z++) {
+     printf("pdb_realloc: z = %d\n", z);
+     do_test(z);
+     do_test(z + 173);
+     do_test(z + 1731);
+  }
+  printf("pdb-realloc2: done\n");
+  return 0;
+}
diff --git a/memcheck/tests/pdb-realloc2.stderr.exp b/memcheck/tests/pdb-realloc2.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/memcheck/tests/pdb-realloc2.stdout.exp b/memcheck/tests/pdb-realloc2.stdout.exp
new file mode 100644 (file)
index 0000000..299191b
--- /dev/null
@@ -0,0 +1,101 @@
+pdb_realloc: z = 0
+pdb_realloc: z = 1
+pdb_realloc: z = 2
+pdb_realloc: z = 3
+pdb_realloc: z = 4
+pdb_realloc: z = 5
+pdb_realloc: z = 6
+pdb_realloc: z = 7
+pdb_realloc: z = 8
+pdb_realloc: z = 9
+pdb_realloc: z = 10
+pdb_realloc: z = 11
+pdb_realloc: z = 12
+pdb_realloc: z = 13
+pdb_realloc: z = 14
+pdb_realloc: z = 15
+pdb_realloc: z = 16
+pdb_realloc: z = 17
+pdb_realloc: z = 18
+pdb_realloc: z = 19
+pdb_realloc: z = 20
+pdb_realloc: z = 21
+pdb_realloc: z = 22
+pdb_realloc: z = 23
+pdb_realloc: z = 24
+pdb_realloc: z = 25
+pdb_realloc: z = 26
+pdb_realloc: z = 27
+pdb_realloc: z = 28
+pdb_realloc: z = 29
+pdb_realloc: z = 30
+pdb_realloc: z = 31
+pdb_realloc: z = 32
+pdb_realloc: z = 33
+pdb_realloc: z = 34
+pdb_realloc: z = 35
+pdb_realloc: z = 36
+pdb_realloc: z = 37
+pdb_realloc: z = 38
+pdb_realloc: z = 39
+pdb_realloc: z = 40
+pdb_realloc: z = 41
+pdb_realloc: z = 42
+pdb_realloc: z = 43
+pdb_realloc: z = 44
+pdb_realloc: z = 45
+pdb_realloc: z = 46
+pdb_realloc: z = 47
+pdb_realloc: z = 48
+pdb_realloc: z = 49
+pdb_realloc: z = 50
+pdb_realloc: z = 51
+pdb_realloc: z = 52
+pdb_realloc: z = 53
+pdb_realloc: z = 54
+pdb_realloc: z = 55
+pdb_realloc: z = 56
+pdb_realloc: z = 57
+pdb_realloc: z = 58
+pdb_realloc: z = 59
+pdb_realloc: z = 60
+pdb_realloc: z = 61
+pdb_realloc: z = 62
+pdb_realloc: z = 63
+pdb_realloc: z = 64
+pdb_realloc: z = 65
+pdb_realloc: z = 66
+pdb_realloc: z = 67
+pdb_realloc: z = 68
+pdb_realloc: z = 69
+pdb_realloc: z = 70
+pdb_realloc: z = 71
+pdb_realloc: z = 72
+pdb_realloc: z = 73
+pdb_realloc: z = 74
+pdb_realloc: z = 75
+pdb_realloc: z = 76
+pdb_realloc: z = 77
+pdb_realloc: z = 78
+pdb_realloc: z = 79
+pdb_realloc: z = 80
+pdb_realloc: z = 81
+pdb_realloc: z = 82
+pdb_realloc: z = 83
+pdb_realloc: z = 84
+pdb_realloc: z = 85
+pdb_realloc: z = 86
+pdb_realloc: z = 87
+pdb_realloc: z = 88
+pdb_realloc: z = 89
+pdb_realloc: z = 90
+pdb_realloc: z = 91
+pdb_realloc: z = 92
+pdb_realloc: z = 93
+pdb_realloc: z = 94
+pdb_realloc: z = 95
+pdb_realloc: z = 96
+pdb_realloc: z = 97
+pdb_realloc: z = 98
+pdb_realloc: z = 99
+pdb-realloc2: done
diff --git a/memcheck/tests/pdb-realloc2.vgtest b/memcheck/tests/pdb-realloc2.vgtest
new file mode 100644 (file)
index 0000000..de01e46
--- /dev/null
@@ -0,0 +1,2 @@
+prog: pdb-realloc2
+vgopts: -q