Esempio n. 1
0
static char * test_mmap_file(void)
{
    FILE * fp;
    int errno_save;
    char str1[80];
    char str2[80];

    memset(str1, '\0', sizeof(str1));
    memset(str2, '\0', sizeof(str2));

    fp = fopen("/root/README.markdown", "r");
    pu_assert("fp not NULL", fp != NULL);

    errno = 0;
    data = mmap(NULL, 2 * sizeof(str1), PROT_READ, MAP_PRIVATE, fileno(fp), 0);
    errno_save = errno;

    pu_assert("a new memory region returned", data != MAP_FAILED);
    pu_assert_equal("No errno was set", errno_save, 0);

    memcpy(str1, data, sizeof(str1) - 1);
    fread(str2, sizeof(char), sizeof(str2) - 1, fp);
    pu_assert("Strings are equal", strcmp(str1, str2) == 0);

    return NULL;
}
static char * test_arrinit()
{
    int err = 0;
    int code_size;
    struct vm_state state;
    char input[] = "3\n";

    /* Write input values to stdin */
    uu_open_stdin_writer();
    uu_write_stdin(input);
    uu_close_stdin_writer();

    b91_loader_read_file(mem, memsize, &code_size, "asm/arrinit.b91");
    pu_assert("Error while loading a b91 binary file.", err == 0);

    vm_init_state(&state, code_size, memsize);
    vm_run(&state, mem);

    pu_assert_equal("Correct r1 value", state.regs[1], 3);
    pu_assert_equal("Correct r2 value", state.regs[2], 2716);
    pu_assert_equal("Correct r3 value", state.regs[3], 2716);
    pu_assert_equal("Correct mem value at", mem[20], -875);
    pu_assert_equal("Correct mem value at", mem[25], 860);
    pu_assert_equal("Correct mem value at", mem[27], 1554);
    return 0;
}
Esempio n. 3
0
static char * test_mmap_anon(void)
{
    errno = 0;
    data = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);

    pu_assert("a new memory region returned", data != MAP_FAILED);
    pu_assert_equal("No errno was set", errno, 0);

    memset(data, 0xff, 200);
    pu_assert("memory is accessible", data[50] == 0xff);

    return NULL;
}
Esempio n. 4
0
static char * test_mmap_anon_huge(void)
{
    const size_t size = 2097152;
    errno = 0;
    data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);

    pu_assert("a new memory region returned", data != MAP_FAILED);
    pu_assert_equal("No errno was set", errno, 0);

    memset(data, 0xff, size);
    pu_assert("memory is accessible", data[50] == 0xff);

    return NULL;
}
Esempio n. 5
0
static char * test_mmap_anon_fixed(void)
{
#define ADDR ((void *)0xA0000000)
    static char msg[80];
    int errno_save;

    errno = 0;
    data = mmap(ADDR, 4096, PROT_READ | PROT_WRITE, MAP_ANON | MAP_FIXED, -1, 0);
    errno_save = errno;

    pu_assert("a new memory region returned", data != MAP_FAILED);
    pu_assert_equal("No errno was set", errno_save, 0);
    sprintf(msg, "returned address equals %p", ADDR);
    pu_assert(msg, data == ADDR);

    memset(data, 0xff, 200);
    pu_assert("memory is accessible", data[50] == 0xff);

    return NULL;
#undef ADDR
}
static char * test_pow()
{
    int err = 0;
    int code_size;
    struct vm_state state;
    char * input[] = {"2\n", "4\n"};

    /* Write input values to stdin */
    uu_open_stdin_writer();
    uu_write_stdin(input[0]);
    uu_write_stdin(input[1]);
    uu_close_stdin_writer();

    b91_loader_read_file(mem, memsize, &code_size, "asm/pow.b91");
    pu_assert("Error while loading a b91 binary file.", err == 0);

    vm_init_state(&state, code_size, memsize);
    vm_run(&state, mem);

    pu_assert_equal("Result of 2^4 == 16", state.regs[1], 16);
    return 0;
}