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.2AFAIK 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,"",%progbitsHow 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 |