Re: [PATCH kernel v3] powerpc/makefile: Do not redefine $(CPP) for preprocessor

From: Alexey Kardashevskiy
Date: Sun May 16 2021 - 23:23:35 EST




On 5/14/21 18:46, Segher Boessenkool wrote:
Hi!

On Fri, May 14, 2021 at 11:42:32AM +0900, Masahiro Yamada wrote:
In my best guess, the reason why powerpc adding the endian flag to CPP
is this line in arch/powerpc/kernel/vdso64/vdso64.lds.S

#ifdef __LITTLE_ENDIAN__
OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle")
#else
OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc")
#endif

Which is equivalent to

#ifdef __LITTLE_ENDIAN__
OUTPUT_FORMAT("elf64-powerpcle")
#else
OUTPUT_FORMAT("elf64-powerpc")
#endif

so please change that at the same time if you touch this :-)

"If you touch this" approach did not work well with this patch so sorry but no ;)

and for a separate patch, I'll have to dig since when it is equal, do you know?



__LITTLE_ENDIAN__ is defined by powerpc gcc and clang.

This predefined macro is required by the newer ABIs, but all older

That's good so I'll stick to it.

compilers have it as well. _LITTLE_ENDIAN is not supported on all
platforms (but it is if your compiler targets Linux, which you cannot
necessarily rely on). These macros are PowerPC-specific.

For GCC, for all targets, you can say
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
You do not need any of the other *ORDER__ macros in most cases.
See "info cpp" for the sordid details.

[2] powerpc-linux-gnu-gcc + -mlittle-endian -> __LITTLE_ENDIAN__ is defined

You can just write -mbig and -mlittle btw. Those aren't available on
all targets, but neither are the long-winded -m{big,little}-endian
option names. Pet peeve, I know :-)

I am looking the same guarantees across modern enough gcc and clang and I am not sure all of the above is valid for clang 10.0.something (or whatever we say we support) ;)


--
Alexey