]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mmap/munmap exerciser test
authorJeremy Fitzhardinge <jeremy@valgrind.org>
Fri, 19 Dec 2003 21:56:04 +0000 (21:56 +0000)
committerJeremy Fitzhardinge <jeremy@valgrind.org>
Fri, 19 Dec 2003 21:56:04 +0000 (21:56 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2134

none/tests/Makefile.am
none/tests/map_unmap.c [new file with mode: 0644]
none/tests/map_unmap.stderr.exp [new file with mode: 0644]
none/tests/map_unmap.stdout.exp [new file with mode: 0644]
none/tests/map_unmap.vgtest [new file with mode: 0644]

index 42467a7a88f853affba707fb51a01c11384bd7d3..a36280e2d630e7926939a595b4e59de19cb0e19b 100644 (file)
@@ -22,6 +22,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        fpu_lazy_eflags.vgtest \
        fucomip.stderr.exp fucomip.vgtest \
        gxx304.stderr.exp gxx304.vgtest \
+       map_unmap.stdout.exp map_unmap.vgtest \
        munmap_exe.stderr.exp munmap_exe.vgtest \
        pth_blockedsig.stderr.exp \
        pth_blockedsig.stdout.exp pth_blockedsig.vgtest \
@@ -41,7 +42,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
 check_PROGRAMS = \
        args bitfield1 bt_everything bt_literal coolo_strlen \
        cpuid dastest discard floored fork fpu_lazy_eflags \
-       fucomip munmap_exe rcl_assert \
+       fucomip munmap_exe map_unmap rcl_assert \
        rcrl readline1 resolv seg_override sha1_test shortpush shorts smc1 \
        pth_blockedsig \
        coolo_sigaction gxx304 yield
@@ -63,6 +64,7 @@ floored_SOURCES       = floored.c
 floored_LDADD          = -lm
 fpu_lazy_eflags_SOURCES        = fpu_lazy_eflags.c
 fucomip_SOURCES        = fucomip.c
+map_unmap_SOURCES      = map_unmap.c
 munmap_exe_SOURCES     = munmap_exe.c
 rcl_assert_SOURCES     = rcl_assert.S
 rcrl_SOURCES           = rcrl.c
diff --git a/none/tests/map_unmap.c b/none/tests/map_unmap.c
new file mode 100644 (file)
index 0000000..16a6d11
--- /dev/null
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static unsigned int pagesize;
+
+#define PAGES  1024u
+#define LEN    (PAGES*pagesize)
+
+static void *domap(void)
+{
+       void *ret = mmap(0, LEN, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+
+       if (ret == (void *)-1) {
+               perror("mmap");
+               exit(1);
+       }
+
+       return ret;
+}
+
+/* unmap in pieces to exercise munmap more */
+static void nibblemap(void *p)
+{
+       int off;
+       int i;
+
+       off = (random() & ~0x1fff) % LEN;
+       
+       for(i = 0; i < PAGES; i++) {
+               munmap((char *)p + off, pagesize);
+               off += 619*pagesize;
+               off %= LEN;
+       }
+}
+
+int main()
+{
+       int i;
+       void *expect1, *expect2;
+
+       pagesize = getpagesize();
+
+       expect1 = domap();
+       expect2 = domap();
+       munmap(expect1, LEN);
+       munmap(expect2, LEN);
+       for(i = 0; i < 1000; i++) {
+               void *m1, *m2;
+
+               m1 = domap();
+               if (m1 != expect1) {
+                       printf("FAIL: m=%p expect=%p\n",
+                              m1, expect1);
+                       return 1;
+               }
+               m2 = domap();
+               if (m2 != expect2) {
+                       printf("FAIL: m=%p expect=%p\n",
+                              m2, expect2);
+                       return 1;
+               }
+               nibblemap(m2);
+               munmap(m1, LEN);
+       }
+       
+       printf("PASS\n");
+       return 0;
+}
diff --git a/none/tests/map_unmap.stderr.exp b/none/tests/map_unmap.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/map_unmap.stdout.exp b/none/tests/map_unmap.stdout.exp
new file mode 100644 (file)
index 0000000..7ef22e9
--- /dev/null
@@ -0,0 +1 @@
+PASS
diff --git a/none/tests/map_unmap.vgtest b/none/tests/map_unmap.vgtest
new file mode 100644 (file)
index 0000000..c6b0f84
--- /dev/null
@@ -0,0 +1 @@
+prog: map_unmap