Fill the fsbase and gsbase fields of the mcontext structure on i386.
In collaboration with: pho Discussed with: peter Reviewed by: jhb
This commit is contained in:
parent
0cdf4ffabc
commit
6ce76ba376
@ -589,6 +589,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
struct sigacts *psp;
|
||||
char *sp;
|
||||
struct trapframe *regs;
|
||||
struct segment_descriptor *sdp;
|
||||
int sig;
|
||||
int oonstack;
|
||||
|
||||
@ -625,6 +626,15 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
sf.sf_uc.uc_mcontext.mc_len = sizeof(sf.sf_uc.uc_mcontext); /* magic */
|
||||
get_fpcontext(td, &sf.sf_uc.uc_mcontext);
|
||||
fpstate_drop(td);
|
||||
/*
|
||||
* Unconditionally fill the fsbase and gsbase into the mcontext.
|
||||
*/
|
||||
sdp = &td->td_pcb->pcb_gsd;
|
||||
sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
|
||||
sdp->sd_lobase;
|
||||
sdp = &td->td_pcb->pcb_fsd;
|
||||
sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
|
||||
sdp->sd_lobase;
|
||||
|
||||
/* Allocate space for the signal handler context. */
|
||||
if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
|
||||
@ -3078,6 +3088,7 @@ int
|
||||
get_mcontext(struct thread *td, mcontext_t *mcp, int flags)
|
||||
{
|
||||
struct trapframe *tp;
|
||||
struct segment_descriptor *sdp;
|
||||
|
||||
tp = td->td_frame;
|
||||
|
||||
@ -3109,6 +3120,11 @@ get_mcontext(struct thread *td, mcontext_t *mcp, int flags)
|
||||
mcp->mc_ss = tp->tf_ss;
|
||||
mcp->mc_len = sizeof(*mcp);
|
||||
get_fpcontext(td, mcp);
|
||||
sdp = &td->td_pcb->pcb_gsd;
|
||||
mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
|
||||
sdp = &td->td_pcb->pcb_fsd;
|
||||
mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user