[PATCH] include/linux/compiler-clang.h: define __naked

From: Stefan Agner
Date: Mon Sep 10 2018 - 02:05:12 EST


ARM32 arch code uses the __naked attribute. This has previously been
defined in include/linux/compiler-gcc.h, which is no longer included
for Clang. Define __naked for Clang. Conservatively add all attributes
previously used (and supported by Clang).

This fixes compile errors when building ARM32 using Clang:
arch/arm/mach-exynos/mcpm-exynos.c:193:13: error: variable has incomplete type 'void'
static void __naked exynos_pm_power_up_setup(unsigned int affinity_level)
^

Fixes: 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive")
Signed-off-by: Stefan Agner <stefan@xxxxxxxx>
---
include/linux/compiler-clang.h | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index b1ce500fe8b3..a593e3ac0720 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -23,6 +23,12 @@

#define __no_sanitize_address __attribute__((no_sanitize("address")))

+/*
+ * ARM32 is currently the only user of __naked supported by Clang. Follow
+ * gcc: Do not trace naked functions and make sure they don't get inlined.
+ */
+#define __naked __attribute__((naked)) noinline notrace
+
/*
* Not all versions of clang implement the the type-generic versions
* of the builtin overflow checkers. Fortunately, clang implements
--
2.18.0