|
@@ -0,0 +1,207 @@
|
|
|
+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
|