| From 013fcc6333bdbf0270165113d58bdc9647880871 Mon Sep 17 00:00:00 2001 |
| From: Ralf Baechle <ralf@linux-mips.org> |
| Date: Thu, 15 Dec 2016 12:39:22 +0100 |
| Subject: [PATCH] MIPS: IP22: Fix build error due to binutils 2.25 uselessnes. |
| |
| commit ae2f5e5ed04a17c1aa1f0a3714c725e12c21d2a9 upstream. |
| |
| Fix the following build error with binutils 2.25. |
| |
| CC arch/mips/mm/sc-ip22.o |
| {standard input}: Assembler messages: |
| {standard input}:132: Error: number (0x9000000080000000) larger than 32 bits |
| {standard input}:159: Error: number (0x9000000080000000) larger than 32 bits |
| {standard input}:200: Error: number (0x9000000080000000) larger than 32 bits |
| scripts/Makefile.build:293: recipe for target 'arch/mips/mm/sc-ip22.o' failed |
| make[1]: *** [arch/mips/mm/sc-ip22.o] Error 1 |
| |
| MIPS has used .set mips3 to temporarily switch the assembler to 64 bit |
| mode in 64 bit kernels virtually forever. Binutils 2.25 broke this |
| behavious partially by happily accepting 64 bit instructions in .set mips3 |
| mode but puking on 64 bit constants when generating 32 bit ELF. Binutils |
| 2.26 restored the old behaviour again. |
| |
| Fix build with binutils 2.25 by open coding the offending |
| |
| dli $1, 0x9000000080000000 |
| |
| as |
| |
| li $1, 0x9000 |
| dsll $1, $1, 48 |
| |
| which is ugly be the only thing that will build on all binutils vintages. |
| |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/mips/mm/sc-ip22.c b/arch/mips/mm/sc-ip22.c |
| index 610f44b4d764..f293a97cb885 100644 |
| --- a/arch/mips/mm/sc-ip22.c |
| +++ b/arch/mips/mm/sc-ip22.c |
| @@ -39,7 +39,18 @@ static inline void indy_sc_wipe(unsigned long first, unsigned long last) |
| " li $1, 0x80 # Go 64 bit \n" |
| " mtc0 $1, $12 \n" |
| " \n" |
| - " dli $1, 0x9000000080000000 \n" |
| + " # \n" |
| + " # Open code a dli $1, 0x9000000080000000 \n" |
| + " # \n" |
| + " # Required because binutils 2.25 will happily accept \n" |
| + " # 64 bit instructions in .set mips3 mode but puke on \n" |
| + " # 64 bit constants when generating 32 bit ELF \n" |
| + " # \n" |
| + " lui $1,0x9000 \n" |
| + " dsll $1,$1,0x10 \n" |
| + " ori $1,$1,0x8000 \n" |
| + " dsll $1,$1,0x10 \n" |
| + " \n" |
| " or %0, $1 # first line to flush \n" |
| " or %1, $1 # last line to flush \n" |
| " .set at \n" |
| -- |
| 2.12.0 |
| |