2003-03-23 03:38:58

by dose

[permalink] [raw]
Subject: [PATCH] 2.4.20 unresolved symbols with K7/3DNOW

This one seems to have been around for quite a while (2.4.0-textX ?)...when
compiling with CONFIG_MK7=y ("Athlon/Duron/K7" as Processor family) a lot of
modules aren't able to resolve the symbol _mmx_memcpy. This is caused by
CONFIG_X86_USE_3DNOW=y and the problem lies in a wrong symbol export in
arch/i386/kernel/i386_ksyms.c - I wonder why this still hasn't been fixed as
it doesn't seem like a hard thing to do for someone who's into kernel
patching...being new to that, it took me about 3 hours.

Here's the patch (it's just one line so it should work for other 2.4.x
kernels as well)

diff -urN linux-2.4.20/arch/i386/kernel/i386_ksyms.c.orig
linux-2.4.20/arch/i386/kernel/i386_ksyms.c
--- linux-2.4.20/arch/i386/kernel/i386_ksyms.c.orig Sun Mar 23 04:24:06
2003
+++ linux-2.4.20/arch/i386/kernel/i386_ksyms.c Sun Mar 23 04:24:18 2003
@@ -120,7 +120,7 @@
#endif

#ifdef CONFIG_X86_USE_3DNOW
-EXPORT_SYMBOL(_mmx_memcpy);
+EXPORT_SYMBOL_NOVERS(_mmx_memcpy);
EXPORT_SYMBOL(mmx_clear_page);
EXPORT_SYMBOL(mmx_copy_page);
#endif


--
"enemy of the sun, we are the subterranean
apocalyptic daydreams, casual delirium"
http://www.caffeineshock.com - http://www.dose-xp.org
http://www.blended.org - http://www.infernum.com



2003-03-23 04:00:06

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH] 2.4.20 unresolved symbols with K7/3DNOW

On Sun, 23 Mar 2003 04:49:35 +0100,
"dose" <[email protected]> wrote:
>This one seems to have been around for quite a while (2.4.0-textX ?)...when
>compiling with CONFIG_MK7=y ("Athlon/Duron/K7" as Processor family) a lot of
>modules aren't able to resolve the symbol _mmx_memcpy. This is caused by
>CONFIG_X86_USE_3DNOW=y and the problem lies in a wrong symbol export in
>arch/i386/kernel/i386_ksyms.c - I wonder why this still hasn't been fixed as
>it doesn't seem like a hard thing to do for someone who's into kernel
>patching...being new to that, it took me about 3 hours.
>
>diff -urN linux-2.4.20/arch/i386/kernel/i386_ksyms.c.orig
>linux-2.4.20/arch/i386/kernel/i386_ksyms.c
>--- linux-2.4.20/arch/i386/kernel/i386_ksyms.c.orig Sun Mar 23 04:24:06
>2003
>+++ linux-2.4.20/arch/i386/kernel/i386_ksyms.c Sun Mar 23 04:24:18 2003
>@@ -120,7 +120,7 @@
> #endif
>
> #ifdef CONFIG_X86_USE_3DNOW
>-EXPORT_SYMBOL(_mmx_memcpy);
>+EXPORT_SYMBOL_NOVERS(_mmx_memcpy);
> EXPORT_SYMBOL(mmx_clear_page);
> EXPORT_SYMBOL(mmx_copy_page);
> #endif

2.4 has a broken build system. With CONFIG_MODVERSIONS=y, you must
make mrproper when changing any config option that changes the list of
exported symbols. Adding _NOVERS is just papering over the cracks in
the kernel build system, the only time _NOVERS should be used is when
the exported symbol is in ASM code and not in C.