Re: um: WARNING: vmlinux: 'memcpy' exported twice. Previous exportwas in vmlinux

From: AmÃrico Wang
Date: Fri Mar 06 2009 - 02:53:25 EST


On Thu, Mar 05, 2009 at 07:27:31PM +0200, Boaz Harrosh wrote:
>AmÃrico Wang wrote:
>> On Thu, Mar 05, 2009 at 03:45:36PM +0200, Boaz Harrosh wrote:
>>> AmÃrico Wang wrote:
>>>> On Thu, Mar 05, 2009 at 02:13:58PM +0200, Boaz Harrosh wrote:
>>>>> On today's linus v2.6.29-rc7-3-g559595a
>>>>>
>>>>> Doing make ARCH=um defconfig & make ARCH=um
>>>>> give's me:
>>>>>
>>>>> LD vmlinux.o
>>>>> MODPOST vmlinux.o
>>>>> WARNING: vmlinux: 'memcpy' exported twice. Previous export was in vmlinux
>>>>>
>>>>>
>>>>> Sorry if this is a duplicate report
>>>>>
>>>> Weird...
>>>> I tried to compile like what you said, I can't reproduce it.
>>>>
>>>> Which gcc are you using?
>>>>
>>>> Thanks.
>>>>
>>> $ gcc --version
>>> gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)
>>>
>>> I'm running on an x86_64 Fedora10 system (updated recently)
>>> $ uname -o -s -r -m -p -i
>>> Linux 2.6.27.15-170.2.24.fc10.x86_64 x86_64 x86_64 x86_64 GNU/Linux
>>>
>>
>> I am using the same thing, but on i386. I still can't reproduce it. :(
>>
>
>What can I say I just did it again from scratch
>
>$ mkdir .build_um
>$ make ARCH=um KBUILD_OUTPUT=.build_um defconfig
>$ make ARCH=um KBUILD_OUTPUT=.build_um
>
>(I'm using KBUILD_OUTPUT= because O= does not work when also using M= with
> external modules, so it's a habit)
>
>Thanks for your help. I will try to bisect it on Sunday

Hi, Boaz.

I am sorry that I don't have an x86_64 machine to use, but I know
why this happens now. :)

Would you like to try the following patch? Thanks!

-------------->

Signed-off-by: WANG Cong <xiyou.wangcong@xxxxxxxxx>

---
diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c
index 74f49bb..89b48a1 100644
--- a/arch/um/os-Linux/user_syms.c
+++ b/arch/um/os-Linux/user_syms.c
@@ -14,7 +14,6 @@
#undef memset

extern size_t strlen(const char *);
-extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern void *memset(void *, int, size_t);
extern int printf(const char *, ...);
@@ -24,7 +23,11 @@ extern int printf(const char *, ...);
EXPORT_SYMBOL(strstr);
#endif

+#ifndef __x86_64__
+extern void *memcpy(void *, const void *, size_t);
EXPORT_SYMBOL(memcpy);
+#endif
+
EXPORT_SYMBOL(memmove);
EXPORT_SYMBOL(memset);
EXPORT_SYMBOL(printf);

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/