diff options
author | peter <peter@FreeBSD.org> | 2003-10-15 02:04:52 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2003-10-15 02:04:52 +0000 |
commit | 8f60b15573bbc5ccd0cf8c55a2305c44dbbe1887 (patch) | |
tree | ca3ee7b40d4d7fdc5c4367c1155f908ae82c000e /sys/amd64/include/signal.h | |
parent | 1e073a3aa6dc2f45cd340e05614e5d44fa33c4fe (diff) | |
download | FreeBSD-src-8f60b15573bbc5ccd0cf8c55a2305c44dbbe1887.zip FreeBSD-src-8f60b15573bbc5ccd0cf8c55a2305c44dbbe1887.tar.gz |
Pull the tier-2 card one last time and break the get/setcontext and
sigreturn() ABI and the signal context on the stack.
Make the trapframe (and its shadows in the ucontext and sigframe etc)
8 bytes larger in order to preserve 16 byte stack alignment for the
following C code calls. I could have done some padding after the
trapframe was saved, but some of the C code still expects an argument of
'struct trapframe'. Anyway, this gives me a spare field that can be used
to store things like 'partial trapframe' status or something else in
the future.
The runtime impact is fairly small, *except* for threaded apps and things
that decode contexts and the signal stack (eg: cvsup binary). Signal
delivery isn't too badly affected because the kernel generates the
sigframe that sigreturn uses after the handler has been called.
The size of mcontext_t and struct sigframe hasn't changed. Only
the last few fields (sc_eip etc) got moved a little and I eliminated
a spare field. mc_len/sc_len did change location though so the
sanity checks there will still trap it.
Diffstat (limited to 'sys/amd64/include/signal.h')
-rw-r--r-- | sys/amd64/include/signal.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/amd64/include/signal.h b/sys/amd64/include/signal.h index 46b35ab..9aad84a 100644 --- a/sys/amd64/include/signal.h +++ b/sys/amd64/include/signal.h @@ -91,6 +91,7 @@ struct sigcontext { long sc_r15; long sc_trapno; long sc_addr; + long sc_flags; long sc_err; long sc_rip; long sc_cs; @@ -104,9 +105,8 @@ struct sigcontext { */ long sc_fpformat; long sc_ownedfp; - long sc_spare1[1]; long sc_fpstate[64] __aligned(16); - long sc_spare2[8]; + long sc_spare[8]; }; #endif /* __BSD_VISIBLE */ |