b90a4abbe0
This introduces a new .shared-patches folder. New "pmbootstrap aportgen" code will make use of this, and create symlinks to the patches inside that folder when running "pmbootstrap aportgen linux-..." (or using the new device wizard).
45 lines
2 KiB
Diff
45 lines
2 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 292c3f88f..48decaa00 100644
|
|
--- a/arch/arm/include/asm/uaccess.h
|
|
+++ b/arch/arm/include/asm/uaccess.h
|
|
@@ -158,7 +158,7 @@ extern int __put_user_8(void *, unsigned long long);
|
|
#define put_user(x,p) \
|
|
({ \
|
|
unsigned long __limit = current_thread_info()->addr_limit - 1; \
|
|
- register const typeof(*(p)) __r2 asm("r2") = (x); \
|
|
+ register typeof(*(p)) __r2 asm("r2") = (x); \
|
|
register const typeof(*(p)) __user *__p asm("r0") = (p);\
|
|
register unsigned long __l asm("r1") = __limit; \
|
|
register int __e asm("r0"); \
|