mirror of
https://git.yoctoproject.org/poky
synced 2026-02-07 17:26:36 +01:00
[BUGID #374] Previously the poison directories patch was present, but not enabled due to the lack of the configure option being set, and also the fact configure itself was not being patched. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
254 lines
8.9 KiB
Diff
254 lines
8.9 KiB
Diff
This patch is recived from Mark Hatle
|
|
|
|
purpose: warn for uses of system directories when cross linking
|
|
|
|
Signed-Off-By: Mark Hatle <mark.hatle@windriver.com>
|
|
|
|
Code Merged from Sourcery G++ binutils 2.19 - 4.4-277
|
|
|
|
2008-07-02 Joseph Myers <joseph@codesourcery.com>
|
|
|
|
ld/
|
|
* ld.h (args_type): Add error_poison_system_directories.
|
|
* ld.texinfo (--error-poison-system-directories): Document.
|
|
* ldfile.c (ldfile_add_library_path): Check
|
|
command_line.error_poison_system_directories.
|
|
* ldmain.c (main): Initialize
|
|
command_line.error_poison_system_directories.
|
|
* lexsup.c (enum option_values): Add
|
|
OPTION_ERROR_POISON_SYSTEM_DIRECTORIES.
|
|
(ld_options): Add --error-poison-system-directories.
|
|
(parse_args): Handle new option.
|
|
|
|
2007-06-13 Joseph Myers <joseph@codesourcery.com>
|
|
|
|
ld/
|
|
* config.in: Regenerate.
|
|
* ld.h (args_type): Add poison_system_directories.
|
|
* ld.texinfo (--no-poison-system-directories): Document.
|
|
* ldfile.c (ldfile_add_library_path): Check
|
|
command_line.poison_system_directories.
|
|
* ldmain.c (main): Initialize
|
|
command_line.poison_system_directories.
|
|
* lexsup.c (enum option_values): Add
|
|
OPTION_NO_POISON_SYSTEM_DIRECTORIES.
|
|
(ld_options): Add --no-poison-system-directories.
|
|
(parse_args): Handle new option.
|
|
|
|
2007-04-20 Joseph Myers <joseph@codesourcery.com>
|
|
|
|
Merge from Sourcery G++ binutils 2.17:
|
|
|
|
2007-03-20 Joseph Myers <joseph@codesourcery.com>
|
|
Based on patch by Mark Hatle <mark.hatle@windriver.com>.
|
|
ld/
|
|
* configure.in (--enable-poison-system-directories): New option.
|
|
* configure, config.in: Regenerate.
|
|
* ldfile.c (ldfile_add_library_path): If
|
|
ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
|
|
/usr/lib, /usr/local/lib or /usr/X11R6/lib.
|
|
|
|
Index: binutils-2.20.1/ld/config.in
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/config.in
|
|
+++ binutils-2.20.1/ld/config.in
|
|
@@ -4,6 +4,9 @@
|
|
language is requested. */
|
|
#undef ENABLE_NLS
|
|
|
|
+/* Define to warn for use of native system library directories */
|
|
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
|
+
|
|
/* Additional extension a shared object might have. */
|
|
#undef EXTRA_SHLIB_EXTENSION
|
|
|
|
Index: binutils-2.20.1/ld/configure.in
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/configure.in
|
|
+++ binutils-2.20.1/ld/configure.in
|
|
@@ -69,6 +69,16 @@ AC_SUBST(use_sysroot)
|
|
AC_SUBST(TARGET_SYSTEM_ROOT)
|
|
AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
|
|
|
|
+AC_ARG_ENABLE([poison-system-directories],
|
|
+ AS_HELP_STRING([--enable-poison-system-directories],
|
|
+ [warn for use of native system library 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 library directories])
|
|
+fi
|
|
+
|
|
AC_ARG_ENABLE([got],
|
|
AS_HELP_STRING([--enable-got=<type>],
|
|
[GOT handling scheme (target, single, negative, multigot)]),
|
|
Index: binutils-2.20.1/ld/ld.h
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/ld.h
|
|
+++ binutils-2.20.1/ld/ld.h
|
|
@@ -176,6 +176,14 @@ typedef struct {
|
|
input files. */
|
|
bfd_boolean accept_unknown_input_arch;
|
|
|
|
+ /* If TRUE (the default) warn for uses of system directories when
|
|
+ cross linking. */
|
|
+ bfd_boolean poison_system_directories;
|
|
+
|
|
+ /* If TRUE (default FALSE) give an error for uses of system
|
|
+ directories when cross linking instead of a warning. */
|
|
+ bfd_boolean error_poison_system_directories;
|
|
+
|
|
/* Big or little endian as set on command line. */
|
|
enum endian_enum endian;
|
|
|
|
Index: binutils-2.20.1/ld/ld.texinfo
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/ld.texinfo
|
|
+++ binutils-2.20.1/ld/ld.texinfo
|
|
@@ -2084,6 +2084,18 @@ string identifying the original linked f
|
|
|
|
Passing @code{none} for @var{style} disables the setting from any
|
|
@code{--build-id} options earlier on the command line.
|
|
+
|
|
+@kindex --no-poison-system-directories
|
|
+@item --no-poison-system-directories
|
|
+Do not warn for @option{-L} options using system directories such as
|
|
+@file{/usr/lib} when cross linking. This option is intended for use
|
|
+in chroot environments when such directories contain the correct
|
|
+libraries for the target system rather than the host.
|
|
+
|
|
+@kindex --error-poison-system-directories
|
|
+@item --error-poison-system-directories
|
|
+Give an error instead of a warning for @option{-L} options using
|
|
+system directories when cross linking.
|
|
@end table
|
|
|
|
@c man end
|
|
Index: binutils-2.20.1/ld/ldfile.c
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/ldfile.c
|
|
+++ binutils-2.20.1/ld/ldfile.c
|
|
@@ -120,6 +120,23 @@ ldfile_add_library_path (const char *nam
|
|
{
|
|
new_dirs->name = xstrdup (name);
|
|
new_dirs->sysrooted = is_sysrooted_pathname (name, FALSE);
|
|
+
|
|
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
|
+ if (command_line.poison_system_directories
|
|
+ && ((!strncmp (name, "/lib", 4))
|
|
+ || (!strncmp (name, "/usr/lib", 8))
|
|
+ || (!strncmp (name, "/usr/local/lib", 14))
|
|
+ || (!strncmp (name, "/usr/X11R6/lib", 14))))
|
|
+ {
|
|
+ if (command_line.error_poison_system_directories)
|
|
+ einfo (_("%X%P: error: library search path \"%s\" is unsafe for "
|
|
+ "cross-compilation\n"), name);
|
|
+ else
|
|
+ einfo (_("%P: warning: library search path \"%s\" is unsafe for "
|
|
+ "cross-compilation\n"), name);
|
|
+ }
|
|
+#endif
|
|
+
|
|
}
|
|
}
|
|
|
|
Index: binutils-2.20.1/ld/ldmain.c
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/ldmain.c
|
|
+++ binutils-2.20.1/ld/ldmain.c
|
|
@@ -252,6 +252,8 @@ main (int argc, char **argv)
|
|
command_line.warn_mismatch = TRUE;
|
|
command_line.warn_search_mismatch = TRUE;
|
|
command_line.check_section_addresses = -1;
|
|
+ command_line.poison_system_directories = TRUE;
|
|
+ command_line.error_poison_system_directories = FALSE;
|
|
|
|
/* We initialize DEMANGLING based on the environment variable
|
|
COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
|
|
Index: binutils-2.20.1/ld/lexsup.c
|
|
===================================================================
|
|
--- binutils-2.20.1.orig/ld/lexsup.c
|
|
+++ binutils-2.20.1/ld/lexsup.c
|
|
@@ -166,7 +166,9 @@ enum option_values
|
|
OPTION_WARN_SHARED_TEXTREL,
|
|
OPTION_WARN_ALTERNATE_EM,
|
|
OPTION_REDUCE_MEMORY_OVERHEADS,
|
|
- OPTION_DEFAULT_SCRIPT
|
|
+ OPTION_DEFAULT_SCRIPT,
|
|
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
|
|
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES
|
|
};
|
|
|
|
/* The long options. This structure is used for both the option
|
|
@@ -575,6 +577,14 @@ static const struct ld_option ld_options
|
|
TWO_DASHES },
|
|
{ {"wrap", required_argument, NULL, OPTION_WRAP},
|
|
'\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
|
|
+ { {"no-poison-system-directories", no_argument, NULL,
|
|
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES},
|
|
+ '\0', NULL, N_("Do not warn for -L options using system directories"),
|
|
+ TWO_DASHES },
|
|
+ { {"error-poison-system-directories", no_argument, NULL,
|
|
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES},
|
|
+ '\0', NULL, N_("Give an error for -L options using system directories"),
|
|
+ TWO_DASHES },
|
|
};
|
|
|
|
#define OPTION_COUNT ARRAY_SIZE (ld_options)
|
|
@@ -1480,6 +1490,14 @@ parse_args (unsigned argc, char **argv)
|
|
einfo (_("%P%X: --hash-size needs a numeric argument\n"));
|
|
}
|
|
break;
|
|
+
|
|
+ case OPTION_NO_POISON_SYSTEM_DIRECTORIES:
|
|
+ command_line.poison_system_directories = FALSE;
|
|
+ break;
|
|
+
|
|
+ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES:
|
|
+ command_line.error_poison_system_directories = TRUE;
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
diff -ur binutils-2.20.1.orig/ld/configure binutils-2.20.1/ld/configure
|
|
--- binutils-2.20.1.orig/ld/configure 2010-03-03 08:06:22.000000000 -0600
|
|
+++ binutils-2.20.1/ld/configure 2010-09-30 11:19:35.776990594 -0500
|
|
@@ -901,6 +904,7 @@
|
|
enable_targets
|
|
enable_64_bit_bfd
|
|
with_sysroot
|
|
+enable_poison_system_directories
|
|
enable_got
|
|
enable_werror
|
|
enable_build_warnings
|
|
@@ -1548,6 +1552,8 @@
|
|
(and sometimes confusing) to the casual installer
|
|
--enable-targets alternative target configurations
|
|
--enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
|
|
+ --enable-poison-system-directories
|
|
+ warn for use of native system library directories
|
|
--enable-got=<type> GOT handling scheme (target, single, negative,
|
|
multigot)
|
|
--enable-werror treat compile warnings as errors
|
|
@@ -4302,6 +4334,19 @@
|
|
|
|
|
|
|
|
+# 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
|
|
+
|
|
# Check whether --enable-got was given.
|
|
if test "${enable_got+set}" = set; then :
|
|
enableval=$enable_got; case "${enableval}" in
|