| From: Daniel Wagner <daniel.wagner@bmw-carit.de> |
| Date: Fri, 19 Feb 2016 09:46:38 +0100 |
| Subject: [PATCH 2/5] kbuild: Add option to turn incompatible pointer check |
| into error |
| |
| With the introduction of the simple wait API we have two very |
| similar APIs in the kernel. For example wake_up() and swake_up() |
| is only one character away. Although the compiler will warn |
| happily the wrong usage it keeps on going an even links the kernel. |
| Thomas and Peter would rather like to see early missuses reported |
| as error early on. |
| |
| In a first attempt we tried to wrap all swait and wait calls |
| into a macro which has an compile time type assertion. The result |
| was pretty ugly and wasn't able to catch all wrong usages. |
| woken_wake_function(), autoremove_wake_function() and wake_bit_function() |
| are assigned as function pointers. Wrapping them with a macro around is |
| not possible. Prefixing them with '_' was also not a real option |
| because there some users in the kernel which do use them as well. |
| All in all this attempt looked to intrusive and too ugly. |
| |
| An alternative is to turn the pointer type check into an error which |
| catches wrong type uses. Obviously not only the swait/wait ones. That |
| isn't a bad thing either. |
| |
| Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de> |
| Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: linux-rt-users@vger.kernel.org |
| Cc: Boqun Feng <boqun.feng@gmail.com> |
| Cc: Marcelo Tosatti <mtosatti@redhat.com> |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Cc: Paul Gortmaker <paul.gortmaker@windriver.com> |
| Cc: Paolo Bonzini <pbonzini@redhat.com> |
| Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| Link: http://lkml.kernel.org/r/1455871601-27484-3-git-send-email-wagi@monom.org |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| Makefile | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -767,6 +767,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wer |
| # Prohibit date/time macros, which would make the build non-deterministic |
| KBUILD_CFLAGS += $(call cc-option,-Werror=date-time) |
| |
| +# enforce correct pointer usage |
| +KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) |
| + |
| # use the deterministic mode of AR if available |
| KBUILD_ARFLAGS := $(call ar-option,D) |
| |