| From abac75112d92faba7c99786355115be71418adec Mon Sep 17 00:00:00 2001 |
| From: Nathan Chancellor <natechancellor@gmail.com> |
| Date: Mon, 18 Nov 2019 21:57:10 -0700 |
| Subject: [PATCH] powerpc: Don't add -mabi= flags when building with Clang |
| |
| commit 465bfd9c44dea6b55962b5788a23ac87a467c923 upstream. |
| |
| When building pseries_defconfig, building vdso32 errors out: |
| |
| error: unknown target ABI 'elfv1' |
| |
| This happens because -m32 in clang changes the target to 32-bit, |
| which does not allow the ABI to be changed. |
| |
| Commit 4dc831aa8813 ("powerpc: Fix compiling a BE kernel with a |
| powerpc64le toolchain") added these flags to fix building big endian |
| kernels with a little endian GCC. |
| |
| Clang doesn't need -mabi because the target triple controls the |
| default value. -mlittle-endian and -mbig-endian manipulate the triple |
| into either powerpc64-* or powerpc64le-*, which properly sets the |
| default ABI. |
| |
| Adding a debug print out in the PPC64TargetInfo constructor after line |
| 383 above shows this: |
| |
| $ echo | ./clang -E --target=powerpc64-linux -mbig-endian -o /dev/null - |
| Default ABI: elfv1 |
| |
| $ echo | ./clang -E --target=powerpc64-linux -mlittle-endian -o /dev/null - |
| Default ABI: elfv2 |
| |
| $ echo | ./clang -E --target=powerpc64le-linux -mbig-endian -o /dev/null - |
| Default ABI: elfv1 |
| |
| $ echo | ./clang -E --target=powerpc64le-linux -mlittle-endian -o /dev/null - |
| Default ABI: elfv2 |
| |
| Don't specify -mabi when building with clang to avoid the build error |
| with -m32 and not change any code generation. |
| |
| -mcall-aixdesc is not an implemented flag in clang so it can be safely |
| excluded as well, see commit 238abecde8ad ("powerpc: Don't use gcc |
| specific options on clang"). |
| |
| pseries_defconfig successfully builds after this patch and |
| powernv_defconfig and ppc44x_defconfig don't regress. |
| |
| Reviewed-by: Daniel Axtens <dja@axtens.net> |
| Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> |
| [mpe: Trim clang links in change log] |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20191119045712.39633-2-natechancellor@gmail.com |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile |
| index 403f7e193833..8a887d012df3 100644 |
| --- a/arch/powerpc/Makefile |
| +++ b/arch/powerpc/Makefile |
| @@ -91,11 +91,13 @@ MULTIPLEWORD := -mmultiple |
| endif |
| |
| ifdef CONFIG_PPC64 |
| +ifndef CONFIG_CC_IS_CLANG |
| cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1) |
| cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mcall-aixdesc) |
| aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1) |
| aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mabi=elfv2 |
| endif |
| +endif |
| |
| ifndef CONFIG_CC_IS_CLANG |
| cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mno-strict-align |
| @@ -142,6 +144,7 @@ endif |
| endif |
| |
| CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no) |
| +ifndef CONFIG_CC_IS_CLANG |
| ifdef CONFIG_CPU_LITTLE_ENDIAN |
| CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc)) |
| AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2) |
| @@ -150,6 +153,7 @@ CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1) |
| CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcall-aixdesc) |
| AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1) |
| endif |
| +endif |
| CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc)) |
| CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions) |
| |
| -- |
| 2.7.4 |
| |