On Sat, 28 Sep 2013 19:32:23 +0200 Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: > Hello, > > Le 28/09/2013 17:42, Antony Pavlov a écrit : > > This patch fixes linker error: > > > > LD vmlinuz > > arch/mips/boot/compressed/decompress.o: In function `decompress_kernel': > > decompress.c:(.text+0x754): undefined reference to `memcpy' > > make[1]: *** [vmlinuz] Error 1 > > > > Which appears when compiling vmlinuz image with CONFIG_KERNEL_LZO=y. > > You would have to rebase this on top of mips-for-linux-next which > contains a bit more ifdef for supporting LZ4 and XZ otherwise the first > hunk of the patch does not apply. My bad, I found your "[PATCH v2] MIPS: ZBOOT: support LZ4 compression scheme" patch __after__ sending my patches. Unfortunately I can't get access to the mips-for-linux-next branch: * the git://git.linux-mips.org/pub/scm/ralf/linux.git repo contain only the *-stable branches; * I can't clone linux-queue.git (see below). $ git clone git://git.linux-mips.org/pub/scm/ralf/linux-queue.git Cloning into 'linux-queue'... fatal: remote error: access denied or repository not exported: /pub/scm/ralf/linux-queue.git How can I obtain the mips-for-linux-next branch? > Regarding the contents of the patch, you are somehow changing the > existing compressor code by unconditionnaly providing a memset and > memcpy implementation, which is fine per se but should be mentioned at > least. > > > > > Signed-off-by: Antony Pavlov <antonynpavlov@xxxxxxxxx> > > --- > > arch/mips/boot/compressed/Makefile | 4 ++-- > > arch/mips/boot/compressed/decompress.c | 19 ------------------- > > arch/mips/boot/compressed/string.c | 28 ++++++++++++++++++++++++++++ > > 3 files changed, 30 insertions(+), 21 deletions(-) > > create mode 100644 arch/mips/boot/compressed/string.c > > > > diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile > > index 0048c08..30e30d4 100644 > > --- a/arch/mips/boot/compressed/Makefile > > +++ b/arch/mips/boot/compressed/Makefile > > @@ -27,10 +27,10 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ > > -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ > > -DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS) > > > > -targets := head.o decompress.o dbg.o uart-16550.o uart-alchemy.o > > +targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o > > > > # decompressor objects (linked with vmlinuz) > > -vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o > > +vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o > > > > ifdef CONFIG_DEBUG_ZBOOT > > vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o > > diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c > > index 2c95730..fc1f294 100644 > > --- a/arch/mips/boot/compressed/decompress.c > > +++ b/arch/mips/boot/compressed/decompress.c > > @@ -44,29 +44,10 @@ void error(char *x) > > #define STATIC static > > > > #ifdef CONFIG_KERNEL_GZIP > > -void *memcpy(void *dest, const void *src, size_t n) > > -{ > > - int i; > > - const char *s = src; > > - char *d = dest; > > - > > - for (i = 0; i < n; i++) > > - d[i] = s[i]; > > - return dest; > > -} > > #include "../../../../lib/decompress_inflate.c" > > #endif > > > > #ifdef CONFIG_KERNEL_BZIP2 > > -void *memset(void *s, int c, size_t n) > > -{ > > - int i; > > - char *ss = s; > > - > > - for (i = 0; i < n; i++) > > - ss[i] = c; > > - return s; > > -} > > #include "../../../../lib/decompress_bunzip2.c" > > #endif > > > > diff --git a/arch/mips/boot/compressed/string.c b/arch/mips/boot/compressed/string.c > > new file mode 100644 > > index 0000000..49e6db0 > > --- /dev/null > > +++ b/arch/mips/boot/compressed/string.c > > @@ -0,0 +1,28 @@ > > +/* > > + * arch/mips/boot/compressed/string.c > > + * > > + * Very small subset of simple string routines > > + */ > > + > > +#include <linux/string.h> > > + > > +void *memcpy(void *dest, const void *src, size_t n) > > +{ > > + int i; > > + const char *s = src; > > + char *d = dest; > > + > > + for (i = 0; i < n; i++) > > + d[i] = s[i]; > > + return dest; > > +} > > + > > +void *memset(void *s, int c, size_t n) > > +{ > > + int i; > > + char *ss = s; > > + > > + for (i = 0; i < n; i++) > > + ss[i] = c; > > + return s; > > +} > > > -- -- Best regards, Antony Pavlov