I've built linux-2.6.24 for arm using gcc-4.3.1 and while it builds fine, the resulting binary doesn't boot on qemu. If I build the same kernel with gcc-4.2.4 it boots correctly.
The problem seems to be that the prefetch function (linux-2.6.24/include/asm-arm/processor.h) causes a crash if it is called with a NULL pointer argument. But only if it's compiled with gcc-4.3.x. This patch fixes the problem, but the extra code may cost more than you gain by having prefetch in the first place diff -urN linux-2.6.24-clean/include/asm-arm/processor.h linux-2.6.24/include/asm-arm/processor.h --- linux-2.6.24-clean/include/asm-arm/processor.h 2008-01-24 22:58:37.000000000 +0000 +++ linux-2.6.24/include/asm-arm/processor.h 2008-07-02 22:44:26.052525328 +0100 @@ -105,11 +105,14 @@ #define ARCH_HAS_PREFETCH static inline void prefetch(const void *ptr) { - __asm__ __volatile__( - "pld\t%0" - : - : "o" (*(char *)ptr) - : "cc"); + if (ptr) + { + __asm__ __volatile__( + "pld\t%0" + : + : "o" (*(char *)ptr) + : "cc"); + } } #define ARCH_HAS_PREFETCHW -- Summary: [Regression] linux-kernel 2.6.24 doesn't boot for arm Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: chris dot steel dot lnx at googlemail dot com GCC build triplet: x86_64-cross-linux-gnu GCC host triplet: x86_64-cross-linux-gnu GCC target triplet: arm-unknown-linux-gnueabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36706