aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-devtools/binutils/binutils-2.20.1/binutils-poison.patch
blob: c2f19276f81780c3cd815145d80664cc01b80e2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
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