Added struct proc pointer to base of the executable args block
[akaros.git] / kern / arch / riscv / entry.S
index bc3da6f..87dee12 100644 (file)
@@ -1,6 +1,6 @@
 #include <arch/pcr.h>
 #include <arch/trap.h>
-#include <ros/memlayout.h>
+#include <kstack.h>
 
 #ifdef __riscv64
 # define STORE    sd
@@ -38,6 +38,7 @@ save_kernel_tf_asm:
   STORE  ra,33*REGBYTES(a0)
   ret
 
+# Remove these (or this comment) when implementing setjmp on riscv.
   .text
   .global pop_kernel_ctx
 pop_kernel_ctx:
@@ -66,16 +67,17 @@ save_tf:  # write the trap frame onto the stack
 
   ret
 
-  .globl  env_pop_tf
-env_pop_tf:  # write the trap frame onto the stack
-  # restore gprs
-  LOAD  v0,32*REGBYTES(a0)  # restore sr (should disable interrupts)
+  .globl  pop_hw_tf
+pop_hw_tf:  # write the trap frame onto the stack
+  # restore SR.{PS, EF, U64} and disable interrupts
+  LOAD  v0,32*REGBYTES(a0)
   mfpcr v1, ASM_CR(PCR_SR)
-  andi  v1, v1, ~(SR_PS | SR_EF | SR_U64)
-  andi  v0, v0, SR_PS | SR_EF | SR_U64
+  andi  v0, v0,  (SR_PS | SR_EF | SR_U64)
+  andi  v1, v1, ~(SR_PS | SR_EF | SR_U64 | SR_ET)
   or    v0, v0, v1
   mtpcr v0, ASM_CR(PCR_SR)
 
+  # restore gprs
   LOAD  x1,1*REGBYTES(a0)
   mtpcr  x1,ASM_CR(PCR_K0)
   LOAD  x1,2*REGBYTES(a0)