1
/* Linker file opening and searching.
2
Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
3
2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
4
Free Software Foundation, Inc.
6
This file is part of the GNU Binutils.
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 3 of the License, or
11
(at your option) any later version.
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21
MA 02110-1301, USA. */
26
#include "safe-ctype.h"
36
#include "libiberty.h"
37
#include "filenames.h"
39
#include "plugin-api.h"
41
#endif /* ENABLE_PLUGINS */
43
bfd_boolean ldfile_assumed_script = FALSE;
44
const char * ldfile_output_machine_name = "";
45
unsigned long ldfile_output_machine;
46
enum bfd_architecture ldfile_output_architecture;
47
search_dirs_type * search_head;
50
static char * slash = "";
52
#if defined (_WIN32) && ! defined (__CYGWIN32__)
53
static char * slash = "\\";
55
static char * slash = "/";
59
typedef struct search_arch
62
struct search_arch *next;
65
static search_dirs_type **search_tail_ptr = &search_head;
66
static search_arch_type *search_arch_head;
67
static search_arch_type **search_arch_tail_ptr = &search_arch_head;
69
/* Test whether a pathname, after canonicalization, is the same or a
70
sub-directory of the sysroot directory. */
73
is_sysrooted_pathname (const char *name)
79
if (ld_canon_sysroot == NULL)
82
realname = lrealpath (name);
83
len = strlen (realname);
85
if (len > ld_canon_sysroot_len
86
&& IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len]))
88
realname[ld_canon_sysroot_len] = '\0';
89
result = FILENAME_CMP (ld_canon_sysroot, realname) == 0;
96
/* Adds NAME to the library search path.
97
Makes a copy of NAME using xmalloc(). */
100
ldfile_add_library_path (const char *name, bfd_boolean cmdline)
102
search_dirs_type *new_dirs;
104
if (!cmdline && config.only_cmd_line_lib_dirs)
107
new_dirs = (search_dirs_type *) xmalloc (sizeof (search_dirs_type));
108
new_dirs->next = NULL;
109
new_dirs->cmdline = cmdline;
110
*search_tail_ptr = new_dirs;
111
search_tail_ptr = &new_dirs->next;
113
/* If a directory is marked as honoring sysroot, prepend the sysroot path
116
new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
118
new_dirs->name = xstrdup (name);
121
/* Try to open a BFD for a lang_input_statement. */
124
ldfile_try_open_bfd (const char *attempt,
125
lang_input_statement_type *entry)
127
entry->the_bfd = bfd_openr (attempt, entry->target);
131
if (entry->the_bfd == NULL)
132
info_msg (_("attempt to open %s failed\n"), attempt);
134
info_msg (_("attempt to open %s succeeded\n"), attempt);
137
if (entry->the_bfd == NULL)
139
if (bfd_get_error () == bfd_error_invalid_target)
140
einfo (_("%F%P: invalid BFD target `%s'\n"), entry->target);
144
/* Linker needs to decompress sections. */
145
entry->the_bfd->flags |= BFD_DECOMPRESS;
147
/* If we are searching for this file, see if the architecture is
148
compatible with the output file. If it isn't, keep searching.
149
If we can't open the file as an object file, stop the search
150
here. If we are statically linking, ensure that we don't link
153
In the code below, it's OK to exit early if the check fails,
154
closing the checked BFD and returning FALSE, but if the BFD
155
checks out compatible, do not exit early returning TRUE, or
156
the plugins will not get a chance to claim the file. */
158
if (entry->flags.search_dirs || !entry->flags.dynamic)
162
if (bfd_check_format (entry->the_bfd, bfd_archive))
163
check = bfd_openr_next_archived_file (entry->the_bfd, NULL);
165
check = entry->the_bfd;
169
if (! bfd_check_format (check, bfd_object))
171
if (check == entry->the_bfd
172
&& entry->flags.search_dirs
173
&& bfd_get_error () == bfd_error_file_not_recognized
174
&& ! ldemul_unrecognized_file (entry))
177
char *arg, *arg1, *arg2, *arg3;
180
/* Try to interpret the file as a linker script. */
181
ldfile_open_command_file (attempt);
183
ldfile_assumed_script = TRUE;
184
parser_input = input_selected;
186
token = INPUT_SCRIPT;
192
if ((token = yylex ()) != '(')
194
if ((token = yylex ()) != NAME)
202
if ((token = yylex ()) != NAME)
208
if ((token = yylex ()) != ','
209
|| (token = yylex ()) != NAME)
220
switch (command_line.endian)
226
arg = arg2 ? arg2 : arg1; break;
228
arg = arg3 ? arg3 : arg1; break;
230
if (strcmp (arg, lang_get_output_target ()) != 0)
234
if (arg2) free (arg2);
235
if (arg3) free (arg3);
239
case VERS_IDENTIFIER:
244
if (yylval.bigint.str)
245
free (yylval.bigint.str);
251
ldfile_assumed_script = FALSE;
256
if (command_line.warn_search_mismatch)
257
einfo (_("%P: skipping incompatible %s "
258
"when searching for %s\n"),
259
attempt, entry->local_sym_name);
260
bfd_close (entry->the_bfd);
261
entry->the_bfd = NULL;
268
if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
270
einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
272
bfd_close (entry->the_bfd);
273
entry->the_bfd = NULL;
277
if (entry->flags.search_dirs
278
&& !bfd_arch_get_compatible (check, link_info.output_bfd,
279
command_line.accept_unknown_input_arch)
280
/* XCOFF archives can have 32 and 64 bit objects. */
281
&& ! (bfd_get_flavour (check) == bfd_target_xcoff_flavour
282
&& bfd_get_flavour (link_info.output_bfd) == bfd_target_xcoff_flavour
283
&& bfd_check_format (entry->the_bfd, bfd_archive)))
285
if (command_line.warn_search_mismatch)
286
einfo (_("%P: skipping incompatible %s "
287
"when searching for %s\n"),
288
attempt, entry->local_sym_name);
289
bfd_close (entry->the_bfd);
290
entry->the_bfd = NULL;
296
#ifdef ENABLE_PLUGINS
297
/* If plugins are active, they get first chance to claim
298
any successfully-opened input file. We skip archives
299
here; the plugin wants us to offer it the individual
300
members when we enumerate them, not the whole file. We
301
also ignore corefiles, because that's just weird. It is
302
a needed side-effect of calling bfd_check_format with
303
bfd_object that it sets the bfd's arch and mach, which
304
will be needed when and if we want to bfd_create a new
305
one using this one as a template. */
306
if (bfd_check_format (entry->the_bfd, bfd_object)
307
&& plugin_active_plugins_p ()
308
&& !no_more_claiming)
310
int fd = open (attempt, O_RDONLY | O_BINARY);
313
struct ld_plugin_input_file file;
317
file.filesize = lseek (fd, 0, SEEK_END);
319
plugin_maybe_claim (&file, entry);
322
#endif /* ENABLE_PLUGINS */
324
/* It opened OK, the format checked out, and the plugins have had
325
their chance to claim it, so this is success. */
329
/* Search for and open the file specified by ENTRY. If it is an
330
archive, use ARCH, LIB and SUFFIX to modify the file name. */
333
ldfile_open_file_search (const char *arch,
334
lang_input_statement_type *entry,
338
search_dirs_type *search;
340
/* If this is not an archive, try to open it in the current
342
if (! entry->flags.maybe_archive)
344
if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
346
char *name = concat (ld_sysroot, entry->filename,
347
(const char *) NULL);
348
if (ldfile_try_open_bfd (name, entry))
350
entry->filename = name;
355
else if (ldfile_try_open_bfd (entry->filename, entry))
358
if (IS_ABSOLUTE_PATH (entry->filename))
362
for (search = search_head; search != NULL; search = search->next)
366
if (entry->flags.dynamic && ! link_info.relocatable)
368
if (ldemul_open_dynamic_archive (arch, search, entry))
372
if (entry->flags.maybe_archive)
373
string = concat (search->name, slash, lib, entry->filename,
374
arch, suffix, (const char *) NULL);
376
string = concat (search->name, slash, entry->filename,
379
if (ldfile_try_open_bfd (string, entry))
381
entry->filename = string;
391
/* Open the input file specified by ENTRY.
392
PR 4437: Do not stop on the first missing file, but
393
continue processing other input files in case there
394
are more errors to report. */
397
ldfile_open_file (lang_input_statement_type *entry)
399
if (entry->the_bfd != NULL)
402
if (! entry->flags.search_dirs)
404
if (ldfile_try_open_bfd (entry->filename, entry))
407
if (filename_cmp (entry->filename, entry->local_sym_name) != 0)
408
einfo (_("%P: cannot find %s (%s): %E\n"),
409
entry->filename, entry->local_sym_name);
411
einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
413
entry->flags.missing_file = TRUE;
414
input_flags.missing_file = TRUE;
418
search_arch_type *arch;
419
bfd_boolean found = FALSE;
421
/* Try to open <filename><suffix> or lib<filename><suffix>.a */
422
for (arch = search_arch_head; arch != NULL; arch = arch->next)
424
found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
428
found = ldfile_open_file_search (arch->name, entry, ":lib", ".a");
432
found = ldemul_find_potential_libraries (arch->name, entry);
437
/* If we have found the file, we don't need to search directories
440
entry->flags.search_dirs = FALSE;
443
if (entry->flags.sysrooted
445
&& IS_ABSOLUTE_PATH (entry->local_sym_name))
446
einfo (_("%P: cannot find %s inside %s\n"),
447
entry->local_sym_name, ld_sysroot);
449
einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
450
entry->flags.missing_file = TRUE;
451
input_flags.missing_file = TRUE;
456
/* Try to open NAME. */
459
try_open (const char *name, bfd_boolean *sysrooted)
463
result = fopen (name, "r");
466
*sysrooted = is_sysrooted_pathname (name);
471
info_msg (_("cannot find script file %s\n"), name);
473
info_msg (_("opened script file %s\n"), name);
479
/* Return TRUE iff directory DIR contains an "ldscripts" subdirectory. */
482
check_for_scripts_dir (char *dir)
488
buf = concat (dir, "/ldscripts", (const char *) NULL);
489
res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
494
/* Return the default directory for finding script files.
495
We look for the "ldscripts" directory in:
497
SCRIPTDIR (passed from Makefile)
498
(adjusted according to the current location of the binary)
499
the dir where this program is (for using it from the build tree). */
502
find_scripts_dir (void)
506
dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
509
if (check_for_scripts_dir (dir))
514
dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
517
if (check_for_scripts_dir (dir))
522
/* Look for "ldscripts" in the dir where our binary is. */
523
dir = make_relative_prefix (program_name, ".", ".");
526
if (check_for_scripts_dir (dir))
534
/* If DEFAULT_ONLY is false, try to open NAME; if that fails, look for
535
it in directories specified with -L, then in the default script
536
directory. If DEFAULT_ONLY is true, the search is restricted to
537
the default script location. */
540
ldfile_find_command_file (const char *name,
541
bfd_boolean default_only,
542
bfd_boolean *sysrooted)
544
search_dirs_type *search;
547
static search_dirs_type *script_search;
551
/* First try raw name. */
552
result = try_open (name, sysrooted);
559
char *script_dir = find_scripts_dir ();
562
search_dirs_type **save_tail_ptr = search_tail_ptr;
563
search_tail_ptr = &script_search;
564
ldfile_add_library_path (script_dir, TRUE);
565
search_tail_ptr = save_tail_ptr;
569
/* Temporarily append script_search to the path list so that the
570
paths specified with -L will be searched first. */
571
*search_tail_ptr = script_search;
573
/* Try now prefixes. */
574
for (search = default_only ? script_search : search_head;
576
search = search->next)
578
path = concat (search->name, slash, name, (const char *) NULL);
579
result = try_open (path, sysrooted);
585
/* Restore the original path list. */
586
*search_tail_ptr = NULL;
591
/* Open command file NAME. */
594
ldfile_open_command_file_1 (const char *name, bfd_boolean default_only)
596
FILE *ldlex_input_stack;
597
bfd_boolean sysrooted;
599
ldlex_input_stack = ldfile_find_command_file (name, default_only, &sysrooted);
601
if (ldlex_input_stack == NULL)
603
bfd_set_error (bfd_error_system_call);
604
einfo (_("%P%F: cannot open linker script file %s: %E\n"), name);
608
lex_push_file (ldlex_input_stack, name, sysrooted);
612
saved_script_handle = ldlex_input_stack;
615
/* Open command file NAME in the current directory, -L directories,
616
the default script location, in that order. */
619
ldfile_open_command_file (const char *name)
621
ldfile_open_command_file_1 (name, FALSE);
624
/* Open command file NAME at the default script location. */
627
ldfile_open_default_command_file (const char *name)
629
ldfile_open_command_file_1 (name, TRUE);
633
ldfile_add_arch (const char *in_name)
635
char *name = xstrdup (in_name);
636
search_arch_type *new_arch = (search_arch_type *)
637
xmalloc (sizeof (search_arch_type));
639
ldfile_output_machine_name = in_name;
641
new_arch->name = name;
642
new_arch->next = NULL;
645
*name = TOLOWER (*name);
648
*search_arch_tail_ptr = new_arch;
649
search_arch_tail_ptr = &new_arch->next;
653
/* Set the output architecture. */
656
ldfile_set_output_arch (const char *string, enum bfd_architecture defarch)
658
const bfd_arch_info_type *arch = bfd_scan_arch (string);
662
ldfile_output_architecture = arch->arch;
663
ldfile_output_machine = arch->mach;
664
ldfile_output_machine_name = arch->printable_name;
666
else if (defarch != bfd_arch_unknown)
667
ldfile_output_architecture = defarch;
669
einfo (_("%P%F: cannot represent machine `%s'\n"), string);