71 lines
1.3 KiB
C
71 lines
1.3 KiB
C
#include "kernel/param.h"
|
|
#include "kernel/fcntl.h"
|
|
#include "kernel/types.h"
|
|
#include "kernel/riscv.h"
|
|
#include "user/user.h"
|
|
|
|
void ugetpid_test();
|
|
void pgaccess_test();
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
ugetpid_test();
|
|
pgaccess_test();
|
|
printf("pgtbltest: all tests succeeded\n");
|
|
exit(0);
|
|
}
|
|
|
|
char *testname = "???";
|
|
|
|
void
|
|
err(char *why)
|
|
{
|
|
printf("pgtbltest: %s failed: %s, pid=%d\n", testname, why, getpid());
|
|
exit(1);
|
|
}
|
|
|
|
void
|
|
ugetpid_test()
|
|
{
|
|
int i;
|
|
|
|
printf("ugetpid_test starting\n");
|
|
testname = "ugetpid_test";
|
|
|
|
for (i = 0; i < 64; i++) {
|
|
int ret = fork();
|
|
if (ret != 0) {
|
|
wait(&ret);
|
|
if (ret != 0)
|
|
exit(1);
|
|
continue;
|
|
}
|
|
if (getpid() != ugetpid())
|
|
err("missmatched PID");
|
|
exit(0);
|
|
}
|
|
printf("ugetpid_test: OK\n");
|
|
}
|
|
|
|
void
|
|
pgaccess_test()
|
|
{
|
|
char *buf;
|
|
unsigned int abits;
|
|
printf("pgaccess_test starting\n");
|
|
testname = "pgaccess_test";
|
|
buf = malloc(32 * PGSIZE);
|
|
if (pgaccess(buf, 32, &abits) < 0)
|
|
err("pgaccess failed");
|
|
buf[PGSIZE * 1] += 1;
|
|
buf[PGSIZE * 2] += 1;
|
|
buf[PGSIZE * 30] += 1;
|
|
if (pgaccess(buf, 32, &abits) < 0)
|
|
err("pgaccess failed");
|
|
if (abits != ((1 << 1) | (1 << 2) | (1 << 30)))
|
|
err("incorrect access bits set");
|
|
free(buf);
|
|
printf("pgaccess_test: OK\n");
|
|
}
|