X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftests%2Fuserprog%2Fboundary.c;h=ca4fb73e5a52a5470e251ed1476a991cdb9be5c5;hb=bd5dde3034714da175496292c92dc5a37509a311;hp=59907ec935d36d8e498766730138741f0143e89d;hpb=42a67e9ac6854ec56c35c82e1ad9c4e2c8662139;p=pintos-anon diff --git a/src/tests/userprog/boundary.c b/src/tests/userprog/boundary.c index 59907ec..ca4fb73 100644 --- a/src/tests/userprog/boundary.c +++ b/src/tests/userprog/boundary.c @@ -7,7 +7,10 @@ #include #include "tests/userprog/boundary.h" -static char dst[8192]; +/* Together with statements in src/lib/user/user.lds, arranges + for the following array to be at the very end of the .bss + segment (needed for get_bad_boundary below). */ +static char dst[8192] __attribute__ ((section (".testEndmem,\"aw\",@nobits#"))); /* Returns the beginning of a page. There are at least 2048 modifiable bytes on either side of the pointer returned. */ @@ -31,3 +34,14 @@ copy_string_across_boundary (const char *src) return p; } +/* Returns an address that is invalid, but the preceding bytes + * are all valid (the highest address in the bss segment). Used + * to position information such that the first byte of the + * information is valid, but not all the information is valid. */ +void * +get_bad_boundary (void) +{ + /* This code assumes that dst will be in the highest page + * allocated to the user process. */ + return (void *) ROUND_UP ((uintptr_t) (dst + sizeof(dst) - 1), 4096); +}