Exceptions in ARM

Mike none at none.com
Fri Feb 28 23:53:44 PST 2014


On Saturday, 1 March 2014 at 07:26:16 UTC, Timo Sintonen wrote:
>>> I investigated this a little. It seems that the processor 
>>> gets a fault interrupt when calling _Unwind_RaiseException in 
>>> _d_throw. The status bits indicate an invalid instruction 
>>> code.
>>> When looking at the disassembly I see that the call is a blx 
>>> instruction with address. In Cortex-m4 blx can only take a 
>>> register argument.
>>> Is this a bug in gdc or gcc?
>>
>> blx can also take a label.  Are you sure it's an address and 
>> not
>> a label?
>
> According to the instruction card
> http://infocenter.arm.com/help/topic/com.arm.doc.qrc0006e/QRC0006_UAL16.pdf
> blx with label is valid in thumb instruction set. But it is a 32
> bit instruction so I think it does not exist in any thumb only
> processors.
>
> Here we can see it is not valid in M4:
> http://infocenter.arm.com/help/topic/com.arm.doc.dui0553a/BABEFHAE.html

It is my understanding that Thumb is 16-bit only, but Thumb-2 is
a mix of 16 and 32-bit instructions
(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/CHDFEDDB.html).
   Under the "Specifications" tab of this site
(http://www.arm.com/products/processors/cortex-m/cortex-m4-processor.php)
it shows the Cortex-M4 as a Thumb-2 capable core.

I don't know how to tell GDC/GCC to only generate Thumb-1 as
opposed to Thumb-2 so it's my assumption it will default the
latest Thumb based on the specified arch or cpu argument.  In
that case, I think it will generate Thumb-2 instructions.
Correct me if I'm wrong.

Here's the instruction card for Thumb-2
(http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf).
   It shows the blx <label> instruction is valid for 5T and later
architectures.  The Cortex-M4 is ARMv7EM architecture, so I think
it should be good to go.

However, your second think doesn't show the blx {label} syntax,
so I'm a little confused.

Can you post the assembly code?


More information about the D.gnu mailing list