| From fd7eea27a3aed79b63b1726c00bde0d50cf207e2 Mon Sep 17 00:00:00 2001 |
| From: Heiko Carstens <hca@linux.ibm.com> |
| Date: Mon, 5 Feb 2024 16:48:43 +0100 |
| Subject: Compiler Attributes: Add __uninitialized macro |
| |
| From: Heiko Carstens <hca@linux.ibm.com> |
| |
| commit fd7eea27a3aed79b63b1726c00bde0d50cf207e2 upstream. |
| |
| With INIT_STACK_ALL_PATTERN or INIT_STACK_ALL_ZERO enabled the kernel will |
| be compiled with -ftrivial-auto-var-init=<...> which causes initialization |
| of stack variables at function entry time. |
| |
| In order to avoid the performance impact that comes with this users can use |
| the "uninitialized" attribute to prevent such initialization. |
| |
| Therefore provide the __uninitialized macro which can be used for cases |
| where INIT_STACK_ALL_PATTERN or INIT_STACK_ALL_ZERO is enabled, but only |
| selected variables should not be initialized. |
| |
| Acked-by: Kees Cook <keescook@chromium.org> |
| Reviewed-by: Nathan Chancellor <nathan@kernel.org> |
| Link: https://lore.kernel.org/r/20240205154844.3757121-2-hca@linux.ibm.com |
| Signed-off-by: Heiko Carstens <hca@linux.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/compiler_attributes.h | 12 ++++++++++++ |
| 1 file changed, 12 insertions(+) |
| |
| --- a/include/linux/compiler_attributes.h |
| +++ b/include/linux/compiler_attributes.h |
| @@ -265,6 +265,18 @@ |
| #define __used __attribute__((__used__)) |
| |
| /* |
| + * Optional: only supported since gcc >= 12 |
| + * |
| + * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-uninitialized-variable-attribute |
| + * clang: https://clang.llvm.org/docs/AttributeReference.html#uninitialized |
| + */ |
| +#if __has_attribute(__uninitialized__) |
| +# define __uninitialized __attribute__((__uninitialized__)) |
| +#else |
| +# define __uninitialized |
| +#endif |
| + |
| +/* |
| * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-weak-function-attribute |
| * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-weak-variable-attribute |
| */ |