9os

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

commit c35cffa964d51d9d7c6c59e67b9fab562a928744
parent f189be4bc59d57d645cd80b48fbcea5ee36080d5
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Wed,  7 Nov 2018 11:53:17 +0000

[rcode] Split swtch() into C/asm parts

The C level part does an additional check to see if it should return
to the debug interpreter.

Change-Id: If75ac5f21989171adad309e687536ee1668c1d3c
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>

Diffstat:
March/amd64/arch.c | 3+--
March/arm64/arch.s | 4++--
Minclude/rcode.h | 1+
Msrc/rmc.c | 8++++++++
4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/amd64/arch.c b/arch/amd64/arch.c @@ -4,7 +4,6 @@ #include <rcode.h> - jmp_buf recover; _Noreturn void abort(void); @@ -16,7 +15,7 @@ halt(void) } void -swtch(struct trapframe *fp) +doswtch(struct trapframe *fp) { longjmp(recover, 1); } diff --git a/arch/arm64/arch.s b/arch/arm64/arch.s @@ -6,7 +6,7 @@ .globl rd_id_aa64rmfr0_r,wr_id_aa64rmfr0_r .globl rd_rcr_r,wr_rcr_r,rd_rdscr_r,wr_rdscr_r .globl rd_sctlr_r,wr_sctlr_r,rd_rvbar_el3 - .globl vectbl,swtch,isb,inm8,inm16,inm32 + .globl vectbl,doswtch,isb,inm8,inm16,inm32 .globl outm8,outm16,outm32 enaint: @@ -132,7 +132,7 @@ outsync: .asciz "out of sync" .text -swtch: +doswtch: ldp x9,x10,[x0,#16*17] msr S3_6_C6_C0_6,x10 /* FAR_R */ mov sp,x9 diff --git a/include/rcode.h b/include/rcode.h @@ -158,6 +158,7 @@ extern _Noreturn void dopanic(void); extern _Noreturn void panic(const char *msg); 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); diff --git a/src/rmc.c b/src/rmc.c @@ -75,6 +75,14 @@ panic(const char *msg) } void +swtch(struct trapframe *fp) +{ + if (bss->in_debug) + longjmp(bss->dbgrecover, 1); + doswtch(fp); +} + +void trap(struct trapframe *fp) { Rmucmd cmd;