2024-12-10 06:44:25 +03:00
|
|
|
From 67e174927705e71b0d254ab6fab5af40193376a4 Mon Sep 17 00:00:00 2001
|
2024-10-29 05:12:06 +03:00
|
|
|
From: Alexandre Frade <kernel@xanmod.org>
|
|
|
|
Date: Sat, 31 Aug 2024 16:57:41 +0000
|
2024-12-10 06:44:25 +03:00
|
|
|
Subject: [PATCH 03/18] kbuild: Remove GCC minimal function alignment
|
2024-10-29 05:12:06 +03:00
|
|
|
|
|
|
|
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|
|
|
---
|
|
|
|
Makefile | 7 -------
|
|
|
|
arch/Kconfig | 12 ------------
|
|
|
|
include/linux/compiler_types.h | 10 +++++-----
|
|
|
|
3 files changed, 5 insertions(+), 24 deletions(-)
|
|
|
|
|
|
|
|
--- a/Makefile
|
|
|
|
+++ b/Makefile
|
2024-12-16 07:12:49 +03:00
|
|
|
@@ -997,15 +997,8 @@ export CC_FLAGS_FPU
|
2024-10-29 05:12:06 +03:00
|
|
|
export CC_FLAGS_NO_FPU
|
|
|
|
|
|
|
|
ifneq ($(CONFIG_FUNCTION_ALIGNMENT),0)
|
|
|
|
-# Set the minimal function alignment. Use the newer GCC option
|
|
|
|
-# -fmin-function-alignment if it is available, or fall back to -falign-funtions.
|
|
|
|
-# See also CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT.
|
|
|
|
-ifdef CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT
|
|
|
|
-KBUILD_CFLAGS += -fmin-function-alignment=$(CONFIG_FUNCTION_ALIGNMENT)
|
|
|
|
-else
|
|
|
|
KBUILD_CFLAGS += -falign-functions=$(CONFIG_FUNCTION_ALIGNMENT)
|
|
|
|
endif
|
|
|
|
-endif
|
|
|
|
|
|
|
|
# arch Makefile may override CC so keep this after arch Makefile is included
|
|
|
|
NOSTDINC_FLAGS += -nostdinc
|
|
|
|
--- a/arch/Kconfig
|
|
|
|
+++ b/arch/Kconfig
|
2024-12-10 06:44:25 +03:00
|
|
|
@@ -1667,18 +1667,6 @@ config FUNCTION_ALIGNMENT
|
2024-10-29 05:12:06 +03:00
|
|
|
default 4 if FUNCTION_ALIGNMENT_4B
|
|
|
|
default 0
|
|
|
|
|
|
|
|
-config CC_HAS_MIN_FUNCTION_ALIGNMENT
|
|
|
|
- # Detect availability of the GCC option -fmin-function-alignment which
|
|
|
|
- # guarantees minimal alignment for all functions, unlike
|
|
|
|
- # -falign-functions which the compiler ignores for cold functions.
|
|
|
|
- def_bool $(cc-option, -fmin-function-alignment=8)
|
|
|
|
-
|
|
|
|
-config CC_HAS_SANE_FUNCTION_ALIGNMENT
|
|
|
|
- # Set if the guaranteed alignment with -fmin-function-alignment is
|
|
|
|
- # available or extra care is required in the kernel. Clang provides
|
|
|
|
- # strict alignment always, even with -falign-functions.
|
|
|
|
- def_bool CC_HAS_MIN_FUNCTION_ALIGNMENT || CC_IS_CLANG
|
|
|
|
-
|
|
|
|
config ARCH_NEED_CMPXCHG_1_EMU
|
|
|
|
bool
|
|
|
|
|
|
|
|
--- a/include/linux/compiler_types.h
|
|
|
|
+++ b/include/linux/compiler_types.h
|
|
|
|
@@ -99,17 +99,17 @@ static inline void __chk_io_ptr(const vo
|
|
|
|
* gcc: https://gcc.gnu.org/onlinedocs/gcc/Label-Attributes.html#index-cold-label-attribute
|
|
|
|
*
|
|
|
|
* When -falign-functions=N is in use, we must avoid the cold attribute as
|
|
|
|
- * GCC drops the alignment for cold functions. Worse, GCC can implicitly mark
|
|
|
|
- * callees of cold functions as cold themselves, so it's not sufficient to add
|
|
|
|
- * __function_aligned here as that will not ensure that callees are correctly
|
|
|
|
- * aligned.
|
|
|
|
+ * contemporary versions of GCC drop the alignment for cold functions. Worse,
|
|
|
|
+ * GCC can implicitly mark callees of cold functions as cold themselves, so
|
|
|
|
+ * it's not sufficient to add __function_aligned here as that will not ensure
|
|
|
|
+ * that callees are correctly aligned.
|
|
|
|
*
|
|
|
|
* See:
|
|
|
|
*
|
|
|
|
* https://lore.kernel.org/lkml/Y77%2FqVgvaJidFpYt@FVFF77S0Q05N
|
|
|
|
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88345#c9
|
|
|
|
*/
|
|
|
|
-#if defined(CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT) || (CONFIG_FUNCTION_ALIGNMENT == 0)
|
|
|
|
+#if !defined(CONFIG_CC_IS_GCC) || (CONFIG_FUNCTION_ALIGNMENT == 0)
|
|
|
|
#define __cold __attribute__((__cold__))
|
|
|
|
#else
|
|
|
|
#define __cold
|