Pete Popov wrote: > On Sat, 2002-04-27 at 13:19, Alan Cox wrote: > >>>Has anyone been able to run reiserfs on big endian systems? >>> >>Should work on newer 2.4 kernels >> > > Yes, it does. I sent an email yesterday explaining what the problem > was. The 2.95.3 toolchain is miscompiling the cpu_to_le16 and > le16_to_cpu functions. The problem appears to be fixed in 2.96 and 3.x > so reiserfs is looking good for both, LE and BE mips systems. > Here is the test case that reveals the toolchain problem. Brave souls are welcome to look into it. Apparently the bug only happens on be tools with 2.95.x. Jun
#if 0 compile instructions: /opt/hardhat/devkit/mips/fp_be/bin/mips_fp_be-gcc -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -g -G 0 -mno-abicalls -fno-pic -mcpu=r4600 -mips2 -Wa,--trap -pipe -c -o try.o try.c #endif typedef unsigned short __u16; typedef unsigned __u32; #define ___swab16_new(x) \ ({ \ __u32 __x = (x); \ __x = ((__u32)( \ ((__u32)(__x) << 8) | \ (((__u32)(__x) & (__u16)0xff00U) >> 8) )); \ (__u16)(__x & 0xffff); \ }) #define ___swab16(x) \ ({ \ __u16 __x = (x); \ ((__u16)( \ (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ }) # define __swab16(x) \ (__builtin_constant_p((__u16)(x)) ? \ ___swab16((x)) : \ __fswab16((x))) #ifndef __arch__swab16 # define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) #endif static __inline__ __const__ __u16 __fswab16(__u16 x) { return __arch__swab16(x); } #define __le16_to_cpu(x) __swab16((x)) #define le16_to_cpu __le16_to_cpu extern __u16 x; extern __u16 y; void foo_old(void) { if (le16_to_cpu(x) > y) y = x; }