[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120612191804.4211462a@tukaani.org>
Date: Tue, 12 Jun 2012 19:18:04 +0300
From: Lasse Collin <lasse.collin@...aani.org>
To: T Makphaibulchoke <tmac@...com>
Cc: linux@....linux.org.uk, schwidefsky@...ibm.com,
heiko.carstens@...ibm.com, linux390@...ibm.com,
lethal@...ux-sh.org, hpa@...or.com, tglx@...utronix.de,
mingo@...hat.com, x86@...nel.org, kaloz@...nwrt.org,
nicolas.pitre@...aro.org, jj@...osbits.net, matt.fleming@...el.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-s390@...r.kernel.org, linux-sh@...r.kernel.org
Subject: Re: [PATCH v2] lib/decompress_unxz.c: removing all memory helper
functions
On 2012-06-11 T Makphaibulchoke wrote:
> --- /dev/null
> +++ b/lib/boot/mem.c
> @@ -0,0 +1,58 @@
> +/*
> + * Small subset of simple memory helper functions required by different
> + * compressors for preboot environment.
> + */
> +
> +#include <linux/string.h>
> +
> +#ifndef __HAVE_PREBOOT_ARCH_MEMCPY
> +void *memcpy(void *__dest, __const void *__src, size_t __n)
> +{
> + return __builtin_memcpy(__dest, __src, __n);
> +}
> +#endif
GCC will replace __builtin_memcpy above with a call to memcpy, creating
an infinite loop. I confirmed this on x86_64 by first uncommenting the
memcpy from arch/x86/boot/compressed/string.c.
You need to provide a memcpy implementation yourself without using
__builtin functions. For example, copy the memcpy implementation from
lib/string.c.
> +#ifndef __HAVE_PREBOOT_ARCH_MEMMOVE
> +void *memmove(void *__dest, __const void *__src, size_t count)
> +{
> + unsigned char *d = __dest;
> + const unsigned char *s = __src;
> +
> + if (__dest == __src)
> + return __dest;
> +
> + if (__dest < __src)
> + return memcpy(__dest, __src, count);
> +
> + while (count--)
> + d[count] = s[count];
> + return __dest;
> +}
> +#endif
The use of memcpy when __dest < __src is OK with some memcpy
implementations, but in a generic case it isn't guaranteed to work.
I think it would be better to just copy memmove from lib/string.c.
--
Lasse Collin | IRC: Larhzu @ IRCnet & Freenode
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists