commit ecdcf5acce1be22f4ff40e9aa7b94ddc1e708bc7
parent 9ff7053024b9e0ab35212a20c08fc4ed089cab8a
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Wed, 7 Nov 2018 14:54:41 +0000
[debuglang] Use trapframe from bss
Change-Id: I23c4036bca1cbf786182096143690bbf513c4fec
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
4 files changed, 26 insertions(+), 28 deletions(-)
diff --git a/arch/amd64/ram.c b/arch/amd64/ram.c
@@ -3,8 +3,7 @@
int
main(int argc, char *argv[])
{
- struct trapframe frame = { 0 };
-
- debug(&frame);
+ bss->fp = &(struct trapframe) {0};
+ debug();
return 0;
}
diff --git a/arch/amd64/rom.c b/arch/amd64/rom.c
@@ -3,8 +3,7 @@
int
main(int argc, char *argv[])
{
- struct trapframe frame = { 0 };
-
- debug(&frame);
+ bss->fp = &(struct trapframe) {0};
+ debug();
return 0;
}
diff --git a/include/rcode.h b/include/rcode.h
@@ -160,7 +160,7 @@ extern void printk(const char * restrict fmt, ...) PRINTKFMT;
extern void rmc(Rmucmd *cmd);
extern _Noreturn void doswtch(struct trapframe *fp);
extern _Noreturn void swtch(struct trapframe *fp);
-extern void debug(struct trapframe *fp);
+extern void debug(void);
/* architectural functions */
extern _Noreturn void halt(void);
diff --git a/src/debuglang/debuglang.c b/src/debuglang/debuglang.c
@@ -15,7 +15,7 @@
struct cmd {
char *name;
- int (*eval)(char **argv, int argc, struct trapframe *fp);
+ int (*eval)(char **argv, int argc);
char *helpmsg;
};
@@ -93,7 +93,7 @@ estrtoull(char *str, int base)
/* Get reg struct for named reg */
static unsigned long long *
-get_named_reg(char *name, struct trapframe *fp)
+get_named_reg(char *name)
{
char *regptr;
const struct named_reg *rp;
@@ -101,7 +101,7 @@ get_named_reg(char *name, struct trapframe *fp)
regptr = NULL;
for (rp = named_regs; rp->name; ++rp) {
if (strcmp(name, rp->name) == 0) {
- regptr = (char *) fp;
+ regptr = (char *) bss->fp;
regptr += rp->offset;
}
}
@@ -133,13 +133,13 @@ get_cmd(char *name)
}
static int
-do_set(char **argv, int argc, struct trapframe *fp)
+do_set(char **argv, int argc)
{
unsigned long long *reg = NULL;
unsigned long long setval = 0;
unsigned int base;
- reg = get_named_reg(argv[1], fp);
+ reg = get_named_reg(argv[1]);
if (reg == NULL)
error("Register '%s' not found", argv[1]);
@@ -160,12 +160,12 @@ do_set(char **argv, int argc, struct trapframe *fp)
}
static int
-do_get(char **argv, int argc, struct trapframe *fp)
+do_get(char **argv, int argc)
{
unsigned long long *reg = NULL;
char *fmt;
- reg = get_named_reg(argv[1], fp);
+ reg = get_named_reg(argv[1]);
if (reg == NULL)
error("Register '%s' not found", argv[1]);
@@ -194,21 +194,21 @@ do_get(char **argv, int argc, struct trapframe *fp)
}
static int
-do_dump(char **argv, int argc, struct trapframe *fp)
+do_dump(char **argv, int argc)
{
- print_tf(fp);
+ print_tf(bss->fp);
return 0;
}
static int
-do_trap(char **argv, int argc, struct trapframe *fp)
+do_trap(char **argv, int argc)
{
- trap(fp);
+ trap(bss->fp);
return 0;
}
static int
-do_rmc(char **argv, int argc, struct trapframe *fp)
+do_rmc(char **argv, int argc)
{
unsigned char class;
unsigned char func;
@@ -235,15 +235,15 @@ do_rmc(char **argv, int argc, struct trapframe *fp)
error("Invalid number of parameters for rmc");
}
dbg("class: %d,func:%d\n", class, func);
- fp->esr = (unsigned long long) RMC << 26;
- fp->esr |= class;
- fp->esr |= (func << 8);
- trap(fp);
+ bss->fp->esr = (unsigned long long) RMC << 26;
+ bss->fp->esr |= class;
+ bss->fp->esr |= (func << 8);
+ trap(bss->fp);
return 0;
}
static int
-do_help(char **argv, int argc, struct trapframe *fp)
+do_help(char **argv, int argc)
{
const struct cmd *cmd;
@@ -278,7 +278,7 @@ parse_cmd(char *buf, struct args *args)
}
static int
-run(struct trapframe *tf)
+run(void)
{
const struct cmd *cmd;
size_t len;
@@ -294,13 +294,13 @@ run(struct trapframe *tf)
buffer[len-1] = '\0';
cmd = parse_cmd(buffer, &args);
if (cmd)
- cmd->eval(args.argv, args.argc, tf);
+ cmd->eval(args.argv, args.argc);
}
return 1;
}
void
-debug(struct trapframe *fp)
+debug(void)
{
bss->in_debug = 1;
@@ -310,7 +310,7 @@ debug(struct trapframe *fp)
setjmp(bss->dbgrecover);
- for (ready(); run(fp); ready())
+ for (ready(); run(); ready())
;
if (ferror(stdout))