From a8c492dbb37a4f5213e428e011913e584dcb0bf7 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Mon, 12 Nov 2012 12:49:47 +0000 Subject: [PATCH] MIPS: add a build fix for arch/mips/boot/compressed/decompress.c And get rid of the AR7 patch because at least the Alchemy SoC also needs it Signed-off-by: Florian Fainelli SVN-Revision: 34170 --- .../100-decompressor_memcpy_fix.patch | 12 ---- .../062-mips_decompressor_build_fix.patch | 71 +++++++++++++++++++ 2 files changed, 71 insertions(+), 12 deletions(-) delete mode 100644 target/linux/ar7/patches-3.6/100-decompressor_memcpy_fix.patch create mode 100644 target/linux/generic/patches-3.6/062-mips_decompressor_build_fix.patch diff --git a/target/linux/ar7/patches-3.6/100-decompressor_memcpy_fix.patch b/target/linux/ar7/patches-3.6/100-decompressor_memcpy_fix.patch deleted file mode 100644 index 56c8b31603..0000000000 --- a/target/linux/ar7/patches-3.6/100-decompressor_memcpy_fix.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/arch/mips/boot/compressed/decompress.c -+++ b/arch/mips/boot/compressed/decompress.c -@@ -44,6 +44,9 @@ void error(char *x) - #define STATIC static - - #ifdef CONFIG_KERNEL_GZIP -+#ifdef memcpy -+#undef memcpy -+#endif - void *memcpy(void *dest, const void *src, size_t n) - { - int i; diff --git a/target/linux/generic/patches-3.6/062-mips_decompressor_build_fix.patch b/target/linux/generic/patches-3.6/062-mips_decompressor_build_fix.patch new file mode 100644 index 0000000000..0821718454 --- /dev/null +++ b/target/linux/generic/patches-3.6/062-mips_decompressor_build_fix.patch @@ -0,0 +1,71 @@ +From 0db3db45f5bd6df4bdc03bbd5dec672e16164c4e Mon Sep 17 00:00:00 2001 +From: Florian Fainelli +Date: Mon, 12 Nov 2012 12:31:55 +0100 +Subject: [PATCH] MIPS: decompressor: fix build failure on memcpy() in + decompress.c + +The decompress.c file includes linux/kernel.h which causes the following +inclusion chain to be pulled: +linux/kernel.h -> + linux/dynamic_debug.h -> + linux/string.h -> + asm/string.h + +We end up having a the GCC builtin + architecture specific memcpy() expanding +into this: + +void *({ size_t __len = (size_t n); void *__ret; if +(__builtin_constant_p(size_t n) && __len >= 64) __ret = memcpy((void *dest), +(const void *src), __len); else __ret = __builtin_memcpy((void *dest), (const +void *src), __len); __ret; }) +{ + [memcpy implementation in decompress.c starts here] + int i; + const char *s = src; + char *d = dest; + + for (i = 0; i < n; i++) + d[i] = s[i]; + return dest; +} + +raising the following compilation error: +arch/mips/boot/compressed/decompress.c:46:8: error: expected identifier or '(' +before '{' token + +There are at least three possibilities to fix this issue: + +1) define _LINUX_STRING_H_ at the beginning of decompress.c to prevent + further linux/string.h definitions and declarations from being used, and add + an explicit strstr() declaration for linux/dynamic_debug.h + +2) remove the inclusion of linux/kernel.h because we actually use no definition + or declaration from this header file + +3) undefine memcpy or re-define memcpy to memcpy thus resulting in picking up + the local memcpy() implementation to this compilation unit + +This patch uses the second option which is the less intrusive one. + +Signed-off-by: Florian Fainelli +--- + arch/mips/boot/compressed/decompress.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index 5cad0fa..d6c5586 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -10,9 +10,7 @@ + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ +- + #include +-#include + + #include + +-- +1.7.10.4 + -- 2.30.2