commit 4b99adf7bccd2227ad98141742d0391c30b7b40a
parent 33853e989308f09b40d1f5e9a8119c57b023be19
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Wed, 7 Nov 2018 16:14:31 +0000
[debuglang] Pass struct args all the way down
We might want to allow commands to return something via the args
struct in the future.
Change-Id: If124e1753291643ae09fb8eaa265354fb06dd184
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/src/debuglang/debuglang.c b/src/debuglang/debuglang.c
@@ -14,17 +14,17 @@
#define NR_ARGC_MAX 16
#define toascii(c) ((c) & 0x7f)
-struct cmd {
- char *name;
- int (*eval)(char **argv, int argc);
- char *helpmsg;
-};
-
struct args {
char *argv[NR_ARGC_MAX];
int argc;
};
+struct cmd {
+ char *name;
+ int (*eval)(struct args *args);
+ char *helpmsg;
+};
+
struct named_reg {
char *name;
size_t offset;
@@ -134,23 +134,23 @@ get_cmd(char *name)
}
static int
-do_set(char **argv, int argc)
+do_set(struct args *args)
{
unsigned long long *reg = NULL;
unsigned long long setval = 0;
unsigned int base;
- reg = get_named_reg(argv[1]);
+ reg = get_named_reg(args->argv[1]);
if (reg == NULL)
- error("Register '%s' not found", argv[1]);
+ error("Register '%s' not found", args->argv[1]);
base = 0;
- switch (argc) {
+ switch (args->argc) {
case 4:
- base = estrtoull(argv[3], 10);
+ base = estrtoull(args->argv[3], 10);
/* fallthrough */
case 3:
- setval = estrtoull(argv[2], base);
+ setval = estrtoull(args->argv[2], base);
break;
default:
error("Invalid number of parameters for set");
@@ -161,18 +161,18 @@ do_set(char **argv, int argc)
}
static int
-do_get(char **argv, int argc)
+do_get(struct args *args)
{
unsigned long long *reg = NULL;
char *fmt;
- reg = get_named_reg(argv[1]);
+ reg = get_named_reg(args->argv[1]);
if (reg == NULL)
- error("Register '%s' not found", argv[1]);
+ error("Register '%s' not found", args->argv[1]);
- switch (argc) {
+ switch (args->argc) {
case 3:
- switch (estrtoull(argv[2], 10)) {
+ switch (estrtoull(args->argv[2], 10)) {
case 10:
fmt="%llu\n";
break;
@@ -181,7 +181,7 @@ do_get(char **argv, int argc)
break;
default:
error("Unsupported base for read:%s\nsupported: 10,16",
- argv[2]);
+ args->argv[2]);
}
break;
case 2:
@@ -195,21 +195,21 @@ do_get(char **argv, int argc)
}
static int
-do_dump(char **argv, int argc)
+do_dump(struct args *args)
{
print_tf(bss->fp);
return 0;
}
static int
-do_trap(char **argv, int argc)
+do_trap(struct args *args)
{
trap(bss->fp);
return 0;
}
static int
-do_rmc(char **argv, int argc)
+do_rmc(struct args *args)
{
unsigned char class;
unsigned char func;
@@ -217,18 +217,18 @@ do_rmc(char **argv, int argc)
const struct rmudesc *rmudesc;
base = 0;
- switch (argc) {
+ switch (args->argc) {
case 4:
- base = estrtoull(argv[3], 10);
+ base = estrtoull(args->argv[3], 10);
/* fallthrough */
case 3:
- class = estrtoull(argv[1], base);
- func = estrtoull(argv[2], base);
+ class = estrtoull(args->argv[1], base);
+ func = estrtoull(args->argv[2], base);
break;
case 2:
- rmudesc = get_rmudesc(argv[1]);
+ rmudesc = get_rmudesc(args->argv[1]);
if (rmudesc == NULL)
- error("rmc '%s' not found", argv[1]);
+ error("rmc '%s' not found", args->argv[1]);
class = rmudesc->class;
func = rmudesc->func;
break;
@@ -279,11 +279,10 @@ parse_cmd(char *buf, struct args *args)
}
static int
-run(void)
+run(struct args *args)
{
const struct cmd *cmd;
size_t len;
- struct args args;
char buffer[BUFSIZ];
if (fgets(buffer, sizeof(buffer), stdin) == NULL)
@@ -293,9 +292,9 @@ run(void)
if (buffer[len-1] != '\n')
error("line too long");
buffer[len-1] = '\0';
- cmd = parse_cmd(buffer, &args);
+ cmd = parse_cmd(buffer, args);
if (cmd)
- cmd->eval(args.argv, args.argc);
+ cmd->eval(args);
}
return 1;
}
@@ -303,6 +302,8 @@ run(void)
void
debug(void)
{
+ struct args args;
+
bss->in_debug = 1;
setvbuf(stdin, NULL, _IOLBF, 0);
@@ -311,7 +312,7 @@ debug(void)
setjmp(bss->dbgrecover);
- for (ready(); run(); ready())
+ for (ready(); run(&args); ready())
;
if (ferror(stdout))