[arm-gnu] undefined instruction
Carlo Caione
carlo.caione at gmail.com
Tue May 15 22:33:57 UTC 2012
Hi,
In a big project (barebox) I have this simple snippet of code in string.c
size_t strlen(const char * s)
{
const char *sc;
for (sc = s; *sc != '\0'; ++sc)
/* nothing */;
return sc - s;
}
I'm using Sourcery CodeBench Lite 2011.09-69 to compile the project.
In particular for string.c:
arm-none-eabi-gcc -Wp,-MD,lib/.string.o.d -nostdinc -isystem
/opt/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/../lib/gcc/arm-none-eabi/4.6.1/include
-D__KERNEL__ -D__BAREBOX__ -Iinclude
-I/home/carlo/projects/barebox/arch/arm/include
-I/home/carlo/projects/barebox/arch/arm/include -include
include/generated/autoconf.h -include
/home/carlo/projects/barebox/include/linux/kconfig.h -fno-builtin
-ffreestanding -D__ARM__ -fno-strict-aliasing -marm -mlittle-endian
-mabi=aapcs-linux -mno-thumb-interwork -D__LINUX_ARM_ARCH__=7
-march=armv7-a -msoft-float -Iarch/arm/mach-omap/include
-DTEXT_BASE=0x40200000 -fdata-sections -ffunction-sections -Wall
-Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
-fno-common -Os -pipe -g -fno-stack-protector
-Wno-unused-but-set-variable -Wno-trampolines
-Wdeclaration-after-statement -Wno-pointer-sign
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(string)"
-D"KBUILD_MODNAME=KBUILD_STR(string)" -c -o lib/string.o lib/string.c
The problem is that the disassembly looks like:
40205c84: strlen+0 beq 0x40205d18 <memcpy>
40205c88: strlen+4 ; <UNDEFINED> instruction: 0xf03fe03a
40205c8c: strlen+8 andeq r0, r0, r6
40205c90: strlen+12 andeq r0, r0, r4
40205c94: strlen+16 andeq r0, r0, r7
40205c98: strlen+20 andeq r0, r0, sp, lsl r0
40205c9c: strlen+24 ldrdmi r0, [r0], -r3
40205ca0: strlen+28 ; <UNDEFINED> instruction: 0xffffffff
Why the undefined instruction?
Thank you,
--
Carlo
More information about the arm-gnu
mailing list