-cflags-$(CONFIG_CPU_R3000) += \
- $(call set_gccflags,r3000,mips1,r3000,mips1,mips1)
-
-cflags-$(CONFIG_CPU_TX39XX) += \
- $(call set_gccflags,r3900,mips1,r3000,mips1,mips1)
-
-cflags-$(CONFIG_CPU_R6000) += \
- $(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_R4300) += \
- $(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_VR41XX) += \
- $(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_R4X00) += \
- $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_MIPS32) += \
- $(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_MIPS64) += \
- $(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \
- -Wa,--trap
-
-cflags-$(CONFIG_CPU_R5000) += \
- $(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \
- -Wa,--trap
+# Certain gcc versions upto gcc 4.1.1 (probably 4.2-subversion as of
+# 2006-10-10 don't properly change the the predefined symbols if -EB / -EL
+# are used, so we kludge that here. A bug has been filed at
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29413.
+#
+undef-all += -UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__
+undef-all += -UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__
+predef-be += -DMIPSEB -D_MIPSEB -D__MIPSEB -D__MIPSEB__
+predef-le += -DMIPSEL -D_MIPSEL -D__MIPSEL -D__MIPSEL__
+cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB $(undef-all) $(predef-be))
+cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL $(undef-all) $(predef-le))