1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
3 # This file is now misnamed, because it supports both 32 bit and 64 bit
5 test -z "${ELFSIZE}" && ELFSIZE=32
6 if [ -z "$MACHINE" ]; then
9 OUTPUT_ARCH=${ARCH}:${MACHINE}
12 /* This file is is generated by a shell script. DO NOT EDIT! */
14 /* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
15 Copyright (C) 1991-2015 Free Software Foundation, Inc.
16 Written by Steve Chamberlain <sac@cygnus.com>
17 ELF support by Ian Lance Taylor <ian@cygnus.com>
19 This file is part of the GNU Binutils.
21 This program is free software; you can redistribute it and/or modify
22 it under the terms of the GNU General Public License as published by
23 the Free Software Foundation; either version 3 of the License, or
24 (at your option) any later version.
26 This program is distributed in the hope that it will be useful,
27 but WITHOUT ANY WARRANTY; without even the implied warranty of
28 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 GNU General Public License for more details.
31 You should have received a copy of the GNU General Public License
32 along with this program; if not, write to the Free Software
33 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
34 MA 02110-1301, USA. */
36 #define TARGET_IS_${EMULATION_NAME}
40 #include "libiberty.h"
41 #include "safe-ctype.h"
42 #include "filenames.h"
56 #include "ldbuildid.h"
58 #include "elf/common.h"
60 #include "filenames.h"
62 /* Declare functions used by various EXTRA_EM_FILEs. */
63 static void gld${EMULATION_NAME}_before_parse (void);
64 static void gld${EMULATION_NAME}_after_open (void);
65 static void gld${EMULATION_NAME}_before_allocation (void);
66 static void gld${EMULATION_NAME}_after_allocation (void);
67 static lang_output_section_statement_type *gld${EMULATION_NAME}_place_orphan
68 (asection *, const char *, int);
71 if [ "x${USE_LIBPATH}" = xyes ] ; then
73 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
83 # Import any needed special functions and/or overrides.
85 source_em ${srcdir}/emultempl/elf-generic.em
86 if test -n "$EXTRA_EM_FILE" ; then
87 source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
90 # Functions in this file can be overridden by setting the LDEMUL_* shell
91 # variables. If the name of the overriding function is the same as is
92 # defined in this file, then don't output this file's version.
93 # If a different overriding name is given then output the standard function
94 # as presumably it is called from the overriding function.
96 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
100 gld${EMULATION_NAME}_before_parse (void)
102 ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
103 input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
104 config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
105 config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
111 if test x"$LDEMUL_RECOGNIZED_FILE" != xgld"${EMULATION_NAME}"_load_symbols; then
113 /* Handle the generation of DT_NEEDED tags. */
116 gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *entry)
120 /* Tell the ELF linker that we don't want the output file to have a
121 DT_NEEDED entry for this file, unless it is used to resolve
122 references in a regular object. */
123 if (entry->flags.add_DT_NEEDED_for_regular)
124 link_class = DYN_AS_NEEDED;
126 /* Tell the ELF linker that we don't want the output file to have a
127 DT_NEEDED entry for any dynamic library in DT_NEEDED tags from
129 if (!entry->flags.add_DT_NEEDED_for_dynamic)
130 link_class |= DYN_NO_ADD_NEEDED;
132 if (entry->flags.just_syms
133 && (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0)
134 einfo (_("%P%F: --just-symbols may not be used on DSO: %B\n"),
138 || (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) == 0)
141 bfd_elf_set_dyn_lib_class (entry->the_bfd,
142 (enum dynamic_lib_link_class) link_class);
144 /* Continue on with normal load_symbols processing. */
152 /* These variables are required to pass information back and forth
153 between after_open and check_needed and stat_needed and vercheck. */
155 static struct bfd_link_needed_list *global_needed;
156 static struct stat global_stat;
157 static lang_input_statement_type *global_found;
158 static struct bfd_link_needed_list *global_vercheck_needed;
159 static bfd_boolean global_vercheck_failed;
161 /* These variables are used to implement target options */
163 static char *audit; /* colon (typically) separated list of libs */
164 static char *depaudit; /* colon (typically) separated list of libs */
166 /* Style of .note.gnu.build-id section. */
167 static const char *emit_note_gnu_build_id;
169 /* On Linux, it's possible to have different versions of the same
170 shared library linked against different versions of libc. The
171 dynamic linker somehow tags which libc version to use in
172 /etc/ld.so.cache, and, based on the libc that it sees in the
173 executable, chooses which version of the shared library to use.
175 We try to do a similar check here by checking whether this shared
176 library needs any other shared libraries which may conflict with
177 libraries we have already included in the link. If it does, we
178 skip it, and try to find another shared library farther on down the
181 This is called via lang_for_each_input_file.
182 GLOBAL_VERCHECK_NEEDED is the list of objects needed by the object
183 which we are checking. This sets GLOBAL_VERCHECK_FAILED if we find
184 a conflicting version. */
187 gld${EMULATION_NAME}_vercheck (lang_input_statement_type *s)
190 struct bfd_link_needed_list *l;
192 if (global_vercheck_failed)
194 if (s->the_bfd == NULL
195 || (bfd_get_file_flags (s->the_bfd) & DYNAMIC) == 0)
198 soname = bfd_elf_get_dt_soname (s->the_bfd);
200 soname = lbasename (bfd_get_filename (s->the_bfd));
202 for (l = global_vercheck_needed; l != NULL; l = l->next)
206 if (filename_cmp (soname, l->name) == 0)
208 /* Probably can't happen, but it's an easy check. */
212 if (strchr (l->name, '/') != NULL)
215 suffix = strstr (l->name, ".so.");
219 suffix += sizeof ".so." - 1;
221 if (filename_ncmp (soname, l->name, suffix - l->name) == 0)
223 /* Here we know that S is a dynamic object FOO.SO.VER1, and
224 the object we are considering needs a dynamic object
225 FOO.SO.VER2, and VER1 and VER2 are different. This
226 appears to be a version mismatch, so we tell the caller
227 to try a different version of this library. */
228 global_vercheck_failed = TRUE;
235 /* See if an input file matches a DT_NEEDED entry by running stat on
239 gld${EMULATION_NAME}_stat_needed (lang_input_statement_type *s)
245 if (global_found != NULL)
247 if (s->the_bfd == NULL)
250 /* If this input file was an as-needed entry, and wasn't found to be
251 needed at the stage it was linked, then don't say we have loaded it. */
252 if ((bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
255 if (bfd_stat (s->the_bfd, &st) != 0)
257 einfo ("%P:%B: bfd_stat failed: %E\n", s->the_bfd);
261 /* Some operating systems, e.g. Windows, do not provide a meaningful
262 st_ino; they always set it to zero. (Windows does provide a
263 meaningful st_dev.) Do not indicate a duplicate library in that
264 case. While there is no guarantee that a system that provides
265 meaningful inode numbers will never set st_ino to zero, this is
266 merely an optimization, so we do not need to worry about false
268 if (st.st_dev == global_stat.st_dev
269 && st.st_ino == global_stat.st_ino
276 /* We issue a warning if it looks like we are including two
277 different versions of the same shared library. For example,
278 there may be a problem if -lc picks up libc.so.6 but some other
279 shared library has a DT_NEEDED entry of libc.so.5. This is a
280 heuristic test, and it will only work if the name looks like
281 NAME.so.VERSION. FIXME: Depending on file names is error-prone.
282 If we really want to issue warnings about mixing version numbers
283 of shared libraries, we need to find a better way. */
285 if (strchr (global_needed->name, '/') != NULL)
287 suffix = strstr (global_needed->name, ".so.");
290 suffix += sizeof ".so." - 1;
292 soname = bfd_elf_get_dt_soname (s->the_bfd);
294 soname = lbasename (s->filename);
296 if (filename_ncmp (soname, global_needed->name, suffix - global_needed->name) == 0)
297 einfo ("%P: warning: %s, needed by %B, may conflict with %s\n",
298 global_needed->name, global_needed->by, soname);
307 /* This function is called for each possible name for a dynamic object
308 named by a DT_NEEDED entry. The FORCE parameter indicates whether
309 to skip the check for a conflicting version. */
312 gld${EMULATION_NAME}_try_needed (struct dt_needed *needed,
316 const char *name = needed->name;
320 abfd = bfd_openr (name, bfd_get_target (link_info.output_bfd));
324 /* Linker needs to decompress sections. */
325 abfd->flags |= BFD_DECOMPRESS;
327 if (! bfd_check_format (abfd, bfd_object))
332 if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
338 /* For DT_NEEDED, they have to match. */
339 if (abfd->xvec != link_info.output_bfd->xvec)
345 /* Check whether this object would include any conflicting library
346 versions. If FORCE is set, then we skip this check; we use this
347 the second time around, if we couldn't find any compatible
348 instance of the shared library. */
352 struct bfd_link_needed_list *needs;
354 if (! bfd_elf_get_bfd_needed_list (abfd, &needs))
355 einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd);
359 global_vercheck_needed = needs;
360 global_vercheck_failed = FALSE;
361 lang_for_each_input_file (gld${EMULATION_NAME}_vercheck);
362 if (global_vercheck_failed)
365 /* Return FALSE to force the caller to move on to try
366 another file on the search path. */
370 /* But wait! It gets much worse. On Linux, if a shared
371 library does not use libc at all, we are supposed to skip
372 it the first time around in case we encounter a shared
373 library later on with the same name which does use the
374 version of libc that we want. This is much too horrible
375 to use on any system other than Linux. */
379 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
382 struct bfd_link_needed_list *l;
384 for (l = needs; l != NULL; l = l->next)
385 if (CONST_STRNEQ (l->name, "libc.so"))
401 /* We've found a dynamic object matching the DT_NEEDED entry. */
403 /* We have already checked that there is no other input file of the
404 same name. We must now check again that we are not including the
405 same file twice. We need to do this because on many systems
406 libc.so is a symlink to, e.g., libc.so.1. The SONAME entry will
407 reference libc.so.1. If we have already included libc.so, we
408 don't want to include libc.so.1 if they are the same file, and we
409 can only check that using stat. */
411 if (bfd_stat (abfd, &global_stat) != 0)
412 einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd);
414 /* First strip off everything before the last '/'. */
415 soname = lbasename (abfd->filename);
418 info_msg (_("found %s at %s\n"), soname, name);
421 lang_for_each_input_file (gld${EMULATION_NAME}_stat_needed);
422 if (global_found != NULL)
424 /* Return TRUE to indicate that we found the file, even though
425 we aren't going to do anything with it. */
429 /* Specify the soname to use. */
430 bfd_elf_set_dt_needed_name (abfd, soname);
432 /* Tell the ELF linker that we don't want the output file to have a
433 DT_NEEDED entry for this file, unless it is used to resolve
434 references in a regular object. */
435 link_class = DYN_DT_NEEDED;
437 /* Tell the ELF linker that we don't want the output file to have a
438 DT_NEEDED entry for this file at all if the entry is from a file
439 with DYN_NO_ADD_NEEDED. */
440 if (needed->by != NULL
441 && (bfd_elf_get_dyn_lib_class (needed->by) & DYN_NO_ADD_NEEDED) != 0)
442 link_class |= DYN_NO_NEEDED | DYN_NO_ADD_NEEDED;
444 bfd_elf_set_dyn_lib_class (abfd, (enum dynamic_lib_link_class) link_class);
446 /* Add this file into the symbol table. */
447 if (! bfd_link_add_symbols (abfd, &link_info))
448 einfo ("%F%B: error adding symbols: %E\n", abfd);
454 /* Search for a needed file in a path. */
457 gld${EMULATION_NAME}_search_needed (const char *path,
458 struct dt_needed *n, int force)
461 const char *name = n->name;
463 struct dt_needed needed;
466 return gld${EMULATION_NAME}_try_needed (n, force);
468 if (path == NULL || *path == '\0')
472 needed.name = n->name;
477 char *filename, *sset;
479 s = strchr (path, config.rpath_separator);
481 s = path + strlen (path);
483 #if HAVE_DOS_BASED_FILE_SYSTEM
484 /* Assume a match on the second char is part of drive specifier. */
485 else if (config.rpath_separator == ':'
489 s = strchr (s + 1, config.rpath_separator);
491 s = path + strlen (path);
494 filename = (char *) xmalloc (s - path + len + 2);
499 memcpy (filename, path, s - path);
500 filename[s - path] = '/';
501 sset = filename + (s - path) + 1;
505 needed.name = filename;
506 if (gld${EMULATION_NAME}_try_needed (&needed, force))
520 if [ "x${USE_LIBPATH}" = xyes ] ; then
523 /* Add the sysroot to every entry in a path separated by
524 config.rpath_separator. */
527 gld${EMULATION_NAME}_add_sysroot (const char *path)
536 if (path[i++] == config.rpath_separator)
542 len = len + (colons + 1) * strlen (ld_sysroot);
543 ret = xmalloc (len + 1);
544 strcpy (ret, ld_sysroot);
545 p = ret + strlen (ret);
548 if (path[i] == config.rpath_separator)
551 strcpy (p, ld_sysroot);
563 *-*-freebsd* | *-*-dragonfly*)
565 /* Read the system search path the FreeBSD way rather than the Linux way. */
566 #ifdef HAVE_ELF_HINTS_H
567 #include <elf-hints.h>
569 #include "elf-hints-local.h"
573 gld${EMULATION_NAME}_check_ld_elf_hints (const struct bfd_link_needed_list *l,
576 static bfd_boolean initialized;
577 static char *ld_elf_hints;
578 struct dt_needed needed;
585 tmppath = concat (ld_sysroot, _PATH_ELF_HINTS, (const char *) NULL);
586 f = fopen (tmppath, FOPEN_RB);
590 struct elfhints_hdr hdr;
592 if (fread (&hdr, 1, sizeof (hdr), f) == sizeof (hdr)
593 && hdr.magic == ELFHINTS_MAGIC
596 if (fseek (f, hdr.strtab + hdr.dirlist, SEEK_SET) != -1)
600 b = xmalloc (hdr.dirlistlen + 1);
601 if (fread (b, 1, hdr.dirlistlen + 1, f) ==
603 ld_elf_hints = gld${EMULATION_NAME}_add_sysroot (b);
614 if (ld_elf_hints == NULL)
618 needed.name = l->name;
619 return gld${EMULATION_NAME}_search_needed (ld_elf_hints, &needed, force);
625 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
627 /* For a native linker, check the file /etc/ld.so.conf for directories
628 in which we may find shared libraries. /etc/ld.so.conf is really
629 only meaningful on Linux. */
631 struct gld${EMULATION_NAME}_ld_so_conf
638 gld${EMULATION_NAME}_parse_ld_so_conf
639 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename);
642 gld${EMULATION_NAME}_parse_ld_so_conf_include
643 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename,
651 if (pattern[0] != '/')
653 char *p = strrchr (filename, '/');
654 size_t patlen = strlen (pattern) + 1;
656 newp = xmalloc (p - filename + 1 + patlen);
657 memcpy (newp, filename, p - filename + 1);
658 memcpy (newp + (p - filename + 1), pattern, patlen);
663 if (glob (pattern, 0, NULL, &gl) == 0)
667 for (i = 0; i < gl.gl_pathc; ++i)
668 gld${EMULATION_NAME}_parse_ld_so_conf (info, gl.gl_pathv[i]);
672 /* If we do not have glob, treat the pattern as a literal filename. */
673 gld${EMULATION_NAME}_parse_ld_so_conf (info, pattern);
681 gld${EMULATION_NAME}_parse_ld_so_conf
682 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename)
684 FILE *f = fopen (filename, FOPEN_RT);
692 line = xmalloc (linelen);
697 /* Normally this would use getline(3), but we need to be portable. */
698 while ((q = fgets (p, linelen - (p - line), f)) != NULL
699 && strlen (q) == linelen - (p - line) - 1
700 && line[linelen - 2] != '\n')
702 line = xrealloc (line, 2 * linelen);
703 p = line + linelen - 1;
707 if (q == NULL && p == line)
710 p = strchr (line, '\n');
714 /* Because the file format does not know any form of quoting we
715 can search forward for the next '#' character and if found
716 make it terminating the line. */
717 p = strchr (line, '#');
721 /* Remove leading whitespace. NUL is no whitespace character. */
723 while (*p == ' ' || *p == '\f' || *p == '\r' || *p == '\t' || *p == '\v')
726 /* If the line is blank it is ignored. */
730 if (CONST_STRNEQ (p, "include") && (p[7] == ' ' || p[7] == '\t'))
736 while (*p == ' ' || *p == '\t')
744 while (*p != ' ' && *p != '\t' && *p)
750 gld${EMULATION_NAME}_parse_ld_so_conf_include (info, filename,
758 while (*p && *p != '=' && *p != ' ' && *p != '\t' && *p != '\f'
759 && *p != '\r' && *p != '\v')
762 while (p != dir && p[-1] == '/')
764 if (info->path == NULL)
766 info->alloc = p - dir + 1 + 256;
767 info->path = xmalloc (info->alloc);
772 if (info->len + 1 + (p - dir) >= info->alloc)
774 info->alloc += p - dir + 256;
775 info->path = xrealloc (info->path, info->alloc);
777 info->path[info->len++] = config.rpath_separator;
779 memcpy (info->path + info->len, dir, p - dir);
780 info->len += p - dir;
781 info->path[info->len] = '\0';
791 gld${EMULATION_NAME}_check_ld_so_conf (const struct bfd_link_needed_list *l,
794 static bfd_boolean initialized;
795 static char *ld_so_conf;
796 struct dt_needed needed;
801 struct gld${EMULATION_NAME}_ld_so_conf info;
804 info.len = info.alloc = 0;
805 tmppath = concat (ld_sysroot, "${prefix}/etc/ld.so.conf",
806 (const char *) NULL);
807 if (!gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath))
810 tmppath = concat (ld_sysroot, "/etc/ld.so.conf",
811 (const char *) NULL);
812 gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath);
818 char *d = gld${EMULATION_NAME}_add_sysroot (info.path);
825 if (ld_so_conf == NULL)
830 needed.name = l->name;
831 return gld${EMULATION_NAME}_search_needed (ld_so_conf, &needed, force);
841 /* See if an input file matches a DT_NEEDED entry by name. */
844 gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
848 /* Stop looking if we've found a loaded lib. */
849 if (global_found != NULL
850 && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
851 & DYN_AS_NEEDED) == 0)
854 if (s->filename == NULL || s->the_bfd == NULL)
857 /* Don't look for a second non-loaded as-needed lib. */
858 if (global_found != NULL
859 && (bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
862 if (filename_cmp (s->filename, global_needed->name) == 0)
868 if (s->flags.search_dirs)
870 const char *f = strrchr (s->filename, '/');
872 && filename_cmp (f + 1, global_needed->name) == 0)
879 soname = bfd_elf_get_dt_soname (s->the_bfd);
881 && filename_cmp (soname, global_needed->name) == 0)
890 if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
894 id_note_section_size (bfd *abfd ATTRIBUTE_UNUSED)
896 const char *style = emit_note_gnu_build_id;
898 bfd_size_type build_id_size;
900 size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
901 size = (size + 3) & -(bfd_size_type) 4;
903 build_id_size = compute_build_id_size (style);
905 size += build_id_size;
913 write_build_id (bfd *abfd)
915 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
916 struct elf_obj_tdata *t = elf_tdata (abfd);
919 Elf_Internal_Shdr *i_shdr;
920 unsigned char *contents, *id_bits;
923 Elf_External_Note *e_note;
925 style = t->o->build_id.style;
926 asec = t->o->build_id.sec;
927 if (bfd_is_abs_section (asec->output_section))
929 einfo (_("%P: warning: .note.gnu.build-id section discarded,"
930 " --build-id ignored.\n"));
933 i_shdr = &elf_section_data (asec->output_section)->this_hdr;
935 if (i_shdr->contents == NULL)
937 if (asec->contents == NULL)
938 asec->contents = (unsigned char *) xmalloc (asec->size);
939 contents = asec->contents;
942 contents = i_shdr->contents + asec->output_offset;
944 e_note = (Elf_External_Note *) contents;
945 size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
946 size = (size + 3) & -(bfd_size_type) 4;
947 id_bits = contents + size;
948 size = asec->size - size;
950 bfd_h_put_32 (abfd, sizeof "GNU", &e_note->namesz);
951 bfd_h_put_32 (abfd, size, &e_note->descsz);
952 bfd_h_put_32 (abfd, NT_GNU_BUILD_ID, &e_note->type);
953 memcpy (e_note->name, "GNU", sizeof "GNU");
955 generate_build_id (abfd, style, bed->s->checksum_contents, id_bits, size);
957 position = i_shdr->sh_offset + asec->output_offset;
959 return (bfd_seek (abfd, position, SEEK_SET) == 0
960 && bfd_bwrite (contents, size, abfd) == size);
963 /* Make .note.gnu.build-id section, and set up elf_tdata->build_id. */
966 setup_build_id (bfd *ibfd)
972 size = id_note_section_size (ibfd);
975 einfo ("%P: warning: unrecognized --build-id style ignored.\n");
979 flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
980 | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
981 s = bfd_make_section_with_flags (ibfd, ".note.gnu.build-id", flags);
982 if (s != NULL && bfd_set_section_alignment (ibfd, s, 2))
984 struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
985 t->o->build_id.after_write_object_contents = &write_build_id;
986 t->o->build_id.style = emit_note_gnu_build_id;
987 t->o->build_id.sec = s;
988 elf_section_type (s) = SHT_NOTE;
993 einfo ("%P: warning: Cannot create .note.gnu.build-id section,"
994 " --build-id ignored.\n");
998 /* This is called after all the input files have been opened. */
1001 gld${EMULATION_NAME}_after_open (void)
1003 struct bfd_link_needed_list *needed, *l;
1004 struct elf_link_hash_table *htab;
1006 after_open_default ();
1008 htab = elf_hash_table (&link_info);
1009 if (!is_elf_hash_table (htab))
1012 if (emit_note_gnu_build_id != NULL)
1016 /* Find an ELF input. */
1017 for (abfd = link_info.input_bfds;
1018 abfd != (bfd *) NULL; abfd = abfd->link.next)
1019 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1020 && bfd_count_sections (abfd) != 0)
1023 /* PR 10555: If there are no ELF input files do not try to
1024 create a .note.gnu-build-id section. */
1026 || !setup_build_id (abfd))
1028 free ((char *) emit_note_gnu_build_id);
1029 emit_note_gnu_build_id = NULL;
1033 if (bfd_link_relocatable (&link_info))
1035 if (link_info.execstack == ! link_info.noexecstack)
1036 /* PR ld/16744: If "-z [no]execstack" has been specified on the
1037 command line and we are perfoming a relocatable link then no
1038 PT_GNU_STACK segment will be created and so the
1039 linkinfo.[no]execstack values set in _handle_option() will have no
1040 effect. Instead we create a .note.GNU-stack section in much the
1041 same way as the assembler does with its --[no]execstack option. */
1042 (void) bfd_make_section_with_flags (link_info.input_bfds,
1044 SEC_READONLY | (link_info.execstack ? SEC_CODE : 0));
1049 if (!link_info.traditional_format)
1051 bfd *abfd, *elfbfd = NULL;
1052 bfd_boolean warn_eh_frame = FALSE;
1056 for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
1059 for (s = abfd->sections; s && type < COMPACT_EH_HDR; s = s->next)
1061 const char *name = bfd_get_section_name (abfd, s);
1063 if (bfd_is_abs_section (s->output_section))
1065 if (CONST_STRNEQ (name, ".eh_frame_entry"))
1066 type = COMPACT_EH_HDR;
1067 else if (strcmp (name, ".eh_frame") == 0 && s->size > 8)
1068 type = DWARF2_EH_HDR;
1077 else if (seen_type != type)
1079 einfo (_("%P%F: compact frame descriptions incompatible with"
1080 " DWARF2 .eh_frame from %B\n"),
1081 type == DWARF2_EH_HDR ? abfd : elfbfd);
1086 && (type == COMPACT_EH_HDR || link_info.eh_frame_hdr_type != 0))
1088 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1091 warn_eh_frame = TRUE;
1095 if (seen_type == COMPACT_EH_HDR)
1096 link_info.eh_frame_hdr_type = COMPACT_EH_HDR;
1098 if (bfd_count_sections (abfd) == 0)
1103 const struct elf_backend_data *bed;
1105 bed = get_elf_backend_data (elfbfd);
1106 s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
1107 bed->dynamic_sec_flags
1110 && bfd_set_section_alignment (elfbfd, s, 2))
1112 htab->eh_info.hdr_sec = s;
1113 warn_eh_frame = FALSE;
1117 einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
1118 " --eh-frame-hdr ignored.\n");
1121 /* Get the list of files which appear in DT_NEEDED entries in
1122 dynamic objects included in the link (often there will be none).
1123 For each such file, we want to track down the corresponding
1124 library, and include the symbol table in the link. This is what
1125 the runtime dynamic linker will do. Tracking the files down here
1126 permits one dynamic object to include another without requiring
1127 special action by the person doing the link. Note that the
1128 needed list can actually grow while we are stepping through this
1130 needed = bfd_elf_get_needed_list (link_info.output_bfd, &link_info);
1131 for (l = needed; l != NULL; l = l->next)
1133 struct bfd_link_needed_list *ll;
1134 struct dt_needed n, nn;
1137 /* If the lib that needs this one was --as-needed and wasn't
1138 found to be needed, then this lib isn't needed either. */
1140 && (bfd_elf_get_dyn_lib_class (l->by) & DYN_AS_NEEDED) != 0)
1143 /* Skip the lib if --no-copy-dt-needed-entries and
1144 --allow-shlib-undefined is in effect. */
1146 && link_info.unresolved_syms_in_shared_libs == RM_IGNORE
1147 && (bfd_elf_get_dyn_lib_class (l->by) & DYN_NO_ADD_NEEDED) != 0)
1150 /* If we've already seen this file, skip it. */
1151 for (ll = needed; ll != l; ll = ll->next)
1153 || (bfd_elf_get_dyn_lib_class (ll->by) & DYN_AS_NEEDED) == 0)
1154 && strcmp (ll->name, l->name) == 0)
1159 /* See if this file was included in the link explicitly. */
1161 global_found = NULL;
1162 lang_for_each_input_file (gld${EMULATION_NAME}_check_needed);
1163 if (global_found != NULL
1164 && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
1165 & DYN_AS_NEEDED) == 0)
1172 info_msg (_("%s needed by %B\n"), l->name, l->by);
1174 /* As-needed libs specified on the command line (or linker script)
1175 take priority over libs found in search dirs. */
1176 if (global_found != NULL)
1178 nn.name = global_found->filename;
1179 if (gld${EMULATION_NAME}_try_needed (&nn, TRUE))
1183 /* We need to find this file and include the symbol table. We
1184 want to search for the file in the same way that the dynamic
1185 linker will search. That means that we want to use
1186 rpath_link, rpath, then the environment variable
1187 LD_LIBRARY_PATH (native only), then the DT_RPATH/DT_RUNPATH
1188 entries (native only), then the linker script LIB_SEARCH_DIRS.
1189 We do not search using the -L arguments.
1191 We search twice. The first time, we skip objects which may
1192 introduce version mismatches. The second time, we force
1193 their use. See gld${EMULATION_NAME}_vercheck comment. */
1194 for (force = 0; force < 2; force++)
1197 search_dirs_type *search;
1199 if [ "x${NATIVE}" = xyes ] ; then
1201 const char *lib_path;
1204 if [ "x${USE_LIBPATH}" = xyes ] ; then
1206 struct bfd_link_needed_list *rp;
1212 if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
1216 if [ "x${USE_LIBPATH}" = xyes ] ; then
1218 if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
1223 if [ "x${NATIVE}" = xyes ] ; then
1225 if (command_line.rpath_link == NULL
1226 && command_line.rpath == NULL)
1228 lib_path = (const char *) getenv ("LD_RUN_PATH");
1229 if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
1233 lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
1234 if (gld${EMULATION_NAME}_search_needed (lib_path, &n, force))
1238 if [ "x${USE_LIBPATH}" = xyes ] ; then
1241 rp = bfd_elf_get_runpath_list (link_info.output_bfd, &link_info);
1242 for (; !found && rp != NULL; rp = rp->next)
1244 char *tmpname = gld${EMULATION_NAME}_add_sysroot (rp->name);
1245 found = (rp->by == l->by
1246 && gld${EMULATION_NAME}_search_needed (tmpname,
1256 if [ "x${USE_LIBPATH}" = xyes ] ; then
1258 *-*-freebsd* | *-*-dragonfly*)
1260 if (gld${EMULATION_NAME}_check_ld_elf_hints (l, force))
1266 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
1268 if (gld${EMULATION_NAME}_check_ld_so_conf (l, force))
1277 len = strlen (l->name);
1278 for (search = search_head; search != NULL; search = search->next)
1282 if (search->cmdline)
1284 filename = (char *) xmalloc (strlen (search->name) + len + 2);
1285 sprintf (filename, "%s/%s", search->name, l->name);
1287 if (gld${EMULATION_NAME}_try_needed (&nn, force))
1300 einfo ("%P: warning: %s, needed by %B, not found (try using -rpath or -rpath-link)\n",
1304 if (link_info.eh_frame_hdr_type == COMPACT_EH_HDR)
1305 if (bfd_elf_parse_eh_frame_entries (NULL, &link_info) == FALSE)
1306 einfo (_("%P%F: Failed to parse EH frame entries.\n"));
1314 /* Look through an expression for an assignment statement. */
1317 gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
1319 bfd_boolean provide = FALSE;
1321 switch (exp->type.node_class)
1324 case etree_provided:
1328 /* We call record_link_assignment even if the symbol is defined.
1329 This is because if it is defined by a dynamic object, we
1330 actually want to use the value defined by the linker script,
1331 not the value from the dynamic object (because we are setting
1332 symbols like etext). If the symbol is defined by a regular
1333 object, then, as it happens, calling record_link_assignment
1335 if (strcmp (exp->assign.dst, ".") != 0)
1337 if (!bfd_elf_record_link_assignment (link_info.output_bfd,
1339 exp->assign.dst, provide,
1340 exp->assign.hidden))
1341 einfo ("%P%F: failed to record assignment to %s: %E\n",
1344 gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
1348 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
1349 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
1353 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
1354 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
1355 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
1359 gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
1368 /* This is called by the before_allocation routine via
1369 lang_for_each_statement. It locates any assignment statements, and
1370 tells the ELF backend about them, in case they are assignments to
1371 symbols which are referred to by dynamic objects. */
1374 gld${EMULATION_NAME}_find_statement_assignment (lang_statement_union_type *s)
1376 if (s->header.type == lang_assignment_statement_enum)
1377 gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
1382 if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then
1383 if test x"${ELF_INTERPRETER_NAME+set}" = xset; then
1384 ELF_INTERPRETER_SET_DEFAULT="
1385 if (sinterp != NULL)
1387 sinterp->contents = (unsigned char *) ${ELF_INTERPRETER_NAME};
1388 sinterp->size = strlen ((char *) sinterp->contents) + 1;
1393 ELF_INTERPRETER_SET_DEFAULT=
1397 /* used by before_allocation and handle_option. */
1399 gld${EMULATION_NAME}_append_to_separated_string (char **to, char *op_arg)
1402 *to = xstrdup (op_arg);
1405 size_t to_len = strlen (*to);
1406 size_t op_arg_len = strlen (op_arg);
1410 /* First see whether OPTARG is already in the path. */
1413 if (strncmp (op_arg, cp, op_arg_len) == 0
1414 && (cp[op_arg_len] == 0
1415 || cp[op_arg_len] == config.rpath_separator))
1419 /* Not yet found. */
1420 cp = strchr (cp, config.rpath_separator);
1428 buf = xmalloc (to_len + op_arg_len + 2);
1429 sprintf (buf, "%s%c%s", *to,
1430 config.rpath_separator, op_arg);
1437 /* This is called after the sections have been attached to output
1438 sections, but before any sizes or addresses have been set. */
1441 gld${EMULATION_NAME}_before_allocation (void)
1446 struct elf_link_hash_entry *ehdr_start = NULL;
1447 #if defined(__GNUC__) && GCC_VERSION < 4006
1448 /* Work around a GCC uninitialized warning bug fixed in GCC 4.6. */
1449 struct bfd_link_hash_entry ehdr_start_save = ehdr_start_save;
1451 struct bfd_link_hash_entry ehdr_start_save;
1454 if (is_elf_hash_table (link_info.hash))
1456 _bfd_elf_tls_setup (link_info.output_bfd, &link_info);
1458 /* Make __ehdr_start hidden if it has been referenced, to
1459 prevent the symbol from being dynamic. */
1460 if (!bfd_link_relocatable (&link_info))
1462 struct elf_link_hash_entry *h
1463 = elf_link_hash_lookup (elf_hash_table (&link_info), "__ehdr_start",
1464 FALSE, FALSE, TRUE);
1466 /* Only adjust the export class if the symbol was referenced
1467 and not defined, otherwise leave it alone. */
1469 && (h->root.type == bfd_link_hash_new
1470 || h->root.type == bfd_link_hash_undefined
1471 || h->root.type == bfd_link_hash_undefweak
1472 || h->root.type == bfd_link_hash_common))
1474 _bfd_elf_link_hash_hide_symbol (&link_info, h, TRUE);
1475 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
1476 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
1477 /* Don't leave the symbol undefined. Undefined hidden
1478 symbols typically won't have dynamic relocations, but
1479 we most likely will need dynamic relocations for
1480 __ehdr_start if we are building a PIE or shared
1483 ehdr_start_save = h->root;
1484 h->root.type = bfd_link_hash_defined;
1485 h->root.u.def.section = bfd_abs_section_ptr;
1486 h->root.u.def.value = 0;
1490 /* If we are going to make any variable assignments, we need to
1491 let the ELF backend know about them in case the variables are
1492 referred to by dynamic objects. */
1493 lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment);
1496 /* Let the ELF backend work out the sizes of any sections required
1497 by dynamic linking. */
1498 rpath = command_line.rpath;
1500 rpath = (const char *) getenv ("LD_RUN_PATH");
1502 for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
1503 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1505 const char *audit_libs = elf_dt_audit (abfd);
1507 /* If the input bfd contains an audit entry, we need to add it as
1508 a dep audit entry. */
1509 if (audit_libs && *audit_libs != '\0')
1511 char *cp = xstrdup (audit_libs);
1515 char *cp2 = strchr (cp, config.rpath_separator);
1523 if (cp != NULL && *cp != '\0')
1524 gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
1526 cp = more ? ++cp2 : NULL;
1532 if (! (bfd_elf_size_dynamic_sections
1533 (link_info.output_bfd, command_line.soname, rpath,
1534 command_line.filter_shlib, audit, depaudit,
1535 (const char * const *) command_line.auxiliary_filters,
1536 &link_info, &sinterp)))
1537 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
1539 ${ELF_INTERPRETER_SET_DEFAULT}
1540 /* Let the user override the dynamic linker we are using. */
1541 if (command_line.interpreter != NULL
1544 sinterp->contents = (bfd_byte *) command_line.interpreter;
1545 sinterp->size = strlen (command_line.interpreter) + 1;
1548 /* Look for any sections named .gnu.warning. As a GNU extensions,
1549 we treat such sections as containing warning messages. We print
1550 out the warning message, and then zero out the section size so
1551 that it does not get copied into the output file. */
1554 LANG_FOR_EACH_INPUT_STATEMENT (is)
1561 if (is->flags.just_syms)
1564 s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
1569 msg = (char *) xmalloc ((size_t) (sz + 1));
1570 if (! bfd_get_section_contents (is->the_bfd, s, msg,
1572 einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
1575 ret = link_info.callbacks->warning (&link_info, msg,
1576 (const char *) NULL,
1577 is->the_bfd, (asection *) NULL,
1582 /* Clobber the section size, so that we don't waste space
1583 copying the warning into the output file. If we've already
1584 sized the output section, adjust its size. The adjustment
1585 is on rawsize because targets that size sections early will
1586 have called lang_reset_memory_regions after sizing. */
1587 if (s->output_section != NULL
1588 && s->output_section->rawsize >= s->size)
1589 s->output_section->rawsize -= s->size;
1593 /* Also set SEC_EXCLUDE, so that local symbols defined in the
1594 warning section don't get copied to the output. */
1595 s->flags |= SEC_EXCLUDE | SEC_KEEP;
1599 before_allocation_default ();
1601 if (!bfd_elf_size_dynsym_hash_dynstr (link_info.output_bfd, &link_info))
1602 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
1604 if (ehdr_start != NULL)
1606 /* If we twiddled __ehdr_start to defined earlier, put it back
1608 ehdr_start->root.type = ehdr_start_save.type;
1609 ehdr_start->root.u = ehdr_start_save.u;
1616 if test x"$LDEMUL_OPEN_DYNAMIC_ARCHIVE" != xgld"$EMULATION_NAME"_open_dynamic_archive; then
1619 /* Try to open a dynamic archive. This is where we know that ELF
1620 dynamic libraries have an extension of .so (or .sl on oddball systems
1624 gld${EMULATION_NAME}_open_dynamic_archive
1625 (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
1627 const char *filename;
1630 bfd_boolean opened = FALSE;
1632 if (! entry->flags.maybe_archive)
1635 filename = entry->filename;
1636 len = strlen (search->name) + strlen (filename);
1637 if (entry->flags.full_name_provided)
1640 string = (char *) xmalloc (len);
1641 sprintf (string, "%s/%s", search->name, filename);
1647 len += strlen (arch) + sizeof "/lib.so";
1648 #ifdef EXTRA_SHLIB_EXTENSION
1649 xlen = (strlen (EXTRA_SHLIB_EXTENSION) > 3
1650 ? strlen (EXTRA_SHLIB_EXTENSION) - 3
1653 string = (char *) xmalloc (len + xlen);
1654 sprintf (string, "%s/lib%s%s.so", search->name, filename, arch);
1655 #ifdef EXTRA_SHLIB_EXTENSION
1656 /* Try the .so extension first. If that fails build a new filename
1657 using EXTRA_SHLIB_EXTENSION. */
1658 opened = ldfile_try_open_bfd (string, entry);
1660 strcpy (string + len - 4, EXTRA_SHLIB_EXTENSION);
1664 if (!opened && !ldfile_try_open_bfd (string, entry))
1670 entry->filename = string;
1672 /* We have found a dynamic object to include in the link. The ELF
1673 backend linker will create a DT_NEEDED entry in the .dynamic
1674 section naming this file. If this file includes a DT_SONAME
1675 entry, it will be used. Otherwise, the ELF linker will just use
1676 the name of the file. For an archive found by searching, like
1677 this one, the DT_NEEDED entry should consist of just the name of
1678 the file, without the path information used to find it. Note
1679 that we only need to do this if we have a dynamic object; an
1680 archive will never be referenced by a DT_NEEDED entry.
1682 FIXME: This approach--using bfd_elf_set_dt_needed_name--is not
1683 very pretty. I haven't been able to think of anything that is
1685 if (bfd_check_format (entry->the_bfd, bfd_object)
1686 && (entry->the_bfd->flags & DYNAMIC) != 0)
1688 ASSERT (entry->flags.maybe_archive && entry->flags.search_dirs);
1690 /* Rather than duplicating the logic above. Just use the
1691 filename we recorded earlier. */
1693 if (!entry->flags.full_name_provided)
1694 filename = lbasename (entry->filename);
1695 bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
1704 if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
1707 /* A variant of lang_output_section_find used by place_orphan. */
1709 static lang_output_section_statement_type *
1710 output_rel_find (asection *sec, int isdyn)
1712 lang_output_section_statement_type *lookup;
1713 lang_output_section_statement_type *last = NULL;
1714 lang_output_section_statement_type *last_alloc = NULL;
1715 lang_output_section_statement_type *last_ro_alloc = NULL;
1716 lang_output_section_statement_type *last_rel = NULL;
1717 lang_output_section_statement_type *last_rel_alloc = NULL;
1718 int rela = sec->name[4] == 'a';
1720 for (lookup = &lang_output_section_statement.head->output_section_statement;
1722 lookup = lookup->next)
1724 if (lookup->constraint >= 0
1725 && CONST_STRNEQ (lookup->name, ".rel"))
1727 int lookrela = lookup->name[4] == 'a';
1729 /* .rel.dyn must come before all other reloc sections, to suit
1734 /* Don't place after .rel.plt as doing so results in wrong
1736 if (strcmp (".plt", lookup->name + 4 + lookrela) == 0)
1739 if (rela == lookrela || last_rel == NULL)
1741 if ((rela == lookrela || last_rel_alloc == NULL)
1742 && lookup->bfd_section != NULL
1743 && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
1744 last_rel_alloc = lookup;
1748 if (lookup->bfd_section != NULL
1749 && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
1751 last_alloc = lookup;
1752 if ((lookup->bfd_section->flags & SEC_READONLY) != 0)
1753 last_ro_alloc = lookup;
1758 return last_rel_alloc;
1764 return last_ro_alloc;
1772 /* Place an orphan section. We use this to put random SHF_ALLOC
1773 sections in the right segment. */
1775 static lang_output_section_statement_type *
1776 gld${EMULATION_NAME}_place_orphan (asection *s,
1777 const char *secname,
1780 static struct orphan_save hold[] =
1783 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
1786 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1789 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_THREAD_LOCAL,
1792 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
1798 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1801 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1804 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_SMALL_DATA,
1810 enum orphan_save_index
1822 static int orphan_init_done = 0;
1823 struct orphan_save *place;
1824 lang_output_section_statement_type *after;
1825 lang_output_section_statement_type *os;
1826 lang_output_section_statement_type *match_by_name = NULL;
1828 int iself = s->owner->xvec->flavour == bfd_target_elf_flavour;
1829 unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL;
1831 if (!bfd_link_relocatable (&link_info)
1832 && link_info.combreloc
1833 && (s->flags & SEC_ALLOC))
1839 secname = ".rela.dyn";
1843 secname = ".rel.dyn";
1849 else if (CONST_STRNEQ (secname, ".rel"))
1851 secname = secname[4] == 'a' ? ".rela.dyn" : ".rel.dyn";
1856 /* Look through the script to see where to place this section. */
1857 if (constraint == 0)
1858 for (os = lang_output_section_find (secname);
1860 os = next_matching_output_section_statement (os, 0))
1862 /* If we don't match an existing output section, tell
1863 lang_insert_orphan to create a new output section. */
1864 constraint = SPECIAL;
1866 if (os->bfd_section != NULL
1867 && (os->bfd_section->flags == 0
1868 || (_bfd_elf_match_sections_by_type (link_info.output_bfd,
1871 && ((s->flags ^ os->bfd_section->flags)
1872 & (SEC_LOAD | SEC_ALLOC)) == 0)))
1874 /* We already have an output section statement with this
1875 name, and its bfd section has compatible flags.
1876 If the section already exists but does not have any flags
1877 set, then it has been created by the linker, probably as a
1878 result of a --section-start command line switch. */
1879 lang_add_section (&os->children, s, NULL, os);
1883 /* Save unused output sections in case we can match them
1884 against orphans later. */
1885 if (os->bfd_section == NULL)
1889 /* If we didn't match an active output section, see if we matched an
1890 unused one and use that. */
1893 lang_add_section (&match_by_name->children, s, NULL, match_by_name);
1894 return match_by_name;
1897 if (!orphan_init_done)
1899 struct orphan_save *ho;
1901 for (ho = hold; ho < hold + sizeof (hold) / sizeof (hold[0]); ++ho)
1902 if (ho->name != NULL)
1904 ho->os = lang_output_section_find (ho->name);
1905 if (ho->os != NULL && ho->os->flags == 0)
1906 ho->os->flags = ho->flags;
1908 orphan_init_done = 1;
1911 /* If this is a final link, then always put .gnu.warning.SYMBOL
1912 sections into the .text section to get them out of the way. */
1913 if (bfd_link_executable (&link_info)
1914 && CONST_STRNEQ (s->name, ".gnu.warning.")
1915 && hold[orphan_text].os != NULL)
1917 os = hold[orphan_text].os;
1918 lang_add_section (&os->children, s, NULL, os);
1922 /* Decide which segment the section should go in based on the
1923 section name and section flags. We put loadable .note sections
1924 right after the .interp section, so that the PT_NOTE segment is
1925 stored right after the program headers where the OS can read it
1926 in the first page. */
1929 if ((s->flags & (SEC_ALLOC | SEC_DEBUGGING)) == 0)
1930 place = &hold[orphan_nonalloc];
1931 else if ((s->flags & SEC_ALLOC) == 0)
1933 else if ((s->flags & SEC_LOAD) != 0
1934 && ((iself && sh_type == SHT_NOTE)
1935 || (!iself && CONST_STRNEQ (secname, ".note"))))
1936 place = &hold[orphan_interp];
1937 else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) == 0)
1938 place = &hold[orphan_bss];
1939 else if ((s->flags & SEC_SMALL_DATA) != 0)
1940 place = &hold[orphan_sdata];
1941 else if ((s->flags & SEC_THREAD_LOCAL) != 0)
1942 place = &hold[orphan_tdata];
1943 else if ((s->flags & SEC_READONLY) == 0)
1944 place = &hold[orphan_data];
1945 else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL))
1946 || (!iself && CONST_STRNEQ (secname, ".rel")))
1947 && (s->flags & SEC_LOAD) != 0)
1948 place = &hold[orphan_rel];
1949 else if ((s->flags & SEC_CODE) == 0)
1950 place = &hold[orphan_rodata];
1952 place = &hold[orphan_text];
1957 if (place->os == NULL)
1959 if (place->name != NULL)
1960 place->os = lang_output_section_find (place->name);
1962 place->os = output_rel_find (s, isdyn);
1966 after = lang_output_section_find_by_flags
1967 (s, &place->os, _bfd_elf_match_sections_by_type);
1969 /* *ABS* is always the first output section statement. */
1970 after = &lang_output_section_statement.head->output_section_statement;
1973 return lang_insert_orphan (s, secname, constraint, after, place, NULL, NULL);
1978 if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then
1982 gld${EMULATION_NAME}_after_allocation (void)
1984 int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
1986 if (need_layout < 0)
1987 einfo ("%X%P: .eh_frame/.stab edit: %E\n");
1989 gld${EMULATION_NAME}_map_segments (need_layout);
1994 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
1998 gld${EMULATION_NAME}_get_script (int *isfile)
2001 if test x"$COMPILE_IN" = xyes
2003 # Scripts compiled in.
2005 # sed commands to quote an ld script as a C string.
2006 sc="-f stringify.sed"
2012 if (bfd_link_relocatable (&link_info) && config.build_constructors)
2015 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
2016 echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
2017 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
2018 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
2019 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
2020 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
2021 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
2022 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
2024 if test -n "$GENERATE_PIE_SCRIPT" ; then
2025 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2026 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
2027 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
2028 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
2029 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
2030 sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
2031 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
2032 echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
2033 sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
2035 echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
2036 sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
2038 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
2039 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2040 echo ' ; else if (bfd_link_dll (&link_info) && link_info.combreloc' >> e${EMULATION_NAME}.c
2041 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
2042 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
2043 sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
2044 echo ' ; else if (bfd_link_dll (&link_info) && link_info.combreloc) return' >> e${EMULATION_NAME}.c
2045 sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
2047 echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
2048 sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
2050 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2051 echo ' ; else if (link_info.combreloc && link_info.relro' >> e${EMULATION_NAME}.c
2052 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
2053 sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
2054 echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
2055 sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
2057 echo ' ; else return' >> e${EMULATION_NAME}.c
2058 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
2059 echo '; }' >> e${EMULATION_NAME}.c
2062 # Scripts read from the filesystem.
2068 if (bfd_link_relocatable (&link_info) && config.build_constructors)
2069 return "ldscripts/${EMULATION_NAME}.xu";
2070 else if (bfd_link_relocatable (&link_info))
2071 return "ldscripts/${EMULATION_NAME}.xr";
2072 else if (!config.text_read_only)
2073 return "ldscripts/${EMULATION_NAME}.xbn";
2075 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then :
2078 else if (!config.magic_demand_paged)
2079 return "ldscripts/${EMULATION_NAME}.xn";
2082 if test -n "$GENERATE_PIE_SCRIPT" ; then
2083 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2085 else if (bfd_link_pie (&link_info)
2086 && link_info.combreloc
2088 && (link_info.flags & DF_BIND_NOW))
2089 return "ldscripts/${EMULATION_NAME}.xdw";
2090 else if (bfd_link_pie (&link_info)
2091 && link_info.combreloc)
2092 return "ldscripts/${EMULATION_NAME}.xdc";
2096 else if (bfd_link_pie (&link_info))
2097 return "ldscripts/${EMULATION_NAME}.xd";
2100 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
2101 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2103 else if (bfd_link_dll (&link_info) && link_info.combreloc
2104 && link_info.relro && (link_info.flags & DF_BIND_NOW))
2105 return "ldscripts/${EMULATION_NAME}.xsw";
2106 else if (bfd_link_dll (&link_info) && link_info.combreloc)
2107 return "ldscripts/${EMULATION_NAME}.xsc";
2111 else if (bfd_link_dll (&link_info))
2112 return "ldscripts/${EMULATION_NAME}.xs";
2115 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2117 else if (link_info.combreloc && link_info.relro
2118 && (link_info.flags & DF_BIND_NOW))
2119 return "ldscripts/${EMULATION_NAME}.xw";
2120 else if (link_info.combreloc)
2121 return "ldscripts/${EMULATION_NAME}.xc";
2126 return "ldscripts/${EMULATION_NAME}.x";
2133 if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
2135 $PARSE_AND_LIST_PROLOGUE
2141 #define OPTION_DISABLE_NEW_DTAGS (400)
2142 #define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
2143 #define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
2144 #define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
2145 #define OPTION_EXCLUDE_LIBS (OPTION_EH_FRAME_HDR + 1)
2146 #define OPTION_HASH_STYLE (OPTION_EXCLUDE_LIBS + 1)
2147 #define OPTION_BUILD_ID (OPTION_HASH_STYLE + 1)
2148 #define OPTION_AUDIT (OPTION_BUILD_ID + 1)
2149 #define OPTION_COMPRESS_DEBUG (OPTION_AUDIT + 1)
2152 gld${EMULATION_NAME}_add_options
2153 (int ns, char **shortopts, int nl, struct option **longopts,
2154 int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
2157 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2159 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:";
2163 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:";
2167 static const struct option xtra_long[] = {
2169 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2171 {"audit", required_argument, NULL, OPTION_AUDIT},
2172 {"Bgroup", no_argument, NULL, OPTION_GROUP},
2176 {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
2177 {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
2179 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2181 {"depaudit", required_argument, NULL, 'P'},
2182 {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
2183 {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
2184 {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
2185 {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
2186 {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
2189 if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
2191 $PARSE_AND_LIST_LONGOPTS
2195 {NULL, no_argument, NULL, 0}
2198 *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
2199 memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
2200 *longopts = (struct option *)
2201 xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
2202 memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
2205 #define DEFAULT_BUILD_ID_STYLE "sha1"
2208 gld${EMULATION_NAME}_handle_option (int optc)
2215 case OPTION_BUILD_ID:
2216 if (emit_note_gnu_build_id != NULL)
2218 free ((char *) emit_note_gnu_build_id);
2219 emit_note_gnu_build_id = NULL;
2222 optarg = DEFAULT_BUILD_ID_STYLE;
2223 if (strcmp (optarg, "none"))
2224 emit_note_gnu_build_id = xstrdup (optarg);
2227 case OPTION_COMPRESS_DEBUG:
2228 if (strcasecmp (optarg, "none") == 0)
2229 link_info.compress_debug = COMPRESS_DEBUG_NONE;
2230 else if (strcasecmp (optarg, "zlib") == 0)
2231 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
2232 else if (strcasecmp (optarg, "zlib-gnu") == 0)
2233 link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
2234 else if (strcasecmp (optarg, "zlib-gabi") == 0)
2235 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
2237 einfo (_("%P%F: invalid --compress-debug-sections option: \`%s'\n"),
2242 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2245 gld${EMULATION_NAME}_append_to_separated_string (&audit, optarg);
2249 gld${EMULATION_NAME}_append_to_separated_string (&depaudit, optarg);
2252 case OPTION_DISABLE_NEW_DTAGS:
2253 link_info.new_dtags = FALSE;
2256 case OPTION_ENABLE_NEW_DTAGS:
2257 link_info.new_dtags = TRUE;
2260 case OPTION_EH_FRAME_HDR:
2261 link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
2265 link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
2266 /* Groups must be self-contained. */
2267 link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
2268 link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
2271 case OPTION_EXCLUDE_LIBS:
2272 add_excluded_libs (optarg);
2275 case OPTION_HASH_STYLE:
2276 link_info.emit_hash = FALSE;
2277 link_info.emit_gnu_hash = FALSE;
2278 if (strcmp (optarg, "sysv") == 0)
2279 link_info.emit_hash = TRUE;
2280 else if (strcmp (optarg, "gnu") == 0)
2281 link_info.emit_gnu_hash = TRUE;
2282 else if (strcmp (optarg, "both") == 0)
2284 link_info.emit_hash = TRUE;
2285 link_info.emit_gnu_hash = TRUE;
2288 einfo (_("%P%F: invalid hash style \`%s'\n"), optarg);
2293 if test x"$GENERATE_PIE_SCRIPT" = xyes; then
2296 link_info.flags_1 |= (bfd_vma) DF_1_PIE;
2302 if (strcmp (optarg, "defs") == 0)
2303 link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
2304 else if (strcmp (optarg, "muldefs") == 0)
2305 link_info.allow_multiple_definition = TRUE;
2306 else if (CONST_STRNEQ (optarg, "max-page-size="))
2310 config.maxpagesize = strtoul (optarg + 14, &end, 0);
2311 if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
2312 einfo (_("%P%F: invalid maxium page size \`%s'\n"),
2315 else if (CONST_STRNEQ (optarg, "common-page-size="))
2318 config.commonpagesize = strtoul (optarg + 17, &end, 0);
2320 || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
2321 einfo (_("%P%F: invalid common page size \`%s'\n"),
2324 else if (CONST_STRNEQ (optarg, "stack-size="))
2327 link_info.stacksize = strtoul (optarg + 11, &end, 0);
2328 if (*end || link_info.stacksize < 0)
2329 einfo (_("%P%F: invalid stack size \`%s'\n"), optarg + 11);
2330 if (!link_info.stacksize)
2331 /* Use -1 for explicit no-stack, because zero means
2333 link_info.stacksize = -1;
2335 else if (strcmp (optarg, "execstack") == 0)
2337 link_info.execstack = TRUE;
2338 link_info.noexecstack = FALSE;
2340 else if (strcmp (optarg, "noexecstack") == 0)
2342 link_info.noexecstack = TRUE;
2343 link_info.execstack = FALSE;
2347 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2349 else if (strcmp (optarg, "global") == 0)
2350 link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL;
2351 else if (strcmp (optarg, "initfirst") == 0)
2352 link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
2353 else if (strcmp (optarg, "interpose") == 0)
2354 link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
2355 else if (strcmp (optarg, "loadfltr") == 0)
2356 link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
2357 else if (strcmp (optarg, "nodefaultlib") == 0)
2358 link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
2359 else if (strcmp (optarg, "nodelete") == 0)
2360 link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
2361 else if (strcmp (optarg, "nodlopen") == 0)
2362 link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
2363 else if (strcmp (optarg, "nodump") == 0)
2364 link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
2365 else if (strcmp (optarg, "now") == 0)
2367 link_info.flags |= (bfd_vma) DF_BIND_NOW;
2368 link_info.flags_1 |= (bfd_vma) DF_1_NOW;
2370 else if (strcmp (optarg, "lazy") == 0)
2372 link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
2373 link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
2375 else if (strcmp (optarg, "origin") == 0)
2377 link_info.flags |= (bfd_vma) DF_ORIGIN;
2378 link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
2380 else if (strcmp (optarg, "combreloc") == 0)
2381 link_info.combreloc = TRUE;
2382 else if (strcmp (optarg, "nocombreloc") == 0)
2383 link_info.combreloc = FALSE;
2384 else if (strcmp (optarg, "nocopyreloc") == 0)
2385 link_info.nocopyreloc = TRUE;
2386 else if (strcmp (optarg, "relro") == 0)
2387 link_info.relro = TRUE;
2388 else if (strcmp (optarg, "norelro") == 0)
2389 link_info.relro = FALSE;
2390 else if (strcmp (optarg, "text") == 0)
2391 link_info.error_textrel = TRUE;
2392 else if (strcmp (optarg, "notext") == 0)
2393 link_info.error_textrel = FALSE;
2394 else if (strcmp (optarg, "textoff") == 0)
2395 link_info.error_textrel = FALSE;
2399 if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then
2401 $PARSE_AND_LIST_ARGS_CASE_Z
2407 einfo (_("%P: warning: -z %s ignored.\n"), optarg);
2411 if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
2413 $PARSE_AND_LIST_ARGS_CASES
2425 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
2426 gld_list_options="gld${EMULATION_NAME}_list_options"
2427 if test -n "$PARSE_AND_LIST_OPTIONS"; then
2431 gld${EMULATION_NAME}_list_options (FILE * file)
2435 if test -n "$PARSE_AND_LIST_OPTIONS" ; then
2437 $PARSE_AND_LIST_OPTIONS
2445 gld_list_options="NULL"
2448 if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
2450 $PARSE_AND_LIST_EPILOGUE
2457 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
2459 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
2460 ${LDEMUL_SYSLIB-syslib_default},
2461 ${LDEMUL_HLL-hll_default},
2462 ${LDEMUL_AFTER_PARSE-after_parse_default},
2463 ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
2464 ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
2465 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
2466 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
2467 ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
2468 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
2469 "${EMULATION_NAME}",
2471 ${LDEMUL_FINISH-finish_default},
2472 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
2473 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
2474 ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
2475 ${LDEMUL_SET_SYMBOLS-NULL},
2476 ${LDEMUL_PARSE_ARGS-NULL},
2477 gld${EMULATION_NAME}_add_options,
2478 gld${EMULATION_NAME}_handle_option,
2479 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
2480 ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
2481 ${LDEMUL_RECOGNIZED_FILE-gld${EMULATION_NAME}_load_symbols},
2482 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
2483 ${LDEMUL_NEW_VERS_PATTERN-NULL},
2484 ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}