1 /* Linker file opening and searching.
2 Copyright (C) 1991-2024 Free Software Foundation, Inc.
4 This file is part of the GNU Binutils.
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.
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.
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. */
25 #include "safe-ctype.h"
35 #include "libiberty.h"
36 #include "filenames.h"
38 #if BFD_SUPPORTS_PLUGINS
39 #include "plugin-api.h"
41 #endif /* BFD_SUPPORTS_PLUGINS */
44 static char *slash
= "";
46 #if defined (_WIN32) && !defined (__CYGWIN32__)
47 static char *slash
= "\\";
49 static char *slash
= "/";
53 typedef struct search_arch
56 struct search_arch
*next
;
59 bool ldfile_assumed_script
= false;
60 const char * ldfile_output_machine_name
= "";
61 unsigned long ldfile_output_machine
;
62 enum bfd_architecture ldfile_output_architecture
;
63 search_dirs_type
* search_head
;
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 typedef struct input_remap
71 const char * pattern
; /* Pattern to match input files. */
72 const char * renamed
; /* Filename to use if the pattern matches. */
73 struct input_remap
* next
; /* Link in a chain of these structures. */
76 static struct input_remap
* input_remaps
= NULL
;
79 ldfile_add_remap (const char * pattern
, const char * renamed
)
81 struct input_remap
* new_entry
;
83 new_entry
= xmalloc (sizeof * new_entry
);
84 new_entry
->pattern
= xstrdup (pattern
);
85 new_entry
->next
= NULL
;
87 /* Look for special filenames that mean that the input file should be ignored. */
88 if (strcmp (renamed
, "/dev/null") == 0
89 || strcmp (renamed
, "NUL") == 0)
90 new_entry
->renamed
= NULL
;
92 /* FIXME: Should we add sanity checking of the 'renamed' string ? */
93 new_entry
->renamed
= xstrdup (renamed
);
95 /* It would be easier to add this new node at the start of the chain,
96 but users expect that remapping will occur in the order in which
97 they occur on the command line, and in the remapping files. */
98 if (input_remaps
== NULL
)
100 input_remaps
= new_entry
;
104 struct input_remap
* i
;
106 for (i
= input_remaps
; i
->next
!= NULL
; i
= i
->next
)
113 ldfile_remap_input_free (void)
115 while (input_remaps
!= NULL
)
117 struct input_remap
* i
= input_remaps
;
119 input_remaps
= i
->next
;
120 free ((void *) i
->pattern
);
121 free ((void *) i
->renamed
);
127 ldfile_add_remap_file (const char * file
)
131 f
= fopen (file
, FOPEN_RT
);
135 size_t linelen
= 256;
136 char * line
= xmalloc (linelen
);
143 /* Normally this would use getline(3), but we need to be portable. */
144 while ((q
= fgets (p
, linelen
- (p
- line
), f
)) != NULL
145 && strlen (q
) == linelen
- (p
- line
) - 1
146 && line
[linelen
- 2] != '\n')
148 line
= xrealloc (line
, 2 * linelen
);
149 p
= line
+ linelen
- 1;
153 if (q
== NULL
&& p
== line
)
156 p
= strchr (line
, '\n');
160 /* Because the file format does not know any form of quoting we
161 can search forward for the next '#' character and if found
162 make it terminating the line. */
163 p
= strchr (line
, '#');
167 /* Remove leading whitespace. NUL is no whitespace character. */
169 while (*p
== ' ' || *p
== '\f' || *p
== '\r' || *p
== '\t' || *p
== '\v')
172 /* If the line is blank it is ignored. */
178 /* Advance past the pattern. We accept whitespace or '=' as an
179 end-of-pattern marker. */
180 while (*p
&& *p
!= '=' && *p
!= ' ' && *p
!= '\t' && *p
!= '\f'
181 && *p
!= '\r' && *p
!= '\v')
186 einfo ("%F%P: malformed remap file entry: %s\n", line
);
192 /* Skip whitespace again. */
193 while (*p
== ' ' || *p
== '\f' || *p
== '\r' || *p
== '\t' || *p
== '\v')
198 einfo ("%F%P: malformed remap file entry: %s\n", line
);
204 /* Advance past the rename entry. */
205 while (*p
&& *p
!= '=' && *p
!= ' ' && *p
!= '\t' && *p
!= '\f'
206 && *p
!= '\r' && *p
!= '\v')
208 /* And terminate it. */
211 ldfile_add_remap (pattern
, renamed
);
222 ldfile_possibly_remap_input (const char * filename
)
224 struct input_remap
* i
;
226 if (filename
== NULL
)
229 for (i
= input_remaps
; i
!= NULL
; i
= i
->next
)
231 if (fnmatch (i
->pattern
, filename
, 0) == 0)
235 if (strpbrk ((i
->pattern
), "?*[") != NULL
)
238 info_msg (_("remap input file '%s' to '%s' based upon pattern '%s'\n"),
239 filename
, i
->renamed
, i
->pattern
);
241 info_msg (_("remove input file '%s' based upon pattern '%s'\n"),
242 filename
, i
->pattern
);
247 info_msg (_("remap input file '%s' to '%s'\n"),
248 filename
, i
->renamed
);
250 info_msg (_("remove input file '%s'\n"),
263 ldfile_print_input_remaps (void)
265 if (input_remaps
== NULL
)
268 minfo (_("\nInput File Remapping\n\n"));
270 struct input_remap
* i
;
272 for (i
= input_remaps
; i
!= NULL
; i
= i
->next
)
273 minfo (_(" Pattern: %s\tMaps To: %s\n"), i
->pattern
,
274 i
->renamed
? i
->renamed
: _("<discard>"));
278 /* Test whether a pathname, after canonicalization, is the same or a
279 sub-directory of the sysroot directory. */
282 is_sysrooted_pathname (const char *name
)
288 if (ld_canon_sysroot
== NULL
)
291 realname
= lrealpath (name
);
292 len
= strlen (realname
);
294 if (len
> ld_canon_sysroot_len
295 && IS_DIR_SEPARATOR (realname
[ld_canon_sysroot_len
]))
297 realname
[ld_canon_sysroot_len
] = '\0';
298 result
= FILENAME_CMP (ld_canon_sysroot
, realname
) == 0;
305 /* Adds NAME to the library search path.
306 Makes a copy of NAME using xmalloc().
307 Returns a pointer to the newly created search_dirs_type structure
308 or NULL if there was a problem. */
311 ldfile_add_library_path (const char *name
, enum search_dir_source source
)
313 search_dirs_type
*new_dirs
;
315 if (source
!= search_dir_cmd_line
&& config
.only_cmd_line_lib_dirs
)
318 new_dirs
= (search_dirs_type
*) xmalloc (sizeof (search_dirs_type
));
319 new_dirs
->source
= source
;
321 /* If a directory is marked as honoring sysroot, prepend the sysroot path
324 new_dirs
->name
= concat (ld_sysroot
, name
+ 1, (const char *) NULL
);
325 else if (startswith (name
, "$SYSROOT"))
326 new_dirs
->name
= concat (ld_sysroot
, name
+ strlen ("$SYSROOT"), (const char *) NULL
);
328 new_dirs
->name
= xstrdup (name
);
330 /* Accumulate script and command line sourced
331 search paths at the end of the current list. */
332 #if BFD_SUPPORTS_PLUGINS
333 /* PR 31904: But put plugin sourced paths at the start of the list. */
334 if (source
== search_dir_plugin
)
336 new_dirs
->next
= search_head
;
337 search_head
= new_dirs
;
342 new_dirs
->next
= NULL
;
343 *search_tail_ptr
= new_dirs
;
344 search_tail_ptr
= &new_dirs
->next
;
350 /* Try to open a BFD for a lang_input_statement. */
353 ldfile_try_open_bfd (const char *attempt
,
354 lang_input_statement_type
*entry
)
356 entry
->the_bfd
= bfd_openr (attempt
, entry
->target
);
360 if (entry
->the_bfd
== NULL
)
361 info_msg (_("attempt to open %s failed\n"), attempt
);
363 info_msg (_("attempt to open %s succeeded\n"), attempt
);
366 if (entry
->the_bfd
== NULL
)
368 if (bfd_get_error () == bfd_error_invalid_target
)
369 einfo (_("%F%P: invalid BFD target `%s'\n"), entry
->target
);
373 /* PR 30568: Do not track plugin generated object files. */
374 #if BFD_SUPPORTS_PLUGINS
375 if (entry
->plugin
!= NULL
)
377 track_dependency_files (attempt
);
379 /* Linker needs to decompress sections. */
380 entry
->the_bfd
->flags
|= BFD_DECOMPRESS
;
382 /* This is a linker input BFD. */
383 entry
->the_bfd
->is_linker_input
= 1;
385 #if BFD_SUPPORTS_PLUGINS
386 if (entry
->plugin
!= NULL
)
387 entry
->the_bfd
->lto_output
= 1;
390 /* If we are searching for this file, see if the architecture is
391 compatible with the output file. If it isn't, keep searching.
392 If we can't open the file as an object file, stop the search
393 here. If we are statically linking, ensure that we don't link
396 In the code below, it's OK to exit early if the check fails,
397 closing the checked BFD and returning false, but if the BFD
398 checks out compatible, do not exit early returning true, or
399 the plugins will not get a chance to claim the file. */
401 if (entry
->flags
.search_dirs
|| !entry
->flags
.dynamic
)
405 if (bfd_check_format (entry
->the_bfd
, bfd_archive
))
406 check
= bfd_openr_next_archived_file (entry
->the_bfd
, NULL
);
408 check
= entry
->the_bfd
;
412 if (!bfd_check_format (check
, bfd_object
))
414 if (check
== entry
->the_bfd
415 && entry
->flags
.search_dirs
416 && bfd_get_error () == bfd_error_file_not_recognized
417 && !ldemul_unrecognized_file (entry
))
420 char *arg
, *arg1
, *arg2
, *arg3
;
423 /* Try to interpret the file as a linker script. */
424 ldfile_open_command_file (attempt
);
426 ldfile_assumed_script
= true;
427 parser_input
= input_selected
;
429 token
= INPUT_SCRIPT
;
435 if ((token
= yylex ()) != '(')
437 if ((token
= yylex ()) != NAME
)
445 if ((token
= yylex ()) != NAME
)
451 if ((token
= yylex ()) != ','
452 || (token
= yylex ()) != NAME
)
463 switch (command_line
.endian
)
469 arg
= arg2
? arg2
: arg1
; break;
471 arg
= arg3
? arg3
: arg1
; break;
473 if (strcmp (arg
, lang_get_output_target ()) != 0)
482 case VERS_IDENTIFIER
:
487 free (yylval
.bigint
.str
);
493 ldfile_assumed_script
= false;
498 if (command_line
.warn_search_mismatch
)
499 einfo (_("%P: skipping incompatible %s "
500 "when searching for %s\n"),
501 attempt
, entry
->local_sym_name
);
502 bfd_close (entry
->the_bfd
);
503 entry
->the_bfd
= NULL
;
510 if (!entry
->flags
.dynamic
&& (entry
->the_bfd
->flags
& DYNAMIC
) != 0)
512 einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
514 bfd_close (entry
->the_bfd
);
515 entry
->the_bfd
= NULL
;
519 if (entry
->flags
.search_dirs
520 && !bfd_arch_get_compatible (check
, link_info
.output_bfd
,
521 command_line
.accept_unknown_input_arch
)
522 /* XCOFF archives can have 32 and 64 bit objects. */
523 && !(bfd_get_flavour (check
) == bfd_target_xcoff_flavour
524 && (bfd_get_flavour (link_info
.output_bfd
)
525 == bfd_target_xcoff_flavour
)
526 && bfd_check_format (entry
->the_bfd
, bfd_archive
)))
528 if (command_line
.warn_search_mismatch
)
529 einfo (_("%P: skipping incompatible %s "
530 "when searching for %s\n"),
531 attempt
, entry
->local_sym_name
);
532 bfd_close (entry
->the_bfd
);
533 entry
->the_bfd
= NULL
;
539 #if BFD_SUPPORTS_PLUGINS
540 /* If plugins are active, they get first chance to claim
541 any successfully-opened input file. We skip archives
542 here; the plugin wants us to offer it the individual
543 members when we enumerate them, not the whole file. We
544 also ignore corefiles, because that's just weird. It is
545 a needed side-effect of calling bfd_check_format with
546 bfd_object that it sets the bfd's arch and mach, which
547 will be needed when and if we want to bfd_create a new
548 one using this one as a template. */
549 if (link_info
.lto_plugin_active
551 && bfd_check_format (entry
->the_bfd
, bfd_object
))
552 plugin_maybe_claim (entry
);
553 #endif /* BFD_SUPPORTS_PLUGINS */
555 /* It opened OK, the format checked out, and the plugins have had
556 their chance to claim it, so this is success. */
560 /* Search for and open the file specified by ENTRY. If it is an
561 archive, use ARCH, LIB and SUFFIX to modify the file name. */
564 ldfile_open_file_search (const char *arch
,
565 lang_input_statement_type
*entry
,
569 search_dirs_type
*search
;
571 /* If this is not an archive, try to open it in the current
573 if (!entry
->flags
.maybe_archive
)
575 if (entry
->flags
.sysrooted
&& IS_ABSOLUTE_PATH (entry
->filename
))
577 char *name
= concat (ld_sysroot
, entry
->filename
,
578 (const char *) NULL
);
579 if (ldfile_try_open_bfd (name
, entry
))
581 entry
->filename
= name
;
586 else if (ldfile_try_open_bfd (entry
->filename
, entry
))
589 if (IS_ABSOLUTE_PATH (entry
->filename
))
593 for (search
= search_head
; search
!= NULL
; search
= search
->next
)
597 #if BFD_SUPPORTS_PLUGINS
598 /* PR 31904: Only check a plugin sourced search
599 directory if the file is from the same plugin. */
600 if (search
->source
== search_dir_plugin
601 && entry
->plugin
!= search
->plugin
)
605 if (entry
->flags
.dynamic
&& !bfd_link_relocatable (&link_info
))
607 if (ldemul_open_dynamic_archive (arch
, search
, entry
))
611 if (entry
->flags
.maybe_archive
&& !entry
->flags
.full_name_provided
)
612 string
= concat (search
->name
, slash
, lib
, entry
->filename
,
613 arch
, suffix
, (const char *) NULL
);
615 string
= concat (search
->name
, slash
, entry
->filename
,
618 if (ldfile_try_open_bfd (string
, entry
))
620 entry
->filename
= string
;
630 /* Open the input file specified by ENTRY.
631 PR 4437: Do not stop on the first missing file, but
632 continue processing other input files in case there
633 are more errors to report. */
636 ldfile_open_file (lang_input_statement_type
*entry
)
638 if (entry
->the_bfd
!= NULL
)
641 if (!entry
->flags
.search_dirs
)
643 if (ldfile_try_open_bfd (entry
->filename
, entry
))
646 if (filename_cmp (entry
->filename
, entry
->local_sym_name
) != 0)
647 einfo (_("%P: cannot find %s (%s): %E\n"),
648 entry
->filename
, entry
->local_sym_name
);
650 einfo (_("%P: cannot find %s: %E\n"), entry
->local_sym_name
);
652 entry
->flags
.missing_file
= true;
653 input_flags
.missing_file
= true;
657 search_arch_type
*arch
;
660 /* If extra_search_path is set, entry->filename is a relative path.
661 Search the directory of the current linker script before searching
663 if (entry
->extra_search_path
)
665 char *path
= concat (entry
->extra_search_path
, slash
, entry
->filename
,
667 if (ldfile_try_open_bfd (path
, entry
))
669 entry
->filename
= path
;
670 entry
->flags
.search_dirs
= false;
677 /* Try to open <filename><suffix> or lib<filename><suffix>.a. */
678 for (arch
= search_arch_head
; arch
!= NULL
; arch
= arch
->next
)
680 found
= ldfile_open_file_search (arch
->name
, entry
, "lib", ".a");
684 found
= ldfile_open_file_search (arch
->name
, entry
, ":lib", ".a");
688 found
= ldemul_find_potential_libraries (arch
->name
, entry
);
693 /* If we have found the file, we don't need to search directories
696 entry
->flags
.search_dirs
= false;
699 if (entry
->flags
.sysrooted
701 && IS_ABSOLUTE_PATH (entry
->local_sym_name
))
702 einfo (_("%P: cannot find %s inside %s\n"),
703 entry
->local_sym_name
, ld_sysroot
);
704 #if SUPPORT_ERROR_HANDLING_SCRIPT
705 else if (error_handling_script
!= NULL
)
711 argv
[0] = error_handling_script
;
712 argv
[1] = "missing-lib";
713 argv
[2] = (char *) entry
->local_sym_name
;
717 einfo (_("%P: About to run error handling script '%s' with arguments: '%s' '%s'\n"),
718 argv
[0], argv
[1], argv
[2]);
720 res
= pex_one (PEX_SEARCH
, error_handling_script
, argv
,
721 N_("error handling script"),
722 NULL
/* Send stdout to random, temp file. */,
723 NULL
/* Write to stderr. */,
727 einfo (_("%P: Failed to run error handling script '%s', reason: "),
728 error_handling_script
);
729 /* FIXME: We assume here that errrno == err. */
732 else /* We ignore the return status of the script
733 and always print the error message. */
734 einfo (_("%P: cannot find %s: %E\n"), entry
->local_sym_name
);
738 einfo (_("%P: cannot find %s: %E\n"), entry
->local_sym_name
);
740 /* PR 25747: Be kind to users who forgot to add the
741 "lib" prefix to their library when it was created. */
742 for (arch
= search_arch_head
; arch
!= NULL
; arch
= arch
->next
)
744 if (ldfile_open_file_search (arch
->name
, entry
, "", ".a"))
746 const char * base
= lbasename (entry
->filename
);
748 einfo (_("%P: note to link with %s use -l:%s or rename it to lib%s\n"),
749 entry
->filename
, base
, base
);
750 bfd_close (entry
->the_bfd
);
751 entry
->the_bfd
= NULL
;
756 entry
->flags
.missing_file
= true;
757 input_flags
.missing_file
= true;
762 /* Try to open NAME. */
765 try_open (const char *name
, bool *sysrooted
)
769 result
= fopen (name
, "r");
773 *sysrooted
= is_sysrooted_pathname (name
);
774 track_dependency_files (name
);
780 info_msg (_("cannot find script file %s\n"), name
);
782 info_msg (_("opened script file %s\n"), name
);
788 /* Return TRUE iff directory DIR contains an "ldscripts" subdirectory. */
791 check_for_scripts_dir (char *dir
)
797 buf
= concat (dir
, "/ldscripts", (const char *) NULL
);
798 res
= stat (buf
, &s
) == 0 && S_ISDIR (s
.st_mode
);
803 /* Return the default directory for finding script files.
804 We look for the "ldscripts" directory in:
806 SCRIPTDIR (passed from Makefile)
807 (adjusted according to the current location of the binary)
808 the dir where this program is (for using it from the build tree). */
811 find_scripts_dir (void)
815 dir
= make_relative_prefix (program_name
, BINDIR
, SCRIPTDIR
);
818 if (check_for_scripts_dir (dir
))
823 dir
= make_relative_prefix (program_name
, TOOLBINDIR
, SCRIPTDIR
);
826 if (check_for_scripts_dir (dir
))
831 /* Look for "ldscripts" in the dir where our binary is. */
832 dir
= make_relative_prefix (program_name
, ".", ".");
835 if (check_for_scripts_dir (dir
))
843 /* If DEFAULT_ONLY is false, try to open NAME; if that fails, look for
844 it in directories specified with -L, then in the default script
845 directory. If DEFAULT_ONLY is true, the search is restricted to
846 the default script location. */
849 ldfile_find_command_file (const char *name
,
853 search_dirs_type
*search
;
856 static search_dirs_type
*script_search
;
860 /* First try raw name. */
861 result
= try_open (name
, sysrooted
);
868 char *script_dir
= find_scripts_dir ();
871 search_dirs_type
**save_tail_ptr
= search_tail_ptr
;
872 search_tail_ptr
= &script_search
;
873 (void) ldfile_add_library_path (script_dir
, search_dir_cmd_line
);
874 search_tail_ptr
= save_tail_ptr
;
878 /* Temporarily append script_search to the path list so that the
879 paths specified with -L will be searched first. */
880 *search_tail_ptr
= script_search
;
882 /* Try now prefixes. */
883 for (search
= default_only
? script_search
: search_head
;
885 search
= search
->next
)
887 #if BFD_SUPPORTS_PLUGINS
888 /* Do not search for linker commands in plugin sourced search directories. */
889 if (search
->source
== search_dir_plugin
)
892 path
= concat (search
->name
, slash
, name
, (const char *) NULL
);
893 result
= try_open (path
, sysrooted
);
899 /* Restore the original path list. */
900 *search_tail_ptr
= NULL
;
905 struct script_name_list
*processed_scripts
= NULL
;
906 /* Open command file NAME. */
909 ldfile_open_command_file_1 (const char *name
, enum script_open_style open_how
)
911 FILE *ldlex_input_stack
;
913 struct script_name_list
*script
;
916 /* PR 24576: Catch the case where the user has accidentally included
917 the same linker script twice. */
918 for (script
= processed_scripts
; script
!= NULL
; script
= script
->next
)
920 if ((open_how
!= script_nonT
|| script
->open_how
!= script_nonT
)
921 && strcmp (name
, script
->name
) == 0)
923 einfo (_("%F%P: error: linker script file '%s'"
924 " appears multiple times\n"), name
);
929 /* FIXME: This memory is never freed, but that should not really matter.
930 It will be released when the linker exits, and it is unlikely to ever
931 be more than a few tens of bytes. */
933 script
= xmalloc (sizeof (*script
) + len
);
934 script
->next
= processed_scripts
;
935 script
->open_how
= open_how
;
936 memcpy (script
->name
, name
, len
+ 1);
937 processed_scripts
= script
;
939 ldlex_input_stack
= ldfile_find_command_file (name
,
940 open_how
== script_defaultT
,
942 if (ldlex_input_stack
== NULL
)
944 bfd_set_error (bfd_error_system_call
);
945 einfo (_("%F%P: cannot open linker script file %s: %E\n"), name
);
949 lex_push_file (ldlex_input_stack
, name
, sysrooted
);
953 saved_script_handle
= ldlex_input_stack
;
956 /* Open command file NAME in the current directory, -L directories,
957 the default script location, in that order. */
960 ldfile_open_command_file (const char *name
)
962 ldfile_open_command_file_1 (name
, script_nonT
);
966 ldfile_open_script_file (const char *name
)
968 ldfile_open_command_file_1 (name
, script_T
);
971 /* Open command file NAME at the default script location. */
974 ldfile_open_default_command_file (const char *name
)
976 ldfile_open_command_file_1 (name
, script_defaultT
);
980 ldfile_add_arch (const char *in_name
)
982 char *name
= xstrdup (in_name
);
983 search_arch_type
*new_arch
984 = (search_arch_type
*) xmalloc (sizeof (search_arch_type
));
986 ldfile_output_machine_name
= in_name
;
988 new_arch
->name
= name
;
989 new_arch
->next
= NULL
;
992 *name
= TOLOWER (*name
);
995 *search_arch_tail_ptr
= new_arch
;
996 search_arch_tail_ptr
= &new_arch
->next
;
1000 /* Set the output architecture. */
1003 ldfile_set_output_arch (const char *string
, enum bfd_architecture defarch
)
1005 const bfd_arch_info_type
*arch
= bfd_scan_arch (string
);
1009 ldfile_output_architecture
= arch
->arch
;
1010 ldfile_output_machine
= arch
->mach
;
1011 ldfile_output_machine_name
= arch
->printable_name
;
1013 else if (defarch
!= bfd_arch_unknown
)
1014 ldfile_output_architecture
= defarch
;
1016 einfo (_("%F%P: cannot represent machine `%s'\n"), string
);