This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Bare metal ARM Cross compiler - aeabi auto-generated functions for cortex-m0 use wrong instruction set

On 3/12/2012, at 4:22 AM, Jan K wrote:

> Hi!
> I'm trying to get the cross-toolchain for cortex-m0 working. The target is arm-none-eabi.
> The gcc has no problem compiling my code using allowed instructions only. As long as I do not try to use / or % my code runs as expected.
> When I try to divide, GCC uses and appends ARM runtime ABI functions (which is correct, since m0 has no hardware division op).
> The problem is that included functions (in particular: __aeabi_idiv) use instructions that are _not_ part of the cortex-m0 instructions set (like lsleq, movne, rsbmi).
> I compile and link the code with '-mcpu=cortex-m0 -mthumb' flags.
> What I want to is to force gcc to include the ARM runtime ABI functions that work with cortex-m0.
> How can I get it working? Am I missing something? Is it anyhow possible?

How libgcc (and other GCC libraries) are compiled is defined by multilib flags.  It appears that the default multilib for the compiler that you built is not "-mcpu=cortex-m0" (probably, it's something ARMv4-ish).

For a quick fix try adding --with-arch=cortex-m0 to GCC configure line.

Maxim Kuvyrkov
CodeSourcery / Mentor Graphics

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]