xref: /dragonfly/contrib/binutils-2.27/ld/ldfile.c (revision 7b1120e5)
1 /* Linker file opening and searching.
2    Copyright (C) 1991-2016 Free Software Foundation, Inc.
3 
4    This file is part of the GNU Binutils.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20 
21 #include "sysdep.h"
22 #include "bfd.h"
23 #include "bfdlink.h"
24 #include "safe-ctype.h"
25 #include "ld.h"
26 #include "ldmisc.h"
27 #include "ldexp.h"
28 #include "ldlang.h"
29 #include "ldfile.h"
30 #include "ldmain.h"
31 #include <ldgram.h>
32 #include "ldlex.h"
33 #include "ldemul.h"
34 #include "libiberty.h"
35 #include "filenames.h"
36 #ifdef ENABLE_PLUGINS
37 #include "plugin-api.h"
38 #include "plugin.h"
39 #endif /* ENABLE_PLUGINS */
40 
41 bfd_boolean ldfile_assumed_script = FALSE;
42 const char *ldfile_output_machine_name = "";
43 unsigned long ldfile_output_machine;
44 enum bfd_architecture ldfile_output_architecture;
45 search_dirs_type *search_head;
46 
47 #ifdef VMS
48 static char *slash = "";
49 #else
50 #if defined (_WIN32) && !defined (__CYGWIN32__)
51 static char *slash = "\\";
52 #else
53 static char *slash = "/";
54 #endif
55 #endif
56 
57 typedef struct search_arch
58 {
59   char *name;
60   struct search_arch *next;
61 } search_arch_type;
62 
63 static search_dirs_type **search_tail_ptr = &search_head;
64 static search_arch_type *search_arch_head;
65 static search_arch_type **search_arch_tail_ptr = &search_arch_head;
66 
67 /* Test whether a pathname, after canonicalization, is the same or a
68    sub-directory of the sysroot directory.  */
69 
70 static bfd_boolean
71 is_sysrooted_pathname (const char *name)
72 {
73   char *realname;
74   int len;
75   bfd_boolean result;
76 
77   if (ld_canon_sysroot == NULL)
78     return FALSE;
79 
80   realname = lrealpath (name);
81   len = strlen (realname);
82   result = FALSE;
83   if (len > ld_canon_sysroot_len
84       && IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len]))
85     {
86       realname[ld_canon_sysroot_len] = '\0';
87       result = FILENAME_CMP (ld_canon_sysroot, realname) == 0;
88     }
89 
90   free (realname);
91   return result;
92 }
93 
94 /* Adds NAME to the library search path.
95    Makes a copy of NAME using xmalloc().  */
96 
97 void
98 ldfile_add_library_path (const char *name, bfd_boolean cmdline)
99 {
100   search_dirs_type *new_dirs;
101 
102   if (!cmdline && config.only_cmd_line_lib_dirs)
103     return;
104 
105   new_dirs = (search_dirs_type *) xmalloc (sizeof (search_dirs_type));
106   new_dirs->next = NULL;
107   new_dirs->cmdline = cmdline;
108   *search_tail_ptr = new_dirs;
109   search_tail_ptr = &new_dirs->next;
110 
111   /* If a directory is marked as honoring sysroot, prepend the sysroot path
112      now.  */
113   if (name[0] == '=')
114     new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
115   else
116     new_dirs->name = xstrdup (name);
117 }
118 
119 /* Try to open a BFD for a lang_input_statement.  */
120 
121 bfd_boolean
122 ldfile_try_open_bfd (const char *attempt,
123 		     lang_input_statement_type *entry)
124 {
125   entry->the_bfd = bfd_openr (attempt, entry->target);
126 
127   if (verbose)
128     {
129       if (entry->the_bfd == NULL)
130 	info_msg (_("attempt to open %s failed\n"), attempt);
131       else
132 	info_msg (_("attempt to open %s succeeded\n"), attempt);
133     }
134 
135   if (entry->the_bfd == NULL)
136     {
137       if (bfd_get_error () == bfd_error_invalid_target)
138 	einfo (_("%F%P: invalid BFD target `%s'\n"), entry->target);
139       return FALSE;
140     }
141 
142   /* Linker needs to decompress sections.  */
143   entry->the_bfd->flags |= BFD_DECOMPRESS;
144 
145   /* This is a linker input BFD.  */
146   entry->the_bfd->is_linker_input = 1;
147 
148 #ifdef ENABLE_PLUGINS
149   if (entry->flags.lto_output)
150     entry->the_bfd->lto_output = 1;
151 #endif
152 
153   /* If we are searching for this file, see if the architecture is
154      compatible with the output file.  If it isn't, keep searching.
155      If we can't open the file as an object file, stop the search
156      here.  If we are statically linking, ensure that we don't link
157      a dynamic object.
158 
159      In the code below, it's OK to exit early if the check fails,
160      closing the checked BFD and returning FALSE, but if the BFD
161      checks out compatible, do not exit early returning TRUE, or
162      the plugins will not get a chance to claim the file.  */
163 
164   if (entry->flags.search_dirs || !entry->flags.dynamic)
165     {
166       bfd *check;
167 
168       if (bfd_check_format (entry->the_bfd, bfd_archive))
169 	check = bfd_openr_next_archived_file (entry->the_bfd, NULL);
170       else
171 	check = entry->the_bfd;
172 
173       if (check != NULL)
174 	{
175 	  if (!bfd_check_format (check, bfd_object))
176 	    {
177 	      if (check == entry->the_bfd
178 		  && entry->flags.search_dirs
179 		  && bfd_get_error () == bfd_error_file_not_recognized
180 		  && !ldemul_unrecognized_file (entry))
181 		{
182 		  int token, skip = 0;
183 		  char *arg, *arg1, *arg2, *arg3;
184 		  extern FILE *yyin;
185 
186 		  /* Try to interpret the file as a linker script.  */
187 		  ldfile_open_command_file (attempt);
188 
189 		  ldfile_assumed_script = TRUE;
190 		  parser_input = input_selected;
191 		  ldlex_both ();
192 		  token = INPUT_SCRIPT;
193 		  while (token != 0)
194 		    {
195 		      switch (token)
196 			{
197 			case OUTPUT_FORMAT:
198 			  if ((token = yylex ()) != '(')
199 			    continue;
200 			  if ((token = yylex ()) != NAME)
201 			    continue;
202 			  arg1 = yylval.name;
203 			  arg2 = NULL;
204 			  arg3 = NULL;
205 			  token = yylex ();
206 			  if (token == ',')
207 			    {
208 			      if ((token = yylex ()) != NAME)
209 				{
210 				  free (arg1);
211 				  continue;
212 				}
213 			      arg2 = yylval.name;
214 			      if ((token = yylex ()) != ','
215 				  || (token = yylex ()) != NAME)
216 				{
217 				  free (arg1);
218 				  free (arg2);
219 				  continue;
220 				}
221 			      arg3 = yylval.name;
222 			      token = yylex ();
223 			    }
224 			  if (token == ')')
225 			    {
226 			      switch (command_line.endian)
227 				{
228 				default:
229 				case ENDIAN_UNSET:
230 				  arg = arg1; break;
231 				case ENDIAN_BIG:
232 				  arg = arg2 ? arg2 : arg1; break;
233 				case ENDIAN_LITTLE:
234 				  arg = arg3 ? arg3 : arg1; break;
235 				}
236 			      if (strcmp (arg, lang_get_output_target ()) != 0)
237 				skip = 1;
238 			    }
239 			  free (arg1);
240 			  if (arg2) free (arg2);
241 			  if (arg3) free (arg3);
242 			  break;
243 			case NAME:
244 			case LNAME:
245 			case VERS_IDENTIFIER:
246 			case VERS_TAG:
247 			  free (yylval.name);
248 			  break;
249 			case INT:
250 			  if (yylval.bigint.str)
251 			    free (yylval.bigint.str);
252 			  break;
253 			}
254 		      token = yylex ();
255 		    }
256 		  ldlex_popstate ();
257 		  ldfile_assumed_script = FALSE;
258 		  fclose (yyin);
259 		  yyin = NULL;
260 		  if (skip)
261 		    {
262 		      if (command_line.warn_search_mismatch)
263 			einfo (_("%P: skipping incompatible %s "
264 				 "when searching for %s\n"),
265 			       attempt, entry->local_sym_name);
266 		      bfd_close (entry->the_bfd);
267 		      entry->the_bfd = NULL;
268 		      return FALSE;
269 		    }
270 		}
271 	      goto success;
272 	    }
273 
274 	  if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
275 	    {
276 	      einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
277 		     attempt);
278 	      bfd_close (entry->the_bfd);
279 	      entry->the_bfd = NULL;
280 	      return FALSE;
281 	    }
282 
283 	  if (entry->flags.search_dirs
284 	      && !bfd_arch_get_compatible (check, link_info.output_bfd,
285 					   command_line.accept_unknown_input_arch)
286 	      /* XCOFF archives can have 32 and 64 bit objects.  */
287 	      && !(bfd_get_flavour (check) == bfd_target_xcoff_flavour
288 		   && (bfd_get_flavour (link_info.output_bfd)
289 		       == bfd_target_xcoff_flavour)
290 		   && bfd_check_format (entry->the_bfd, bfd_archive)))
291 	    {
292 	      if (command_line.warn_search_mismatch)
293 		einfo (_("%P: skipping incompatible %s "
294 			 "when searching for %s\n"),
295 		       attempt, entry->local_sym_name);
296 	      bfd_close (entry->the_bfd);
297 	      entry->the_bfd = NULL;
298 	      return FALSE;
299 	    }
300 	}
301     }
302 success:
303 #ifdef ENABLE_PLUGINS
304   /* If plugins are active, they get first chance to claim
305      any successfully-opened input file.  We skip archives
306      here; the plugin wants us to offer it the individual
307      members when we enumerate them, not the whole file.  We
308      also ignore corefiles, because that's just weird.  It is
309      a needed side-effect of calling  bfd_check_format with
310      bfd_object that it sets the bfd's arch and mach, which
311      will be needed when and if we want to bfd_create a new
312      one using this one as a template.  */
313   if (link_info.lto_plugin_active
314       && !no_more_claiming
315       && bfd_check_format (entry->the_bfd, bfd_object))
316     plugin_maybe_claim (entry);
317 #endif /* ENABLE_PLUGINS */
318 
319   /* It opened OK, the format checked out, and the plugins have had
320      their chance to claim it, so this is success.  */
321   return TRUE;
322 }
323 
324 /* Search for and open the file specified by ENTRY.  If it is an
325    archive, use ARCH, LIB and SUFFIX to modify the file name.  */
326 
327 bfd_boolean
328 ldfile_open_file_search (const char *arch,
329 			 lang_input_statement_type *entry,
330 			 const char *lib,
331 			 const char *suffix)
332 {
333   search_dirs_type *search;
334 
335   /* If this is not an archive, try to open it in the current
336      directory first.  */
337   if (!entry->flags.maybe_archive)
338     {
339       if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
340 	{
341 	  char *name = concat (ld_sysroot, entry->filename,
342 			       (const char *) NULL);
343 	  if (ldfile_try_open_bfd (name, entry))
344 	    {
345 	      entry->filename = name;
346 	      return TRUE;
347 	    }
348 	  free (name);
349 	}
350       else if (ldfile_try_open_bfd (entry->filename, entry))
351 	return TRUE;
352 
353       if (IS_ABSOLUTE_PATH (entry->filename))
354 	return FALSE;
355     }
356 
357   for (search = search_head; search != NULL; search = search->next)
358     {
359       char *string;
360 
361       if (entry->flags.dynamic && !bfd_link_relocatable (&link_info))
362 	{
363 	  if (ldemul_open_dynamic_archive (arch, search, entry))
364 	    return TRUE;
365 	}
366 
367       if (entry->flags.maybe_archive && !entry->flags.full_name_provided)
368 	string = concat (search->name, slash, lib, entry->filename,
369 			 arch, suffix, (const char *) NULL);
370       else
371 	string = concat (search->name, slash, entry->filename,
372 			 (const char *) 0);
373 
374       if (ldfile_try_open_bfd (string, entry))
375 	{
376 	  entry->filename = string;
377 	  return TRUE;
378 	}
379 
380       free (string);
381     }
382 
383   return FALSE;
384 }
385 
386 /* Open the input file specified by ENTRY.
387    PR 4437: Do not stop on the first missing file, but
388    continue processing other input files in case there
389    are more errors to report.  */
390 
391 void
392 ldfile_open_file (lang_input_statement_type *entry)
393 {
394   if (entry->the_bfd != NULL)
395     return;
396 
397   if (!entry->flags.search_dirs)
398     {
399       if (ldfile_try_open_bfd (entry->filename, entry))
400 	return;
401 
402       if (filename_cmp (entry->filename, entry->local_sym_name) != 0)
403 	einfo (_("%P: cannot find %s (%s): %E\n"),
404 	       entry->filename, entry->local_sym_name);
405       else
406 	einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
407 
408       entry->flags.missing_file = TRUE;
409       input_flags.missing_file = TRUE;
410     }
411   else
412     {
413       search_arch_type *arch;
414       bfd_boolean found = FALSE;
415 
416       /* Try to open <filename><suffix> or lib<filename><suffix>.a */
417       for (arch = search_arch_head; arch != NULL; arch = arch->next)
418 	{
419 	  found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
420 	  if (found)
421 	    break;
422 #ifdef VMS
423 	  found = ldfile_open_file_search (arch->name, entry, ":lib", ".a");
424 	  if (found)
425 	    break;
426 #endif
427 	  found = ldemul_find_potential_libraries (arch->name, entry);
428 	  if (found)
429 	    break;
430 	}
431 
432       /* If we have found the file, we don't need to search directories
433 	 again.  */
434       if (found)
435 	entry->flags.search_dirs = FALSE;
436       else
437 	{
438 	  if (entry->flags.sysrooted
439 	       && ld_sysroot
440 	       && IS_ABSOLUTE_PATH (entry->local_sym_name))
441 	    einfo (_("%P: cannot find %s inside %s\n"),
442 		   entry->local_sym_name, ld_sysroot);
443 	  else
444 	    einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
445 	  entry->flags.missing_file = TRUE;
446 	  input_flags.missing_file = TRUE;
447 	}
448     }
449 }
450 
451 /* Try to open NAME.  */
452 
453 static FILE *
454 try_open (const char *name, bfd_boolean *sysrooted)
455 {
456   FILE *result;
457 
458   result = fopen (name, "r");
459 
460   if (result != NULL)
461     *sysrooted = is_sysrooted_pathname (name);
462 
463   if (verbose)
464     {
465       if (result == NULL)
466 	info_msg (_("cannot find script file %s\n"), name);
467       else
468 	info_msg (_("opened script file %s\n"), name);
469     }
470 
471   return result;
472 }
473 
474 /* Return TRUE iff directory DIR contains an "ldscripts" subdirectory.  */
475 
476 static bfd_boolean
477 check_for_scripts_dir (char *dir)
478 {
479   char *buf;
480   struct stat s;
481   bfd_boolean res;
482 
483   buf = concat (dir, "/ldscripts", (const char *) NULL);
484   res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
485   free (buf);
486   return res;
487 }
488 
489 /* Return the default directory for finding script files.
490    We look for the "ldscripts" directory in:
491 
492    SCRIPTDIR (passed from Makefile)
493 	     (adjusted according to the current location of the binary)
494    the dir where this program is (for using it from the build tree).  */
495 
496 static char *
497 find_scripts_dir (void)
498 {
499   char *dir;
500 
501   dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
502   if (dir)
503     {
504       if (check_for_scripts_dir (dir))
505 	return dir;
506       free (dir);
507     }
508 
509   dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
510   if (dir)
511     {
512       if (check_for_scripts_dir (dir))
513 	return dir;
514       free (dir);
515     }
516 
517   /* Look for "ldscripts" in the dir where our binary is.  */
518   dir = make_relative_prefix (program_name, ".", ".");
519   if (dir)
520     {
521       if (check_for_scripts_dir (dir))
522 	return dir;
523       free (dir);
524     }
525 
526   return NULL;
527 }
528 
529 /* If DEFAULT_ONLY is false, try to open NAME; if that fails, look for
530    it in directories specified with -L, then in the default script
531    directory.  If DEFAULT_ONLY is true, the search is restricted to
532    the default script location.  */
533 
534 static FILE *
535 ldfile_find_command_file (const char *name,
536 			  bfd_boolean default_only,
537 			  bfd_boolean *sysrooted)
538 {
539   search_dirs_type *search;
540   FILE *result = NULL;
541   char *path;
542   static search_dirs_type *script_search;
543 
544   if (!default_only)
545     {
546       /* First try raw name.  */
547       result = try_open (name, sysrooted);
548       if (result != NULL)
549 	return result;
550     }
551 
552   if (!script_search)
553     {
554       char *script_dir = find_scripts_dir ();
555       if (script_dir)
556 	{
557 	  search_dirs_type **save_tail_ptr = search_tail_ptr;
558 	  search_tail_ptr = &script_search;
559 	  ldfile_add_library_path (script_dir, TRUE);
560 	  search_tail_ptr = save_tail_ptr;
561 	}
562     }
563 
564   /* Temporarily append script_search to the path list so that the
565      paths specified with -L will be searched first.  */
566   *search_tail_ptr = script_search;
567 
568   /* Try now prefixes.  */
569   for (search = default_only ? script_search : search_head;
570        search != NULL;
571        search = search->next)
572     {
573       path = concat (search->name, slash, name, (const char *) NULL);
574       result = try_open (path, sysrooted);
575       free (path);
576       if (result)
577 	break;
578     }
579 
580   /* Restore the original path list.  */
581   *search_tail_ptr = NULL;
582 
583   return result;
584 }
585 
586 /* Open command file NAME.  */
587 
588 static void
589 ldfile_open_command_file_1 (const char *name, bfd_boolean default_only)
590 {
591   FILE *ldlex_input_stack;
592   bfd_boolean sysrooted;
593 
594   ldlex_input_stack = ldfile_find_command_file (name, default_only, &sysrooted);
595 
596   if (ldlex_input_stack == NULL)
597     {
598       bfd_set_error (bfd_error_system_call);
599       einfo (_("%P%F: cannot open linker script file %s: %E\n"), name);
600       return;
601     }
602 
603   lex_push_file (ldlex_input_stack, name, sysrooted);
604 
605   lineno = 1;
606 
607   saved_script_handle = ldlex_input_stack;
608 }
609 
610 /* Open command file NAME in the current directory, -L directories,
611    the default script location, in that order.  */
612 
613 void
614 ldfile_open_command_file (const char *name)
615 {
616   ldfile_open_command_file_1 (name, FALSE);
617 }
618 
619 /* Open command file NAME at the default script location.  */
620 
621 void
622 ldfile_open_default_command_file (const char *name)
623 {
624   ldfile_open_command_file_1 (name, TRUE);
625 }
626 
627 void
628 ldfile_add_arch (const char *in_name)
629 {
630   char *name = xstrdup (in_name);
631   search_arch_type *new_arch
632     = (search_arch_type *) xmalloc (sizeof (search_arch_type));
633 
634   ldfile_output_machine_name = in_name;
635 
636   new_arch->name = name;
637   new_arch->next = NULL;
638   while (*name)
639     {
640       *name = TOLOWER (*name);
641       name++;
642     }
643   *search_arch_tail_ptr = new_arch;
644   search_arch_tail_ptr = &new_arch->next;
645 
646 }
647 
648 /* Set the output architecture.  */
649 
650 void
651 ldfile_set_output_arch (const char *string, enum bfd_architecture defarch)
652 {
653   const bfd_arch_info_type *arch = bfd_scan_arch (string);
654 
655   if (arch)
656     {
657       ldfile_output_architecture = arch->arch;
658       ldfile_output_machine = arch->mach;
659       ldfile_output_machine_name = arch->printable_name;
660     }
661   else if (defarch != bfd_arch_unknown)
662     ldfile_output_architecture = defarch;
663   else
664     einfo (_("%P%F: cannot represent machine `%s'\n"), string);
665 }
666