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