Skip to contentSkip to conversation

Build error on strcmp()

U-Boot-Users Shinya Kuribayashi 2 participants 3 messages Aug 14, 2007 – Aug 21, 2007

lore
Share & tools
lore
#0 lore raw
Quoted 6 lines

commit 8092fef4c29b395958bb649647da7e3775731517

Author: Martin Krause <[email protected]>
Date:   Tue Dec 12 14:26:01 2006 +0100

Add functions to list of exported functions

Quoted 7 lines

Additionally export the following fuctions (to make trab_config build again):
- simple_strtol()
- strcmp()

Also bump the ABI version to reflect this change

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 ___strtok

I think all architectures which have __HAVE_ARCH_STRCMP defined will encounter this error. What is the proper workaround?

Thanks,

Shinya Kuribayashi

#1 lore raw

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 8092fef4c29b395958bb649647da7e3775731517

Author: Martin Krause <[email protected]>
Date:   Tue Dec 12 14:26:01 2006 +0100

Add 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

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 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
Quoted 2 lines

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 :(

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

#2 lore raw

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 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
Quoted 4 lines
Quoted 2 lines

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:

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