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?

Reply via email to