diff options
author | markus@chromium.org <markus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 01:54:09 +0000 |
---|---|---|
committer | markus@chromium.org <markus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 01:54:09 +0000 |
commit | 745cf67ad12fc84d7c96ecf5c4e571717bbde176 (patch) | |
tree | d7267cd546f4985568810da3f828c9b9e07dee54 /sandbox/wow_helper | |
parent | 92b16aa35c651c1077a4738a348275ef10327b3c (diff) | |
download | chromium_src-745cf67ad12fc84d7c96ecf5c4e571717bbde176.zip chromium_src-745cf67ad12fc84d7c96ecf5c4e571717bbde176.tar.gz chromium_src-745cf67ad12fc84d7c96ecf5c4e571717bbde176.tar.bz2 |
Added support for sigreturn() and rt_sigreturn(). On x86-32, this is
complicated by the fact that in Seccomp mode, we can only ever call
sigreturn(). But in order to eventually support sigaction(), we want to
be able to also call rt_sigreturn().
We solve this problem by rewriting the signal stack frame from an RT
signal frame to a legacy frame. Fortunately, this part of the signal
frame is stable between kernel versions. The unstable part (i.e. extended
registers such as FP, MMX, SSE, ...) is always identical in both in both
types of signal frames.
None of these complications exist on x86-64 and it is relatively
straight-forward to enable support for the system call. The only
difficulty lies in the fact that its calling conventions are somewhat
different from "normal" system calls. So, we have to handle rt_sigreturn()
from within the syscallWrapper() and the segv() handler and cannot write
it in C code.
TEST=ad hoc testing until we have support for sigaction(). Then we can add a unittest
BUG=37728
Review URL: http://codereview.chromium.org/1739011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45774 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sandbox/wow_helper')
0 files changed, 0 insertions, 0 deletions