From: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Date: Mon, May 13, 2019 at 1:33 PM To: Dmitry Vyukov, Arnd Bergmann Cc: Nick Kossifidis, Christoph Hellwig, Linus Torvalds, Andrew Morton, linux-arch, Linux Kernel Mailing List, linuxppc-dev > Dmitry Vyukov <dvyukov@xxxxxxxxxx> writes: > > From: Arnd Bergmann <arnd@xxxxxxxx> > > Date: Sat, May 11, 2019 at 2:51 AM > > To: Dmitry Vyukov > > Cc: Nick Kossifidis, Christoph Hellwig, Linus Torvalds, Andrew Morton, > > linux-arch, Linux Kernel Mailing List, linuxppc-dev > > > >> On Fri, May 10, 2019 at 6:53 AM Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote: > >> > > > >> > > I think it's good to have a sanity check in-place for consistency. > >> > > >> > > >> > Hi, > >> > > >> > This broke our cross-builds from x86. I am using: > >> > > >> > $ powerpc64le-linux-gnu-gcc --version > >> > powerpc64le-linux-gnu-gcc (Debian 7.2.0-7) 7.2.0 > >> > > >> > and it says that it's little-endian somehow: > >> > > >> > $ powerpc64le-linux-gnu-gcc -dM -E - < /dev/null | grep BYTE_ORDER > >> > #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ > >> > > >> > Is it broke compiler? Or I always hold it wrong? Is there some > >> > additional flag I need to add? > >> > >> It looks like a bug in the kernel Makefiles to me. powerpc32 is always > >> big-endian, > >> powerpc64 used to be big-endian but is now usually little-endian. There are > >> often three separate toolchains that default to the respective user > >> space targets > >> (ppc32be, ppc64be, ppc64le), but generally you should be able to build > >> any of the > >> three kernel configurations with any of those compilers, and have the Makefile > >> pass the correct -m32/-m64/-mbig-endian/-mlittle-endian command line options > >> depending on the kernel configuration. It seems that this is not happening > >> here. I have not checked why, but if this is the problem, it should be > >> easy enough > >> to figure out. > > > > > > Thanks! This clears a lot. > > This may be a bug in our magic as we try to build kernel files outside > > of make with own flags (required to extract parts of kernel > > interfaces). > > So don't spend time looking for the Makefile bugs yet. > > OK :) > > We did have some bugs in the past (~1-2 y/ago) but AFAIK they are all > fixed now. These days I build most of my kernels with a bi-endian 64-bit > toolchain, and switching endian without running `make clean` also works. For the record, yes, it turn out to be a problem in our code (a latent bug). We actually used host (x86) gcc to build as-if ppc code that can run on the host, so it defined neither LE no BE macros. It just happened to work in the past :) +Andrew