public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/boot: clean up headers
@ 2019-03-02  0:07 Nick Desaulniers
  2019-03-02  0:13 ` Nathan Chancellor
  2019-03-02  2:27 ` Stephen Rothwell
  0 siblings, 2 replies; 11+ messages in thread
From: Nick Desaulniers @ 2019-03-02  0:07 UTC (permalink / raw)
  To: bp
  Cc: natechancellor, niravd, Nick Desaulniers, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86, Stephen Rothwell, linux-kernel

The inclusion of <linux/kernel.h> was causing issue as the definition of
__arch_hweight64 from arch/x86/include/asm/arch_hweight.h eventually gets
included. The definition is problematic when compiled with -m16 (all code
in arch/x86/boot/ is) as the "D" inline assembly constraint is rejected
by both compilers when passed an argument of type long long (regardless
of signedness, anything smaller is fine).

Because GCC performs inlining before semantic analysis, and
__arch_hweight64 is dead in this translation unit, GCC does not report
any issues at compile time.  Clang does the semantic analysis in the
front end, before inlining (run in the middle) can determine the code is
dead. I consider this another case of PR33587, which I think we can do
more work to solve.

It turns out that arch/x86/boot/string.c doesn't actually need
linux/kernel.h, simply linux/limits.h and linux/compiler.h. Include them,
and sort the headers alphabetically.

Link: https://bugs.llvm.org/show_bug.cgi?id=33587
Link: https://github.com/ClangBuiltLinux/linux/issues/347
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
Note that this only regresses for us on linux-next (not mainline).

 arch/x86/boot/string.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/x86/boot/string.c b/arch/x86/boot/string.c
index 315a67b8896b..f149316116d0 100644
--- a/arch/x86/boot/string.c
+++ b/arch/x86/boot/string.c
@@ -12,10 +12,11 @@
  * Very basic string functions
  */
 
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
 #include <asm/asm.h>
+#include <linux/compiler.h>
+#include <linux/errno.h>
+#include <linux/limits.h>
+#include <linux/types.h>
 #include "ctype.h"
 #include "string.h"
 
-- 
2.21.0.352.gf09ad66450-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-03-21 11:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-02  0:07 [PATCH] x86/boot: clean up headers Nick Desaulniers
2019-03-02  0:13 ` Nathan Chancellor
2019-03-02  2:27 ` Stephen Rothwell
2019-03-02  2:30   ` Stephen Rothwell
2019-03-04 17:50   ` [PATCH v2] " Nick Desaulniers
2019-03-04 22:51     ` Stephen Rothwell
2019-03-05  0:12       ` [PATCH v3] " Nick Desaulniers
2019-03-05  0:15         ` Nick Desaulniers
2019-03-05  8:57           ` Borislav Petkov
2019-03-14 22:14             ` [PATCH v4] " Nick Desaulniers
2019-03-21 11:28               ` [tip:x86/urgent] x86/boot: Restrict header scope to make Clang happy tip-bot for Nick Desaulniers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox