diff options
author | deischen <deischen@FreeBSD.org> | 2002-01-10 02:32:30 +0000 |
---|---|---|
committer | deischen <deischen@FreeBSD.org> | 2002-01-10 02:32:30 +0000 |
commit | f70fe994fa68e0808a81a45ceac9ac601ec99b40 (patch) | |
tree | e609c87db3eb6c094b3557905385dd042dff73fa /sys/amd64 | |
parent | 2d507f0adf63fb1f2fe94079fc6c9a701218999d (diff) | |
download | FreeBSD-src-f70fe994fa68e0808a81a45ceac9ac601ec99b40.zip FreeBSD-src-f70fe994fa68e0808a81a45ceac9ac601ec99b40.tar.gz |
Use a spare slot in the machine context for a flags word to indicate
whether the machine context is valid and whether the FPU state is
valid (saved).
Mark the machine context valid before copying it out when sending a
signal.
Approved by: -arch
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/machdep.c | 1 | ||||
-rw-r--r-- | sys/amd64/include/ucontext.h | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 349a140..7938159 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -463,6 +463,7 @@ sendsig(catcher, sig, mask, code) ? ((oonstack) ? SS_ONSTACK : 0) : SS_DISABLE; sf.sf_uc.uc_mcontext.mc_onstack = (oonstack) ? 1 : 0; sf.sf_uc.uc_mcontext.mc_gs = rgs(); + sf.sf_uc.uc_mcontext.mc_flags = __UC_MC_VALID; /* no FP regs */ bcopy(regs, &sf.sf_uc.uc_mcontext.mc_fs, sizeof(*regs)); /* Allocate and validate space for the signal handler context. */ diff --git a/sys/amd64/include/ucontext.h b/sys/amd64/include/ucontext.h index c0a3aa8..a84a2cb 100644 --- a/sys/amd64/include/ucontext.h +++ b/sys/amd64/include/ucontext.h @@ -59,7 +59,10 @@ typedef struct __mcontext { int mc_ss; int mc_fpregs[28]; /* env87 + fpacc87 + u_long */ - int __spare__[17]; +#define __UC_MC_VALID 0x0001 /* mcontext register state is valid */ +#define __UC_FP_VALID 0x0002 /* FP registers have been saved */ + int mc_flags; + int __spare__[16]; } mcontext_t; #endif /* !_MACHINE_UCONTEXT_H_ */ |