Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

GCC 4.1.2 for ARM (in NetBSD 4) produces buggy code with -fno-strict-aliasing?



Hi NetBSD ARMers,

I spent some time tracking down a panic for NetBSD/hpcarm 4.0 on a
Jornada 728, and I guess it is wise to share the result with this list.
Maybe this is already a well-known problem; I don't know.

The panic was triggered when I started using a wireless NIC. The crash
was in wi.o, and looking at the disassembly showed that GCC had produced
buggy code (it uses the wrong base register for loading a value).

c00d4018:       e51b00d0        ldr     r0, [fp, #-208]
c00d401c:       e51b10d0        ldr     r1, [fp, #-208]
c00d4020:       e5900eb4        ldr     r0, [r0, #3764]
c00d4024:       e5903eb8        ldr     r3, [r0, #3768]

The fourth line should not load using r0 as a base, but using r1.

By manually compiling wi.o and removing optimization options from the
command line, I noticed that removing -fno-strict-aliasing causes the
buggy code to be replaced with more reasonable code:

http://gavare.se/jornada728/files/left-is-buggy-right-is-without-fnostrictaliasing.png

My guess is that all NetBSD ARM platforms which use this version of GCC
could be affected.


Anders




Home | Main Index | Thread Index | Old Index