9os

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

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:
March/arm64/arch.s | 4+++-
March/arm64/rom-none.c | 4----
Minclude/rcode.h | 2+-
Msrc/rmc.c | 6+++---
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) {