This repository has been archived by the owner on Apr 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
commit 81b45683487a ("compiler.h: give up __compiletime_assert_fallback()") is needed because travis kills the job otherwise due to log spew. See build 271. > The job exceeded the maximum log length, and has been terminated. The proper fix is to send the backport, TODO.
- Loading branch information
1 parent
9e223ae
commit 2badf87
Showing
3 changed files
with
96 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
patches/4.19/x86_64/0001-DO-NOT-UPSTREAM-x86-Avoid-warnings-errors-due-to-lac.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../linux/x86_64/0001-DO-NOT-UPSTREAM-x86-Avoid-warnings-errors-due-to-lac.patch |
83 changes: 83 additions & 0 deletions
83
patches/4.19/x86_64/0002-compiler.h-give-up-__compiletime_assert_fallback.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
From 81b45683487a51b0f4d3b29d37f20d6d078544e4 Mon Sep 17 00:00:00 2001 | ||
From: Masahiro Yamada <[email protected]> | ||
Date: Sun, 26 Aug 2018 03:16:29 +0900 | ||
Subject: [PATCH] compiler.h: give up __compiletime_assert_fallback() | ||
|
||
__compiletime_assert_fallback() is supposed to stop building earlier | ||
by using the negative-array-size method in case the compiler does not | ||
support "error" attribute, but has never worked like that. | ||
|
||
You can simply try: | ||
|
||
BUILD_BUG_ON(1); | ||
|
||
GCC immediately terminates the build, but Clang does not report | ||
anything because Clang does not support the "error" attribute now. | ||
It will later fail at link time, but __compiletime_assert_fallback() | ||
is not working at least. | ||
|
||
The root cause is commit 1d6a0d19c855 ("bug.h: prevent double evaluation | ||
of `condition' in BUILD_BUG_ON"). Prior to that commit, BUILD_BUG_ON() | ||
was checked by the negative-array-size method *and* the link-time trick. | ||
Since that commit, the negative-array-size is not effective because | ||
'__cond' is no longer constant. As the comment in <linux/build_bug.h> | ||
says, GCC (and Clang as well) only emits the error for obvious cases. | ||
|
||
When '__cond' is a variable, | ||
|
||
((void)sizeof(char[1 - 2 * __cond])) | ||
|
||
... is not obvious for the compiler to know the array size is negative. | ||
|
||
Reverting that commit would break BUILD_BUG() because negative-size-array | ||
is evaluated before the code is optimized out. | ||
|
||
Let's give up __compiletime_assert_fallback(). This commit does not | ||
change the current behavior since it just rips off the useless code. | ||
|
||
Signed-off-by: Masahiro Yamada <[email protected]> | ||
Reviewed-by: Kees Cook <[email protected]> | ||
Reviewed-by: Nick Desaulniers <[email protected]> | ||
Signed-off-by: Kees Cook <[email protected]> | ||
--- | ||
include/linux/compiler.h | 17 +---------------- | ||
1 file changed, 1 insertion(+), 16 deletions(-) | ||
|
||
diff --git a/include/linux/compiler.h b/include/linux/compiler.h | ||
index 681d866efb1e..87c776c3ce73 100644 | ||
--- a/include/linux/compiler.h | ||
+++ b/include/linux/compiler.h | ||
@@ -314,29 +314,14 @@ static inline void *offset_to_ptr(const int *off) | ||
#endif | ||
#ifndef __compiletime_error | ||
# define __compiletime_error(message) | ||
-/* | ||
- * Sparse complains of variable sized arrays due to the temporary variable in | ||
- * __compiletime_assert. Unfortunately we can't just expand it out to make | ||
- * sparse see a constant array size without breaking compiletime_assert on old | ||
- * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether. | ||
- */ | ||
-# ifndef __CHECKER__ | ||
-# define __compiletime_error_fallback(condition) \ | ||
- do { ((void)sizeof(char[1 - 2 * condition])); } while (0) | ||
-# endif | ||
-#endif | ||
-#ifndef __compiletime_error_fallback | ||
-# define __compiletime_error_fallback(condition) do { } while (0) | ||
#endif | ||
|
||
#ifdef __OPTIMIZE__ | ||
# define __compiletime_assert(condition, msg, prefix, suffix) \ | ||
do { \ | ||
- int __cond = !(condition); \ | ||
extern void prefix ## suffix(void) __compiletime_error(msg); \ | ||
- if (__cond) \ | ||
+ if (!(condition)) \ | ||
prefix ## suffix(); \ | ||
- __compiletime_error_fallback(__cond); \ | ||
} while (0) | ||
#else | ||
# define __compiletime_assert(condition, msg, prefix, suffix) do { } while (0) | ||
-- | ||
2.17.1 | ||
|