Retrieve segment registers on Windows amd64
[deliverable/binutils-gdb.git] / ld / ldfile.c
1 /* Linker file opening and searching.
2 Copyright (C) 1991-2015 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 #ifdef ENABLE_PLUGINS
146 if (entry->flags.lto_output)
147 entry->the_bfd->lto_output = 1;
148 #endif
149
150 /* If we are searching for this file, see if the architecture is
151 compatible with the output file. If it isn't, keep searching.
152 If we can't open the file as an object file, stop the search
153 here. If we are statically linking, ensure that we don't link
154 a dynamic object.
155
156 In the code below, it's OK to exit early if the check fails,
157 closing the checked BFD and returning FALSE, but if the BFD
158 checks out compatible, do not exit early returning TRUE, or
159 the plugins will not get a chance to claim the file. */
160
161 if (entry->flags.search_dirs || !entry->flags.dynamic)
162 {
163 bfd *check;
164
165 if (bfd_check_format (entry->the_bfd, bfd_archive))
166 check = bfd_openr_next_archived_file (entry->the_bfd, NULL);
167 else
168 check = entry->the_bfd;
169
170 if (check != NULL)
171 {
172 if (! bfd_check_format (check, bfd_object))
173 {
174 if (check == entry->the_bfd
175 && entry->flags.search_dirs
176 && bfd_get_error () == bfd_error_file_not_recognized
177 && ! ldemul_unrecognized_file (entry))
178 {
179 int token, skip = 0;
180 char *arg, *arg1, *arg2, *arg3;
181 extern FILE *yyin;
182
183 /* Try to interpret the file as a linker script. */
184 ldfile_open_command_file (attempt);
185
186 ldfile_assumed_script = TRUE;
187 parser_input = input_selected;
188 ldlex_both ();
189 token = INPUT_SCRIPT;
190 while (token != 0)
191 {
192 switch (token)
193 {
194 case OUTPUT_FORMAT:
195 if ((token = yylex ()) != '(')
196 continue;
197 if ((token = yylex ()) != NAME)
198 continue;
199 arg1 = yylval.name;
200 arg2 = NULL;
201 arg3 = NULL;
202 token = yylex ();
203 if (token == ',')
204 {
205 if ((token = yylex ()) != NAME)
206 {
207 free (arg1);
208 continue;
209 }
210 arg2 = yylval.name;
211 if ((token = yylex ()) != ','
212 || (token = yylex ()) != NAME)
213 {
214 free (arg1);
215 free (arg2);
216 continue;
217 }
218 arg3 = yylval.name;
219 token = yylex ();
220 }
221 if (token == ')')
222 {
223 switch (command_line.endian)
224 {
225 default:
226 case ENDIAN_UNSET:
227 arg = arg1; break;
228 case ENDIAN_BIG:
229 arg = arg2 ? arg2 : arg1; break;
230 case ENDIAN_LITTLE:
231 arg = arg3 ? arg3 : arg1; break;
232 }
233 if (strcmp (arg, lang_get_output_target ()) != 0)
234 skip = 1;
235 }
236 free (arg1);
237 if (arg2) free (arg2);
238 if (arg3) free (arg3);
239 break;
240 case NAME:
241 case LNAME:
242 case VERS_IDENTIFIER:
243 case VERS_TAG:
244 free (yylval.name);
245 break;
246 case INT:
247 if (yylval.bigint.str)
248 free (yylval.bigint.str);
249 break;
250 }
251 token = yylex ();
252 }
253 ldlex_popstate ();
254 ldfile_assumed_script = FALSE;
255 fclose (yyin);
256 yyin = NULL;
257 if (skip)
258 {
259 if (command_line.warn_search_mismatch)
260 einfo (_("%P: skipping incompatible %s "
261 "when searching for %s\n"),
262 attempt, entry->local_sym_name);
263 bfd_close (entry->the_bfd);
264 entry->the_bfd = NULL;
265 return FALSE;
266 }
267 }
268 goto success;
269 }
270
271 if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
272 {
273 einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
274 attempt);
275 bfd_close (entry->the_bfd);
276 entry->the_bfd = NULL;
277 return FALSE;
278 }
279
280 if (entry->flags.search_dirs
281 && !bfd_arch_get_compatible (check, link_info.output_bfd,
282 command_line.accept_unknown_input_arch)
283 /* XCOFF archives can have 32 and 64 bit objects. */
284 && ! (bfd_get_flavour (check) == bfd_target_xcoff_flavour
285 && bfd_get_flavour (link_info.output_bfd) == bfd_target_xcoff_flavour
286 && bfd_check_format (entry->the_bfd, bfd_archive)))
287 {
288 if (command_line.warn_search_mismatch)
289 einfo (_("%P: skipping incompatible %s "
290 "when searching for %s\n"),
291 attempt, entry->local_sym_name);
292 bfd_close (entry->the_bfd);
293 entry->the_bfd = NULL;
294 return FALSE;
295 }
296 }
297 }
298 success:
299 #ifdef ENABLE_PLUGINS
300 /* If plugins are active, they get first chance to claim
301 any successfully-opened input file. We skip archives
302 here; the plugin wants us to offer it the individual
303 members when we enumerate them, not the whole file. We
304 also ignore corefiles, because that's just weird. It is
305 a needed side-effect of calling bfd_check_format with
306 bfd_object that it sets the bfd's arch and mach, which
307 will be needed when and if we want to bfd_create a new
308 one using this one as a template. */
309 if (link_info.lto_plugin_active
310 && !no_more_claiming
311 && bfd_check_format (entry->the_bfd, bfd_object))
312 plugin_maybe_claim (entry);
313 #endif /* ENABLE_PLUGINS */
314
315 /* It opened OK, the format checked out, and the plugins have had
316 their chance to claim it, so this is success. */
317 return TRUE;
318 }
319
320 /* Search for and open the file specified by ENTRY. If it is an
321 archive, use ARCH, LIB and SUFFIX to modify the file name. */
322
323 bfd_boolean
324 ldfile_open_file_search (const char *arch,
325 lang_input_statement_type *entry,
326 const char *lib,
327 const char *suffix)
328 {
329 search_dirs_type *search;
330
331 /* If this is not an archive, try to open it in the current
332 directory first. */
333 if (! entry->flags.maybe_archive)
334 {
335 if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
336 {
337 char *name = concat (ld_sysroot, entry->filename,
338 (const char *) NULL);
339 if (ldfile_try_open_bfd (name, entry))
340 {
341 entry->filename = name;
342 return TRUE;
343 }
344 free (name);
345 }
346 else if (ldfile_try_open_bfd (entry->filename, entry))
347 return TRUE;
348
349 if (IS_ABSOLUTE_PATH (entry->filename))
350 return FALSE;
351 }
352
353 for (search = search_head; search != NULL; search = search->next)
354 {
355 char *string;
356
357 if (entry->flags.dynamic && ! link_info.relocatable)
358 {
359 if (ldemul_open_dynamic_archive (arch, search, entry))
360 return TRUE;
361 }
362
363 if (entry->flags.maybe_archive && !entry->flags.full_name_provided)
364 string = concat (search->name, slash, lib, entry->filename,
365 arch, suffix, (const char *) NULL);
366 else
367 string = concat (search->name, slash, entry->filename,
368 (const char *) 0);
369
370 if (ldfile_try_open_bfd (string, entry))
371 {
372 entry->filename = string;
373 return TRUE;
374 }
375
376 free (string);
377 }
378
379 return FALSE;
380 }
381
382 /* Open the input file specified by ENTRY.
383 PR 4437: Do not stop on the first missing file, but
384 continue processing other input files in case there
385 are more errors to report. */
386
387 void
388 ldfile_open_file (lang_input_statement_type *entry)
389 {
390 if (entry->the_bfd != NULL)
391 return;
392
393 if (! entry->flags.search_dirs)
394 {
395 if (ldfile_try_open_bfd (entry->filename, entry))
396 return;
397
398 if (filename_cmp (entry->filename, entry->local_sym_name) != 0)
399 einfo (_("%P: cannot find %s (%s): %E\n"),
400 entry->filename, entry->local_sym_name);
401 else
402 einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
403
404 entry->flags.missing_file = TRUE;
405 input_flags.missing_file = TRUE;
406 }
407 else
408 {
409 search_arch_type *arch;
410 bfd_boolean found = FALSE;
411
412 /* Try to open <filename><suffix> or lib<filename><suffix>.a */
413 for (arch = search_arch_head; arch != NULL; arch = arch->next)
414 {
415 found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
416 if (found)
417 break;
418 #ifdef VMS
419 found = ldfile_open_file_search (arch->name, entry, ":lib", ".a");
420 if (found)
421 break;
422 #endif
423 found = ldemul_find_potential_libraries (arch->name, entry);
424 if (found)
425 break;
426 }
427
428 /* If we have found the file, we don't need to search directories
429 again. */
430 if (found)
431 entry->flags.search_dirs = FALSE;
432 else
433 {
434 if (entry->flags.sysrooted
435 && ld_sysroot
436 && IS_ABSOLUTE_PATH (entry->local_sym_name))
437 einfo (_("%P: cannot find %s inside %s\n"),
438 entry->local_sym_name, ld_sysroot);
439 else
440 einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
441 entry->flags.missing_file = TRUE;
442 input_flags.missing_file = TRUE;
443 }
444 }
445 }
446
447 /* Try to open NAME. */
448
449 static FILE *
450 try_open (const char *name, bfd_boolean *sysrooted)
451 {
452 FILE *result;
453
454 result = fopen (name, "r");
455
456 if (result != NULL)
457 *sysrooted = is_sysrooted_pathname (name);
458
459 if (verbose)
460 {
461 if (result == NULL)
462 info_msg (_("cannot find script file %s\n"), name);
463 else
464 info_msg (_("opened script file %s\n"), name);
465 }
466
467 return result;
468 }
469
470 /* Return TRUE iff directory DIR contains an "ldscripts" subdirectory. */
471
472 static bfd_boolean
473 check_for_scripts_dir (char *dir)
474 {
475 char *buf;
476 struct stat s;
477 bfd_boolean res;
478
479 buf = concat (dir, "/ldscripts", (const char *) NULL);
480 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
481 free (buf);
482 return res;
483 }
484
485 /* Return the default directory for finding script files.
486 We look for the "ldscripts" directory in:
487
488 SCRIPTDIR (passed from Makefile)
489 (adjusted according to the current location of the binary)
490 the dir where this program is (for using it from the build tree). */
491
492 static char *
493 find_scripts_dir (void)
494 {
495 char *dir;
496
497 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
498 if (dir)
499 {
500 if (check_for_scripts_dir (dir))
501 return dir;
502 free (dir);
503 }
504
505 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
506 if (dir)
507 {
508 if (check_for_scripts_dir (dir))
509 return dir;
510 free (dir);
511 }
512
513 /* Look for "ldscripts" in the dir where our binary is. */
514 dir = make_relative_prefix (program_name, ".", ".");
515 if (dir)
516 {
517 if (check_for_scripts_dir (dir))
518 return dir;
519 free (dir);
520 }
521
522 return NULL;
523 }
524
525 /* If DEFAULT_ONLY is false, try to open NAME; if that fails, look for
526 it in directories specified with -L, then in the default script
527 directory. If DEFAULT_ONLY is true, the search is restricted to
528 the default script location. */
529
530 static FILE *
531 ldfile_find_command_file (const char *name,
532 bfd_boolean default_only,
533 bfd_boolean *sysrooted)
534 {
535 search_dirs_type *search;
536 FILE *result = NULL;
537 char *path;
538 static search_dirs_type *script_search;
539
540 if (!default_only)
541 {
542 /* First try raw name. */
543 result = try_open (name, sysrooted);
544 if (result != NULL)
545 return result;
546 }
547
548 if (!script_search)
549 {
550 char *script_dir = find_scripts_dir ();
551 if (script_dir)
552 {
553 search_dirs_type **save_tail_ptr = search_tail_ptr;
554 search_tail_ptr = &script_search;
555 ldfile_add_library_path (script_dir, TRUE);
556 search_tail_ptr = save_tail_ptr;
557 }
558 }
559
560 /* Temporarily append script_search to the path list so that the
561 paths specified with -L will be searched first. */
562 *search_tail_ptr = script_search;
563
564 /* Try now prefixes. */
565 for (search = default_only ? script_search : search_head;
566 search != NULL;
567 search = search->next)
568 {
569 path = concat (search->name, slash, name, (const char *) NULL);
570 result = try_open (path, sysrooted);
571 free (path);
572 if (result)
573 break;
574 }
575
576 /* Restore the original path list. */
577 *search_tail_ptr = NULL;
578
579 return result;
580 }
581
582 /* Open command file NAME. */
583
584 static void
585 ldfile_open_command_file_1 (const char *name, bfd_boolean default_only)
586 {
587 FILE *ldlex_input_stack;
588 bfd_boolean sysrooted;
589
590 ldlex_input_stack = ldfile_find_command_file (name, default_only, &sysrooted);
591
592 if (ldlex_input_stack == NULL)
593 {
594 bfd_set_error (bfd_error_system_call);
595 einfo (_("%P%F: cannot open linker script file %s: %E\n"), name);
596 return;
597 }
598
599 lex_push_file (ldlex_input_stack, name, sysrooted);
600
601 lineno = 1;
602
603 saved_script_handle = ldlex_input_stack;
604 }
605
606 /* Open command file NAME in the current directory, -L directories,
607 the default script location, in that order. */
608
609 void
610 ldfile_open_command_file (const char *name)
611 {
612 ldfile_open_command_file_1 (name, FALSE);
613 }
614
615 /* Open command file NAME at the default script location. */
616
617 void
618 ldfile_open_default_command_file (const char *name)
619 {
620 ldfile_open_command_file_1 (name, TRUE);
621 }
622
623 void
624 ldfile_add_arch (const char *in_name)
625 {
626 char *name = xstrdup (in_name);
627 search_arch_type *new_arch = (search_arch_type *)
628 xmalloc (sizeof (search_arch_type));
629
630 ldfile_output_machine_name = in_name;
631
632 new_arch->name = name;
633 new_arch->next = NULL;
634 while (*name)
635 {
636 *name = TOLOWER (*name);
637 name++;
638 }
639 *search_arch_tail_ptr = new_arch;
640 search_arch_tail_ptr = &new_arch->next;
641
642 }
643
644 /* Set the output architecture. */
645
646 void
647 ldfile_set_output_arch (const char *string, enum bfd_architecture defarch)
648 {
649 const bfd_arch_info_type *arch = bfd_scan_arch (string);
650
651 if (arch)
652 {
653 ldfile_output_architecture = arch->arch;
654 ldfile_output_machine = arch->mach;
655 ldfile_output_machine_name = arch->printable_name;
656 }
657 else if (defarch != bfd_arch_unknown)
658 ldfile_output_architecture = defarch;
659 else
660 einfo (_("%P%F: cannot represent machine `%s'\n"), string);
661 }
This page took 0.043731 seconds and 4 git commands to generate.