diff options
author | Robert Morris <[email protected]> | 2010-08-05 12:10:54 -0400 |
---|---|---|
committer | Robert Morris <[email protected]> | 2010-08-05 12:10:54 -0400 |
commit | eb18645f17877de4ced951eed5abac61bdfcd5c5 (patch) | |
tree | d5a40a1839ef1264a84f9eeff5723c7c67cad711 /usertests.c | |
parent | b738a4f1a2dd2956123a734327aeaf9d09b5faca (diff) | |
download | xv6-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.c | 34 |
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(); |