| From 160397ef3c3331099af028f1b8d3e085b07d88ad Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Fri, 29 Mar 2013 08:59:00 +0400 |
| Subject: [PATCH 16/35] gcc: poison-system-directories |
| |
| Adapted to Buildroot and gcc 4.7.4 by Thomas Petazzoni, especially the |
| addition of the BR_COMPILER_PARANOID_UNSAFE_PATH environment variable. |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| Upstream-Status: Inappropriate [distribution: codesourcery] |
| --- |
| gcc/Makefile.in | 2 +- |
| gcc/common.opt | 4 ++++ |
| gcc/config.in | 6 ++++++ |
| gcc/configure | 20 ++++++++++++++++++-- |
| gcc/configure.ac | 10 ++++++++++ |
| gcc/doc/invoke.texi | 9 +++++++++ |
| gcc/gcc.c | 2 ++ |
| gcc/incpath.c | 19 +++++++++++++++++++ |
| 8 files changed, 69 insertions(+), 3 deletions(-) |
| |
| Index: b/gcc/common.opt |
| =================================================================== |
| --- a/gcc/common.opt |
| +++ b/gcc/common.opt |
| @@ -585,6 +585,10 @@ |
| Common Var(warn_padded) Warning |
| Warn when padding is required to align structure members |
| |
| +Wpoison-system-directories |
| +Common Var(flag_poison_system_directories) Init(1) Warning |
| +Warn for -I and -L options using system directories if cross compiling |
| + |
| Wshadow |
| Common Var(warn_shadow) Warning |
| Warn when one local variable shadows another |
| Index: b/gcc/config.in |
| =================================================================== |
| --- a/gcc/config.in |
| +++ b/gcc/config.in |
| @@ -144,6 +144,12 @@ |
| #endif |
| |
| |
| +/* Define to warn for use of native system header directories */ |
| +#ifndef USED_FOR_TARGET |
| +#undef ENABLE_POISON_SYSTEM_DIRECTORIES |
| +#endif |
| + |
| + |
| /* Define if you want all operations on RTL (the basic data structure of the |
| optimizer and back end) to be checked for dynamic type safety at runtime. |
| This is quite expensive. */ |
| Index: b/gcc/configure |
| =================================================================== |
| --- a/gcc/configure |
| +++ b/gcc/configure |
| @@ -918,6 +918,7 @@ |
| with_system_zlib |
| enable_maintainer_mode |
| enable_version_specific_runtime_libs |
| +enable_poison_system_directories |
| enable_plugin |
| enable_libquadmath_support |
| with_linker_hash_style |
| @@ -1632,6 +1633,8 @@ |
| --enable-version-specific-runtime-libs |
| specify that runtime libraries should be installed |
| in a compiler-specific directory |
| + --enable-poison-system-directories |
| + warn for use of native system header directories |
| --enable-plugin enable plugin support |
| --disable-libquadmath-support |
| disable libquadmath support for Fortran |
| @@ -27186,6 +27189,19 @@ |
| fi |
| |
| |
| +# Check whether --enable-poison-system-directories was given. |
| +if test "${enable_poison_system_directories+set}" = set; then : |
| + enableval=$enable_poison_system_directories; |
| +else |
| + enable_poison_system_directories=no |
| +fi |
| + |
| +if test "x${enable_poison_system_directories}" = "xyes"; then |
| + |
| +$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h |
| + |
| +fi |
| + |
| # Substitute configuration variables |
| |
| |
| Index: b/gcc/configure.ac |
| =================================================================== |
| --- a/gcc/configure.ac |
| +++ b/gcc/configure.ac |
| @@ -5037,6 +5037,16 @@ |
| [specify that runtime libraries should be |
| installed in a compiler-specific directory])]) |
| |
| +AC_ARG_ENABLE([poison-system-directories], |
| + AS_HELP_STRING([--enable-poison-system-directories], |
| + [warn for use of native system header directories]),, |
| + [enable_poison_system_directories=no]) |
| +if test "x${enable_poison_system_directories}" = "xyes"; then |
| + AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], |
| + [1], |
| + [Define to warn for use of native system header directories]) |
| +fi |
| + |
| # Substitute configuration variables |
| AC_SUBST(subdirs) |
| AC_SUBST(srcdir) |
| Index: b/gcc/doc/invoke.texi |
| =================================================================== |
| --- a/gcc/doc/invoke.texi |
| +++ b/gcc/doc/invoke.texi |
| @@ -260,6 +260,7 @@ |
| -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol |
| -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol |
| -Wpointer-arith -Wno-pointer-to-int-cast @gol |
| +-Wno-poison-system-directories @gol |
| -Wredundant-decls @gol |
| -Wreturn-type -Wsequence-point -Wshadow @gol |
| -Wsign-compare -Wsign-conversion -Wstack-protector @gol |
| @@ -3880,6 +3881,14 @@ |
| for most targets, it is made up of code and thus requires the stack |
| to be made executable in order for the program to work properly. |
| |
| +@item -Wno-poison-system-directories |
| +@opindex Wno-poison-system-directories |
| +Do not warn for @option{-I} or @option{-L} options using system |
| +directories such as @file{/usr/include} when cross compiling. This |
| +option is intended for use in chroot environments when such |
| +directories contain the correct headers and libraries for the target |
| +system rather than the host. |
| + |
| @item -Wfloat-equal |
| @opindex Wfloat-equal |
| @opindex Wno-float-equal |
| Index: b/gcc/gcc.c |
| =================================================================== |
| --- a/gcc/gcc.c |
| +++ b/gcc/gcc.c |
| @@ -674,6 +674,8 @@ |
| %{flto} %{flto=*} %l " LINK_PIE_SPEC \ |
| "%X %{o*} %{e*} %{N} %{n} %{r}\ |
| %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\ |
| + %{Wno-poison-system-directories:--no-poison-system-directories}\ |
| + %{Werror=poison-system-directories:--error-poison-system-directories}\ |
| %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\ |
| %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\ |
| %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ |
| @@ -3907,6 +3909,12 @@ |
| gcc_assert (!compare_debug_opt); |
| } |
| |
| + temp = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); |
| + if (temp && strlen(temp) > 0) |
| + { |
| + save_switch("-Werror=poison-system-directories", 0, NULL, false); |
| + } |
| + |
| /* Set up the search paths. We add directories that we expect to |
| contain GNU Toolchain components before directories specified by |
| the machine description so that we will find GNU components (like |
| Index: b/gcc/incpath.c |
| =================================================================== |
| --- a/gcc/incpath.c |
| +++ b/gcc/incpath.c |
| @@ -30,6 +30,7 @@ |
| #include "intl.h" |
| #include "incpath.h" |
| #include "cppdefault.h" |
| +#include "diagnostic-core.h" |
| |
| /* Microsoft Windows does not natively support inodes. |
| VMS has non-numeric inodes. */ |
| @@ -373,6 +374,24 @@ |
| } |
| fprintf (stderr, _("End of search list.\n")); |
| } |
| + |
| +#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES |
| + if (flag_poison_system_directories) |
| + { |
| + struct cpp_dir *p; |
| + |
| + for (p = heads[QUOTE]; p; p = p->next) |
| + { |
| + if ((!strncmp (p->name, "/usr/include", 12)) |
| + || (!strncmp (p->name, "/usr/local/include", 18)) |
| + || (!strncmp (p->name, "/usr/X11R6/include", 18))) |
| + warning (OPT_Wpoison_system_directories, |
| + "include location \"%s\" is unsafe for " |
| + "cross-compilation", |
| + p->name); |
| + } |
| + } |
| +#endif |
| } |
| |
| /* Use given -I paths for #include "..." but not #include <...>, and |