ARM Cortex-M3 (Stellaris LM3S811) soft float problem (GCC/QEMU)

Good day, I'm running GCC 4.4.2 (newlib 1.17) cross compiled for target: arm-none-eabi under Linux. I'm testing my small application under QEMU: qemu-system-arm -M lm3s811evb and use Eclipse/GDB to debug the application.

I've run into a problem where floating point arithmetic causes the chip to crash. GCC was compiled with the "soft-float" option. My application is also compiled with the "soft float" option and linked against the math library (-lm).

The piece of offending code is: fTmp += 3.0; The disassembly is: d24: 6b38 ldr r0, [r7, #48] d26: 492a ldr r1, [pc, #168] d28: f000 ec32 blx 1590 d2c: 4603 mov r3, r0 d2e: 633b str r3, [r7, #48] Eclipse opens the file: ieee754-sf.S and focus on Line 68: ARM_FUNC_START addsf3

Will there be any specific reason why this helper function may cause the chip to crash? Could it be a case of QEMU not simulating the ARM behavior properly?

Any help will be much appreciated Regards, Frikkie Thirion

--------------------------------------- This message was sent using the comp.arch.embedded web interface on

formatting link

Reply to
frikkiethirion
Loading thread data ...

The Cortex-M3 supports only the Thumb-2 instruction set, calling an ARM function will cause an Usage Fault. I'm guessing there's a compiler/linker flag missing in your setup, or some bug in newlib's build process.

-a

Reply to
Anders.Montonen

the

compiler/linker

I'm having a similar problem on LM3S9B92-EK. I'm using GNU Arm toolkit configured with the '--with-float=soft' option. The project is compiled with -mthumb (Thumb-2), -msoft-float (Software floating point emulation),

-mcpu=cortex-m3 (Cortex-M3 architecture) and a few other flags. I'm linking it against libdriver and libgcc (the one that's installed into the thumb subdirectory).

Mine crashes (HardFault) on a simple comparison of 2 floats: float a = 1.2f; float b = 1.1f;

UARTprintf ("\nLess %d..\n", (a < b));

And I'm pretty sure that the UART printout is working correctly..

Well, I doubt it's newlib - I could be wrong, but I guess that libgcc should contain software floating point emulation code.

I'm a bit doubtful in the linker script that I wrote, because none of the supplied scripts linked without errors. Another suspicion would be the startup_gcc.c file, which I haven't modified much (due to the lack of working float sample code). Or, it could actually be a bug in the libgcc..

. Tried to keep a long post short =P.

All suggestions are welcome, Thank You

--------------------------------------- Posted through

formatting link

Reply to
Sussch

linking

libgcc..

Well, as it turned out, libgcc had been configured wrong (for ARM7TDMI). I had to configure gcc with this:

--target=${GCC_TARGET} --prefix=${ARMTOOLS} --enable-interwork

--enable-multilib --enable-languages="c,c++" --with-newlib

--with-headers=../../src/newlib-${NEWLIB_VERSION}/newlib/libc/include

--with-float=soft --with-cpu=cortex-m3 --with-tune=cortex-m3

--with-mode=thumb --disable-libssp

where

NEWLIB_VERSION=1.18.0 GCC_TARGET=arm-none-eabi

and

ARMTOOLS=/usr/local/arm

Hope this helps..

--------------------------------------- Posted through

formatting link

Reply to
Sussch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.