Index: aarch64/cpuswitch.S =================================================================== RCS file: /cvsroot/src/sys/arch/aarch64/aarch64/cpuswitch.S,v retrieving revision 1.10 diff -p -u -r1.10 cpuswitch.S --- aarch64/cpuswitch.S 13 Dec 2018 10:44:25 -0000 1.10 +++ aarch64/cpuswitch.S 21 Dec 2018 07:48:42 -0000 @@ -73,6 +73,10 @@ ENTRY_NP(cpu_switchto) str x5, [x0, #L_MD_CPACR] #endif + /* Save the stack pointer for kvm. */ + ldr x6, [x0, #L_PCB] /* x6 = lwp_getpcb(oldlwp) */ + str x4, [x6, #PCB_SP] + /* We are done with the old lwp */ .Lrestore_lwp: Index: aarch64/genassym.cf =================================================================== RCS file: /cvsroot/src/sys/arch/aarch64/aarch64/genassym.cf,v retrieving revision 1.11 diff -p -u -r1.11 genassym.cf --- aarch64/genassym.cf 13 Dec 2018 10:44:25 -0000 1.11 +++ aarch64/genassym.cf 21 Dec 2018 07:48:42 -0000 @@ -229,6 +229,8 @@ define VM_PMAP offsetof(struct vmspace define SIGTRAP SIGTRAP define SIGEMT SIGEMT +define PCB_SP offsetof(struct pcb, pcb_sp) + define TF_X0 offsetof(struct trapframe, tf_reg[0]) define TF_X1 offsetof(struct trapframe, tf_reg[1]) define TF_X2 offsetof(struct trapframe, tf_reg[2]) Index: include/pcb.h =================================================================== RCS file: /cvsroot/src/sys/arch/aarch64/include/pcb.h,v retrieving revision 1.1 diff -p -u -r1.1 pcb.h --- include/pcb.h 10 Aug 2014 05:47:38 -0000 1.1 +++ include/pcb.h 21 Dec 2018 07:48:42 -0000 @@ -38,6 +38,7 @@ struct pcb { struct fpreg pcb_fpregs; + uint64_t pcb_sp; }; struct md_coredump {