| From 41fa29e4d8cf4150568a0fe9bb4d62229f9caed5 Mon Sep 17 00:00:00 2001 |
| From: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com> |
| Date: Tue, 28 Apr 2015 12:53:35 -0700 |
| Subject: MIPS64: R6: R2 emulation bugfix |
| |
| From: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com> |
| |
| commit 41fa29e4d8cf4150568a0fe9bb4d62229f9caed5 upstream. |
| |
| Error recovery pointers for fixups was improperly set as ".word" |
| which is unsuitable for MIPS64. |
| |
| Replaced by STR(PTR) |
| |
| [ralf@linux-mips.org: Apply changes as requested in the review process.] |
| |
| Signed-off-by: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com> |
| Reviewed-by: James Hogan <james.hogan@imgtec.com> |
| Reviewed-by: Markos Chandras <markos.chandras@imgtec.com> |
| Fixes: b0a668fb2038 ("MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6") |
| Cc: macro@linux-mips.org |
| Cc: linux-mips@linux-mips.org |
| Cc: linux-kernel@vger.kernel.org |
| Patchwork: https://patchwork.linux-mips.org/patch/9911/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/mips/kernel/mips-r2-to-r6-emul.c | 105 +++++++++++++++++----------------- |
| 1 file changed, 53 insertions(+), 52 deletions(-) |
| |
| --- a/arch/mips/kernel/mips-r2-to-r6-emul.c |
| +++ b/arch/mips/kernel/mips-r2-to-r6-emul.c |
| @@ -28,6 +28,7 @@ |
| #include <asm/inst.h> |
| #include <asm/mips-r2-to-r6-emul.h> |
| #include <asm/local.h> |
| +#include <asm/mipsregs.h> |
| #include <asm/ptrace.h> |
| #include <asm/uaccess.h> |
| |
| @@ -1251,10 +1252,10 @@ fpu_emul: |
| " j 10b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1326,10 +1327,10 @@ fpu_emul: |
| " j 10b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1397,10 +1398,10 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1467,10 +1468,10 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1582,14 +1583,14 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| - " .word 5b,8b\n" |
| - " .word 6b,8b\n" |
| - " .word 7b,8b\n" |
| - " .word 0b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| + STR(PTR) " 5b,8b\n" |
| + STR(PTR) " 6b,8b\n" |
| + STR(PTR) " 7b,8b\n" |
| + STR(PTR) " 0b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1701,14 +1702,14 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| - " .word 5b,8b\n" |
| - " .word 6b,8b\n" |
| - " .word 7b,8b\n" |
| - " .word 0b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| + STR(PTR) " 5b,8b\n" |
| + STR(PTR) " 6b,8b\n" |
| + STR(PTR) " 7b,8b\n" |
| + STR(PTR) " 0b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1820,14 +1821,14 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| - " .word 5b,8b\n" |
| - " .word 6b,8b\n" |
| - " .word 7b,8b\n" |
| - " .word 0b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| + STR(PTR) " 5b,8b\n" |
| + STR(PTR) " 6b,8b\n" |
| + STR(PTR) " 7b,8b\n" |
| + STR(PTR) " 0b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -1938,14 +1939,14 @@ fpu_emul: |
| " j 9b\n" |
| " .previous\n" |
| " .section __ex_table,\"a\"\n" |
| - " .word 1b,8b\n" |
| - " .word 2b,8b\n" |
| - " .word 3b,8b\n" |
| - " .word 4b,8b\n" |
| - " .word 5b,8b\n" |
| - " .word 6b,8b\n" |
| - " .word 7b,8b\n" |
| - " .word 0b,8b\n" |
| + STR(PTR) " 1b,8b\n" |
| + STR(PTR) " 2b,8b\n" |
| + STR(PTR) " 3b,8b\n" |
| + STR(PTR) " 4b,8b\n" |
| + STR(PTR) " 5b,8b\n" |
| + STR(PTR) " 6b,8b\n" |
| + STR(PTR) " 7b,8b\n" |
| + STR(PTR) " 0b,8b\n" |
| " .previous\n" |
| " .set pop\n" |
| : "+&r"(rt), "=&r"(rs), |
| @@ -2000,7 +2001,7 @@ fpu_emul: |
| "j 2b\n" |
| ".previous\n" |
| ".section __ex_table,\"a\"\n" |
| - ".word 1b, 3b\n" |
| + STR(PTR) " 1b,3b\n" |
| ".previous\n" |
| : "=&r"(res), "+&r"(err) |
| : "r"(vaddr), "i"(SIGSEGV) |
| @@ -2058,7 +2059,7 @@ fpu_emul: |
| "j 2b\n" |
| ".previous\n" |
| ".section __ex_table,\"a\"\n" |
| - ".word 1b, 3b\n" |
| + STR(PTR) " 1b,3b\n" |
| ".previous\n" |
| : "+&r"(res), "+&r"(err) |
| : "r"(vaddr), "i"(SIGSEGV)); |
| @@ -2119,7 +2120,7 @@ fpu_emul: |
| "j 2b\n" |
| ".previous\n" |
| ".section __ex_table,\"a\"\n" |
| - ".word 1b, 3b\n" |
| + STR(PTR) " 1b,3b\n" |
| ".previous\n" |
| : "=&r"(res), "+&r"(err) |
| : "r"(vaddr), "i"(SIGSEGV) |
| @@ -2182,7 +2183,7 @@ fpu_emul: |
| "j 2b\n" |
| ".previous\n" |
| ".section __ex_table,\"a\"\n" |
| - ".word 1b, 3b\n" |
| + STR(PTR) " 1b,3b\n" |
| ".previous\n" |
| : "+&r"(res), "+&r"(err) |
| : "r"(vaddr), "i"(SIGSEGV)); |