summaryrefslogtreecommitdiff
path: root/usertests.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2010-08-05 12:10:54 -0400
committerRobert Morris <[email protected]>2010-08-05 12:10:54 -0400
commiteb18645f17877de4ced951eed5abac61bdfcd5c5 (patch)
treed5a40a1839ef1264a84f9eeff5723c7c67cad711 /usertests.c
parentb738a4f1a2dd2956123a734327aeaf9d09b5faca (diff)
downloadxv6-labs-eb18645f17877de4ced951eed5abac61bdfcd5c5.tar.gz
xv6-labs-eb18645f17877de4ced951eed5abac61bdfcd5c5.tar.bz2
xv6-labs-eb18645f17877de4ced951eed5abac61bdfcd5c5.zip
fix allocuvm() to handle sbrk() with non-page-granularity argument
(maybe this never worked, but it works now)
Diffstat (limited to 'usertests.c')
-rw-r--r--usertests.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/usertests.c b/usertests.c
index cc2601c..2bd21ba 100644
--- a/usertests.c
+++ b/usertests.c
@@ -1229,6 +1229,38 @@ forktest(void)
printf(1, "fork test OK\n");
}
+void
+sbrktest(void)
+{
+ printf(stdout, "sbrk test\n");
+ char *a = sbrk(0);
+ int i;
+ for(i = 0; i < 5000; i++){
+ char *b = sbrk(1);
+ if(b != a){
+ printf(stdout, "sbrk test failed %d %x %x\n", i, a, b);
+ exit();
+ }
+ *b = 1;
+ a = b + 1;
+ }
+ int pid = fork();
+ if(pid < 0){
+ printf(stdout, "sbrk test fork failed\n");
+ exit();
+ }
+ char *c = sbrk(1);
+ c = sbrk(1);
+ if(c != a + 1){
+ printf(stdout, "sbrk test failed post-fork\n");
+ exit();
+ }
+ if(pid == 0)
+ exit();
+ wait();
+ printf(stdout, "sbrk test OK\n");
+}
+
int
main(int argc, char *argv[])
{
@@ -1240,6 +1272,8 @@ main(int argc, char *argv[])
}
close(open("usertests.ran", O_CREATE));
+ sbrktest();
+
opentest();
writetest();
writetest1();