[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