Browse Source

Address bug report #11, by using 64-bit offsets and lengths internally. Create a regression test to capture this case

Don Porter 7 years ago
parent
commit
c3f267b033

+ 17 - 0
LibOS/shim/test/regression/90_large-mmap.py

@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+import os, sys, mmap
+from regression import Regression
+
+loader = './pal'
+
+# Running Bootstrap
+regression = Regression(loader, "large-mmap")
+
+regression.add_check(name="Ftruncate",
+    check=lambda res: "large-mmap: ftruncate OK" in res[0].out)
+
+regression.add_check(name="Large mmap",
+    check=lambda res: "large-mmap: test completed OK" in res[0].out)
+
+regression.run_checks()

+ 24 - 0
LibOS/shim/test/regression/large-mmap.c

@@ -0,0 +1,24 @@
+/* -*- mode:c; c-file-style:"k&r"; c-basic-offset: 4; tab-width:4; indent-tabs-mode:nil; mode:auto-fill; fill-column:78; -*- */
+/* vim: set ts=4 sw=4 et tw=78 fo=cqt wm=0: */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+
+#define TEST_LENGTH 0x10000f000
+
+int main() {
+    FILE*fp=fopen("testfil","a+");
+    if (!fp) { perror("fopen"); return 1; }
+    int rv = ftruncate(fileno(fp), TEST_LENGTH);
+    if (rv) {perror ("ftruncate"); return 1;}
+    else 
+        printf("large-mmap: ftruncate OK\n");
+
+    void* a=mmap(NULL, TEST_LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(fp), 0);
+    if (!a) { perror("mmap"); return 1; }
+    ((char*)a)[0x100000000]=0xff;
+    printf("large-mmap: test completed OK\n");
+    return 0;
+}