Skip to contentSkip to conversation

ARM-optimized memcpy/memset on SPL build

RFC New Masahiro Yamada 1 participant 1 message Jul 18, 2013 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

RFC 1/1 ARM-optimized memcpy/memset on SPL build

Hello exports,

I found we cannot enable ARM-optimized memset/memcpy in SPL build.

For example,

I added

Quoted 2 lines

#define CONFIG_USE_ARCH_MEMSET
#define CONFIG_USE_ARCH_MEMCPY

into "include/configs/omap3_beagle.h" and ran
make omap3_beagle_config && make.

Then,

undefined reference to `memset'
undefined reference to `memcpy'

errors occurred.

If CONFIG_USE_ARCH_MEMCPY is defined,
__HAVE_ARCH_MEMCPY is also defined in arch/arm/include/asm/string.h.

So, generic memcpy function in lib/string.c is not compiled.

If I see arch/arm/lib/Makefile,
we cannot build arch/arm/lib/memcpy.S either
on CONFIG_SPL_BUILD=y.

This seems to cause undefined reference to memcpy.

I found I can fix this problem
by modifying arch/arm/lib/Makefile as follows:

arch/arm/lib/Makefile +3 -2
@@ -48,12 +48,13 @@ COBJS-y += sections.o
 COBJS-y        += bootm.o
 COBJS-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
 COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
-SOBJS-$(CONFIG_USE_ARCH_MEMSET) += memset.o
-SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o
 else
 COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o
 endif
 
+SOBJS-$(CONFIG_USE_ARCH_MEMSET) += memset.o
+SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o
+
 COBJS-y        += interrupts.o
 COBJS-y        += reset.o
 

If this is the correct way of fixing,
I can post the patch.

But my question is, in the first place
if CONFIG_USE_ARCH_MEMSET/MEMCPY macro is necessary or not.

Can we always build arch-optimized memset.S/memcpy.S
like Linux Kernel ?
Although I am not sure how significant the code size is in SPL build, I imagine the arch-optimized memcpy has an advantage
when copying a big image like OS Kernel.

Comments are welcome.

Best Regards,
Masahiro Yamada