int main(int argc, char **argv)
{
	size_t raw_len, stripped_len;
	void *raw_addr, *stripped_addr;
	FILE *outfile;
	char *name, *tmp;
	int namelen;

	if (argc != 4) {
		printf("Usage: vdso2c RAW_INPUT STRIPPED_INPUT OUTPUT\n");
		return 1;
	}

	/*
	 * Figure out the struct name.  If we're writing to a .so file,
	 * generate raw output insted.
	 */
	name = strdup(argv[3]);
	namelen = strlen(name);
	if (namelen >= 3 && !strcmp(name + namelen - 3, ".so")) {
		name = NULL;
	} else {
		tmp = strrchr(name, '/');
		if (tmp)
			name = tmp + 1;
		tmp = strchr(name, '.');
		if (tmp)
			*tmp = '\0';
		for (tmp = name; *tmp; tmp++)
			if (*tmp == '-')
				*tmp = '_';
	}

	map_input(argv[1], &raw_addr, &raw_len, PROT_READ);
	map_input(argv[2], &stripped_addr, &stripped_len, PROT_READ);

	outfilename = argv[3];
	outfile = fopen(outfilename, "w");
	if (!outfile)
		err(1, "%s", argv[2]);

	go(raw_addr, raw_len, stripped_addr, stripped_len, outfile, name);

	munmap(raw_addr, raw_len);
	munmap(stripped_addr, stripped_len);
	fclose(outfile);

	return 0;
}
Beispiel #2
0
int
Mmap2_Test::run_test (int iterations,
                      FILE *input_fp,
                      FILE *output_fp)
{
  ACE_Mem_Map map_input (ACE_OS::fileno (input_fp));
  int size = map_input.size ();
  ACE_Mem_Map map_output (ACE_OS::fileno (output_fp),
                          size,
                          PROT_WRITE,
                          MAP_SHARED);
  void *src = map_input.addr ();
  void *dst = map_output.addr ();

  if (src == MAP_FAILED || dst == MAP_FAILED)
    return -1;
  else
    {
      this->tm_.start ();

      while (--iterations >= 0)
        ACE_OS::memcpy (dst, src, size);

      this->tm_.stop ();
    }

  if (map_input.unmap () == -1
      || map_output.unmap () == -1)
    return -1;
  else
    return 0;
}
Beispiel #3
0
int
main(int argc, char **argv)
{
        void *input;

        list_inithead(&dump.mem_areas);

        if (argc != 2)
                usage(argv[0]);

        input = map_input(argv[1]);
        set_bo_maps(input);

        dump_registers();
        parse_cls();
        parse_sublists();
        parse_shader_recs();
        parse_shaders();

        return 0;
}
Beispiel #4
0
int
Mmap1_Test::run_test (int iterations,
                      FILE *input_fp,
                      FILE *output_fp)
{
  ACE_Mem_Map map_input (ACE_OS::fileno (input_fp));
  void *src = map_input.addr ();

  if (src == MAP_FAILED)
    ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%C"), this->name ()), -1);
  else
    {
      this->tm_.start ();

      while (--iterations >= 0)
      {
        if (ACE_OS::write (ACE_OS::fileno (output_fp),
                           src,
                           map_input.size ()) == -1)
          ACE_ERROR_RETURN ((LM_ERROR,
                             ACE_TEXT ("%C"),
                             this->name ()),
                            -1);
        ACE_OS::lseek (ACE_OS::fileno (output_fp),
                       0,
                       SEEK_SET);
      }

      this->tm_.stop ();
    }

  if (map_input.unmap () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("%C"),
                       this->name ()),
                      -1);
  else
    return 0;
}
Beispiel #5
0
static void process_input(brl_t *brl)
{
    unsigned char c;
    int           mapped, type, in, n, diff;
    char          out, *line, *hentry;

    while((n = read(brl->fd, &c, sizeof(c))) > 0) {
        if (brl->esc) {
            if (brl->seq_len < (int)sizeof(brl->seq))
                brl->seq[brl->seq_len++] = c;

            if (brl->seq_len == 2) {
                if (c != '[') {
                    mapped = map_esc_sequence(brl);
                    brl->esc = FALSE;
                }
                else
                    continue;
            }
            else {
                if (0x40 <= c && c <= 0x7e) {
                    mapped = map_ctrl_sequence(brl);
                    brl->esc = FALSE;
                }
                else {
                    if (brl->seq_len == (int)sizeof(brl->seq)) {
                        mapped = BRL_TYPE_INVALID;
                        brl->esc = FALSE;
                    }
                    else
                        continue;
                }
            }
        }
        else
            mapped = map_input(brl, c);

        type = BRL_INPUT_TYPE(mapped);
        in   = BRL_INPUT_DATA(mapped);

        switch (type) {
        case BRL_TYPE_SELF:
            out = (char)(in & 0xff);
            insert_input(brl, &out, 1);
            redraw_prompt(brl);
            break;

        case BRL_TYPE_COMMAND:
            switch (in) {
            case BRL_CMD_PREV_LINE:
                if (brl->h.srch == 0)
                    save_input(brl);
                hentry = ringbuf_search(&brl->h, -1, 0, (char *)brl->saved);
                debug(brl, "s:%d,'%s'", brl->h.srch,
                      brl->saved ? brl->saved : "-");
                if (hentry != NULL) {
                    reset_input(brl);
                    insert_input(brl, hentry, strlen(hentry));
                    redraw_prompt(brl);
                }
                else
                    bell(brl);
                break;

            case BRL_CMD_NEXT_LINE:
                hentry = ringbuf_search(&brl->h, +1, 0, (char *)brl->saved);
                debug(brl, "s:%d,'%s'", brl->h.srch,
                      brl->saved ? brl->saved : "-");
                if (hentry != NULL) {
                    if (hentry == brl->saved)
                        restore_input(brl);
                    else {
                        reset_input(brl);
                        insert_input(brl, hentry, strlen(hentry));
                    }
                    redraw_prompt(brl);
                }
                else
                    bell(brl);
                break;

            case BRL_CMD_BACKWARD:
                move_cursor(brl, -1);
                redraw_prompt(brl);
                break;
            case BRL_CMD_FORWARD:
                move_cursor(brl, +1);
                redraw_prompt(brl);
                break;

            case BRL_CMD_LINE_START:
                move_cursor(brl, -brl->offs);
                redraw_prompt(brl);
                break;
            case BRL_CMD_LINE_END:
                move_cursor(brl, brl->data - brl->offs);
                redraw_prompt(brl);
                break;

            case BRL_CMD_ERASE_BEFORE:
                erase_input(brl, -1);
                if (brl->offs < brl->data)
                    move_cursor(brl, -1);
                redraw_prompt(brl);
                break;
            case BRL_CMD_ERASE_AT:
                erase_input(brl, 1);
                redraw_prompt(brl);
                break;

            case BRL_CMD_ERASE_REST:
                save_yank(brl, brl->offs, brl->data);
                erase_input(brl, brl->data - brl->offs);
                redraw_prompt(brl);
                break;
            case BRL_CMD_ERASE_ALL:
                save_yank(brl, 0, brl->data);
                reset_input(brl);
                redraw_prompt(brl);
                break;
            case BRL_CMD_YANK:
                insert_input(brl, (char *)brl->yank, brl->yank_data);
                redraw_prompt(brl);
                break;

            case BRL_CMD_PREV_WORD:
                diff = input_delimiter(brl, -1);
                move_cursor(brl, diff);
                redraw_prompt(brl);
                break;

            case BRL_CMD_NEXT_WORD:
                diff = input_delimiter(brl, +1);
                move_cursor(brl, diff);
                redraw_prompt(brl);
                break;

            case BRL_CMD_REDRAW:
                redraw_prompt(brl);
                break;

            case BRL_CMD_ENTER:
                dprintf(brl->fd, "\n\r");
                if (brl->line_cb != NULL) {
                    line = alloca(brl->data + 1);
                    strncpy(line, (char *)brl->buf, brl->data);
                    line[brl->data] = '\0';
                    reset_input(brl);
                    restore_rawmode(brl);
                    brl->line_cb(brl, line, brl->user_data);
                    enable_rawmode(brl);
                    ringbuf_reset_search(&brl->h);
                    debug(brl, "");
                    redraw_prompt(brl);
                }
                else
                    return;
                break;

            default:
#if 0
                printf("editing command 0x%x\n\r", in);
#endif
                bell(brl);
            }
            break;

        case BRL_TYPE_CSEQ:
            brl->esc     = TRUE;
            brl->seq[0]  = c;
            brl->seq_len = 1;
            break;

        case BRL_TYPE_INVALID:
        default:
            bell(brl);
            break;
        }
    }
}