Exceptions in ARM
Timo Sintonen
t.sintonen at luukku.com
Sun Mar 2 10:33:00 PST 2014
On Sunday, 2 March 2014 at 15:36:01 UTC, Johannes Pfau wrote:
> To make sure that libgcc
> is built correctly for Cortex-M4 you have to specify
> "--with-arch=armv7e-m --with-cpu=cortex-m4 --with-mode=thumb
> --with-tune=" when configuring gcc/gdc.
>
> (And I don't see these flags mentioned in
> https://bitbucket.org/timosi/minlibd/src/691c76aa2b543998bb573e6ce6d96951a80817bd/README.gdc?at=default)
>
Gcc build fails with these. It will take time to check them one
by one. Also enable/disable-multilib may affect to this.
Then I updated my host binutils and gcc to latest head and with
these I compiled cross binutils and gcc/gdc from head. I used my
current settings. Now my own code and minlibd do not have any blx
instructions but libgcc has some.
> Sounds strange, I don't think we could cause this in the gdc
> frontend.
I am not saying it is a gdc bug. It may very well be a side
effect of a flag that is related to maybe umwinding or
relocation. I do have two kind of object files now in my
executable and I just like to know what is the difference between
them.
> I guess binutils generates blx if thumb code calls arm code or
> the
> other way round. So I'd verify which libraries are really
> picked up by
> ld (ld --verbose) then check if the entry points are in thumb
> or arm
> mode:
> http://stackoverflow.com/a/15931232
>
> This sounds a lot as if calls to the same library/object file
> generate
> bl instructions as the code is in the same mode, but functions
> in
> external libraries are in a different mode and therefore
> generate blx.
>
Yes, I think blx is for this. M4 does not have arm mode and there
is no this instruction, so it should be a linker error if the
user try to mix objects with different modes.
As I mentioned, I pass manually everything, including libgcc.
Nothing is picked by default. The multilib thing should be just
because of this. There are 4 variants of libgcc. If I pick the
m4-fpu library it should be already compiled with the right
flags. If it is not, I think that is a gcc bug.
How can I check from the library which modes/flags is has?
>
> I'm not sure but I still don't think we could cause this. This
> low-level stuff is usually part of the backend, the frontend
> doesn't
> know much about thumb/arm.
>
Yes, this is going a little off-topic now
More information about the D.gnu
mailing list