Clarify a potential issue in get_fpcontext() use.

MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2010-05-27 18:33:00 +00:00
parent b367632ec2
commit eee6151f46

View File

@ -633,6 +633,13 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
sf.sf_uc.uc_mcontext.mc_gs = rgs();
bcopy(regs, &sf.sf_uc.uc_mcontext.mc_fs, sizeof(*regs));
sf.sf_uc.uc_mcontext.mc_len = sizeof(sf.sf_uc.uc_mcontext); /* magic */
/*
* The get_fpcontext() call must be placed before assignments
* to mc_fsbase and mc_gsbase due to the alignment-override
* code in get_fpcontext() that possibly clobbers 12 bytes of
* mcontext after mc_fpstate.
*/
get_fpcontext(td, &sf.sf_uc.uc_mcontext);
fpstate_drop(td);
/*
@ -3240,6 +3247,13 @@ get_mcontext(struct thread *td, mcontext_t *mcp, int flags)
mcp->mc_esp = tp->tf_esp;
mcp->mc_ss = tp->tf_ss;
mcp->mc_len = sizeof(*mcp);
/*
* The get_fpcontext() call must be placed before assignments
* to mc_fsbase and mc_gsbase due to the alignment-override
* code in get_fpcontext() that possibly clobbers 12 bytes of
* mcontext after mc_fpstate.
*/
get_fpcontext(td, mcp);
sdp = &td->td_pcb->pcb_gsd;
mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;