Beispiel #1
0
static int cmd_set(cproc_t cp, char **arg)
{
    device_t dev = cproc_device(cp);
    stab_t stab = cproc_stab(cp);
    char *reg_text = get_arg(arg);
    char *val_text = get_arg(arg);
    int reg;
    int value = 0;
    uint16_t regs[DEVICE_NUM_REGS];

    if (!(reg_text && val_text)) {
        fprintf(stderr, "set: must specify a register and a value\n");
        return -1;
    }

    reg = dis_reg_from_name(reg_text);
    if (reg < 0) {
        fprintf(stderr, "set: unknown register: %s\n", reg_text);
        return -1;
    }

    if (expr_eval(stab, val_text, &value) < 0) {
        fprintf(stderr, "set: can't parse value: %s\n", val_text);
        return -1;
    }

    if (dev->getregs(dev, regs) < 0)
        return -1;
    regs[reg] = value;
    if (dev->setregs(dev, regs) < 0)
        return -1;

    cproc_regs(cp, regs);
    return 0;
}
Beispiel #2
0
int cmd_set(char **arg)
{
	char *reg_text = get_arg(arg);
	char *val_text = get_arg(arg);
	int reg;
	address_t value = 0;
	address_t regs[DEVICE_NUM_REGS];

	if (!(reg_text && val_text)) {
		printc_err("set: must specify a register and a value\n");
		return -1;
	}

	reg = dis_reg_from_name(reg_text);
	if (reg < 0) {
		printc_err("set: unknown register: %s\n", reg_text);
		return -1;
	}

	if (expr_eval(val_text, &value) < 0) {
		printc_err("set: can't parse value: %s\n", val_text);
		return -1;
	}

	if (device_getregs(regs) < 0)
		return -1;
	regs[reg] = value;
	if (device_setregs(regs) < 0)
		return -1;

	show_regs(regs);
	return 0;
}
Beispiel #3
0
static int isearch_reg(const char *term, char **arg,
		       struct isearch_query *q)
{
	int which = toupper(*term) == 'S' ?
		ISEARCH_SRC_REG : ISEARCH_DST_REG;
	const char *reg_text;
	int reg;

	if (q->flags & which) {
		printc_err("isearch: register already specified\n");
		return -1;
	}

	reg_text = get_arg(arg);
	if (!reg_text) {
		printc_err("isearch: register expected\n");
		return -1;
	}

	reg = dis_reg_from_name(reg_text);
	if (reg < 0) {
		printc_err("isearch: unknown register: %s\n",
			reg_text);
		return -1;
	}

	q->flags |= which;
	if (which == ISEARCH_SRC_REG)
		q->insn.src_reg = reg;
	else
		q->insn.dst_reg = reg;

	return 0;
}