• Nathan Chancellor's avatar
    MIPS: Unconditionally specify '-EB' or '-EL' · fd9d0ca2
    Nathan Chancellor authored
    This was all done to work around a GCC bug that has been fixed after
    4.2. The kernel requires GCC 4.6 or newer so remove all of these hacks
    and just use the traditional flags.
    
     $ mips64-linux-gcc --version | head -n1
     mips64-linux-gcc (GCC) 4.6.3
    
     $ mips64-linux-gcc -EB -dM -E -C -x c /dev/null | grep MIPSE
     #define MIPSEB 1
     #define __MIPSEB__ 1
     #define _MIPSEB 1
     #define __MIPSEB 1
    
     $ mips64-linux-gcc -EL -dM -E -C -x c /dev/null | grep MIPSE
     #define __MIPSEL__ 1
     #define MIPSEL 1
     #define _MIPSEL 1
     #define __MIPSEL 1
    
    This is necessary when converting the MIPS VDSO to use $(LD) instead of
    $(CC) to link because the OUTPUT_FORMAT is defaulted to little endian
    and only flips to big endian when '-EB' is set on the command line.
    There is no issue currently because the compiler explicitly passes
    '-EB' or '-EL' to the linker regardless of whether or not it was
    provided by the user. Passing '-v' to VDSO_LDFLAGS shows:
    
    <gcc_prefix>/libexec/gcc/mips64-linux/9.3.0/collect2 ... -EB ...
    
    even though '-EB' is nowhere to be found in KBUILD_CFLAGS. The VDSO
    Makefile already supports getting '-EB' or '-EL' from KBUILD_CFLAGS
    through a filter directive but '-EB' or '-EL' is not always present.
    
    If we do not do this, we will see the following error when compiling
    for big endian:
    
    $ make -j$(nproc) ARCH=mips CROSS_COMPILE=mips64-linux- \
      64r2el_defconfig arch/mips/vdso/
    ...
    mips64-linux-ld: arch/mips/vdso/elf.o: compiled for a big endian system
    and target is little endian
    mips64-linux-ld: arch/mips/vdso/elf.o: endianness incompatible with that
    of the selected emulation
    mips64-linux-ld: failed to merge target specific data of file
    arch/mips/vdso/elf.o
    ...
    
    Remove this legacy hack and just use '-EB' and '-EL' unconditionally.
    Reported-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
    fd9d0ca2
Makefile 18.3 KB