Exceptions in ARM

Timo Sintonen t.sintonen at luukku.com
Wed Jan 8 00:37:43 PST 2014


On Sunday, 5 January 2014 at 10:21:36 UTC, Timo Sintonen wrote:
> On Sunday, 5 January 2014 at 10:06:48 UTC, Johannes Pfau wrote:
>
>> I should really start pushing my local ARM changes upstream. 
>> Here's a
>> fix for the EABI unwinder:
>> https://github.com/jpf91/GDC/commit/262e432e95cbe31a6764cd337f64022a56011eda
>>
>> IIRC I also thought the code in gcc/deh.d wasn't correct. As 
>> it wouldn't
>> work for the eabi unwinder anyway (no Phase1Info member) I 
>> didn't
>> investigate that though.
>
> Meanwhile I got it to pass with this:
> align(8) int _pad;
>
Exceptions still not working. The code call the unwind routine in 
libgcc but that never calls back to personality routine. Neither 
it resumes to the error callback nor abort.

There are several addresses in tables like the call to cleanup 
code and jump to the catch routine. Are they called in libgcc 
side or in personality routine? I was just wondering if thumb 
mode has been taken into account.

Cortex processors have only the 16 bit 'thumb' instruction set. 
This is indicated by setting the lsb of the address to 1 in any 
address that is used in jumps or calls or any address loads to 
pc. If the lsb is 0 it will result to illegal instruction fault 
in Cortex.

When compiling with -mthumb the compiler always sets this bit for 
any address and there is a separate libgcc for thumb mode. When 
calculating address offsets from exception tables the compiler 
can not know they are used as jump addresses. It may be possible 
that callback functions are called in wrong mode.

Any thoughts?


More information about the D.gnu mailing list