mipsel-native-endianness
authorVagrant Cascadian <vagrant@debian.org>
Tue, 7 Apr 2015 20:42:30 +0000 (20:42 +0000)
committerVagrant Cascadian <vagrant@debian.org>
Tue, 7 Apr 2015 20:42:30 +0000 (20:42 +0000)
[MIPS] Fix little-endian build with non-ELDK toolchains

We've been in trouble for a long time when cross compiling with non-ELDK
toolchains.  This is caused by -EB passed to CPPFLAGS incorrectly, by the
lack of an endian specifier to LDFLAGS, and by wrong OUTPUT_FORMATs.

We're going to implement two workarounds.  One is the endianness specifier
bugfix not to pass -EB / -EL to CPPFLAGS unless ELDK toolchain is used.
Note that ELDK and non-ELDK toolchains know their default endianness, so
the endianness specifier may not be necessary in principle.

The other is removal of OUTPUT_FORMAT in *.lds files.  If we have this,
it doesn't work unless an endianness specifier is added to LDFLAGS.  As
we haven't added that to LDFLAGS so far, it must have not worked properly,
except ELDK; I don't know why and how ELDK works, though.

With these two changes, all objects will be generated and linked in the
toolchain's default endianness.  Then MAKEALL mips_el will work even with
non-ELDK toolchain.

Note that Linux/MIPS kernel has CONFIG_CPU_BIG_ENDIAN and
CONFIG_CPU_LITTLE_ENDIAN alternatives to allow users to compile kernels
with a toolchain for the other endianness. But U-Boot does not have such
feature for now, and it's another story.

Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
Gbp-Pq: Name mipsel-native-endianness.diff

arch/mips/config.mk
examples/standalone/mips.lds

index a2d07aff1b1d5209fbb925b4a4399ee707e365e2..a1d213394c67b31014ae0a6966921e225bbcfe01 100644 (file)
@@ -5,10 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifeq ($(CROSS_COMPILE),)
-CROSS_COMPILE := mips_4KC-
-endif
-
 # Handle special prefix in ELDK 4.0 toolchain
 ifneq (,$(findstring 4KCle,$(CROSS_COMPILE)))
 ENDIANNESS := -EL
index 849f0aabf42e5f04e554ec182f5ce26ce5720498..94370c961569655da1e005b0c40b28ad400ea516 100644 (file)
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
-/*
-OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
-*/
-OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradlittlemips")
 OUTPUT_ARCH(mips)
 SECTIONS
 {