Example #1
0
void test_timer_16_get_value() {
    t = newTimer(OCR, TimerResolution16);
    assert_read(0, 0, 1);
    assert_read(0xFF00, 0xFF00, 2);
    assert_read(0xC200, 0xC200, 2);
    assert_read(0xFF01, 0xFF01, 3);
    assert_read(0xABDD, 0xABDD, 4);
    assert_read(0x2020, 0x2020, 5);
    assert_read(0xFAAA, 0xFAAA, 6);
    assert_read(0xFA22, 0xFA22, 7);
    assert_read(0xAFAA, 0xAFAA, 8);
    assert_read(0xAF22, 0xAF22, 9);
}
Example #2
0
void test_timer_9_get_value() {
    t = newTimer(OCR, TimerResolution9);
    assert_read(0, 0, 1);
    assert_read(0xFE00, 0, 2);
    assert_read(0xAA00, 0, 3);
    assert_read(0xFE22, 0x22 << 7, 4);
    assert_read(0xFEAA, 0xAA << 7, 5);
    assert_read(0xFFAA, 0x1AA << 7, 6);
    assert_read(0xFF22, 0x122 << 7, 7);
}
Example #3
0
void test_timer_8_get_value() {
    t = newTimer(OCR, TimerResolution8);
    assert_read(0, 0, 1);
    assert_read(0xFF00, 0, 2);
    assert_read(0xC200, 0, 2);
    assert_read(0xFF01, 0x0100, 3);
    assert_read(0xABDD, 0xDD00, 4);
    assert_read(0x2020, 0x2000, 5);
}
Example #4
0
int external_child(external_data_t *data) {
  in_fd = data->pipe_n2e[0];
  out_fd = data->pipe_e2n[1];
  nlerr = data->nlerr;
  nldeb = data->nldeb;

  /* switch to / */
  if(chdir("/") != 0) {
    mtevL(noit_error, "Failed chdir(\"/\"): %s\n", strerror(errno));
    return -1;
  }

  mtev_skiplist_init(&active_procs);
  mtev_skiplist_set_compare(&active_procs, __proc_state_check_no,
                            __proc_state_check_no_key);
  mtev_skiplist_add_index(&active_procs, __proc_state_pid,
                          __proc_state_pid_key);
  mtev_skiplist_init(&done_procs);
  mtev_skiplist_set_compare(&done_procs, __proc_state_check_no,
                            __proc_state_check_no_key);

  while(1) {
    struct pollfd pfd;
    struct proc_state *proc_state;
    int64_t check_no;
    int16_t argcnt, *arglens, envcnt, *envlens;
    int i;

    sig_noop(SIGCHLD);

    /* We poll here so that we can be interrupted by the SIGCHLD */
    pfd.fd = in_fd;
    pfd.events = POLLIN;
    while(poll(&pfd, 1, -1) == -1 && errno == EINTR) finish_procs();

    assert_read(in_fd, &check_no, sizeof(check_no));
    assert_read(in_fd, &argcnt, sizeof(argcnt));
    if(argcnt == 0) {
      /* cancellation */
      fetch_and_kill_by_check(check_no);
      continue;
    }
    assert(argcnt > 1);
    proc_state = calloc(1, sizeof(*proc_state));
    proc_state->stdout_fd = -1;
    proc_state->stderr_fd = -1;
    proc_state->check_no = check_no;

    /* read in the argument lengths */
    arglens = calloc(argcnt, sizeof(*arglens));
    assert_read(in_fd, arglens, argcnt * sizeof(*arglens));
    /* first string is the path, second is the first argv[0] */
    /* we need to allocate argcnt + 1 (NULL), but the first is path */
    proc_state->argv = malloc(argcnt * sizeof(*proc_state->argv));
    /* read each string, first in path, second into argv[0], ... */
    /* arglens[i] comes from the parent, so we should trust it */
    /* coverity[tainted_data] */
    proc_state->path = malloc(arglens[0]);
    assert_read(in_fd, proc_state->path, arglens[0]);
    for(i=0; i<argcnt-1; i++) {
      proc_state->argv[i] = malloc(arglens[i+1]);
      assert_read(in_fd, proc_state->argv[i], arglens[i+1]);
    }
    proc_state->argv[i] = NULL;
    free(arglens);

    /* similar thing with envp, but no path trickery */
    assert_read(in_fd, &envcnt, sizeof(envcnt));
    envlens = calloc(envcnt, sizeof(*envlens));
    assert_read(in_fd, envlens, envcnt * sizeof(*envlens));
    proc_state->envp = malloc((envcnt+1) * sizeof(*proc_state->envp));
    for(i=0; i<envcnt; i++) {
      proc_state->envp[i] = malloc(envlens[i]);
      assert_read(in_fd, proc_state->envp[i], envlens[i]);
    }
    proc_state->envp[i] = NULL;
    free(envlens);

    /* All set, this just needs to be run */
    external_proc_spawn(proc_state);

    finish_procs();
  }
}
Example #5
0
void test_timer_10_get_value() {
    t = newTimer(OCR, TimerResolution10);
    assert_read(0, 0, 1);
    assert_read(0xFC00, 0, 2);
    assert_read(0xA400, 0, 3);
    assert_read(0xFC22, 0x22 << 6, 4);
    assert_read(0xFCAA, 0xAA << 6, 5);
    assert_read(0xFDAA, 0x1AA << 6, 6);
    assert_read(0xFD22, 0x122 << 6, 7);
    assert_read(0xFAAA, 0x2AA << 6, 6);
    assert_read(0xFA22, 0x222 << 6, 7);
    assert_read(0xAFAA, 0x3AA << 6, 6);
    assert_read(0xAF22, 0x322 << 6, 7);
}