40 lines
1.7 KiB
Diff
40 lines
1.7 KiB
Diff
|
From 8c8187d41b99acd4f2078d0fff6807e0eeb47407 Mon Sep 17 00:00:00 2001
|
||
|
From: Arnd Bergmann <arnd@arndb.de>
|
||
|
Date: Thu, 26 Jul 2018 10:13:23 +0200
|
||
|
Subject: [PATCH] ARM: fix put_user() for gcc-8
|
||
|
|
||
|
Building kernels before linux-4.7 with gcc-8 results in many build failures
|
||
|
when gcc triggers a check that was meant to catch broken compilers:
|
||
|
|
||
|
/tmp/ccCGMQmS.s:648: Error: .err encountered
|
||
|
|
||
|
According to the discussion in the gcc bugzilla, a local "register
|
||
|
asm()" variable is still supposed to be the correct way to force an
|
||
|
inline assembly to use a particular register, but marking it 'const'
|
||
|
lets the compiler do optimizations that break that, i.e the compiler is
|
||
|
free to treat the variable as either 'const' or 'register' in that case.
|
||
|
|
||
|
Upstream commit 9f73bd8bb445 ("ARM: uaccess: remove put_user() code
|
||
|
duplication") fixed this problem in linux-4.8 as part of a larger change,
|
||
|
but seems a little too big to be backported to 4.4.
|
||
|
|
||
|
Let's take the simplest fix and change only the one broken line in the
|
||
|
same way as newer kernels.
|
||
|
|
||
|
Suggested-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||
|
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85745
|
||
|
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86673
|
||
|
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||
|
---
|
||
|
arch/arm/include/asm/uaccess.h | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
|
||
|
index b04850fdeb5..f8ad54b24ac 100644
|
||
|
--- a/arch/arm/include/asm/uaccess.h
|
||
|
+++ b/arch/arm/include/asm/uaccess.h
|
||
|
@@ -162 +162 @@ extern int __put_user_8(void *, unsigned long long);
|
||
|
- register const typeof(*(p)) __r2 asm("r2") = (x); \
|
||
|
+ register typeof(*(p)) __r2 asm("r2") = (x); \
|