[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