0002-gcc-poison-system-directories.patch (7458B)
1 From 2f5ca6e3850401c628c5cc18cd606134e8b29113 Mon Sep 17 00:00:00 2001 2 From: Khem Raj <raj.khem@gmail.com> 3 Date: Fri, 29 Mar 2013 08:59:00 +0400 4 Subject: [PATCH] gcc: poison-system-directories 5 6 Add /sw/include and /opt/include based on the original 7 zecke-no-host-includes.patch patch. The original patch checked for 8 /usr/include, /sw/include and /opt/include and then triggered a failure and 9 aborted. 10 11 Instead, we add the two missing items to the current scan. If the user 12 wants this to be a failure, they can add "-Werror=poison-system-directories". 13 14 Signed-off-by: Mark Hatle <mark.hatle@windriver.com> 15 Signed-off-by: Khem Raj <raj.khem@gmail.com> 16 17 Upstream-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 28 diff --git a/gcc/common.opt b/gcc/common.opt 29 index ec5235c3a41..ca942863064 100644 30 --- a/gcc/common.opt 31 +++ b/gcc/common.opt 32 @@ -682,6 +682,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. 43 diff --git a/gcc/config.in b/gcc/config.in 44 index 364eba47737..9551c0dfdf9 100644 45 --- a/gcc/config.in 46 +++ b/gcc/config.in 47 @@ -224,6 +224,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. */ 60 diff --git a/gcc/configure b/gcc/configure 61 index 8fe9c91fd7c..17b878e4b4e 100755 62 --- a/gcc/configure 63 +++ b/gcc/configure 64 @@ -1010,6 +1010,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 @@ -1766,6 +1767,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 81 @@ -30276,6 +30279,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then : 82 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 101 diff --git a/gcc/configure.ac b/gcc/configure.ac 102 index 84dceb8074a..bf64ffbe46f 100644 103 --- a/gcc/configure.ac 104 +++ b/gcc/configure.ac 105 @@ -6608,6 +6608,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs, 106 [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) 122 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi 123 index eabeec944e7..cd31b522e42 100644 124 --- a/gcc/doc/invoke.texi 125 +++ b/gcc/doc/invoke.texi 126 @@ -348,6 +348,7 @@ Objective-C and Objective-C++ Dialects}. 127 -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol 128 -Wparentheses -Wno-pedantic-ms-format @gol 129 -Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast @gol 130 +-Wno-poison-system-directories @gol 131 -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol 132 -Wrestrict -Wno-return-local-addr -Wreturn-type @gol 133 -Wno-scalar-storage-order -Wsequence-point @gol 134 @@ -6926,6 +6927,14 @@ made up of data only and thus requires no special treatment. But, for 135 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 149 diff --git a/gcc/gcc.c b/gcc/gcc.c 150 index 9f790db0daf..b2200c5185a 100644 151 --- a/gcc/gcc.c 152 +++ b/gcc/gcc.c 153 @@ -1041,6 +1041,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):\ 162 diff --git a/gcc/incpath.c b/gcc/incpath.c 163 index 8a2bda00f80..9098ab044ab 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 -- 202 2.31.1 203