diff options
author | Helge Deller <deller@gmx.de> | 2013-11-17 16:03:11 -0500 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2013-11-19 17:36:16 -0500 |
commit | 9af63aedb84c4281cde1610280246f7749c27799 (patch) | |
tree | dde2e68264739ba40a02384af5c3dcedff84538d /arch | |
parent | a0ffa8f06f77a6197405521324501614d281bee1 (diff) |
parisc: do not inline pa_memcpy() internal functions
gcc (4.8.x) creates wrong code when the pa_memcpy() functions are
inlined. Especially in 32bit builds it calculates wrong return values
if we encounter a fault during execution of the memcpy.
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/parisc/lib/memcpy.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/parisc/lib/memcpy.c b/arch/parisc/lib/memcpy.c index b5507ec06b84..6c5b5d35bfc0 100644 --- a/arch/parisc/lib/memcpy.c +++ b/arch/parisc/lib/memcpy.c | |||
@@ -161,7 +161,7 @@ static inline void prefetch_dst(const void *addr) | |||
161 | /* Copy from a not-aligned src to an aligned dst, using shifts. Handles 4 words | 161 | /* Copy from a not-aligned src to an aligned dst, using shifts. Handles 4 words |
162 | * per loop. This code is derived from glibc. | 162 | * per loop. This code is derived from glibc. |
163 | */ | 163 | */ |
164 | static inline unsigned long copy_dstaligned(unsigned long dst, | 164 | static noinline unsigned long copy_dstaligned(unsigned long dst, |
165 | unsigned long src, unsigned long len) | 165 | unsigned long src, unsigned long len) |
166 | { | 166 | { |
167 | /* gcc complains that a2 and a3 may be uninitialized, but actually | 167 | /* gcc complains that a2 and a3 may be uninitialized, but actually |
@@ -276,7 +276,7 @@ handle_store_error: | |||
276 | /* Returns PA_MEMCPY_OK, PA_MEMCPY_LOAD_ERROR or PA_MEMCPY_STORE_ERROR. | 276 | /* Returns PA_MEMCPY_OK, PA_MEMCPY_LOAD_ERROR or PA_MEMCPY_STORE_ERROR. |
277 | * In case of an access fault the faulty address can be read from the per_cpu | 277 | * In case of an access fault the faulty address can be read from the per_cpu |
278 | * exception data struct. */ | 278 | * exception data struct. */ |
279 | static unsigned long pa_memcpy_internal(void *dstp, const void *srcp, | 279 | static noinline unsigned long pa_memcpy_internal(void *dstp, const void *srcp, |
280 | unsigned long len) | 280 | unsigned long len) |
281 | { | 281 | { |
282 | register unsigned long src, dst, t1, t2, t3; | 282 | register unsigned long src, dst, t1, t2, t3; |