I think this patch is roughly what's needed to fix the ARM cache coherency problem.
Branden, could you also turn loader debugging off again for arm in the next package version? Thanks p. --- xc/programs/Xserver/hw/xfree86/common/compiler.h.old Wed Oct 31 11:08:16 2001 +++ xc/programs/Xserver/hw/xfree86/common/compiler.h Wed Oct 31 11:15:43 2001 @@ -1211,6 +1211,16 @@ outl(val, port); } +#define arm_flush_cache(addr) \ +do { \ + register unsigned long _beg __asm ("a1") = (unsigned long) (addr); \ + register unsigned long _end __asm ("a2") = (unsigned long) (addr) + 4;\ + register unsigned long _flg __asm ("a3") = 0; \ + __asm __volatile ("swi 0x9f0002 @ sys_cacheflush" \ + : "=r" (_beg) \ + : "0" (_beg), "r" (_end), "r" (_flg)); \ +} while (0) + #else /* ix86 */ #define ldq_u(p) (*((unsigned long *)(p))) --- xc/programs/Xserver/hw/xfree86/loader/elfloader.c.old Wed Oct 31 11:08:17 2001 +++ xc/programs/Xserver/hw/xfree86/loader/elfloader.c Wed Oct 31 11:15:38 2001 @@ -2077,6 +2077,7 @@ val = symval - (unsigned long)dest32 + val; val >>= 2; *dest32 = (*dest32 & 0xff000000) | (val & 0x00ffffff); + arm_flush_cache(dest32); } break;