diff options
author | Rich Felker <dalias@aerifal.cx> | 2015-09-23 18:33:49 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-09-23 18:33:49 +0000 |
commit | b61df2294f662540786f2558f691eba7447ff5ba (patch) | |
tree | 097e5fc922c4379fe7291f9381fa4fb0b79c1228 /arch/mips/ksigaction.h | |
parent | 6c5cad2aa56745302c1d42d2c8baf6424d29c0f3 (diff) | |
download | musl-b61df2294f662540786f2558f691eba7447ff5ba.tar.gz musl-b61df2294f662540786f2558f691eba7447ff5ba.tar.xz musl-b61df2294f662540786f2558f691eba7447ff5ba.zip |
fix signal return for sh/fdpic
the restorer function pointer provided in the kernel sigaction structure is interpreted by the kernel as a raw code address, not a function descriptor. this commit moves the declarations of the __restore and __restore_rt symbols to ksigaction.h so that arch versions of the file can override them, and introduces a version for sh which declares them as objects rather than functions. an alternate solution would have been defining SA_RESTORER to 0 so that the functions are not used, but this both requires executable stack (since the sh kernel does not have a vdso page with permanent restorer functions) and crashes on qemu user-level emulation.
Diffstat (limited to 'arch/mips/ksigaction.h')
-rw-r--r-- | arch/mips/ksigaction.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/mips/ksigaction.h b/arch/mips/ksigaction.h index 6d731646..3127f7c0 100644 --- a/arch/mips/ksigaction.h +++ b/arch/mips/ksigaction.h @@ -7,3 +7,5 @@ struct k_sigaction { * mips-specific preprocessor conditionals in sigaction.c. */ void (*restorer)(); }; + +void __restore(), __restore_rt(); |