| From ralf@linux-mips.org Fri May 8 16:41:33 2015 |
| From: Ralf Baechle <ralf@linux-mips.org> |
| Date: Thu, 26 Feb 2015 11:11:30 +0000 |
| Subject: MIPS: asm: elf: Set O32 default FPU flags |
| To: stable@vger.kernel.org |
| Message-ID: <f082010117c14678fa75a70db9862e89735ab6d6.1431087908.git.ralf@linux-mips.org> |
| |
| |
| From: Markos Chandras <markos.chandras@imgtec.com> |
| |
| Commit 48f8eaee3f59848809644507fc47363b37e54450 upstream. |
| |
| Set good default FPU flags (FR0) for O32 binaries similar to what the |
| kernel does for the N64/N32 ones. This also fixes a regression |
| introduced in commit 46490b572544 ("MIPS: kernel: elf: Improve the |
| overall ABI and FPU mode checks") when MIPS_O32_FP64_SUPPORT is |
| disabled. In that case, the mips_set_personality_fp() did not set the |
| FPU mode at all because it assumed that the FPU mode was already set |
| properly. That led to O32 userland problems. |
| |
| Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> |
| Reported-by: Mans Rullgard <mans@mansr.com> |
| Fixes: 46490b572544 ("MIPS: kernel: elf: Improve the overall ABI and FPU mode checks") |
| Tested-by: Mans Rullgard <mans@mansr.com> |
| Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi> |
| Cc: Matthew Fortune <Matthew.Fortune@imgtec.com> |
| Cc: Paul Burton <paul.burton@imgtec.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: http://patchwork.linux-mips.org/patch/9344/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/mips/include/asm/elf.h | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/arch/mips/include/asm/elf.h |
| +++ b/arch/mips/include/asm/elf.h |
| @@ -294,6 +294,9 @@ do { \ |
| if (personality(current->personality) != PER_LINUX) \ |
| set_personality(PER_LINUX); \ |
| \ |
| + clear_thread_flag(TIF_HYBRID_FPREGS); \ |
| + set_thread_flag(TIF_32BIT_FPREGS); \ |
| + \ |
| mips_set_personality_fp(state); \ |
| \ |
| current->thread.abi = &mips_abi; \ |
| @@ -319,6 +322,8 @@ do { \ |
| do { \ |
| set_thread_flag(TIF_32BIT_REGS); \ |
| set_thread_flag(TIF_32BIT_ADDR); \ |
| + clear_thread_flag(TIF_HYBRID_FPREGS); \ |
| + set_thread_flag(TIF_32BIT_FPREGS); \ |
| \ |
| mips_set_personality_fp(state); \ |
| \ |