Linux MIPS Architecture development
 help / color / mirror / Atom feed
* [PATCH] MIPS: decompressor: fix build failure on memcpy() in decompress.c
@ 2012-11-12 11:46 Florian Fainelli
  2012-11-13 11:25 ` Florian Fainelli
  2012-11-16 12:30 ` [PATCH v2] MIPS: decompressor: remove unused linux/kernel.h header Florian Fainelli
  0 siblings, 2 replies; 3+ messages in thread
From: Florian Fainelli @ 2012-11-12 11:46 UTC (permalink / raw)
  To: ralf; +Cc: linux-mips, blogic, wuzhangjin, Florian Fainelli

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(-)

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 <linux/types.h>
-#include <linux/kernel.h>
 
 #include <asm/addrspace.h>
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] MIPS: decompressor: fix build failure on memcpy() in decompress.c
  2012-11-12 11:46 [PATCH] MIPS: decompressor: fix build failure on memcpy() in decompress.c Florian Fainelli
@ 2012-11-13 11:25 ` Florian Fainelli
  2012-11-16 12:30 ` [PATCH v2] MIPS: decompressor: remove unused linux/kernel.h header Florian Fainelli
  1 sibling, 0 replies; 3+ messages in thread
From: Florian Fainelli @ 2012-11-13 11:25 UTC (permalink / raw)
  To: ralf; +Cc: linux-mips, blogic, wuzhangjin

On Monday 12 November 2012 12:46:58 Florian Fainelli wrote:
> 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; })

After some more debugging, this expansion "failure" actually comes from one
of our OpenWrt patch which allows the use of GCC builtins for memcpy and
friends. The fix remains valid anyway.

> {
>  [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(-)
> 
> 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 <linux/types.h>
> -#include <linux/kernel.h>
>  
>  #include <asm/addrspace.h>
>  
> -- 
> 1.7.10.4
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2] MIPS: decompressor: remove unused linux/kernel.h header
  2012-11-12 11:46 [PATCH] MIPS: decompressor: fix build failure on memcpy() in decompress.c Florian Fainelli
  2012-11-13 11:25 ` Florian Fainelli
@ 2012-11-16 12:30 ` Florian Fainelli
  1 sibling, 0 replies; 3+ messages in thread
From: Florian Fainelli @ 2012-11-16 12:30 UTC (permalink / raw)
  To: ralf; +Cc: linux-mips, blogic, wuzhangjin, Florian Fainelli

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 might end up having a conflicting memcpy() and memset() pulled from
asm/string.h, since we use no declaration from linux/kernel.h, just remove
this include.

Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
Changes since v1:
- removed the long story about the problem we are fixing
- only remove the linux/kernel.h line

 arch/mips/boot/compressed/decompress.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c
index 5cad0fa..b461efa 100644
--- a/arch/mips/boot/compressed/decompress.c
+++ b/arch/mips/boot/compressed/decompress.c
@@ -12,7 +12,6 @@
  */
 
 #include <linux/types.h>
-#include <linux/kernel.h>
 
 #include <asm/addrspace.h>
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-11-16 12:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-12 11:46 [PATCH] MIPS: decompressor: fix build failure on memcpy() in decompress.c Florian Fainelli
2012-11-13 11:25 ` Florian Fainelli
2012-11-16 12:30 ` [PATCH v2] MIPS: decompressor: remove unused linux/kernel.h header Florian Fainelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox