On 03/01/14 16:42, John Tytgat wrote:
In message <52c6cc05.8090...@sky.com>
           Lee Noar <leen...@sky.com> wrote:

I've been using trunk for some time for development and it seems
stable to me. The only problem I've had is a crash in Cairo which
I traced to file cairo-1.12.16/src/cairo-boxes-intersect.c, function
sweep_line_init(), GCC 4.7.4 produced this code snippet:

    ldr r0, [r0, #-3936]
    ldr r7, [r0, #-3940]
    str r9, [r7, r0, asl #2]

The first ldr corrupts r0 which is still required by the second ldr.
I was able to work around it by declaring the function noinline.
This must be an extremely obscure bug, because this is the only time
I've seen it and I've compiled and run a fair bit of code with this
compiler. Unfortunately, I wouldn't have a clue how to fix it.

One way is to figure out if this is still triggerable using arm-unknown-eabi
target using the same compiler sources (change TARGET in Makefile).
If so, then you can try later versions of the compiler and see if/when
it is solved.  If so, it helps retrieving the right patch.

I've just tried compiling it on a Raspberry PI (Linux) which has GCC
4.6.3, but that has more registers at its disposal (it can use r10,
and r11 as general registers), so its use of the stack and code
produced is slightly different. This code sequence isn't present,
but I can't say that RISC OS GCC 4.6.3 wouldn't generate it.

Lee.


_______________________________________________
GCCSDK mailing list gcc@gccsdk.riscos.info
Bugzilla: http://www.riscos.info/bugzilla/index.cgi
List Info: http://www.riscos.info/mailman/listinfo/gcc
Main Page: http://www.riscos.info/index.php/GCCSDK

Reply via email to