Browse Source

Add a test for _privates and _nprivates

These are nil in the incorrect version. These are supposed to be fixed.
This test will ensure they stay fixed.

Change-Id: I5bf67ac856f3d507570aeacf05a54a9d469c00d9
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Ronald G. Minnich 8 years ago
parent
commit
06ca53954d
3 changed files with 83 additions and 0 deletions
  1. 1 0
      sys/src/regress/fork.c
  2. 80 0
      sys/src/regress/privates.c
  3. 2 0
      sys/src/regress/regress.json

+ 1 - 0
sys/src/regress/fork.c

@@ -31,4 +31,5 @@ int main()
 		print("FAIL\n");
 		exits("FAIL");
 	}
+	return 0;
 }

+ 80 - 0
sys/src/regress/privates.c

@@ -0,0 +1,80 @@
+/*
+ * This file is part of the UCB release of Plan 9. It is subject to the license
+ * terms in the LICENSE file found in the top-level directory of this
+ * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
+ * part of the UCB release of Plan 9, including this file, may be copied,
+ * modified, propagated, or distributed except according to the terms contained
+ * in the LICENSE file.
+ */
+
+#include <u.h>
+#include <libc.h>
+
+extern void **_privates;
+extern int _nprivates;
+
+int
+main(void)
+{
+	unsigned char buf[512];
+	int i, fail = 0;
+
+	if (_privates == nil) {
+		fprint(2, "_privates is nil\n");
+		fail++;
+	}
+
+	if (_nprivates == 0) {
+		fprint(2, "_nprivates is 0\n");
+		fail++;
+	}
+
+	for (i = 0; i < _nprivates; i++) {
+		_privates[i] = (void *)(0x77665544332210 + i);
+	}
+
+	memset(buf, 0, sizeof buf);
+
+	for (i = 0; i < _nprivates; i++) {
+		if (_privates[i] != (void *)(0x77665544332210 + i)){
+			fprint(2, "_privates[%d] = %p\n", i, _privates[i]);
+			fail++;
+		}
+	}
+
+	void **p[_nprivates+1];
+	for (i = 0; i < _nprivates; i++) {
+		p[i] = privalloc();
+		if(p[i] == nil){
+			fail++;
+			fprint(2, "privalloc[%d]: %p\n", i, p[i]);
+		}
+	}
+
+	p[i] = privalloc();
+	if(p[i] != nil){
+		fail++;
+		fprint(2, "privalloc[%d]: %p\n", i, p[i]);
+	}
+
+	for (i = 0; i < _nprivates; i++) {
+		*(p[i]) = (void*)i;
+	}
+	for (i = 0; i < _nprivates; i++) {
+		if(*(p[i]) != (void*)i){
+			fprint(2, "p[%d] != %d\n", i, i);
+			fail++;
+		}
+	}
+
+
+	if (fail > 0) {
+		print("FAIL\n");
+		exits("FAIL");
+	}
+
+	print("PASS\n");
+	exits("PASS");
+
+	return 0;
+}

+ 2 - 0
sys/src/regress/regress.json

@@ -4,7 +4,9 @@
     "Include": ["/sys/src/cmd/cmd.json"],
     "SourceFilesCmd": [
 	"iphash.c",
+	"privates.c",
 	"fork.c"
+
     ],
     "Install": "/$ARCH/bin/regress"
 }