Thread (18 messages) flat view 18 messages, 5 authors, 2012-09-13

GCC 4.6.x miscompiling arm-linux?

From: Michael Olbrich <hidden>
Date: 2012-09-11 10:29:05

On Tue, Sep 11, 2012 at 11:31:39AM +0200, David Jander wrote:
On Tue, 11 Sep 2012 10:48:53 +0200
Sascha Hauer [off-list ref] wrote:
quoted
On Tue, Sep 11, 2012 at 09:27:53AM +0200, David Jander wrote:
quoted
Hi Matt,
quoted
        @ Function supports interworking.
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #9
        mov     r3, #0
        str     r3, [r1, #0]
        mov     r0, #0
        strgt   r3, [r1, #4]
        bx      lr
        .size   flexcan_chip_start, .-flexcan_chip_start
        .ident  "GCC: (GNU) 4.3.3"
        .section        .note.GNU-stack,"",%progbits

I think this looks correct. Perhaps you could try the angstrom arm5te
toolchain and see if it's a toolchain issue?
Yes, this looks a lot better, and is exactly what I get when I compile this
code with CodeSourcery GCC-4.4.1

I have tries building gcc-4.6.3 also with OSELAS/PTXdist, and it gives the
same (wrong) result as with gcc-4.6.2
AFAIK our OSELAS/PTXdist Toolchains use Linaro patches, this would
explain why both have the same result.
No, OSELAS Toolchains only uses the Linaro GCC for Cortex-A8/-A9
It would indeed, if I had just used OSELAS as-is, but I didn't ;-)
I made a copy of
arm-v5te-linux-gnueabi_gcc-4.6.2_glibc-2.14.1_binutils-2.21.1a_kernel-2.6.39-sanitized.ptxconfig
and replaced the version string 4.6.2 with 4.6.3. AFAIK, this way PTXdist will
download pristine gcc-4.6.3 sources and not apply any patches, since there is
no directory named patches/gcc-4.6.3, right? Can I assume that I have an
unpatched version of gcc-4.6.3 then?
Correct. This way you'll get gcc-4.6.3 without any patches.
Btw, Here's what I get from it:

flexcan_chip_start:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        mov     r3, #0
        cmp     r0, #9
        str     r3, [r1, #0]
        ldrle   r3, [r1, #4]
        mov     r0, #0
        str     r3, [r1, #4]
        bx      lr
        .size   flexcan_chip_start, .-flexcan_chip_start
        .ident  "GCC: (OSELAS.Toolchain-2011.11.1) 4.6.3"
        .section        .note.GNU-stack,"",%progbits
How can I reproduce this output? I'd like to test this with different
toolchain versions.
Wrong code.
See the version string? It is clearly not an existing OSELAS version.
Hmmm, so far it seems all tested gcc-4.6.x versions produce wrong code,
correct?

Regards,
Michael

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help