208 lines
7.2 KiB
Diff
208 lines
7.2 KiB
Diff
|
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.9.1 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
|
||
|
@@ -623,6 +623,10 @@
|
||
|
Common Var(warn_return_local_addr) Init(1) Warning
|
||
|
Warn about returning a pointer/reference to a local or temporary variable.
|
||
|
|
||
|
+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
|
||
|
@@ -168,6 +168,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
|
||
|
@@ -932,6 +932,7 @@
|
||
|
enable_maintainer_mode
|
||
|
enable_link_mutex
|
||
|
enable_version_specific_runtime_libs
|
||
|
+enable_poison_system_directories
|
||
|
enable_plugin
|
||
|
enable_host_shared
|
||
|
enable_libquadmath_support
|
||
|
@@ -1661,6 +1662,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
|
||
|
--enable-host-shared build host code as shared libraries
|
||
|
--disable-libquadmath-support
|
||
|
@@ -28087,6 +28090,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
|
||
|
@@ -5571,6 +5571,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
|
||
|
@@ -269,6 +269,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 -Wno-return-local-addr @gol
|
||
|
-Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol
|
||
|
-Wshift-count-negative -Wshift-count-overflow @gol
|
||
|
@@ -4432,6 +4433,14 @@
|
||
|
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
|
||
|
@@ -835,6 +835,8 @@
|
||
|
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||
|
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||
|
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} " VTABLE_VERIFICATION_SPEC " \
|
||
|
+ %{Wno-poison-system-directories:--no-poison-system-directories}\
|
||
|
+ %{Werror=poison-system-directories:--error-poison-system-directories}\
|
||
|
%{static:} %{L*} %(mfwrap) %(link_libgcc) " SANITIZER_EARLY_SPEC " %o\
|
||
|
" CHKP_SPEC " \
|
||
|
%{fopenacc|fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
|
||
|
@@ -4244,6 +4246,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, true);
|
||
|
+ }
|
||
|
+
|
||
|
/* 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
|
||
|
@@ -28,6 +28,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. */
|
||
|
@@ -383,6 +384,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
|