GCC 4.6.x miscompiling arm-linux?

Matthew Leach matthew at mattleach.net
Mon Sep 10 13:11:19 EDT 2012


Hi David,

David Jander <david.jander at protonic.nl> writes:
> ...
> 	.text
> 	.align	2
> 	.global	flexcan_chip_start
> 	.type	flexcan_chip_start, %function
> 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.2"
> 	.section	.note.GNU-stack,"",%progbits
>

This does indeed look wrong. I had a go at compile your code snippet the
following assembly was produced:

        .text
        .align  2
        .global flexcan_chip_start
        .type   flexcan_chip_start, %function
flexcan_chip_start:
        @ 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?

http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-i686-linux-armv5te-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2

Thanks,
Matt



More information about the linux-arm-kernel mailing list