In the latest kernel, there is an optimized sha1 routine
(arch/arm/lib/sha1.S) meant to override the generic one in lib/sha1.c.
The problem is that lib/lib.a is listed _before_ arch/arm/lib/lib.a in
the link argument list so the architecture specific lib functions are
not picked up in priority.
To work around this the following patch is needed:
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -142,7 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/
drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/
drivers-$(CONFIG_ARCH_L7200) += drivers/acorn/char/
-libs-y += arch/arm/lib/
+libs-y := arch/arm/lib/ $(libs-y)
# Default target when executing plain make
ifeq ($(CONFIG_XIP_KERNEL),y)
However I was wondering if there should be a better and generic way to
fix that.
Comments?
Nicolas
On Mon, Oct 31, 2005 at 01:48:49PM -0500, Nicolas Pitre wrote:
>
> In the latest kernel, there is an optimized sha1 routine
> (arch/arm/lib/sha1.S) meant to override the generic one in lib/sha1.c.
>
> The problem is that lib/lib.a is listed _before_ arch/arm/lib/lib.a in
> the link argument list so the architecture specific lib functions are
> not picked up in priority.
>
> To work around this the following patch is needed:
>
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -142,7 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/
> drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/
> drivers-$(CONFIG_ARCH_L7200) += drivers/acorn/char/
>
> -libs-y += arch/arm/lib/
> +libs-y := arch/arm/lib/ $(libs-y)
>
> # Default target when executing plain make
> ifeq ($(CONFIG_XIP_KERNEL),y)
>
> However I was wondering if there should be a better and generic way to
> fix that.
This looks like an obvious way to achive correct ordering.
We could change it so arch defines always took precedence but
the above is so simple that it is not worth the effort.
Sam