commit 90807ab446c846b051f45a6bc164553c989e157f
parent 2325fcee1b723ddb76de59e811eddd4b84683cfb
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Wed, 17 Oct 2018 11:41:53 +0100
[rmc] Fix some problems in the panic implementation
- The low level panic function has to switch the SP to SP_R
- Fix dumpstack
Change-Id: Id7ad8056b0f39deef226848f03fe847e5ccade35
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
4 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/arch.s b/arch/arm64/arch.s
@@ -1,7 +1,7 @@
.file "arch.s"
.text
- .globl panic,halt,enaint,exception
+ .globl panic,halt,enaint,dopanic
.globl rd_actlr_r,wr_actlr_r
.globl rd_id_aa64rmfr0_r,wr_id_aa64rmfr0_r
.globl rd_rcr_r,wr_rcr_r,rd_rdscr_r,wr_rdscr_r
@@ -97,6 +97,8 @@ halt:
wfe
b halt
+dopanic:
+ msr spsel,#1
exception:
stp x1,x0,[sp,#-16]!
stp x3,x2,[sp,#-16]!
diff --git a/arch/arm64/rom-none.c b/arch/arm64/rom-none.c
@@ -42,8 +42,4 @@ main(void *text, void *ram, size_t ramsiz)
text, ram, ramsiz);
swtch(fp);
- /*
- * main is not expected to return. If it happens we will
- * be out of sync and we will panic
- */
}
diff --git a/include/rcode.h b/include/rcode.h
@@ -111,8 +111,8 @@ bss(void)
#define bss bss()
extern void trap(struct trapframe *fp);
-extern void exception(void);
extern void badrmc(int error);
+extern void dopanic(void);
extern void panic(const char *msg);
extern void printk(const char * restrict fmt, ...);
extern void rmc(Rmucmd *cmd);
diff --git a/src/rmc.c b/src/rmc.c
@@ -45,7 +45,7 @@ dumpstack(struct trapframe *fp)
return;
printk("stack dump:\n");
sp = fp->sp;
- for (i = 0; i < 16; i++)
+ for (i = 1; i <= 16; i++)
printk("%x%c", *sp++, (i % 4 == 0) ? '\n' : ' ');
}
@@ -70,7 +70,7 @@ void
panic(const char *msg)
{
bss->errstr = msg;
- exception();
+ dopanic();
}
void
@@ -78,7 +78,7 @@ trap(struct trapframe *fp)
{
Rmucmd cmd;
enum ecvals ec;
- char *msg;
+ const char *msg;
dbg("exception handler\n");
if (bss->errstr) {