summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-xilinx/kbuild-Fix-passing-Wno-options-to-gcc-4.4.patch
blob: 980d43186d9268848a00d96484986a8827bb91e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
From 996ad5340f8c33dd4cb01d30c251e82664457b9d Mon Sep 17 00:00:00 2001
From: Adrian Alonso <aalonso@secretlab.ca>
Date: Fri, 27 May 2011 10:19:06 -0500
Subject: [PATCH] kbuild: Fix passing Wno options to gcc 4.4+
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* From kernel mailing list
 http://permalink.gmane.org/gmane.linux.kernel.next/16754
 Starting with 4.4, gcc will happily accept -Wno-≤anything> in the
 cc-option test and complain later when compiling a file that has some
 other warning. This rather unexpected behavior is intentional as per
 http://gcc.gnu.org/PR28322, so work around it by testing for support of
 the opposite option (without the no-). Introduce a new Makefile function
 cc-disable-warning that does this and update two uses of cc-option in
 the toplevel Makefile.
* Add Makefile option to disable warnings from unused-but-set-variable

 Reported-by: Stephen Rothwell <sfr <at> canb.auug.org.au>
 Signed-off-by: Michal Marek <mmarek <at> suse.cz>
 Signed-off-by: Adrian Alonso <aalonso@secretlab.ca>
---
 Documentation/kbuild/makefiles.txt |   12 ++++++++++++
 Makefile                           |    6 +++++-
 scripts/Kbuild.include             |    5 +++++
 3 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 0ef00bd..e07decf 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -499,6 +499,18 @@ more details, with real examples.
 	gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
 	Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options
 
+	cc-disable-warning
+	cc-disable-warning checks if gcc supports a given warning and returns
+	the commandline switch to disable it. This special function is needed,
+	because gcc 4.4 and later accept any unknown -Wno-* option and only
+	warn about it if there is another warning in the source file.
+
+	Example:
+		KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
+
+	In the above example, -Wno-unused-but-set-variable will be added to
+	KBUILD_CFLAGS only if gcc really accepts it.
+
     cc-version
 	cc-version returns a numerical version of the $(CC) compiler version.
 	The format is <major><minor> where both are two digits. So for example
diff --git a/Makefile b/Makefile
index 74b2555..e2133ed 100644
--- a/Makefile
+++ b/Makefile
@@ -554,6 +554,10 @@ ifndef CONFIG_CC_STACKPROTECTOR
 KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
 endif
 
+# This warning generated too much noise in a regular build.
+# Use make W=1 to enable this warning (see scripts/Makefile.build)
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
+
 ifdef CONFIG_FRAME_POINTER
 KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
 else
@@ -599,7 +603,7 @@ CHECKFLAGS     += $(NOSTDINC_FLAGS)
 KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 
 # disable pointer signed / unsigned warnings in gcc 4.0
-KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
+KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
 
 # disable invalid "can't wrap" optimizations for signed / pointers
 KBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index ed2773e..a302a6c 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -118,6 +118,11 @@ cc-option-yn = $(call try-run,\
 cc-option-align = $(subst -functions=0,,\
 	$(call cc-option,-falign-functions=0,-malign-functions=0))
 
+# cc-disable-warning
+# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
+cc-disable-warning = $(call try-run,\
+    $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+
 # cc-version
 # Usage gcc-ver := $(call cc-version)
 cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
-- 
1.7.5.2