Fixed register name parsing.
This commit is contained in:
parent
39b71c5292
commit
ea7be28f18
13
devcmd.c
13
devcmd.c
|
@ -240,17 +240,14 @@ static int cmd_set(cproc_t cp, char **arg)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (*reg_text && !isdigit(*reg_text))
|
reg = dis_reg_from_name(reg_text);
|
||||||
reg_text++;
|
if (reg < 0) {
|
||||||
reg = atoi(reg_text);
|
fprintf(stderr, "set: unknown register: %s\n", reg_text);
|
||||||
|
|
||||||
if (expr_eval(stab, val_text, &value) < 0) {
|
|
||||||
fprintf(stderr, "set: can't parse value: %s\n", val_text);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg < 0 || reg >= DEVICE_NUM_REGS) {
|
if (expr_eval(stab, val_text, &value) < 0) {
|
||||||
fprintf(stderr, "set: register out of range: %d\n", reg);
|
fprintf(stderr, "set: can't parse value: %s\n", val_text);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
dis.c
27
dis.c
|
@ -526,7 +526,7 @@ const char *dis_opcode_name(msp430_op_t op)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
msp430_op_t dis_opcode_from_name(const char *name)
|
int dis_opcode_from_name(const char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -544,19 +544,9 @@ static const char *const msp430_reg_names[] = {
|
||||||
"R12", "R13", "R14", "R15"
|
"R12", "R13", "R14", "R15"
|
||||||
};
|
};
|
||||||
|
|
||||||
msp430_reg_t dis_reg_from_name(const char *name)
|
int dis_reg_from_name(const char *name)
|
||||||
{
|
{
|
||||||
const char *num = name;
|
int i;
|
||||||
|
|
||||||
while (num && isdigit(*num))
|
|
||||||
num++;
|
|
||||||
|
|
||||||
if (*num) {
|
|
||||||
msp430_reg_t r = atoi(num);
|
|
||||||
|
|
||||||
if (r >= 0 && r <= 15)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcasecmp(name, "pc"))
|
if (!strcasecmp(name, "pc"))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -565,7 +555,18 @@ msp430_reg_t dis_reg_from_name(const char *name)
|
||||||
if (!strcasecmp(name, "sr"))
|
if (!strcasecmp(name, "sr"))
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
|
if (toupper(*name) == 'R')
|
||||||
|
name++;
|
||||||
|
|
||||||
|
for (i = 0; name[i]; i++)
|
||||||
|
if (!isdigit(name[i]))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
i = atoi(name);
|
||||||
|
if (i < 0 || i > 15)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *dis_reg_name(msp430_reg_t reg)
|
const char *dis_reg_name(msp430_reg_t reg)
|
||||||
|
|
4
dis.h
4
dis.h
|
@ -207,9 +207,9 @@ int dis_decode(const uint8_t *code,
|
||||||
struct msp430_instruction *insn);
|
struct msp430_instruction *insn);
|
||||||
|
|
||||||
/* Look up names for registers and opcodes */
|
/* Look up names for registers and opcodes */
|
||||||
msp430_op_t dis_opcode_from_name(const char *name);
|
int dis_opcode_from_name(const char *name);
|
||||||
const char *dis_opcode_name(msp430_op_t op);
|
const char *dis_opcode_name(msp430_op_t op);
|
||||||
msp430_reg_t dis_reg_from_name(const char *name);
|
int dis_reg_from_name(const char *name);
|
||||||
const char *dis_reg_name(msp430_reg_t reg);
|
const char *dis_reg_name(msp430_reg_t reg);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
15
rtools.c
15
rtools.c
|
@ -54,6 +54,7 @@ static int isearch_opcode(cproc_t cp, const char *term, char **arg,
|
||||||
struct isearch_query *q)
|
struct isearch_query *q)
|
||||||
{
|
{
|
||||||
const char *opname = get_arg(arg);
|
const char *opname = get_arg(arg);
|
||||||
|
int opc;
|
||||||
|
|
||||||
if (q->flags & ISEARCH_OPCODE) {
|
if (q->flags & ISEARCH_OPCODE) {
|
||||||
fprintf(stderr, "isearch: opcode already specified\n");
|
fprintf(stderr, "isearch: opcode already specified\n");
|
||||||
|
@ -65,11 +66,12 @@ static int isearch_opcode(cproc_t cp, const char *term, char **arg,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
q->insn.op = dis_opcode_from_name(opname);
|
opc = dis_opcode_from_name(opname);
|
||||||
if (q->insn.op < 0) {
|
if (opc < 0) {
|
||||||
fprintf(stderr, "isearch: unknown opcode: %s\n", opname);
|
fprintf(stderr, "isearch: unknown opcode: %s\n", opname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
q->insn.op = opc;
|
||||||
|
|
||||||
q->flags |= ISEARCH_OPCODE;
|
q->flags |= ISEARCH_OPCODE;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -170,9 +172,12 @@ static int isearch_reg(cproc_t cp, const char *term, char **arg,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (*reg_text && !isdigit(*reg_text))
|
reg = dis_reg_from_name(reg_text);
|
||||||
reg_text++;
|
if (reg < 0) {
|
||||||
reg = atoi(reg_text);
|
fprintf(stderr, "isearch: unknown register: %s\n",
|
||||||
|
reg_text);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
q->flags |= which;
|
q->flags |= which;
|
||||||
if (which == ISEARCH_SRC_REG)
|
if (which == ISEARCH_SRC_REG)
|
||||||
|
|
Loading…
Reference in New Issue