Index: sys/arch/aarch64/aarch64/vm_machdep.c =================================================================== RCS file: /home/netbsd/src/sys/arch/aarch64/aarch64/vm_machdep.c,v retrieving revision 1.8 diff -p -u -r1.8 vm_machdep.c --- sys/arch/aarch64/aarch64/vm_machdep.c 23 May 2020 18:08:59 -0000 1.8 +++ sys/arch/aarch64/aarch64/vm_machdep.c 14 Oct 2020 10:56:44 -0000 @@ -143,11 +143,17 @@ cpu_lwp_fork(struct lwp *l1, struct lwp *utf = *l1->l_md.md_utf; /* - * If specified, give the child a different stack - * (make sure it's 16-byte aligned). + * If specified, give the child a different stack (make sure it's + * 16- or 8-byte aligned for 64- or 32-bit processes, respectively). */ - if (stack != NULL) - utf->tf_sp = ((vaddr_t)(stack) + stacksize) & -16; + if (stack != NULL) { + utf->tf_sp = (vaddr_t)(stack) + stacksize; + if (__predict_false(l2->l_proc->p_flag & PK_32)) { + utf->tf_sp &= -8; + utf->tf_reg[13] = utf->tf_sp; + } else + utf->tf_sp &= -16; + } /* build a new switchframe */ struct trapframe * const ktf = utf - 1;