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-2014 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 "filenames.h"
54 #include "ldbuildid.h"
56 #include "elf/common.h"
58 #include "filenames.h"
60 /* Declare functions used by various EXTRA_EM_FILEs. */
61 static void gld${EMULATION_NAME}_before_parse (void);
62 static void gld${EMULATION_NAME}_after_open (void);
63 static void gld${EMULATION_NAME}_before_allocation (void);
64 static void gld${EMULATION_NAME}_after_allocation (void);
65 static lang_output_section_statement_type *gld${EMULATION_NAME}_place_orphan
66 (asection *, const char *, int);
69 if [ "x${USE_LIBPATH}" = xyes ] ; then
71 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
81 # Import any needed special functions and/or overrides.
83 source_em ${srcdir}/emultempl/elf-generic.em
84 if test -n "$EXTRA_EM_FILE" ; then
85 source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
88 # Functions in this file can be overridden by setting the LDEMUL_* shell
89 # variables. If the name of the overriding function is the same as is
90 # defined in this file, then don't output this file's version.
91 # If a different overriding name is given then output the standard function
92 # as presumably it is called from the overriding function.
94 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
98 gld${EMULATION_NAME}_before_parse (void)
100 ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
101 input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
102 config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
103 config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
109 if test x"$LDEMUL_RECOGNIZED_FILE" != xgld"${EMULATION_NAME}"_load_symbols; then
111 /* Handle the generation of DT_NEEDED tags. */
114 gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *entry)
118 /* Tell the ELF linker that we don't want the output file to have a
119 DT_NEEDED entry for this file, unless it is used to resolve
120 references in a regular object. */
121 if (entry->flags.add_DT_NEEDED_for_regular)
122 link_class = DYN_AS_NEEDED;
124 /* Tell the ELF linker that we don't want the output file to have a
125 DT_NEEDED entry for any dynamic library in DT_NEEDED tags from
127 if (!entry->flags.add_DT_NEEDED_for_dynamic)
128 link_class |= DYN_NO_ADD_NEEDED;
130 if (entry->flags.just_syms
131 && (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0)
132 einfo (_("%P%F: --just-symbols may not be used on DSO: %B\n"),
136 || (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) == 0)
139 bfd_elf_set_dyn_lib_class (entry->the_bfd,
140 (enum dynamic_lib_link_class) link_class);
142 /* Continue on with normal load_symbols processing. */
150 /* These variables are required to pass information back and forth
151 between after_open and check_needed and stat_needed and vercheck. */
153 static struct bfd_link_needed_list *global_needed;
154 static struct stat global_stat;
155 static lang_input_statement_type *global_found;
156 static struct bfd_link_needed_list *global_vercheck_needed;
157 static bfd_boolean global_vercheck_failed;
159 /* These variables are used to implement target options */
161 static char *audit; /* colon (typically) separated list of libs */
162 static char *depaudit; /* colon (typically) separated list of libs */
164 /* Style of .note.gnu.build-id section. */
165 static const char *emit_note_gnu_build_id;
167 /* On Linux, it's possible to have different versions of the same
168 shared library linked against different versions of libc. The
169 dynamic linker somehow tags which libc version to use in
170 /etc/ld.so.cache, and, based on the libc that it sees in the
171 executable, chooses which version of the shared library to use.
173 We try to do a similar check here by checking whether this shared
174 library needs any other shared libraries which may conflict with
175 libraries we have already included in the link. If it does, we
176 skip it, and try to find another shared library farther on down the
179 This is called via lang_for_each_input_file.
180 GLOBAL_VERCHECK_NEEDED is the list of objects needed by the object
181 which we are checking. This sets GLOBAL_VERCHECK_FAILED if we find
182 a conflicting version. */
185 gld${EMULATION_NAME}_vercheck (lang_input_statement_type *s)
188 struct bfd_link_needed_list *l;
190 if (global_vercheck_failed)
192 if (s->the_bfd == NULL
193 || (bfd_get_file_flags (s->the_bfd) & DYNAMIC) == 0)
196 soname = bfd_elf_get_dt_soname (s->the_bfd);
198 soname = lbasename (bfd_get_filename (s->the_bfd));
200 for (l = global_vercheck_needed; l != NULL; l = l->next)
204 if (filename_cmp (soname, l->name) == 0)
206 /* Probably can't happen, but it's an easy check. */
210 if (strchr (l->name, '/') != NULL)
213 suffix = strstr (l->name, ".so.");
217 suffix += sizeof ".so." - 1;
219 if (filename_ncmp (soname, l->name, suffix - l->name) == 0)
221 /* Here we know that S is a dynamic object FOO.SO.VER1, and
222 the object we are considering needs a dynamic object
223 FOO.SO.VER2, and VER1 and VER2 are different. This
224 appears to be a version mismatch, so we tell the caller
225 to try a different version of this library. */
226 global_vercheck_failed = TRUE;
233 /* See if an input file matches a DT_NEEDED entry by running stat on
237 gld${EMULATION_NAME}_stat_needed (lang_input_statement_type *s)
243 if (global_found != NULL)
245 if (s->the_bfd == NULL)
248 /* If this input file was an as-needed entry, and wasn't found to be
249 needed at the stage it was linked, then don't say we have loaded it. */
250 if ((bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
253 if (bfd_stat (s->the_bfd, &st) != 0)
255 einfo ("%P:%B: bfd_stat failed: %E\n", s->the_bfd);
259 /* Some operating systems, e.g. Windows, do not provide a meaningful
260 st_ino; they always set it to zero. (Windows does provide a
261 meaningful st_dev.) Do not indicate a duplicate library in that
262 case. While there is no guarantee that a system that provides
263 meaningful inode numbers will never set st_ino to zero, this is
264 merely an optimization, so we do not need to worry about false
266 if (st.st_dev == global_stat.st_dev
267 && st.st_ino == global_stat.st_ino
274 /* We issue a warning if it looks like we are including two
275 different versions of the same shared library. For example,
276 there may be a problem if -lc picks up libc.so.6 but some other
277 shared library has a DT_NEEDED entry of libc.so.5. This is a
278 heuristic test, and it will only work if the name looks like
279 NAME.so.VERSION. FIXME: Depending on file names is error-prone.
280 If we really want to issue warnings about mixing version numbers
281 of shared libraries, we need to find a better way. */
283 if (strchr (global_needed->name, '/') != NULL)
285 suffix = strstr (global_needed->name, ".so.");
288 suffix += sizeof ".so." - 1;
290 soname = bfd_elf_get_dt_soname (s->the_bfd);
292 soname = lbasename (s->filename);
294 if (filename_ncmp (soname, global_needed->name, suffix - global_needed->name) == 0)
295 einfo ("%P: warning: %s, needed by %B, may conflict with %s\n",
296 global_needed->name, global_needed->by, soname);
305 /* This function is called for each possible name for a dynamic object
306 named by a DT_NEEDED entry. The FORCE parameter indicates whether
307 to skip the check for a conflicting version. */
310 gld${EMULATION_NAME}_try_needed (struct dt_needed *needed,
314 const char *name = needed->name;
318 abfd = bfd_openr (name, bfd_get_target (link_info.output_bfd));
322 /* Linker needs to decompress sections. */
323 abfd->flags |= BFD_DECOMPRESS;
325 if (! bfd_check_format (abfd, bfd_object))
330 if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
336 /* For DT_NEEDED, they have to match. */
337 if (abfd->xvec != link_info.output_bfd->xvec)
343 /* Check whether this object would include any conflicting library
344 versions. If FORCE is set, then we skip this check; we use this
345 the second time around, if we couldn't find any compatible
346 instance of the shared library. */
350 struct bfd_link_needed_list *needs;
352 if (! bfd_elf_get_bfd_needed_list (abfd, &needs))
353 einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd);
357 global_vercheck_needed = needs;
358 global_vercheck_failed = FALSE;
359 lang_for_each_input_file (gld${EMULATION_NAME}_vercheck);
360 if (global_vercheck_failed)
363 /* Return FALSE to force the caller to move on to try
364 another file on the search path. */
368 /* But wait! It gets much worse. On Linux, if a shared
369 library does not use libc at all, we are supposed to skip
370 it the first time around in case we encounter a shared
371 library later on with the same name which does use the
372 version of libc that we want. This is much too horrible
373 to use on any system other than Linux. */
377 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
380 struct bfd_link_needed_list *l;
382 for (l = needs; l != NULL; l = l->next)
383 if (CONST_STRNEQ (l->name, "libc.so"))
399 /* We've found a dynamic object matching the DT_NEEDED entry. */
401 /* We have already checked that there is no other input file of the
402 same name. We must now check again that we are not including the
403 same file twice. We need to do this because on many systems
404 libc.so is a symlink to, e.g., libc.so.1. The SONAME entry will
405 reference libc.so.1. If we have already included libc.so, we
406 don't want to include libc.so.1 if they are the same file, and we
407 can only check that using stat. */
409 if (bfd_stat (abfd, &global_stat) != 0)
410 einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd);
412 /* First strip off everything before the last '/'. */
413 soname = lbasename (abfd->filename);
416 info_msg (_("found %s at %s\n"), soname, name);
419 lang_for_each_input_file (gld${EMULATION_NAME}_stat_needed);
420 if (global_found != NULL)
422 /* Return TRUE to indicate that we found the file, even though
423 we aren't going to do anything with it. */
427 /* Specify the soname to use. */
428 bfd_elf_set_dt_needed_name (abfd, soname);
430 /* Tell the ELF linker that we don't want the output file to have a
431 DT_NEEDED entry for this file, unless it is used to resolve
432 references in a regular object. */
433 link_class = DYN_DT_NEEDED;
435 /* Tell the ELF linker that we don't want the output file to have a
436 DT_NEEDED entry for this file at all if the entry is from a file
437 with DYN_NO_ADD_NEEDED. */
438 if (needed->by != NULL
439 && (bfd_elf_get_dyn_lib_class (needed->by) & DYN_NO_ADD_NEEDED) != 0)
440 link_class |= DYN_NO_NEEDED | DYN_NO_ADD_NEEDED;
442 bfd_elf_set_dyn_lib_class (abfd, (enum dynamic_lib_link_class) link_class);
444 /* Add this file into the symbol table. */
445 if (! bfd_link_add_symbols (abfd, &link_info))
446 einfo ("%F%B: error adding symbols: %E\n", abfd);
452 /* Search for a needed file in a path. */
455 gld${EMULATION_NAME}_search_needed (const char *path,
456 struct dt_needed *n, int force)
459 const char *name = n->name;
461 struct dt_needed needed;
464 return gld${EMULATION_NAME}_try_needed (n, force);
466 if (path == NULL || *path == '\0')
470 needed.name = n->name;
475 char *filename, *sset;
477 s = strchr (path, config.rpath_separator);
479 s = path + strlen (path);
481 #if HAVE_DOS_BASED_FILE_SYSTEM
482 /* Assume a match on the second char is part of drive specifier. */
483 else if (config.rpath_separator == ':'
487 s = strchr (s + 1, config.rpath_separator);
489 s = path + strlen (path);
492 filename = (char *) xmalloc (s - path + len + 2);
497 memcpy (filename, path, s - path);
498 filename[s - path] = '/';
499 sset = filename + (s - path) + 1;
503 needed.name = filename;
504 if (gld${EMULATION_NAME}_try_needed (&needed, force))
518 if [ "x${USE_LIBPATH}" = xyes ] ; then
521 /* Add the sysroot to every entry in a path separated by
522 config.rpath_separator. */
525 gld${EMULATION_NAME}_add_sysroot (const char *path)
534 if (path[i++] == config.rpath_separator)
540 len = len + (colons + 1) * strlen (ld_sysroot);
541 ret = xmalloc (len + 1);
542 strcpy (ret, ld_sysroot);
543 p = ret + strlen (ret);
546 if (path[i] == config.rpath_separator)
549 strcpy (p, ld_sysroot);
561 *-*-freebsd* | *-*-dragonfly*)
563 /* Read the system search path the FreeBSD way rather than the Linux way. */
564 #ifdef HAVE_ELF_HINTS_H
565 #include <elf-hints.h>
567 #include "elf-hints-local.h"
571 gld${EMULATION_NAME}_check_ld_elf_hints (const struct bfd_link_needed_list *l,
574 static bfd_boolean initialized;
575 static char *ld_elf_hints;
576 struct dt_needed needed;
583 tmppath = concat (ld_sysroot, _PATH_ELF_HINTS, (const char *) NULL);
584 f = fopen (tmppath, FOPEN_RB);
588 struct elfhints_hdr hdr;
590 if (fread (&hdr, 1, sizeof (hdr), f) == sizeof (hdr)
591 && hdr.magic == ELFHINTS_MAGIC
594 if (fseek (f, hdr.strtab + hdr.dirlist, SEEK_SET) != -1)
598 b = xmalloc (hdr.dirlistlen + 1);
599 if (fread (b, 1, hdr.dirlistlen + 1, f) ==
601 ld_elf_hints = gld${EMULATION_NAME}_add_sysroot (b);
612 if (ld_elf_hints == NULL)
616 needed.name = l->name;
617 return gld${EMULATION_NAME}_search_needed (ld_elf_hints, &needed, force);
623 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
625 /* For a native linker, check the file /etc/ld.so.conf for directories
626 in which we may find shared libraries. /etc/ld.so.conf is really
627 only meaningful on Linux. */
629 struct gld${EMULATION_NAME}_ld_so_conf
636 gld${EMULATION_NAME}_parse_ld_so_conf
637 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename);
640 gld${EMULATION_NAME}_parse_ld_so_conf_include
641 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename,
649 if (pattern[0] != '/')
651 char *p = strrchr (filename, '/');
652 size_t patlen = strlen (pattern) + 1;
654 newp = xmalloc (p - filename + 1 + patlen);
655 memcpy (newp, filename, p - filename + 1);
656 memcpy (newp + (p - filename + 1), pattern, patlen);
661 if (glob (pattern, 0, NULL, &gl) == 0)
665 for (i = 0; i < gl.gl_pathc; ++i)
666 gld${EMULATION_NAME}_parse_ld_so_conf (info, gl.gl_pathv[i]);
670 /* If we do not have glob, treat the pattern as a literal filename. */
671 gld${EMULATION_NAME}_parse_ld_so_conf (info, pattern);
679 gld${EMULATION_NAME}_parse_ld_so_conf
680 (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename)
682 FILE *f = fopen (filename, FOPEN_RT);
690 line = xmalloc (linelen);
695 /* Normally this would use getline(3), but we need to be portable. */
696 while ((q = fgets (p, linelen - (p - line), f)) != NULL
697 && strlen (q) == linelen - (p - line) - 1
698 && line[linelen - 2] != '\n')
700 line = xrealloc (line, 2 * linelen);
701 p = line + linelen - 1;
705 if (q == NULL && p == line)
708 p = strchr (line, '\n');
712 /* Because the file format does not know any form of quoting we
713 can search forward for the next '#' character and if found
714 make it terminating the line. */
715 p = strchr (line, '#');
719 /* Remove leading whitespace. NUL is no whitespace character. */
721 while (*p == ' ' || *p == '\f' || *p == '\r' || *p == '\t' || *p == '\v')
724 /* If the line is blank it is ignored. */
728 if (CONST_STRNEQ (p, "include") && (p[7] == ' ' || p[7] == '\t'))
734 while (*p == ' ' || *p == '\t')
742 while (*p != ' ' && *p != '\t' && *p)
748 gld${EMULATION_NAME}_parse_ld_so_conf_include (info, filename,
756 while (*p && *p != '=' && *p != ' ' && *p != '\t' && *p != '\f'
757 && *p != '\r' && *p != '\v')
760 while (p != dir && p[-1] == '/')
762 if (info->path == NULL)
764 info->alloc = p - dir + 1 + 256;
765 info->path = xmalloc (info->alloc);
770 if (info->len + 1 + (p - dir) >= info->alloc)
772 info->alloc += p - dir + 256;
773 info->path = xrealloc (info->path, info->alloc);
775 info->path[info->len++] = config.rpath_separator;
777 memcpy (info->path + info->len, dir, p - dir);
778 info->len += p - dir;
779 info->path[info->len] = '\0';
789 gld${EMULATION_NAME}_check_ld_so_conf (const struct bfd_link_needed_list *l,
792 static bfd_boolean initialized;
793 static char *ld_so_conf;
794 struct dt_needed needed;
799 struct gld${EMULATION_NAME}_ld_so_conf info;
802 info.len = info.alloc = 0;
803 tmppath = concat (ld_sysroot, "${prefix}/etc/ld.so.conf",
804 (const char *) NULL);
805 if (!gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath))
808 tmppath = concat (ld_sysroot, "/etc/ld.so.conf",
809 (const char *) NULL);
810 gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath);
816 char *d = gld${EMULATION_NAME}_add_sysroot (info.path);
823 if (ld_so_conf == NULL)
828 needed.name = l->name;
829 return gld${EMULATION_NAME}_search_needed (ld_so_conf, &needed, force);
839 /* See if an input file matches a DT_NEEDED entry by name. */
842 gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
846 /* Stop looking if we've found a loaded lib. */
847 if (global_found != NULL
848 && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
849 & DYN_AS_NEEDED) == 0)
852 if (s->filename == NULL || s->the_bfd == NULL)
855 /* Don't look for a second non-loaded as-needed lib. */
856 if (global_found != NULL
857 && (bfd_elf_get_dyn_lib_class (s->the_bfd) & DYN_AS_NEEDED) != 0)
860 if (filename_cmp (s->filename, global_needed->name) == 0)
866 if (s->flags.search_dirs)
868 const char *f = strrchr (s->filename, '/');
870 && filename_cmp (f + 1, global_needed->name) == 0)
877 soname = bfd_elf_get_dt_soname (s->the_bfd);
879 && filename_cmp (soname, global_needed->name) == 0)
888 if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
892 id_note_section_size (bfd *abfd ATTRIBUTE_UNUSED)
894 const char *style = emit_note_gnu_build_id;
896 bfd_size_type build_id_size;
898 size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
899 size = (size + 3) & -(bfd_size_type) 4;
901 build_id_size = compute_build_id_size (style);
903 size += build_id_size;
911 write_build_id (bfd *abfd)
913 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
914 struct elf_obj_tdata *t = elf_tdata (abfd);
917 Elf_Internal_Shdr *i_shdr;
918 unsigned char *contents, *id_bits;
921 Elf_External_Note *e_note;
923 style = t->o->build_id.style;
924 asec = t->o->build_id.sec;
925 if (bfd_is_abs_section (asec->output_section))
927 einfo (_("%P: warning: .note.gnu.build-id section discarded,"
928 " --build-id ignored.\n"));
931 i_shdr = &elf_section_data (asec->output_section)->this_hdr;
933 if (i_shdr->contents == NULL)
935 if (asec->contents == NULL)
936 asec->contents = (unsigned char *) xmalloc (asec->size);
937 contents = asec->contents;
940 contents = i_shdr->contents + asec->output_offset;
942 e_note = (Elf_External_Note *) contents;
943 size = offsetof (Elf_External_Note, name[sizeof "GNU"]);
944 size = (size + 3) & -(bfd_size_type) 4;
945 id_bits = contents + size;
946 size = asec->size - size;
948 bfd_h_put_32 (abfd, sizeof "GNU", &e_note->namesz);
949 bfd_h_put_32 (abfd, size, &e_note->descsz);
950 bfd_h_put_32 (abfd, NT_GNU_BUILD_ID, &e_note->type);
951 memcpy (e_note->name, "GNU", sizeof "GNU");
953 generate_build_id (abfd, style, bed->s->checksum_contents, id_bits, size);
955 position = i_shdr->sh_offset + asec->output_offset;
957 return (bfd_seek (abfd, position, SEEK_SET) == 0
958 && bfd_bwrite (contents, size, abfd) == size);
961 /* Make .note.gnu.build-id section, and set up elf_tdata->build_id. */
964 setup_build_id (bfd *ibfd)
970 size = id_note_section_size (ibfd);
973 einfo ("%P: warning: unrecognized --build-id style ignored.\n");
977 flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
978 | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
979 s = bfd_make_section_with_flags (ibfd, ".note.gnu.build-id", flags);
980 if (s != NULL && bfd_set_section_alignment (ibfd, s, 2))
982 struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
983 t->o->build_id.after_write_object_contents = &write_build_id;
984 t->o->build_id.style = emit_note_gnu_build_id;
985 t->o->build_id.sec = s;
986 elf_section_type (s) = SHT_NOTE;
991 einfo ("%P: warning: Cannot create .note.gnu.build-id section,"
992 " --build-id ignored.\n");
996 /* This is called after all the input files have been opened. */
999 gld${EMULATION_NAME}_after_open (void)
1001 struct bfd_link_needed_list *needed, *l;
1002 struct elf_link_hash_table *htab;
1004 after_open_default ();
1006 htab = elf_hash_table (&link_info);
1007 if (!is_elf_hash_table (htab))
1010 if (emit_note_gnu_build_id != NULL)
1014 /* Find an ELF input. */
1015 for (abfd = link_info.input_bfds;
1016 abfd != (bfd *) NULL; abfd = abfd->link_next)
1017 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1020 /* PR 10555: If there are no ELF input files do not try to
1021 create a .note.gnu-build-id section. */
1023 || !setup_build_id (abfd))
1025 free ((char *) emit_note_gnu_build_id);
1026 emit_note_gnu_build_id = NULL;
1030 if (link_info.relocatable)
1032 if (link_info.execstack == ! link_info.noexecstack)
1033 /* PR ld/16744: If "-z [no]execstack" has been specified on the
1034 command line and we are perfoming a relocatable link then no
1035 PT_GNU_STACK segment will be created and so the
1036 linkinfo.[no]execstack values set in _handle_option() will have no
1037 effect. Instead we create a .note.GNU-stack section in much the
1038 same way as the assembler does with its --[no]execstack option. */
1039 (void) bfd_make_section_with_flags (link_info.input_bfds,
1041 SEC_READONLY | (link_info.execstack ? SEC_CODE : 0));
1046 if (link_info.eh_frame_hdr
1047 && !link_info.traditional_format)
1049 bfd *abfd, *elfbfd = NULL;
1050 bfd_boolean warn_eh_frame = FALSE;
1053 for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
1055 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1059 s = bfd_get_section_by_name (abfd, ".eh_frame");
1062 || bfd_is_abs_section (s->output_section)))
1063 s = bfd_get_next_section_by_name (s);
1064 warn_eh_frame = s != NULL;
1066 if (elfbfd && warn_eh_frame)
1071 const struct elf_backend_data *bed;
1073 bed = get_elf_backend_data (elfbfd);
1074 s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
1075 bed->dynamic_sec_flags
1078 && bfd_set_section_alignment (elfbfd, s, 2))
1080 htab->eh_info.hdr_sec = s;
1081 warn_eh_frame = FALSE;
1085 einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
1086 " --eh-frame-hdr ignored.\n");
1089 /* Get the list of files which appear in DT_NEEDED entries in
1090 dynamic objects included in the link (often there will be none).
1091 For each such file, we want to track down the corresponding
1092 library, and include the symbol table in the link. This is what
1093 the runtime dynamic linker will do. Tracking the files down here
1094 permits one dynamic object to include another without requiring
1095 special action by the person doing the link. Note that the
1096 needed list can actually grow while we are stepping through this
1098 needed = bfd_elf_get_needed_list (link_info.output_bfd, &link_info);
1099 for (l = needed; l != NULL; l = l->next)
1101 struct bfd_link_needed_list *ll;
1102 struct dt_needed n, nn;
1105 /* If the lib that needs this one was --as-needed and wasn't
1106 found to be needed, then this lib isn't needed either. */
1108 && (bfd_elf_get_dyn_lib_class (l->by) & DYN_AS_NEEDED) != 0)
1111 /* Skip the lib if --no-copy-dt-needed-entries and
1112 --allow-shlib-undefined is in effect. */
1114 && link_info.unresolved_syms_in_shared_libs == RM_IGNORE
1115 && (bfd_elf_get_dyn_lib_class (l->by) & DYN_NO_ADD_NEEDED) != 0)
1118 /* If we've already seen this file, skip it. */
1119 for (ll = needed; ll != l; ll = ll->next)
1121 || (bfd_elf_get_dyn_lib_class (ll->by) & DYN_AS_NEEDED) == 0)
1122 && strcmp (ll->name, l->name) == 0)
1127 /* See if this file was included in the link explicitly. */
1129 global_found = NULL;
1130 lang_for_each_input_file (gld${EMULATION_NAME}_check_needed);
1131 if (global_found != NULL
1132 && (bfd_elf_get_dyn_lib_class (global_found->the_bfd)
1133 & DYN_AS_NEEDED) == 0)
1140 info_msg (_("%s needed by %B\n"), l->name, l->by);
1142 /* As-needed libs specified on the command line (or linker script)
1143 take priority over libs found in search dirs. */
1144 if (global_found != NULL)
1146 nn.name = global_found->filename;
1147 if (gld${EMULATION_NAME}_try_needed (&nn, TRUE))
1151 /* We need to find this file and include the symbol table. We
1152 want to search for the file in the same way that the dynamic
1153 linker will search. That means that we want to use
1154 rpath_link, rpath, then the environment variable
1155 LD_LIBRARY_PATH (native only), then the DT_RPATH/DT_RUNPATH
1156 entries (native only), then the linker script LIB_SEARCH_DIRS.
1157 We do not search using the -L arguments.
1159 We search twice. The first time, we skip objects which may
1160 introduce version mismatches. The second time, we force
1161 their use. See gld${EMULATION_NAME}_vercheck comment. */
1162 for (force = 0; force < 2; force++)
1165 search_dirs_type *search;
1167 if [ "x${NATIVE}" = xyes ] ; then
1169 const char *lib_path;
1172 if [ "x${USE_LIBPATH}" = xyes ] ; then
1174 struct bfd_link_needed_list *rp;
1180 if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
1184 if [ "x${USE_LIBPATH}" = xyes ] ; then
1186 if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
1191 if [ "x${NATIVE}" = xyes ] ; then
1193 if (command_line.rpath_link == NULL
1194 && command_line.rpath == NULL)
1196 lib_path = (const char *) getenv ("LD_RUN_PATH");
1197 if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
1201 lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
1202 if (gld${EMULATION_NAME}_search_needed (lib_path, &n, force))
1206 if [ "x${USE_LIBPATH}" = xyes ] ; then
1209 rp = bfd_elf_get_runpath_list (link_info.output_bfd, &link_info);
1210 for (; !found && rp != NULL; rp = rp->next)
1212 char *tmpname = gld${EMULATION_NAME}_add_sysroot (rp->name);
1213 found = (rp->by == l->by
1214 && gld${EMULATION_NAME}_search_needed (tmpname,
1224 if [ "x${USE_LIBPATH}" = xyes ] ; then
1226 *-*-freebsd* | *-*-dragonfly*)
1228 if (gld${EMULATION_NAME}_check_ld_elf_hints (l, force))
1234 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
1236 if (gld${EMULATION_NAME}_check_ld_so_conf (l, force))
1245 len = strlen (l->name);
1246 for (search = search_head; search != NULL; search = search->next)
1250 if (search->cmdline)
1252 filename = (char *) xmalloc (strlen (search->name) + len + 2);
1253 sprintf (filename, "%s/%s", search->name, l->name);
1255 if (gld${EMULATION_NAME}_try_needed (&nn, force))
1268 einfo ("%P: warning: %s, needed by %B, not found (try using -rpath or -rpath-link)\n",
1278 /* Look through an expression for an assignment statement. */
1281 gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
1283 bfd_boolean provide = FALSE;
1285 switch (exp->type.node_class)
1288 case etree_provided:
1292 /* We call record_link_assignment even if the symbol is defined.
1293 This is because if it is defined by a dynamic object, we
1294 actually want to use the value defined by the linker script,
1295 not the value from the dynamic object (because we are setting
1296 symbols like etext). If the symbol is defined by a regular
1297 object, then, as it happens, calling record_link_assignment
1299 if (strcmp (exp->assign.dst, ".") != 0)
1301 if (!bfd_elf_record_link_assignment (link_info.output_bfd,
1303 exp->assign.dst, provide,
1304 exp->assign.hidden))
1305 einfo ("%P%F: failed to record assignment to %s: %E\n",
1308 gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
1312 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
1313 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
1317 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
1318 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
1319 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
1323 gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
1332 /* This is called by the before_allocation routine via
1333 lang_for_each_statement. It locates any assignment statements, and
1334 tells the ELF backend about them, in case they are assignments to
1335 symbols which are referred to by dynamic objects. */
1338 gld${EMULATION_NAME}_find_statement_assignment (lang_statement_union_type *s)
1340 if (s->header.type == lang_assignment_statement_enum)
1341 gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
1346 if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then
1347 if test x"${ELF_INTERPRETER_NAME+set}" = xset; then
1348 ELF_INTERPRETER_SET_DEFAULT="
1349 if (sinterp != NULL)
1351 sinterp->contents = (unsigned char *) ${ELF_INTERPRETER_NAME};
1352 sinterp->size = strlen ((char *) sinterp->contents) + 1;
1357 ELF_INTERPRETER_SET_DEFAULT=
1361 /* used by before_allocation and handle_option. */
1363 gld${EMULATION_NAME}_append_to_separated_string (char **to, char *op_arg)
1366 *to = xstrdup (op_arg);
1369 size_t to_len = strlen (*to);
1370 size_t op_arg_len = strlen (op_arg);
1374 /* First see whether OPTARG is already in the path. */
1377 if (strncmp (op_arg, cp, op_arg_len) == 0
1378 && (cp[op_arg_len] == 0
1379 || cp[op_arg_len] == config.rpath_separator))
1383 /* Not yet found. */
1384 cp = strchr (cp, config.rpath_separator);
1392 buf = xmalloc (to_len + op_arg_len + 2);
1393 sprintf (buf, "%s%c%s", *to,
1394 config.rpath_separator, op_arg);
1401 /* This is called after the sections have been attached to output
1402 sections, but before any sizes or addresses have been set. */
1405 gld${EMULATION_NAME}_before_allocation (void)
1410 struct elf_link_hash_entry *ehdr_start = NULL;
1411 struct bfd_link_hash_entry ehdr_start_save = ehdr_start_save;
1413 if (is_elf_hash_table (link_info.hash))
1415 _bfd_elf_tls_setup (link_info.output_bfd, &link_info);
1417 /* Make __ehdr_start hidden if it has been referenced, to
1418 prevent the symbol from being dynamic. */
1419 if (!link_info.relocatable)
1421 struct elf_link_hash_entry *h
1422 = elf_link_hash_lookup (elf_hash_table (&link_info), "__ehdr_start",
1423 FALSE, FALSE, TRUE);
1425 /* Only adjust the export class if the symbol was referenced
1426 and not defined, otherwise leave it alone. */
1428 && (h->root.type == bfd_link_hash_new
1429 || h->root.type == bfd_link_hash_undefined
1430 || h->root.type == bfd_link_hash_undefweak
1431 || h->root.type == bfd_link_hash_common))
1433 _bfd_elf_link_hash_hide_symbol (&link_info, h, TRUE);
1434 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
1435 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
1436 /* Don't leave the symbol undefined. Undefined hidden
1437 symbols typically won't have dynamic relocations, but
1438 we most likely will need dynamic relocations for
1439 __ehdr_start if we are building a PIE or shared
1442 ehdr_start_save = h->root;
1443 h->root.type = bfd_link_hash_defined;
1444 h->root.u.def.section = bfd_abs_section_ptr;
1445 h->root.u.def.value = 0;
1449 /* If we are going to make any variable assignments, we need to
1450 let the ELF backend know about them in case the variables are
1451 referred to by dynamic objects. */
1452 lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment);
1455 /* Let the ELF backend work out the sizes of any sections required
1456 by dynamic linking. */
1457 rpath = command_line.rpath;
1459 rpath = (const char *) getenv ("LD_RUN_PATH");
1461 for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
1462 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1464 const char *audit_libs = elf_dt_audit (abfd);
1466 /* If the input bfd contains an audit entry, we need to add it as
1467 a dep audit entry. */
1468 if (audit_libs && *audit_libs != '\0')
1470 char *cp = xstrdup (audit_libs);
1474 char *cp2 = strchr (cp, config.rpath_separator);
1482 if (cp != NULL && *cp != '\0')
1483 gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
1485 cp = more ? ++cp2 : NULL;
1491 if (! (bfd_elf_size_dynamic_sections
1492 (link_info.output_bfd, command_line.soname, rpath,
1493 command_line.filter_shlib, audit, depaudit,
1494 (const char * const *) command_line.auxiliary_filters,
1495 &link_info, &sinterp)))
1496 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
1498 ${ELF_INTERPRETER_SET_DEFAULT}
1499 /* Let the user override the dynamic linker we are using. */
1500 if (command_line.interpreter != NULL
1503 sinterp->contents = (bfd_byte *) command_line.interpreter;
1504 sinterp->size = strlen (command_line.interpreter) + 1;
1507 /* Look for any sections named .gnu.warning. As a GNU extensions,
1508 we treat such sections as containing warning messages. We print
1509 out the warning message, and then zero out the section size so
1510 that it does not get copied into the output file. */
1513 LANG_FOR_EACH_INPUT_STATEMENT (is)
1520 if (is->flags.just_syms)
1523 s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
1528 msg = (char *) xmalloc ((size_t) (sz + 1));
1529 if (! bfd_get_section_contents (is->the_bfd, s, msg,
1531 einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
1534 ret = link_info.callbacks->warning (&link_info, msg,
1535 (const char *) NULL,
1536 is->the_bfd, (asection *) NULL,
1541 /* Clobber the section size, so that we don't waste space
1542 copying the warning into the output file. If we've already
1543 sized the output section, adjust its size. The adjustment
1544 is on rawsize because targets that size sections early will
1545 have called lang_reset_memory_regions after sizing. */
1546 if (s->output_section != NULL
1547 && s->output_section->rawsize >= s->size)
1548 s->output_section->rawsize -= s->size;
1552 /* Also set SEC_EXCLUDE, so that local symbols defined in the
1553 warning section don't get copied to the output. */
1554 s->flags |= SEC_EXCLUDE | SEC_KEEP;
1558 before_allocation_default ();
1560 if (!bfd_elf_size_dynsym_hash_dynstr (link_info.output_bfd, &link_info))
1561 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
1563 if (ehdr_start != NULL)
1565 /* If we twiddled __ehdr_start to defined earlier, put it back
1567 ehdr_start->root.type = ehdr_start_save.type;
1568 ehdr_start->root.u = ehdr_start_save.u;
1575 if test x"$LDEMUL_OPEN_DYNAMIC_ARCHIVE" != xgld"$EMULATION_NAME"_open_dynamic_archive; then
1578 /* Try to open a dynamic archive. This is where we know that ELF
1579 dynamic libraries have an extension of .so (or .sl on oddball systems
1583 gld${EMULATION_NAME}_open_dynamic_archive
1584 (const char *arch, search_dirs_type *search, lang_input_statement_type *entry)
1586 const char *filename;
1589 bfd_boolean opened = FALSE;
1591 if (! entry->flags.maybe_archive)
1594 filename = entry->filename;
1595 len = strlen (search->name) + strlen (filename);
1596 if (entry->flags.full_name_provided)
1599 string = (char *) xmalloc (len);
1600 sprintf (string, "%s/%s", search->name, filename);
1606 len += strlen (arch) + sizeof "/lib.so";
1607 #ifdef EXTRA_SHLIB_EXTENSION
1608 xlen = (strlen (EXTRA_SHLIB_EXTENSION) > 3
1609 ? strlen (EXTRA_SHLIB_EXTENSION) - 3
1612 string = (char *) xmalloc (len + xlen);
1613 sprintf (string, "%s/lib%s%s.so", search->name, filename, arch);
1614 #ifdef EXTRA_SHLIB_EXTENSION
1615 /* Try the .so extension first. If that fails build a new filename
1616 using EXTRA_SHLIB_EXTENSION. */
1617 opened = ldfile_try_open_bfd (string, entry);
1619 strcpy (string + len - 4, EXTRA_SHLIB_EXTENSION);
1623 if (!opened && !ldfile_try_open_bfd (string, entry))
1629 entry->filename = string;
1631 /* We have found a dynamic object to include in the link. The ELF
1632 backend linker will create a DT_NEEDED entry in the .dynamic
1633 section naming this file. If this file includes a DT_SONAME
1634 entry, it will be used. Otherwise, the ELF linker will just use
1635 the name of the file. For an archive found by searching, like
1636 this one, the DT_NEEDED entry should consist of just the name of
1637 the file, without the path information used to find it. Note
1638 that we only need to do this if we have a dynamic object; an
1639 archive will never be referenced by a DT_NEEDED entry.
1641 FIXME: This approach--using bfd_elf_set_dt_needed_name--is not
1642 very pretty. I haven't been able to think of anything that is
1644 if (bfd_check_format (entry->the_bfd, bfd_object)
1645 && (entry->the_bfd->flags & DYNAMIC) != 0)
1647 ASSERT (entry->flags.maybe_archive && entry->flags.search_dirs);
1649 /* Rather than duplicating the logic above. Just use the
1650 filename we recorded earlier. */
1652 if (!entry->flags.full_name_provided)
1653 filename = lbasename (entry->filename);
1654 bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
1663 if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
1666 /* A variant of lang_output_section_find used by place_orphan. */
1668 static lang_output_section_statement_type *
1669 output_rel_find (asection *sec, int isdyn)
1671 lang_output_section_statement_type *lookup;
1672 lang_output_section_statement_type *last = NULL;
1673 lang_output_section_statement_type *last_alloc = NULL;
1674 lang_output_section_statement_type *last_ro_alloc = NULL;
1675 lang_output_section_statement_type *last_rel = NULL;
1676 lang_output_section_statement_type *last_rel_alloc = NULL;
1677 int rela = sec->name[4] == 'a';
1679 for (lookup = &lang_output_section_statement.head->output_section_statement;
1681 lookup = lookup->next)
1683 if (lookup->constraint >= 0
1684 && CONST_STRNEQ (lookup->name, ".rel"))
1686 int lookrela = lookup->name[4] == 'a';
1688 /* .rel.dyn must come before all other reloc sections, to suit
1693 /* Don't place after .rel.plt as doing so results in wrong
1695 if (strcmp (".plt", lookup->name + 4 + lookrela) == 0)
1698 if (rela == lookrela || last_rel == NULL)
1700 if ((rela == lookrela || last_rel_alloc == NULL)
1701 && lookup->bfd_section != NULL
1702 && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
1703 last_rel_alloc = lookup;
1707 if (lookup->bfd_section != NULL
1708 && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
1710 last_alloc = lookup;
1711 if ((lookup->bfd_section->flags & SEC_READONLY) != 0)
1712 last_ro_alloc = lookup;
1717 return last_rel_alloc;
1723 return last_ro_alloc;
1731 /* Place an orphan section. We use this to put random SHF_ALLOC
1732 sections in the right segment. */
1734 static lang_output_section_statement_type *
1735 gld${EMULATION_NAME}_place_orphan (asection *s,
1736 const char *secname,
1739 static struct orphan_save hold[] =
1742 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
1745 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1748 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_THREAD_LOCAL,
1751 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA,
1757 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1760 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
1763 SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_SMALL_DATA,
1769 enum orphan_save_index
1781 static int orphan_init_done = 0;
1782 struct orphan_save *place;
1783 lang_output_section_statement_type *after;
1784 lang_output_section_statement_type *os;
1785 lang_output_section_statement_type *match_by_name = NULL;
1787 int iself = s->owner->xvec->flavour == bfd_target_elf_flavour;
1788 unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL;
1790 if (! link_info.relocatable
1791 && link_info.combreloc
1792 && (s->flags & SEC_ALLOC))
1798 secname = ".rela.dyn";
1802 secname = ".rel.dyn";
1808 else if (CONST_STRNEQ (secname, ".rel"))
1810 secname = secname[4] == 'a' ? ".rela.dyn" : ".rel.dyn";
1815 /* Look through the script to see where to place this section. */
1816 if (constraint == 0)
1817 for (os = lang_output_section_find (secname);
1819 os = next_matching_output_section_statement (os, 0))
1821 /* If we don't match an existing output section, tell
1822 lang_insert_orphan to create a new output section. */
1823 constraint = SPECIAL;
1825 if (os->bfd_section != NULL
1826 && (os->bfd_section->flags == 0
1827 || (_bfd_elf_match_sections_by_type (link_info.output_bfd,
1830 && ((s->flags ^ os->bfd_section->flags)
1831 & (SEC_LOAD | SEC_ALLOC)) == 0)))
1833 /* We already have an output section statement with this
1834 name, and its bfd section has compatible flags.
1835 If the section already exists but does not have any flags
1836 set, then it has been created by the linker, probably as a
1837 result of a --section-start command line switch. */
1838 lang_add_section (&os->children, s, NULL, os);
1842 /* Save unused output sections in case we can match them
1843 against orphans later. */
1844 if (os->bfd_section == NULL)
1848 /* If we didn't match an active output section, see if we matched an
1849 unused one and use that. */
1852 lang_add_section (&match_by_name->children, s, NULL, match_by_name);
1853 return match_by_name;
1856 if (!orphan_init_done)
1858 struct orphan_save *ho;
1860 for (ho = hold; ho < hold + sizeof (hold) / sizeof (hold[0]); ++ho)
1861 if (ho->name != NULL)
1863 ho->os = lang_output_section_find (ho->name);
1864 if (ho->os != NULL && ho->os->flags == 0)
1865 ho->os->flags = ho->flags;
1867 orphan_init_done = 1;
1870 /* If this is a final link, then always put .gnu.warning.SYMBOL
1871 sections into the .text section to get them out of the way. */
1872 if (link_info.executable
1873 && ! link_info.relocatable
1874 && CONST_STRNEQ (s->name, ".gnu.warning.")
1875 && hold[orphan_text].os != NULL)
1877 os = hold[orphan_text].os;
1878 lang_add_section (&os->children, s, NULL, os);
1882 /* Decide which segment the section should go in based on the
1883 section name and section flags. We put loadable .note sections
1884 right after the .interp section, so that the PT_NOTE segment is
1885 stored right after the program headers where the OS can read it
1886 in the first page. */
1889 if ((s->flags & (SEC_ALLOC | SEC_DEBUGGING)) == 0)
1890 place = &hold[orphan_nonalloc];
1891 else if ((s->flags & SEC_ALLOC) == 0)
1893 else if ((s->flags & SEC_LOAD) != 0
1894 && ((iself && sh_type == SHT_NOTE)
1895 || (!iself && CONST_STRNEQ (secname, ".note"))))
1896 place = &hold[orphan_interp];
1897 else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) == 0)
1898 place = &hold[orphan_bss];
1899 else if ((s->flags & SEC_SMALL_DATA) != 0)
1900 place = &hold[orphan_sdata];
1901 else if ((s->flags & SEC_THREAD_LOCAL) != 0)
1902 place = &hold[orphan_tdata];
1903 else if ((s->flags & SEC_READONLY) == 0)
1904 place = &hold[orphan_data];
1905 else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL))
1906 || (!iself && CONST_STRNEQ (secname, ".rel")))
1907 && (s->flags & SEC_LOAD) != 0)
1908 place = &hold[orphan_rel];
1909 else if ((s->flags & SEC_CODE) == 0)
1910 place = &hold[orphan_rodata];
1912 place = &hold[orphan_text];
1917 if (place->os == NULL)
1919 if (place->name != NULL)
1920 place->os = lang_output_section_find (place->name);
1922 place->os = output_rel_find (s, isdyn);
1926 after = lang_output_section_find_by_flags
1927 (s, &place->os, _bfd_elf_match_sections_by_type);
1929 /* *ABS* is always the first output section statement. */
1930 after = &lang_output_section_statement.head->output_section_statement;
1933 return lang_insert_orphan (s, secname, constraint, after, place, NULL, NULL);
1938 if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then
1942 gld${EMULATION_NAME}_after_allocation (void)
1944 bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
1946 gld${EMULATION_NAME}_map_segments (need_layout);
1951 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
1955 gld${EMULATION_NAME}_get_script (int *isfile)
1958 if test x"$COMPILE_IN" = xyes
1960 # Scripts compiled in.
1962 # sed commands to quote an ld script as a C string.
1963 sc="-f stringify.sed"
1969 if (link_info.relocatable && config.build_constructors)
1972 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
1973 echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c
1974 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
1975 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
1976 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
1977 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
1978 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
1979 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
1981 if test -n "$GENERATE_PIE_SCRIPT" ; then
1982 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
1983 echo ' ; else if (link_info.pie && link_info.combreloc' >> e${EMULATION_NAME}.c
1984 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
1985 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
1986 sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
1987 echo ' ; else if (link_info.pie && link_info.combreloc) return' >> e${EMULATION_NAME}.c
1988 sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
1990 echo ' ; else if (link_info.pie) return' >> e${EMULATION_NAME}.c
1991 sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
1993 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
1994 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
1995 echo ' ; else if (link_info.shared && link_info.combreloc' >> e${EMULATION_NAME}.c
1996 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
1997 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
1998 sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
1999 echo ' ; else if (link_info.shared && link_info.combreloc) return' >> e${EMULATION_NAME}.c
2000 sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
2002 echo ' ; else if (link_info.shared) return' >> e${EMULATION_NAME}.c
2003 sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
2005 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2006 echo ' ; else if (link_info.combreloc && link_info.relro' >> e${EMULATION_NAME}.c
2007 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
2008 sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
2009 echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
2010 sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
2012 echo ' ; else return' >> e${EMULATION_NAME}.c
2013 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
2014 echo '; }' >> e${EMULATION_NAME}.c
2017 # Scripts read from the filesystem.
2023 if (link_info.relocatable && config.build_constructors)
2024 return "ldscripts/${EMULATION_NAME}.xu";
2025 else if (link_info.relocatable)
2026 return "ldscripts/${EMULATION_NAME}.xr";
2027 else if (!config.text_read_only)
2028 return "ldscripts/${EMULATION_NAME}.xbn";
2030 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then :
2033 else if (!config.magic_demand_paged)
2034 return "ldscripts/${EMULATION_NAME}.xn";
2037 if test -n "$GENERATE_PIE_SCRIPT" ; then
2038 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2040 else if (link_info.pie && link_info.combreloc
2041 && link_info.relro && (link_info.flags & DF_BIND_NOW))
2042 return "ldscripts/${EMULATION_NAME}.xdw";
2043 else if (link_info.pie && link_info.combreloc)
2044 return "ldscripts/${EMULATION_NAME}.xdc";
2048 else if (link_info.pie)
2049 return "ldscripts/${EMULATION_NAME}.xd";
2052 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
2053 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2055 else if (link_info.shared && link_info.combreloc
2056 && link_info.relro && (link_info.flags & DF_BIND_NOW))
2057 return "ldscripts/${EMULATION_NAME}.xsw";
2058 else if (link_info.shared && link_info.combreloc)
2059 return "ldscripts/${EMULATION_NAME}.xsc";
2063 else if (link_info.shared)
2064 return "ldscripts/${EMULATION_NAME}.xs";
2067 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
2069 else if (link_info.combreloc && link_info.relro
2070 && (link_info.flags & DF_BIND_NOW))
2071 return "ldscripts/${EMULATION_NAME}.xw";
2072 else if (link_info.combreloc)
2073 return "ldscripts/${EMULATION_NAME}.xc";
2078 return "ldscripts/${EMULATION_NAME}.x";
2085 if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
2087 $PARSE_AND_LIST_PROLOGUE
2093 #define OPTION_DISABLE_NEW_DTAGS (400)
2094 #define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
2095 #define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
2096 #define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
2097 #define OPTION_EXCLUDE_LIBS (OPTION_EH_FRAME_HDR + 1)
2098 #define OPTION_HASH_STYLE (OPTION_EXCLUDE_LIBS + 1)
2099 #define OPTION_BUILD_ID (OPTION_HASH_STYLE + 1)
2100 #define OPTION_AUDIT (OPTION_BUILD_ID + 1)
2103 gld${EMULATION_NAME}_add_options
2104 (int ns, char **shortopts, int nl, struct option **longopts,
2105 int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
2108 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2110 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:";
2114 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:";
2118 static const struct option xtra_long[] = {
2120 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2122 {"audit", required_argument, NULL, OPTION_AUDIT},
2123 {"Bgroup", no_argument, NULL, OPTION_GROUP},
2127 {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
2129 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2131 {"depaudit", required_argument, NULL, 'P'},
2132 {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
2133 {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
2134 {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
2135 {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
2136 {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
2139 if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
2141 $PARSE_AND_LIST_LONGOPTS
2145 {NULL, no_argument, NULL, 0}
2148 *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
2149 memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
2150 *longopts = (struct option *)
2151 xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
2152 memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
2155 #define DEFAULT_BUILD_ID_STYLE "sha1"
2158 gld${EMULATION_NAME}_handle_option (int optc)
2165 case OPTION_BUILD_ID:
2166 if (emit_note_gnu_build_id != NULL)
2168 free ((char *) emit_note_gnu_build_id);
2169 emit_note_gnu_build_id = NULL;
2172 optarg = DEFAULT_BUILD_ID_STYLE;
2173 if (strcmp (optarg, "none"))
2174 emit_note_gnu_build_id = xstrdup (optarg);
2179 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2182 gld${EMULATION_NAME}_append_to_separated_string (&audit, optarg);
2186 gld${EMULATION_NAME}_append_to_separated_string (&depaudit, optarg);
2189 case OPTION_DISABLE_NEW_DTAGS:
2190 link_info.new_dtags = FALSE;
2193 case OPTION_ENABLE_NEW_DTAGS:
2194 link_info.new_dtags = TRUE;
2197 case OPTION_EH_FRAME_HDR:
2198 link_info.eh_frame_hdr = TRUE;
2202 link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
2203 /* Groups must be self-contained. */
2204 link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
2205 link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
2208 case OPTION_EXCLUDE_LIBS:
2209 add_excluded_libs (optarg);
2212 case OPTION_HASH_STYLE:
2213 link_info.emit_hash = FALSE;
2214 link_info.emit_gnu_hash = FALSE;
2215 if (strcmp (optarg, "sysv") == 0)
2216 link_info.emit_hash = TRUE;
2217 else if (strcmp (optarg, "gnu") == 0)
2218 link_info.emit_gnu_hash = TRUE;
2219 else if (strcmp (optarg, "both") == 0)
2221 link_info.emit_hash = TRUE;
2222 link_info.emit_gnu_hash = TRUE;
2225 einfo (_("%P%F: invalid hash style \`%s'\n"), optarg);
2232 if (strcmp (optarg, "defs") == 0)
2233 link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
2234 else if (strcmp (optarg, "muldefs") == 0)
2235 link_info.allow_multiple_definition = TRUE;
2236 else if (CONST_STRNEQ (optarg, "max-page-size="))
2240 config.maxpagesize = strtoul (optarg + 14, &end, 0);
2241 if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
2242 einfo (_("%P%F: invalid maxium page size \`%s'\n"),
2245 else if (CONST_STRNEQ (optarg, "common-page-size="))
2248 config.commonpagesize = strtoul (optarg + 17, &end, 0);
2250 || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
2251 einfo (_("%P%F: invalid common page size \`%s'\n"),
2254 else if (CONST_STRNEQ (optarg, "stack-size="))
2257 link_info.stacksize = strtoul (optarg + 11, &end, 0);
2258 if (*end || link_info.stacksize < 0)
2259 einfo (_("%P%F: invalid stack size \`%s'\n"), optarg + 11);
2260 if (!link_info.stacksize)
2261 /* Use -1 for explicit no-stack, because zero means
2263 link_info.stacksize = -1;
2265 else if (strcmp (optarg, "execstack") == 0)
2267 link_info.execstack = TRUE;
2268 link_info.noexecstack = FALSE;
2270 else if (strcmp (optarg, "noexecstack") == 0)
2272 link_info.noexecstack = TRUE;
2273 link_info.execstack = FALSE;
2276 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2278 else if (strcmp (optarg, "global") == 0)
2279 link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL;
2280 else if (strcmp (optarg, "initfirst") == 0)
2281 link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
2282 else if (strcmp (optarg, "interpose") == 0)
2283 link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
2284 else if (strcmp (optarg, "loadfltr") == 0)
2285 link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
2286 else if (strcmp (optarg, "nodefaultlib") == 0)
2287 link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
2288 else if (strcmp (optarg, "nodelete") == 0)
2289 link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
2290 else if (strcmp (optarg, "nodlopen") == 0)
2291 link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
2292 else if (strcmp (optarg, "nodump") == 0)
2293 link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
2294 else if (strcmp (optarg, "now") == 0)
2296 link_info.flags |= (bfd_vma) DF_BIND_NOW;
2297 link_info.flags_1 |= (bfd_vma) DF_1_NOW;
2299 else if (strcmp (optarg, "lazy") == 0)
2301 link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
2302 link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
2304 else if (strcmp (optarg, "origin") == 0)
2306 link_info.flags |= (bfd_vma) DF_ORIGIN;
2307 link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
2309 else if (strcmp (optarg, "combreloc") == 0)
2310 link_info.combreloc = TRUE;
2311 else if (strcmp (optarg, "nocombreloc") == 0)
2312 link_info.combreloc = FALSE;
2313 else if (strcmp (optarg, "nocopyreloc") == 0)
2314 link_info.nocopyreloc = TRUE;
2315 else if (strcmp (optarg, "relro") == 0)
2316 link_info.relro = TRUE;
2317 else if (strcmp (optarg, "norelro") == 0)
2318 link_info.relro = FALSE;
2319 else if (strcmp (optarg, "text") == 0)
2320 link_info.error_textrel = TRUE;
2321 else if (strcmp (optarg, "notext") == 0)
2322 link_info.error_textrel = FALSE;
2323 else if (strcmp (optarg, "textoff") == 0)
2324 link_info.error_textrel = FALSE;
2330 einfo (_("%P: warning: -z %s ignored.\n"), optarg);
2334 if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
2336 $PARSE_AND_LIST_ARGS_CASES
2348 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
2352 gld${EMULATION_NAME}_list_options (FILE * file)
2355 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2358 --audit=AUDITLIB Specify a library to use for auditing\n"));
2360 -Bgroup Selects group name lookup rules for DSO\n"));
2365 --build-id[=STYLE] Generate build ID note\n"));
2367 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2370 -P AUDITLIB, --depaudit=AUDITLIB\n" "\
2371 Specify a library to use for auditing dependencies\n"));
2373 --disable-new-dtags Disable new dynamic tags\n"));
2375 --enable-new-dtags Enable new dynamic tags\n"));
2377 --eh-frame-hdr Create .eh_frame_hdr section\n"));
2379 --exclude-libs=LIBS Make all symbols in LIBS hidden\n"));
2381 --hash-style=STYLE Set hash style to sysv, gnu or both\n"));
2383 -z combreloc Merge dynamic relocs into one section and sort\n"));
2389 -z common-page-size=SIZE Set common page size to SIZE\n"));
2391 -z defs Report unresolved symbols in object files.\n"));
2393 -z execstack Mark executable as requiring executable stack\n"));
2396 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2399 -z global Make symbols in DSO available for subsequently\n\
2400 loaded objects\n"));
2402 -z initfirst Mark DSO to be initialized first at runtime\n"));
2404 -z interpose Mark object to interpose all DSOs but executable\n"));
2406 -z lazy Mark object lazy runtime binding (default)\n"));
2408 -z loadfltr Mark object requiring immediate process\n"));
2414 -z max-page-size=SIZE Set maximum page size to SIZE\n"));
2416 -z muldefs Allow multiple definitions\n"));
2419 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2422 -z nocombreloc Don't merge dynamic relocs into one section\n"));
2424 -z nocopyreloc Don't create copy relocs\n"));
2426 -z nodefaultlib Mark object not to use default search paths\n"));
2428 -z nodelete Mark DSO non-deletable at runtime\n"));
2430 -z nodlopen Mark DSO not available to dlopen\n"));
2432 -z nodump Mark DSO not available to dldump\n"));
2437 -z noexecstack Mark executable as not requiring executable stack\n"));
2439 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
2442 -z norelro Don't create RELRO program header\n"));
2444 -z now Mark object non-lazy runtime binding\n"));
2446 -z origin Mark object requiring immediate \$ORIGIN\n\
2447 processing at runtime\n"));
2449 -z relro Create RELRO program header\n"));
2451 -z stacksize=SIZE Set size of stack segment\n"));
2455 if test -n "$PARSE_AND_LIST_OPTIONS" ; then
2457 $PARSE_AND_LIST_OPTIONS
2465 if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
2467 $PARSE_AND_LIST_EPILOGUE
2474 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
2476 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
2477 ${LDEMUL_SYSLIB-syslib_default},
2478 ${LDEMUL_HLL-hll_default},
2479 ${LDEMUL_AFTER_PARSE-after_parse_default},
2480 ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
2481 ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
2482 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
2483 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
2484 ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
2485 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
2486 "${EMULATION_NAME}",
2488 ${LDEMUL_FINISH-finish_default},
2489 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
2490 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
2491 ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
2492 ${LDEMUL_SET_SYMBOLS-NULL},
2493 ${LDEMUL_PARSE_ARGS-NULL},
2494 gld${EMULATION_NAME}_add_options,
2495 gld${EMULATION_NAME}_handle_option,
2496 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
2497 ${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
2498 ${LDEMUL_RECOGNIZED_FILE-gld${EMULATION_NAME}_load_symbols},
2499 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
2500 ${LDEMUL_NEW_VERS_PATTERN-NULL}