blob: a1116e750959b8f8a56c47c64204d4319d0f6038 [file] [log] [blame]
Brad Bishopc68388fc2019-08-26 01:33:31 -04001From 68e78bc15de215fa15c7d8b56bd2e2b0539b34fa Mon Sep 17 00:00:00 2001
Brad Bishopc342db32019-05-15 21:57:59 -04002From: Khem Raj <raj.khem@gmail.com>
3Date: Fri, 29 Mar 2013 08:59:00 +0400
Brad Bishopc68388fc2019-08-26 01:33:31 -04004Subject: [PATCH 02/36] gcc: poison-system-directories
Brad Bishopc342db32019-05-15 21:57:59 -04005
6Add /sw/include and /opt/include based on the original
7zecke-no-host-includes.patch patch. The original patch checked for
8/usr/include, /sw/include and /opt/include and then triggered a failure and
9aborted.
10
11Instead, we add the two missing items to the current scan. If the user
12wants this to be a failure, they can add "-Werror=poison-system-directories".
13
14Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
15Signed-off-by: Khem Raj <raj.khem@gmail.com>
16
17Upstream-Status: Pending
18---
19 gcc/common.opt | 4 ++++
20 gcc/config.in | 6 ++++++
21 gcc/configure | 16 ++++++++++++++++
22 gcc/configure.ac | 10 ++++++++++
23 gcc/doc/invoke.texi | 9 +++++++++
24 gcc/gcc.c | 2 ++
25 gcc/incpath.c | 21 +++++++++++++++++++++
26 7 files changed, 68 insertions(+)
27
28diff --git a/gcc/common.opt b/gcc/common.opt
Brad Bishopc68388fc2019-08-26 01:33:31 -040029index d342c4f3749..c64fd4a6c50 100644
Brad Bishopc342db32019-05-15 21:57:59 -040030--- a/gcc/common.opt
31+++ b/gcc/common.opt
32@@ -684,6 +684,10 @@ Wreturn-local-addr
33 Common Var(warn_return_local_addr) Init(1) Warning
34 Warn about returning a pointer/reference to a local or temporary variable.
35
36+Wpoison-system-directories
37+Common Var(flag_poison_system_directories) Init(1) Warning
38+Warn for -I and -L options using system directories if cross compiling
39+
40 Wshadow
41 Common Var(warn_shadow) Warning
42 Warn when one variable shadows another. Same as -Wshadow=global.
43diff --git a/gcc/config.in b/gcc/config.in
Brad Bishopc68388fc2019-08-26 01:33:31 -040044index a718ceaf3da..5713342efb1 100644
Brad Bishopc342db32019-05-15 21:57:59 -040045--- a/gcc/config.in
46+++ b/gcc/config.in
47@@ -200,6 +200,12 @@
48 #endif
49
50
51+/* Define to warn for use of native system header directories */
52+#ifndef USED_FOR_TARGET
53+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
54+#endif
55+
56+
57 /* Define if you want all operations on RTL (the basic data structure of the
58 optimizer and back end) to be checked for dynamic type safety at runtime.
59 This is quite expensive. */
60diff --git a/gcc/configure b/gcc/configure
Brad Bishopc68388fc2019-08-26 01:33:31 -040061index 481071b4265..a6ea3a8a84c 100755
Brad Bishopc342db32019-05-15 21:57:59 -040062--- a/gcc/configure
63+++ b/gcc/configure
64@@ -995,6 +995,7 @@ with_system_zlib
65 enable_maintainer_mode
66 enable_link_mutex
67 enable_version_specific_runtime_libs
68+enable_poison_system_directories
69 enable_plugin
70 enable_host_shared
71 enable_libquadmath_support
72@@ -1748,6 +1749,8 @@ Optional Features:
73 --enable-version-specific-runtime-libs
74 specify that runtime libraries should be installed
75 in a compiler-specific directory
76+ --enable-poison-system-directories
77+ warn for use of native system header directories
78 --enable-plugin enable plugin support
79 --enable-host-shared build host code as shared libraries
80 --disable-libquadmath-support
Brad Bishopc68388fc2019-08-26 01:33:31 -040081@@ -29750,6 +29753,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
Brad Bishopc342db32019-05-15 21:57:59 -040082 fi
83
84
85+# Check whether --enable-poison-system-directories was given.
86+if test "${enable_poison_system_directories+set}" = set; then :
87+ enableval=$enable_poison_system_directories;
88+else
89+ enable_poison_system_directories=no
90+fi
91+
92+if test "x${enable_poison_system_directories}" = "xyes"; then
93+
94+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
95+
96+fi
97+
98 # Substitute configuration variables
99
100
101diff --git a/gcc/configure.ac b/gcc/configure.ac
Brad Bishopc68388fc2019-08-26 01:33:31 -0400102index ce2825580c6..d42bbd4fd1c 100644
Brad Bishopc342db32019-05-15 21:57:59 -0400103--- a/gcc/configure.ac
104+++ b/gcc/configure.ac
Brad Bishopc68388fc2019-08-26 01:33:31 -0400105@@ -6378,6 +6378,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
Brad Bishopc342db32019-05-15 21:57:59 -0400106 [specify that runtime libraries should be
107 installed in a compiler-specific directory])])
108
109+AC_ARG_ENABLE([poison-system-directories],
110+ AS_HELP_STRING([--enable-poison-system-directories],
111+ [warn for use of native system header directories]),,
112+ [enable_poison_system_directories=no])
113+if test "x${enable_poison_system_directories}" = "xyes"; then
114+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
115+ [1],
116+ [Define to warn for use of native system header directories])
117+fi
118+
119 # Substitute configuration variables
120 AC_SUBST(subdirs)
121 AC_SUBST(srcdir)
122diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
Brad Bishopc68388fc2019-08-26 01:33:31 -0400123index 6ef36ce02aa..09414d8cc05 100644
Brad Bishopc342db32019-05-15 21:57:59 -0400124--- a/gcc/doc/invoke.texi
125+++ b/gcc/doc/invoke.texi
Brad Bishopc68388fc2019-08-26 01:33:31 -0400126@@ -332,6 +332,7 @@ Objective-C and Objective-C++ Dialects}.
Brad Bishopc342db32019-05-15 21:57:59 -0400127 -Wpacked -Wpacked-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
128 -Wparentheses -Wno-pedantic-ms-format @gol
129 -Wplacement-new -Wplacement-new=@var{n} @gol
130+-Wno-poison-system-directories @gol
131 -Wpointer-arith -Wpointer-compare -Wno-pointer-to-int-cast @gol
132 -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol
133 -Wrestrict -Wno-return-local-addr @gol
Brad Bishopc68388fc2019-08-26 01:33:31 -0400134@@ -6289,6 +6290,14 @@ made up of data only and thus requires no special treatment. But, for
Brad Bishopc342db32019-05-15 21:57:59 -0400135 most targets, it is made up of code and thus requires the stack to be
136 made executable in order for the program to work properly.
137
138+@item -Wno-poison-system-directories
139+@opindex Wno-poison-system-directories
140+Do not warn for @option{-I} or @option{-L} options using system
141+directories such as @file{/usr/include} when cross compiling. This
142+option is intended for use in chroot environments when such
143+directories contain the correct headers and libraries for the target
144+system rather than the host.
145+
146 @item -Wfloat-equal
147 @opindex Wfloat-equal
148 @opindex Wno-float-equal
149diff --git a/gcc/gcc.c b/gcc/gcc.c
Brad Bishopc68388fc2019-08-26 01:33:31 -0400150index 4f57765b012..a2601a6bb06 100644
Brad Bishopc342db32019-05-15 21:57:59 -0400151--- a/gcc/gcc.c
152+++ b/gcc/gcc.c
153@@ -1042,6 +1042,8 @@ proper position among the other output files. */
154 "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
155 "%X %{o*} %{e*} %{N} %{n} %{r}\
156 %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
157+ %{Wno-poison-system-directories:--no-poison-system-directories} \
158+ %{Werror=poison-system-directories:--error-poison-system-directories} \
159 %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \
160 VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
161 %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
162diff --git a/gcc/incpath.c b/gcc/incpath.c
163index bcbe2082905..5752298bbf2 100644
164--- a/gcc/incpath.c
165+++ b/gcc/incpath.c
166@@ -26,6 +26,7 @@
167 #include "intl.h"
168 #include "incpath.h"
169 #include "cppdefault.h"
170+#include "diagnostic-core.h"
171
172 /* Microsoft Windows does not natively support inodes.
173 VMS has non-numeric inodes. */
174@@ -393,6 +394,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
175 }
176 fprintf (stderr, _("End of search list.\n"));
177 }
178+
179+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
180+ if (flag_poison_system_directories)
181+ {
182+ struct cpp_dir *p;
183+
184+ for (p = heads[INC_QUOTE]; p; p = p->next)
185+ {
186+ if ((!strncmp (p->name, "/usr/include", 12))
187+ || (!strncmp (p->name, "/usr/local/include", 18))
188+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
189+ || (!strncmp (p->name, "/sw/include", 11))
190+ || (!strncmp (p->name, "/opt/include", 12)))
191+ warning (OPT_Wpoison_system_directories,
192+ "include location \"%s\" is unsafe for "
193+ "cross-compilation",
194+ p->name);
195+ }
196+ }
197+#endif
198 }
199
200 /* Use given -I paths for #include "..." but not #include <...>, and
201--
Brad Bishopc68388fc2019-08-26 01:33:31 -04002022.22.1
Brad Bishopc342db32019-05-15 21:57:59 -0400203