From: Warner Losh Date: Mon, 24 Jan 2022 08:29:53 +0000 (-0700) Subject: bsd-user/arm/signal.c: get_mcontext should zero vfp data X-Git-Tag: v7.0.0~110^2~36 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=7f96d0a93c9f252fc65b0ad49121a62889ec560e;p=mirror_qemu.git bsd-user/arm/signal.c: get_mcontext should zero vfp data FreeBSD's get_mcontext doesn't return any vfp data. Instead, it zeros out the vfp feilds (and all the spare fields). Impelement this behavior. We're still missing the sysarch(ARM_GET_VFPCONTEXT) syscall, though. Signed-off-by: Warner Losh Reviewed-by: Richard Henderson --- diff --git a/bsd-user/arm/signal.c b/bsd-user/arm/signal.c index 9026343b47..2b1dd745d1 100644 --- a/bsd-user/arm/signal.c +++ b/bsd-user/arm/signal.c @@ -109,6 +109,15 @@ abi_long get_mcontext(CPUARMState *env, target_mcontext_t *mcp, int flags) gr[TARGET_REG_LR] = tswap32(env->regs[14]); gr[TARGET_REG_PC] = tswap32(env->regs[15]); + /* + * FreeBSD's get_mcontext doesn't save VFP info, but sets the pointer and + * size to zero. Applications that need the VFP state use + * sysarch(ARM_GET_VFPSTATE) and are expected to adjust mcontext after that. + */ + mcp->mc_vfp_size = 0; + mcp->mc_vfp_ptr = 0; + memset(&mcp->mc_spare, 0, sizeof(mcp->mc_spare)); + return 0; }