Build error on strcmp()
Quoted 6 lines
commit
8092fef4c29b395958bb649647da7e3775731517Author: Martin Krause <[email protected]> Date: Tue Dec 12 14:26:01 2006 +0100Add functions to list of exported functions
Quoted 7 lines
Additionally export the following fuctions (to make
trab_configbuild again):
-simple_strtol()
-strcmp()Also bump the ABI version to reflect this change
Signed-off-by Martin Krause <[email protected]>
This breaks my MIPS build:
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 ___strtokI think all architectures which have __HAVE_ARCH_STRCMP defined will encounter this error. What is the proper workaround?
Thanks,
Shinya Kuribayashi
Hi Shinya Kuribayashi,
sorry for the late response, I was on vacation ...
shinya.kuribayashi at necel.com wrote on Tuesday, August 14, 2007 1:29 PM:
Quoted 11 lines
Quoted 11 lines
commit
8092fef4c29b395958bb649647da7e3775731517Author: Martin Krause <[email protected]> Date: Tue Dec 12 14:26:01 2006 +0100Add functions to list of exported functions
Additionally export the following fuctions (to make
trab_config
build again):
-simple_strtol()
-strcmp()
Quoted 5 lines
Quoted 3 lines
Also bump the ABI version to reflect this change
Signed-off-by Martin Krause <[email protected]>This breaks my MIPS build:
Oh, sorry about that!
Quoted 31 lines
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 1We MIPS have arch-specific strcmp defined in <
asm/string.h>. Since strcmp is inlined, we couldn't refer them by function pointer. The nm oflib_generic/string.ois 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
Quoted 2 lines
I think all architectures which have
__HAVE_ARCH_STRCMPdefined will encounter this error. What is the proper workaround?
Sorry, I'm no linker expert - so no idea :(
Best Regards,
Martin Krause
--
TQ-Systems GmbH
Muehlstrasse 2, Gut Delling, D-82229 Seefeld
Amtsgericht Muenchen, HRB 105 018, UST-IdNr. DE 811 607 913
Geschaeftsfuehrer: Dipl.-Ing. (FH) Detlef Schneider, Dipl.-Ing. (FH) Ruediger Stahl
http://www.tq-group.com
Dear Martin Krause,
Quoted 31 lines
Quoted 31 lines
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 1We MIPS have arch-specific strcmp defined in <
asm/string.h>. Since strcmp is inlined, we couldn't refer them by function pointer. The nm oflib_generic/string.ois 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
Quoted 4 lines
Quoted 2 lines
I think all architectures which have
__HAVE_ARCH_STRCMPdefined 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:
Quoted 4 lines
/*
* 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