diff options
author | peter <peter@FreeBSD.org> | 2002-10-25 19:10:58 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2002-10-25 19:10:58 +0000 |
commit | f7fa86b743f4851065b80a704e7ee6c9922b5bda (patch) | |
tree | 96a1089f558875f808b1fd36f885179cd78f55de /sys/i386/include/ucontext.h | |
parent | c689b5c88a817d10910bb530d1a68187b58db634 (diff) | |
download | FreeBSD-src-f7fa86b743f4851065b80a704e7ee6c9922b5bda.zip FreeBSD-src-f7fa86b743f4851065b80a704e7ee6c9922b5bda.tar.gz |
Split 4.x and 5.x signal handling so that we can keep 4.x signal
handling clean and functional as 5.x evolves. This allows some of the
nasty bandaids in the 5.x codepaths to be unwound.
Encapsulate 4.x signal handling under COMPAT_FREEBSD4 (there is an
anti-foot-shooting measure in place, 5.x folks need this for a while) and
finish encapsulating the older stuff under COMPAT_43. Since the ancient
stuff is required on alpha (longjmp(3) passes a 'struct osigcontext *'
to the current sigreturn(2), instead of the 'ucontext_t *' that sigreturn
is supposed to take), add a compile time check to prevent foot shooting
there too. Add uniform COMPAT_43 stubs for ia64/sparc64/powerpc.
Tested on: i386, alpha, ia64. Compiled on sparc64 (a few days ago).
Approved by: re
Diffstat (limited to 'sys/i386/include/ucontext.h')
-rw-r--r-- | sys/i386/include/ucontext.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/i386/include/ucontext.h b/sys/i386/include/ucontext.h index d02959c..af9b4fd 100644 --- a/sys/i386/include/ucontext.h +++ b/sys/i386/include/ucontext.h @@ -73,6 +73,34 @@ typedef struct __mcontext { } mcontext_t; #ifdef _KERNEL +#ifdef COMPAT_FREEBSD4 +/* For 4.x binaries */ +struct mcontext4 { + int mc_onstack; /* XXX - sigcontext compat. */ + int mc_gs; + int mc_fs; + int mc_es; + int mc_ds; + int mc_edi; + int mc_esi; + int mc_ebp; + int mc_isp; + int mc_ebx; + int mc_edx; + int mc_ecx; + int mc_eax; + int mc_trapno; + int mc_err; + int mc_eip; + int mc_cs; + int mc_eflags; + int mc_esp; /* machine state */ + int mc_ss; + int mc_fpregs[28]; /* env87 + fpacc87 + u_long */ + int __spare__[17]; +}; +#endif + struct thread; void get_mcontext(struct thread *td, mcontext_t *mcp); |