From 0db3db45f5bd6df4bdc03bbd5dec672e16164c4e Mon Sep 17 00:00:00 2001 From: Florian Fainelli <florian@openwrt.org> 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 <florian@openwrt.org> --- arch/mips/boot/compressed/decompress.c | 2 -- 1 file changed, 2 deletions(-) --- 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 <linux/types.h> -#include <linux/kernel.h> #include <asm/addrspace.h>