9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msrc/debuglang/debuglang.c | 65+++++++++++++++++++++++++++++++++--------------------------------
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))