From: Julian Seward Date: Wed, 3 May 2006 00:43:20 +0000 (+0000) Subject: Add another test of permissions range copying (copy_address_range_perms). X-Git-Tag: svn/VALGRIND_3_2_0~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f8027095c928703c97bdbe5b67aa9f59c230754;p=thirdparty%2Fvalgrind.git Add another test of permissions range copying (copy_address_range_perms). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5875 --- diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am index 28bf2d20b8..cd1566984b 100644 --- a/memcheck/tests/Makefile.am +++ b/memcheck/tests/Makefile.am @@ -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 index 0000000000..81d9f4e3da --- /dev/null +++ b/memcheck/tests/pdb-realloc2.c @@ -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 +#include +#include +#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 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/pdb-realloc2.stdout.exp b/memcheck/tests/pdb-realloc2.stdout.exp new file mode 100644 index 0000000000..299191b81d --- /dev/null +++ b/memcheck/tests/pdb-realloc2.stdout.exp @@ -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 index 0000000000..de01e461fb --- /dev/null +++ b/memcheck/tests/pdb-realloc2.vgtest @@ -0,0 +1,2 @@ +prog: pdb-realloc2 +vgopts: -q