mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-06 05:47:13 +02:00
259 lines
9.3 KiB
Diff
259 lines
9.3 KiB
Diff
From 0d5e04099a3d2609105719f7396a4ff941b873b6 Mon Sep 17 00:00:00 2001
|
|
From: Khem Raj <raj.khem@gmail.com>
|
|
Date: Thu, 23 Jan 2025 17:12:51 -0800
|
|
Subject: [PATCH] gcc: poison-system-directories
|
|
|
|
Add /sw/include and /opt/include based on the original
|
|
zecke-no-host-includes.patch patch. The original patch checked for
|
|
/usr/include, /sw/include and /opt/include and then triggered a failure and
|
|
aborted.
|
|
|
|
Instead, we add the two missing items to the current scan. If the user
|
|
wants this to be a failure, they can add "-Werror=poison-system-directories".
|
|
|
|
Upstream-Status: Inappropriate [OE configuration]
|
|
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
|
Signed-off-by: sunil dora <sunilkumar.dora@windriver.com>
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
---
|
|
gcc/common.opt | 4 ++++
|
|
gcc/config.in | 10 ++++++++++
|
|
gcc/configure | 19 +++++++++++++++++++
|
|
gcc/configure.ac | 16 ++++++++++++++++
|
|
gcc/doc/invoke.texi | 9 +++++++++
|
|
gcc/gcc.cc | 12 ++++++++++--
|
|
gcc/incpath.cc | 25 +++++++++++++++++++++++++
|
|
7 files changed, 93 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/gcc/common.opt b/gcc/common.opt
|
|
index e3fa0dacec4..bea1adc0940 100644
|
|
--- a/gcc/common.opt
|
|
+++ b/gcc/common.opt
|
|
@@ -729,6 +729,10 @@ Wreturn-local-addr
|
|
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 variable shadows another. Same as -Wshadow=global.
|
|
diff --git a/gcc/config.in b/gcc/config.in
|
|
index a79c51adb2b..8a531ed591c 100644
|
|
--- a/gcc/config.in
|
|
+++ b/gcc/config.in
|
|
@@ -249,6 +249,16 @@
|
|
#endif
|
|
|
|
|
|
+/* Define to warn for use of native system header directories */
|
|
+#ifndef USED_FOR_TARGET
|
|
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
|
+#endif
|
|
+/* Define to warn for use of native system header directories */
|
|
+#ifndef USED_FOR_TARGET
|
|
+#undef POISON_BY_DEFAULT
|
|
+#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. */
|
|
diff --git a/gcc/configure b/gcc/configure
|
|
index 16965953f05..0f4a5d52c30 100755
|
|
--- a/gcc/configure
|
|
+++ b/gcc/configure
|
|
@@ -1051,6 +1051,7 @@ enable_maintainer_mode
|
|
enable_link_mutex
|
|
enable_link_serialization
|
|
enable_version_specific_runtime_libs
|
|
+enable_poison_system_directories
|
|
enable_plugin
|
|
enable_host_shared
|
|
enable_host_pie
|
|
@@ -1828,6 +1829,8 @@ Optional Features:
|
|
--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
|
|
--enable-host-pie build host code as PIE
|
|
@@ -34027,6 +34030,22 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
|
|
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}" != "xno"; then
|
|
+
|
|
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
|
+if test "$enable_poison_system_directories" = "error"; then
|
|
+$as_echo "#define POISON_BY_DEFAULT 1" >>confdefs.h
|
|
+fi
|
|
+
|
|
+fi
|
|
+
|
|
# Substitute configuration variables
|
|
|
|
|
|
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
|
index 9f67e62950a..b0e3615e5aa 100644
|
|
--- a/gcc/configure.ac
|
|
+++ b/gcc/configure.ac
|
|
@@ -7502,6 +7502,22 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
|
|
[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 (no/yes/error)]),,
|
|
+ [enable_poison_system_directories=no])
|
|
+AC_MSG_NOTICE([poisoned directories $enable_poison_system_directories])
|
|
+if test "x${enable_poison_system_directories}" != "xno"; then
|
|
+ AC_MSG_NOTICE([poisoned directories enabled])
|
|
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
|
+ [1],
|
|
+ [Define to warn for use of native system header directories])
|
|
+ if test $enable_poison_system_directories = "error"; then
|
|
+ AC_MSG_NOTICE([poisoned directories are fatal])
|
|
+ AC_DEFINE([POISON_BY_DEFAULT], [1], [Define to make poison warnings errors])
|
|
+ fi
|
|
+fi
|
|
+
|
|
# Substitute configuration variables
|
|
AC_SUBST(subdirs)
|
|
AC_SUBST(srcdir)
|
|
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
|
index 72009c33cd0..29aea724731 100644
|
|
--- a/gcc/doc/invoke.texi
|
|
+++ b/gcc/doc/invoke.texi
|
|
@@ -405,6 +405,7 @@ Objective-C and Objective-C++ Dialects}.
|
|
-Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded
|
|
-Wparentheses -Wno-pedantic-ms-format
|
|
-Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast
|
|
+-Wno-poison-system-directories
|
|
-Wno-pragmas -Wno-pragma-once-outside-header -Wno-prio-ctor-dtor
|
|
-Wno-psabi
|
|
-Wredundant-decls -Wrestrict
|
|
@@ -10727,6 +10728,14 @@ an error. @option{Wint-to-pointer-cast} is enabled by default.
|
|
Suppress warnings from casts from a pointer to an integer type of a
|
|
different size.
|
|
|
|
+@opindex Wno-poison-system-directories
|
|
+@item -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.
|
|
+
|
|
@opindex Winvalid-pch
|
|
@opindex Wno-invalid-pch
|
|
@item -Winvalid-pch
|
|
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
|
index 4fd87f2c4a1..79d4920a047 100644
|
|
--- a/gcc/gcc.cc
|
|
+++ b/gcc/gcc.cc
|
|
@@ -909,6 +909,12 @@ proper position among the other output files. */
|
|
#define ASM_MAP ""
|
|
#endif
|
|
|
|
+#ifdef POISON_BY_DEFAULT
|
|
+#define POISON_IS_ERROR " -Werror=poison-system-directories"
|
|
+#else
|
|
+#define POISON_IS_ERROR
|
|
+#endif
|
|
+
|
|
/* Assembler options for compressed debug sections. */
|
|
#if HAVE_LD_COMPRESS_DEBUG == 0
|
|
/* Reject if the linker cannot write compressed debug sections. */
|
|
@@ -1166,6 +1172,8 @@ proper position among the other output files. */
|
|
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
|
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
|
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
|
|
+ %{Wno-poison-system-directories:--no-poison-system-directories} \
|
|
+ %{Werror=poison-system-directories:--error-poison-system-directories} \
|
|
%{static|no-pie|static-pie:} %@{L*} %(link_libgcc) " \
|
|
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
|
|
%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
|
|
@@ -1268,7 +1276,7 @@ static const char *cpp_options =
|
|
"%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
|
|
%{f*} %{g*:%{%:debug-level-gt(0):%{g*}\
|
|
%{!fno-working-directory:-fworking-directory}}} %{O*}\
|
|
- %{undef} %{save-temps*:-fpch-preprocess}";
|
|
+ %{undef} %{save-temps*:-fpch-preprocess}" POISON_IS_ERROR;
|
|
|
|
/* Pass -d* flags, possibly modifying -dumpdir, -dumpbase et al.
|
|
|
|
@@ -1297,7 +1305,7 @@ static const char *cc1_options =
|
|
%{coverage:-fprofile-arcs -ftest-coverage}\
|
|
%{fprofile-arcs|fcondition-coverage|fpath-coverage|fprofile-generate*|coverage:\
|
|
%{!fprofile-update=single:\
|
|
- %{pthread:-fprofile-update=prefer-atomic}}}";
|
|
+ %{pthread:-fprofile-update=prefer-atomic}}}" POISON_IS_ERROR;
|
|
|
|
static const char *asm_options =
|
|
"%{-target-help:%:print-asm-header()} "
|
|
diff --git a/gcc/incpath.cc b/gcc/incpath.cc
|
|
index c1bbfd3872a..2cdbebc4c50 100644
|
|
--- a/gcc/incpath.cc
|
|
+++ b/gcc/incpath.cc
|
|
@@ -26,6 +26,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. */
|
|
@@ -273,6 +274,10 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
|
|
cur->name, xstrerror (errno));
|
|
reason = REASON_NOENT;
|
|
}
|
|
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
|
+ pcur = &cur->next;
|
|
+ continue;
|
|
+#endif
|
|
}
|
|
else if (!S_ISDIR (st.st_mode))
|
|
cpp_error_with_line (pfile, CPP_DL_WARNING, 0, 0,
|
|
@@ -411,6 +416,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
|
fprintf (stderr, _("End of #embed search list.\n"));
|
|
}
|
|
}
|
|
+
|
|
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
|
+ if (flag_poison_system_directories)
|
|
+ {
|
|
+ struct cpp_dir *p;
|
|
+
|
|
+ for (p = heads[INC_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))
|
|
+ || (!strncmp (p->name, "/sw/include", 11))
|
|
+ || (!strncmp (p->name, "/opt/include", 12)))
|
|
+ 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
|
|
--
|
|
2.50.1
|
|
|