[U-Boot-Users] Build error on strcmp()

Shinya Kuribayashi shinya.kuribayashi at necel.com
Tue Aug 21 05:33:38 CEST 2007


Dear Martin Krause,

>> common/libcommon.a(exports.o)(.text+0xdc): In function
>> `jumptable_init':
>> /home/skuribay/bootloader/u-boot/u-boot.git/common/exports.c:32:
>> undefined reference to `strcmp' make: *** [u-boot] Error 1 
>>
>> We MIPS have arch-specific strcmp defined in <asm/string.h>.
>> Since strcmp is inlined, we couldn't refer them by function pointer.
>> The nm of lib_generic/string.o is like this:
>>
>>              U _gp_disp
>>              U malloc
>>     00000610 T memchr
>>     00000520 T memcmp
>>     00000474 T memcpy
>>     000004a4 T memmove
>>     00000448 T memset
>>     00000000 T strcat
>>     00000084 T strchr
>>     00000198 T strdup
>>     000000c0 T strlen
>>     00000038 T strncat
>>     0000015c T strnlen
>>     00000270 T strpbrk
>>     000000e4 T strrchr
>>     00000380 T strsep
>>     00000210 T strspn
>>     00000550 T strstr
>>     000003ec T strswab
>>     000002c0 T strtok
>>     00000004 C ___strtok
>>
>> I think all architectures which have __HAVE_ARCH_STRCMP defined will
>> encounter this error. What is the proper workaround?
> 
> Sorry, I'm no linker expert - so no idea :(

You don't have to be an expert.
I just wanted to show you MIPS string.o doesn't incorporate strcmp.

Ok, I looked closely the other architectures' string libraries, and
found *only* MIPS plays the inlined card.

I also found there is good note in <asm/string.h> of i386 and ARM:

> /*
>  * We don't do inline string functions, since the
>  * optimised inline asm versions are not small.
>  */

So we MIPS might need to change strcmp from optimized asm version into
object version. Of course other inlined string funcs, too. I will post
the patch later.


Thanks,

    Shinya Kuribayashi




More information about the U-Boot mailing list