1 # $FreeBSD: src/contrib/binutils/ld/emultempl/elf32.em,v 1.2.6.6 2002/09/01 23:44:16 obrien Exp $
2 # $DragonFly: src/contrib/binutils/ld/emultempl/Attic/elf32.em,v 1.3 2004/01/15 11:59:27 joerg Exp $
5 # This shell script emits a C file. -*- C -*-
6 # It does some substitutions.
7 # This file is now misnamed, because it supports both 32 bit and 64 bit
9 test -z "${ELFSIZE}" && ELFSIZE=32
10 if [ -z "$MACHINE" ]; then
13 OUTPUT_ARCH=${ARCH}:${MACHINE}
15 cat >e${EMULATION_NAME}.c <<EOF
16 /* This file is is generated by a shell script. DO NOT EDIT! */
18 /* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
19 Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
20 2002 Free Software Foundation, Inc.
21 Written by Steve Chamberlain <sac@cygnus.com>
22 ELF support by Ian Lance Taylor <ian@cygnus.com>
24 This file is part of GLD, the Gnu Linker.
26 This program is free software; you can redistribute it and/or modify
27 it under the terms of the GNU General Public License as published by
28 the Free Software Foundation; either version 2 of the License, or
29 (at your option) any later version.
31 This program is distributed in the hope that it will be useful,
32 but WITHOUT ANY WARRANTY; without even the implied warranty of
33 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34 GNU General Public License for more details.
36 You should have received a copy of the GNU General Public License
37 along with this program; if not, write to the Free Software
38 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
40 #define TARGET_IS_${EMULATION_NAME}
44 #include "libiberty.h"
45 #include "safe-ctype.h"
57 #include "elf/common.h"
59 static void gld${EMULATION_NAME}_before_parse
61 static void gld${EMULATION_NAME}_vercheck
62 PARAMS ((lang_input_statement_type *));
63 static void gld${EMULATION_NAME}_stat_needed
64 PARAMS ((lang_input_statement_type *));
65 static boolean gld${EMULATION_NAME}_try_needed
66 PARAMS ((const char *, int));
67 static boolean gld${EMULATION_NAME}_search_needed
68 PARAMS ((const char *, const char *, int));
69 static void gld${EMULATION_NAME}_check_needed
70 PARAMS ((lang_input_statement_type *));
71 static void gld${EMULATION_NAME}_after_open
73 static void gld${EMULATION_NAME}_find_exp_assignment
74 PARAMS ((etree_type *));
75 static void gld${EMULATION_NAME}_find_statement_assignment
76 PARAMS ((lang_statement_union_type *));
77 static void gld${EMULATION_NAME}_before_allocation
79 static boolean gld${EMULATION_NAME}_open_dynamic_archive
80 PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *));
81 static lang_output_section_statement_type *output_rel_find
83 static asection *output_prev_sec_find
84 PARAMS ((lang_output_section_statement_type *));
85 static boolean gld${EMULATION_NAME}_place_orphan
86 PARAMS ((lang_input_statement_type *, asection *));
87 static void gld${EMULATION_NAME}_finish
89 static char *gld${EMULATION_NAME}_get_script
90 PARAMS ((int *isfile));
94 # Import any needed special functions and/or overrides.
96 if test -n "$EXTRA_EM_FILE" ; then
97 . ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
100 # Functions in this file can be overridden by setting the LDEMUL_* shell
101 # variables. If the name of the overriding function is the same as is
102 # defined in this file, then don't output this file's version.
103 # If a different overriding name is given then output the standard function
104 # as presumably it is called from the overriding function.
106 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
107 cat >>e${EMULATION_NAME}.c <<EOF
110 gld${EMULATION_NAME}_before_parse ()
112 const bfd_arch_info_type *arch = bfd_scan_arch ("${OUTPUT_ARCH}");
115 ldfile_output_architecture = arch->arch;
116 ldfile_output_machine = arch->mach;
117 ldfile_output_machine_name = arch->printable_name;
120 ldfile_output_architecture = bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`;
121 config.dynamic_link = ${DYNAMIC_LINK-true};
122 config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo true ; else echo false ; fi`;
128 cat >>e${EMULATION_NAME}.c <<EOF
130 /* These variables are required to pass information back and forth
131 between after_open and check_needed and stat_needed and vercheck. */
133 static struct bfd_link_needed_list *global_needed;
134 static struct stat global_stat;
135 static boolean global_found;
136 static struct bfd_link_needed_list *global_vercheck_needed;
137 static boolean global_vercheck_failed;
140 /* On Linux, it's possible to have different versions of the same
141 shared library linked against different versions of libc. The
142 dynamic linker somehow tags which libc version to use in
143 /etc/ld.so.cache, and, based on the libc that it sees in the
144 executable, chooses which version of the shared library to use.
146 We try to do a similar check here by checking whether this shared
147 library needs any other shared libraries which may conflict with
148 libraries we have already included in the link. If it does, we
149 skip it, and try to find another shared library farther on down the
152 This is called via lang_for_each_input_file.
153 GLOBAL_VERCHECK_NEEDED is the list of objects needed by the object
154 which we are checking. This sets GLOBAL_VERCHECK_FAILED if we find
155 a conflicting version. */
158 gld${EMULATION_NAME}_vercheck (s)
159 lang_input_statement_type *s;
162 struct bfd_link_needed_list *l;
164 if (global_vercheck_failed)
166 if (s->the_bfd == NULL
167 || (bfd_get_file_flags (s->the_bfd) & DYNAMIC) == 0)
170 soname = bfd_elf_get_dt_soname (s->the_bfd);
172 soname = lbasename (bfd_get_filename (s->the_bfd));
174 for (l = global_vercheck_needed; l != NULL; l = l->next)
178 if (strcmp (soname, l->name) == 0)
180 /* Probably can't happen, but it's an easy check. */
184 if (strchr (l->name, '/') != NULL)
187 suffix = strstr (l->name, ".so.");
191 suffix += sizeof ".so." - 1;
193 if (strncmp (soname, l->name, suffix - l->name) == 0)
195 /* Here we know that S is a dynamic object FOO.SO.VER1, and
196 the object we are considering needs a dynamic object
197 FOO.SO.VER2, and VER1 and VER2 are different. This
198 appears to be a version mismatch, so we tell the caller
199 to try a different version of this library. */
200 global_vercheck_failed = true;
207 /* See if an input file matches a DT_NEEDED entry by running stat on
211 gld${EMULATION_NAME}_stat_needed (s)
212 lang_input_statement_type *s;
220 if (s->the_bfd == NULL)
223 if (bfd_stat (s->the_bfd, &st) != 0)
225 einfo ("%P:%B: bfd_stat failed: %E\n", s->the_bfd);
229 if (st.st_dev == global_stat.st_dev
230 && st.st_ino == global_stat.st_ino)
236 /* We issue a warning if it looks like we are including two
237 different versions of the same shared library. For example,
238 there may be a problem if -lc picks up libc.so.6 but some other
239 shared library has a DT_NEEDED entry of libc.so.5. This is a
240 heuristic test, and it will only work if the name looks like
241 NAME.so.VERSION. FIXME: Depending on file names is error-prone.
242 If we really want to issue warnings about mixing version numbers
243 of shared libraries, we need to find a better way. */
245 if (strchr (global_needed->name, '/') != NULL)
247 suffix = strstr (global_needed->name, ".so.");
250 suffix += sizeof ".so." - 1;
252 soname = bfd_elf_get_dt_soname (s->the_bfd);
254 soname = lbasename (s->filename);
256 if (strncmp (soname, global_needed->name, suffix - global_needed->name) == 0)
257 einfo ("%P: warning: %s, needed by %B, may conflict with %s\n",
258 global_needed->name, global_needed->by, soname);
262 /* This function is called for each possible name for a dynamic object
263 named by a DT_NEEDED entry. The FORCE parameter indicates whether
264 to skip the check for a conflicting version. */
267 gld${EMULATION_NAME}_try_needed (name, force)
274 abfd = bfd_openr (name, bfd_get_target (output_bfd));
277 if (! bfd_check_format (abfd, bfd_object))
282 if ((bfd_get_file_flags (abfd) & DYNAMIC) == 0)
288 /* Check whether this object would include any conflicting library
289 versions. If FORCE is set, then we skip this check; we use this
290 the second time around, if we couldn't find any compatible
291 instance of the shared library. */
295 struct bfd_link_needed_list *needed;
297 if (! bfd_elf_get_bfd_needed_list (abfd, &needed))
298 einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd);
302 global_vercheck_needed = needed;
303 global_vercheck_failed = false;
304 lang_for_each_input_file (gld${EMULATION_NAME}_vercheck);
305 if (global_vercheck_failed)
308 /* Return false to force the caller to move on to try
309 another file on the search path. */
313 /* But wait! It gets much worse. On Linux, if a shared
314 library does not use libc at all, we are supposed to skip
315 it the first time around in case we encounter a shared
316 library later on with the same name which does use the
317 version of libc that we want. This is much too horrible
318 to use on any system other than Linux. */
323 cat >>e${EMULATION_NAME}.c <<EOF
325 struct bfd_link_needed_list *l;
327 for (l = needed; l != NULL; l = l->next)
328 if (strncmp (l->name, "libc.so", 7) == 0)
340 cat >>e${EMULATION_NAME}.c <<EOF
344 /* We've found a dynamic object matching the DT_NEEDED entry. */
346 /* We have already checked that there is no other input file of the
347 same name. We must now check again that we are not including the
348 same file twice. We need to do this because on many systems
349 libc.so is a symlink to, e.g., libc.so.1. The SONAME entry will
350 reference libc.so.1. If we have already included libc.so, we
351 don't want to include libc.so.1 if they are the same file, and we
352 can only check that using stat. */
354 if (bfd_stat (abfd, &global_stat) != 0)
355 einfo ("%F%P:%B: bfd_stat failed: %E\n", abfd);
357 /* First strip off everything before the last '/'. */
358 soname = lbasename (abfd->filename);
360 if (trace_file_tries)
361 info_msg (_("found %s at %s\n"), soname, name);
363 global_found = false;
364 lang_for_each_input_file (gld${EMULATION_NAME}_stat_needed);
367 /* Return true to indicate that we found the file, even though
368 we aren't going to do anything with it. */
372 /* Tell the ELF backend that we don't want the output file to have a
373 DT_NEEDED entry for this file. */
374 bfd_elf_set_dt_needed_name (abfd, "");
376 /* Tell the ELF backend that the output file needs a DT_NEEDED
377 entry for this file if it is used to resolve the reference in
379 bfd_elf_set_dt_needed_soname (abfd, soname);
381 /* Add this file into the symbol table. */
382 if (! bfd_link_add_symbols (abfd, &link_info))
383 einfo ("%F%B: could not read symbols: %E\n", abfd);
389 /* Search for a needed file in a path. */
392 gld${EMULATION_NAME}_search_needed (path, name, force)
401 return gld${EMULATION_NAME}_try_needed (name, force);
403 if (path == NULL || *path == '\0')
408 char *filename, *sset;
410 s = strchr (path, ':');
412 s = path + strlen (path);
414 filename = (char *) xmalloc (s - path + len + 2);
419 memcpy (filename, path, s - path);
420 filename[s - path] = '/';
421 sset = filename + (s - path) + 1;
425 if (gld${EMULATION_NAME}_try_needed (filename, force))
439 if [ "x${host}" = "x${target}" ] ; then
440 case " ${EMULATION_LIBPATH} " in
441 *" ${EMULATION_NAME} "*)
443 *-*-freebsd* | *-*-dragonfly*)
444 cat >>e${EMULATION_NAME}.c <<EOF
446 * Read the system search path the FreeBSD way rather than like Linux.
448 #include <elf-hints.h>
450 static boolean gld${EMULATION_NAME}_check_ld_elf_hints
451 PARAMS ((const char *, int));
454 gld${EMULATION_NAME}_check_ld_elf_hints (name, force)
458 static boolean initialized;
459 static char *ld_elf_hints;
465 f = fopen (_PATH_ELF_HINTS, FOPEN_RB);
468 struct elfhints_hdr hdr;
470 if (fread(&hdr, 1, sizeof(hdr), f) == sizeof(hdr) &&
471 hdr.magic == ELFHINTS_MAGIC &&
474 if (fseek(f, hdr.strtab + hdr.dirlist, SEEK_SET) != -1)
478 b = (char *) xmalloc (hdr.dirlistlen + 1);
479 if (fread(b, 1, hdr.dirlistlen + 1, f) !=
496 if (ld_elf_hints == NULL)
499 return gld${EMULATION_NAME}_search_needed (ld_elf_hints, name, force);
506 cat >>e${EMULATION_NAME}.c <<EOF
508 /* For a native linker, check the file /etc/ld.so.conf for directories
509 in which we may find shared libraries. /etc/ld.so.conf is really
510 only meaningful on Linux. */
512 static boolean gld${EMULATION_NAME}_check_ld_so_conf
513 PARAMS ((const char *, int));
516 gld${EMULATION_NAME}_check_ld_so_conf (name, force)
520 static boolean initialized;
521 static char *ld_so_conf;
527 f = fopen ("/etc/ld.so.conf", FOPEN_RT);
536 b = (char *) xmalloc (alloc);
538 while ((c = getc (f)) != EOF)
540 if (len + 1 >= alloc)
543 b = (char *) xrealloc (b, alloc);
556 if (len > 0 && b[len - 1] != ':')
564 if (len > 0 && b[len - 1] == ':')
583 if (ld_so_conf == NULL)
586 return gld${EMULATION_NAME}_search_needed (ld_so_conf, name, force);
595 cat >>e${EMULATION_NAME}.c <<EOF
597 /* See if an input file matches a DT_NEEDED entry by name. */
600 gld${EMULATION_NAME}_check_needed (s)
601 lang_input_statement_type *s;
606 if (s->filename != NULL)
610 if (strcmp (s->filename, global_needed->name) == 0)
616 if (s->search_dirs_flag)
618 f = strrchr (s->filename, '/');
620 && strcmp (f + 1, global_needed->name) == 0)
628 if (s->the_bfd != NULL)
632 soname = bfd_elf_get_dt_soname (s->the_bfd);
634 && strcmp (soname, global_needed->name) == 0)
644 if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
645 cat >>e${EMULATION_NAME}.c <<EOF
647 /* This is called after all the input files have been opened. */
650 gld${EMULATION_NAME}_after_open ()
652 struct bfd_link_needed_list *needed, *l;
654 /* We only need to worry about this when doing a final link. */
655 if (link_info.relocateable || link_info.shared)
658 /* Get the list of files which appear in DT_NEEDED entries in
659 dynamic objects included in the link (often there will be none).
660 For each such file, we want to track down the corresponding
661 library, and include the symbol table in the link. This is what
662 the runtime dynamic linker will do. Tracking the files down here
663 permits one dynamic object to include another without requiring
664 special action by the person doing the link. Note that the
665 needed list can actually grow while we are stepping through this
667 needed = bfd_elf_get_needed_list (output_bfd, &link_info);
668 for (l = needed; l != NULL; l = l->next)
670 struct bfd_link_needed_list *ll;
673 /* If we've already seen this file, skip it. */
674 for (ll = needed; ll != l; ll = ll->next)
675 if (strcmp (ll->name, l->name) == 0)
680 /* See if this file was included in the link explicitly. */
682 global_found = false;
683 lang_for_each_input_file (gld${EMULATION_NAME}_check_needed);
687 if (trace_file_tries)
688 info_msg (_("%s needed by %B\n"), l->name, l->by);
690 /* We need to find this file and include the symbol table. We
691 want to search for the file in the same way that the dynamic
692 linker will search. That means that we want to use
693 rpath_link, rpath, then the environment variable
694 LD_LIBRARY_PATH (native only), then the DT_RPATH/DT_RUNPATH
695 entries (native only), then the linker script LIB_SEARCH_DIRS.
696 We do not search using the -L arguments.
698 We search twice. The first time, we skip objects which may
699 introduce version mismatches. The second time, we force
700 their use. See gld${EMULATION_NAME}_vercheck comment. */
701 for (force = 0; force < 2; force++)
704 search_dirs_type *search;
706 if [ "x${host}" = "x${target}" ] ; then
707 case " ${EMULATION_LIBPATH} " in
708 *" ${EMULATION_NAME} "*)
709 cat >>e${EMULATION_NAME}.c <<EOF
710 const char *lib_path;
711 struct bfd_link_needed_list *rp;
717 cat >>e${EMULATION_NAME}.c <<EOF
719 if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
723 if [ "x${host}" = "x${target}" ] ; then
724 case " ${EMULATION_LIBPATH} " in
725 *" ${EMULATION_NAME} "*)
726 cat >>e${EMULATION_NAME}.c <<EOF
727 if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
730 if (command_line.rpath_link == NULL
731 && command_line.rpath == NULL)
733 lib_path = (const char *) getenv ("LD_RUN_PATH");
734 if (gld${EMULATION_NAME}_search_needed (lib_path, l->name,
738 lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
739 if (gld${EMULATION_NAME}_search_needed (lib_path, l->name, force))
743 rp = bfd_elf_get_runpath_list (output_bfd, &link_info);
744 for (; !found && rp != NULL; rp = rp->next)
746 found = (rp->by == l->by
747 && gld${EMULATION_NAME}_search_needed (rp->name,
758 cat >>e${EMULATION_NAME}.c <<EOF
759 len = strlen (l->name);
760 for (search = search_head; search != NULL; search = search->next)
766 filename = (char *) xmalloc (strlen (search->name) + len + 2);
767 sprintf (filename, "%s/%s", search->name, l->name);
768 if (gld${EMULATION_NAME}_try_needed (filename, force))
775 if [ "x${host}" = "x${target}" ] ; then
776 case " ${EMULATION_LIBPATH} " in
777 *" ${EMULATION_NAME} "*)
779 *-*-freebsd* | *-*-dragonfly*)
780 cat >>e${EMULATION_NAME}.c <<EOF
781 if (gld${EMULATION_NAME}_check_ld_elf_hints (l->name, force))
786 cat >>e${EMULATION_NAME}.c <<EOF
787 if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
796 cat >>e${EMULATION_NAME}.c <<EOF
802 einfo ("%P: warning: %s, needed by %B, not found (try using -rpath or -rpath-link)\n",
810 cat >>e${EMULATION_NAME}.c <<EOF
812 /* Look through an expression for an assignment statement. */
815 gld${EMULATION_NAME}_find_exp_assignment (exp)
818 struct bfd_link_hash_entry *h;
820 switch (exp->type.node_class)
823 h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
824 false, false, false);
828 /* We call record_link_assignment even if the symbol is defined.
829 This is because if it is defined by a dynamic object, we
830 actually want to use the value defined by the linker script,
831 not the value from the dynamic object (because we are setting
832 symbols like etext). If the symbol is defined by a regular
833 object, then, as it happens, calling record_link_assignment
838 if (strcmp (exp->assign.dst, ".") != 0)
840 if (! (bfd_elf${ELFSIZE}_record_link_assignment
841 (output_bfd, &link_info, exp->assign.dst,
842 exp->type.node_class == etree_provide ? true : false)))
843 einfo ("%P%F: failed to record assignment to %s: %E\n",
846 gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
850 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
851 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
855 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
856 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
857 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
861 gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
870 /* This is called by the before_allocation routine via
871 lang_for_each_statement. It locates any assignment statements, and
872 tells the ELF backend about them, in case they are assignments to
873 symbols which are referred to by dynamic objects. */
876 gld${EMULATION_NAME}_find_statement_assignment (s)
877 lang_statement_union_type *s;
879 if (s->header.type == lang_assignment_statement_enum)
880 gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
885 if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then
886 if test x"${ELF_INTERPRETER_NAME+set}" = xset; then
887 ELF_INTERPRETER_SET_DEFAULT="
890 sinterp->contents = ${ELF_INTERPRETER_NAME};
891 sinterp->_raw_size = strlen (sinterp->contents) + 1;
896 ELF_INTERPRETER_SET_DEFAULT=
898 cat >>e${EMULATION_NAME}.c <<EOF
900 /* This is called after the sections have been attached to output
901 sections, but before any sizes or addresses have been set. */
904 gld${EMULATION_NAME}_before_allocation ()
909 /* If we are going to make any variable assignments, we need to let
910 the ELF backend know about them in case the variables are
911 referred to by dynamic objects. */
912 lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment);
914 /* Let the ELF backend work out the sizes of any sections required
915 by dynamic linking. */
916 rpath = command_line.rpath;
918 rpath = (const char *) getenv ("LD_RUN_PATH");
919 if (! (bfd_elf${ELFSIZE}_size_dynamic_sections
920 (output_bfd, command_line.soname, rpath,
921 command_line.filter_shlib,
922 (const char * const *) command_line.auxiliary_filters,
923 &link_info, &sinterp, lang_elf_version_info)))
924 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
925 ${ELF_INTERPRETER_SET_DEFAULT}
926 /* Let the user override the dynamic linker we are using. */
927 if (command_line.interpreter != NULL
930 sinterp->contents = (bfd_byte *) command_line.interpreter;
931 sinterp->_raw_size = strlen (command_line.interpreter) + 1;
934 /* Look for any sections named .gnu.warning. As a GNU extensions,
935 we treat such sections as containing warning messages. We print
936 out the warning message, and then zero out the section size so
937 that it does not get copied into the output file. */
940 LANG_FOR_EACH_INPUT_STATEMENT (is)
947 if (is->just_syms_flag)
950 s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
954 sz = bfd_section_size (is->the_bfd, s);
955 msg = xmalloc ((size_t) sz + 1);
956 if (! bfd_get_section_contents (is->the_bfd, s, msg, (file_ptr) 0, sz))
957 einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
960 ret = link_info.callbacks->warning (&link_info, msg,
962 is->the_bfd, (asection *) NULL,
967 /* Clobber the section size, so that we don't waste copying the
968 warning into the output file. */
977 if test x"$LDEMUL_OPEN_DYNAMIC_ARCHIVE" != xgld"$EMULATION_NAME"_open_dynamic_archive; then
978 cat >>e${EMULATION_NAME}.c <<EOF
980 /* Try to open a dynamic archive. This is where we know that ELF
981 dynamic libraries have an extension of .so (or .sl on oddball systems
985 gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry)
987 search_dirs_type *search;
988 lang_input_statement_type *entry;
990 const char *filename;
993 if (! entry->is_archive)
996 filename = entry->filename;
998 /* This allocates a few bytes too many when EXTRA_SHLIB_EXTENSION
999 is defined, but it does not seem worth the headache to optimize
1000 away those two bytes of space. */
1001 string = (char *) xmalloc (strlen (search->name)
1004 #ifdef EXTRA_SHLIB_EXTENSION
1005 + strlen (EXTRA_SHLIB_EXTENSION)
1007 + sizeof "/lib.so");
1009 sprintf (string, "%s/lib%s%s.so", search->name, filename, arch);
1011 #ifdef EXTRA_SHLIB_EXTENSION
1012 /* Try the .so extension first. If that fails build a new filename
1013 using EXTRA_SHLIB_EXTENSION. */
1014 if (! ldfile_try_open_bfd (string, entry))
1015 sprintf (string, "%s/lib%s%s%s", search->name,
1016 filename, arch, EXTRA_SHLIB_EXTENSION);
1019 if (! ldfile_try_open_bfd (string, entry))
1025 entry->filename = string;
1027 /* We have found a dynamic object to include in the link. The ELF
1028 backend linker will create a DT_NEEDED entry in the .dynamic
1029 section naming this file. If this file includes a DT_SONAME
1030 entry, it will be used. Otherwise, the ELF linker will just use
1031 the name of the file. For an archive found by searching, like
1032 this one, the DT_NEEDED entry should consist of just the name of
1033 the file, without the path information used to find it. Note
1034 that we only need to do this if we have a dynamic object; an
1035 archive will never be referenced by a DT_NEEDED entry.
1037 FIXME: This approach--using bfd_elf_set_dt_needed_name--is not
1038 very pretty. I haven't been able to think of anything that is
1040 if (bfd_check_format (entry->the_bfd, bfd_object)
1041 && (entry->the_bfd->flags & DYNAMIC) != 0)
1043 ASSERT (entry->is_archive && entry->search_dirs_flag);
1045 /* Rather than duplicating the logic above. Just use the
1046 filename we recorded earlier. */
1048 filename = lbasename (entry->filename);
1049 bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
1058 if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
1059 cat >>e${EMULATION_NAME}.c <<EOF
1061 /* A variant of lang_output_section_find. Used by place_orphan. */
1063 static lang_output_section_statement_type *
1066 lang_statement_union_type *u;
1067 lang_output_section_statement_type *lookup;
1069 for (u = lang_output_section_statement.head;
1070 u != (lang_statement_union_type *) NULL;
1073 lookup = &u->output_section_statement;
1074 if (strncmp (".rel", lookup->name, 4) == 0
1075 && lookup->bfd_section != NULL
1076 && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
1081 return (lang_output_section_statement_type *) NULL;
1084 /* Find the last output section before given output statement.
1085 Used by place_orphan. */
1088 output_prev_sec_find (os)
1089 lang_output_section_statement_type *os;
1091 asection *s = (asection *) NULL;
1092 lang_statement_union_type *u;
1093 lang_output_section_statement_type *lookup;
1095 for (u = lang_output_section_statement.head;
1096 u != (lang_statement_union_type *) NULL;
1099 lookup = &u->output_section_statement;
1103 if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1104 s = lookup->bfd_section;
1110 /* Place an orphan section. We use this to put random SHF_ALLOC
1111 sections in the right segment. */
1113 struct orphan_save {
1114 lang_output_section_statement_type *os;
1116 lang_statement_union_type **stmt;
1120 gld${EMULATION_NAME}_place_orphan (file, s)
1121 lang_input_statement_type *file;
1124 static struct orphan_save hold_text;
1125 static struct orphan_save hold_rodata;
1126 static struct orphan_save hold_data;
1127 static struct orphan_save hold_bss;
1128 static struct orphan_save hold_rel;
1129 static struct orphan_save hold_interp;
1130 static struct orphan_save hold_sdata;
1131 static int count = 1;
1132 struct orphan_save *place;
1133 lang_statement_list_type *old;
1134 lang_statement_list_type add;
1135 etree_type *address;
1136 const char *secname;
1137 const char *outsecname;
1138 const char *ps = NULL;
1139 lang_output_section_statement_type *os;
1141 secname = bfd_get_section_name (s->owner, s);
1143 if (! config.unique_orphan_sections && ! unique_section_p (secname))
1145 /* Look through the script to see where to place this section. */
1146 os = lang_output_section_find (secname);
1149 && (os->bfd_section == NULL
1150 || ((s->flags ^ os->bfd_section->flags)
1151 & (SEC_LOAD | SEC_ALLOC)) == 0))
1153 /* We already have an output section statement with this
1154 name, and its bfd section, if any, has compatible flags. */
1155 lang_add_section (&os->children, s, os, file);
1160 if (hold_text.os == NULL)
1161 hold_text.os = lang_output_section_find (".text");
1163 /* If this is a final link, then always put .gnu.warning.SYMBOL
1164 sections into the .text section to get them out of the way. */
1165 if (! link_info.shared
1166 && ! link_info.relocateable
1167 && strncmp (secname, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0
1168 && hold_text.os != NULL)
1170 lang_add_section (&hold_text.os->children, s, hold_text.os, file);
1174 /* Decide which segment the section should go in based on the
1175 section name and section flags. We put loadable .note sections
1176 right after the .interp section, so that the PT_NOTE segment is
1177 stored right after the program headers where the OS can read it
1178 in the first page. */
1179 #define HAVE_SECTION(hold, name) \
1180 (hold.os != NULL || (hold.os = lang_output_section_find (name)) != NULL)
1182 if (s->flags & SEC_EXCLUDE)
1184 if (s->output_section == NULL)
1185 s->output_section = bfd_abs_section_ptr;
1190 if ((s->flags & SEC_ALLOC) == 0)
1192 else if ((s->flags & SEC_LOAD) != 0
1193 && strncmp (secname, ".note", 5) == 0
1194 && HAVE_SECTION (hold_interp, ".interp"))
1195 place = &hold_interp;
1196 else if ((s->flags & SEC_HAS_CONTENTS) == 0
1197 && HAVE_SECTION (hold_bss, ".bss"))
1199 else if ((s->flags & SEC_SMALL_DATA) != 0
1200 && HAVE_SECTION (hold_sdata, ".sdata"))
1201 place = &hold_sdata;
1202 else if ((s->flags & SEC_READONLY) == 0
1203 && HAVE_SECTION (hold_data, ".data"))
1205 else if (strncmp (secname, ".rel", 4) == 0
1206 && (hold_rel.os != NULL
1207 || (hold_rel.os = output_rel_find ()) != NULL))
1209 if (! link_info.relocateable && link_info.combreloc)
1211 if (strncmp (secname, ".rela", 5) == 0)
1212 os = lang_output_section_find (".rela.dyn");
1214 os = lang_output_section_find (".rel.dyn");
1217 && os->bfd_section != NULL
1218 && ((s->flags ^ os->bfd_section->flags)
1219 & (SEC_LOAD | SEC_ALLOC)) == 0)
1221 lang_add_section (&os->children, s, os, file);
1227 else if ((s->flags & (SEC_CODE | SEC_READONLY)) == SEC_READONLY
1228 && HAVE_SECTION (hold_rodata, ".rodata"))
1229 place = &hold_rodata;
1230 else if ((s->flags & (SEC_CODE | SEC_READONLY)) == (SEC_CODE | SEC_READONLY)
1231 && hold_text.os != NULL)
1236 /* Choose a unique name for the section. This will be needed if the
1237 same section name appears in the input file with different
1238 loadable or allocatable characteristics. */
1239 outsecname = secname;
1240 if (bfd_get_section_by_name (output_bfd, outsecname) != NULL)
1242 outsecname = bfd_get_unique_section_name (output_bfd,
1245 if (outsecname == NULL)
1246 einfo ("%F%P: place_orphan failed: %E\n");
1249 /* Start building a list of statements for this section.
1250 First save the current statement pointer. */
1253 /* If we have found an appropriate place for the output section
1254 statements for this orphan, add them to our own private list,
1255 inserting them later into the global statement list. */
1259 lang_list_init (stat_ptr);
1262 if (config.build_constructors)
1264 /* If the name of the section is representable in C, then create
1265 symbols to mark the start and the end of the section. */
1266 for (ps = outsecname; *ps != '\0'; ps++)
1267 if (! ISALNUM (*ps) && *ps != '_')
1272 etree_type *e_align;
1274 symname = (char *) xmalloc (ps - outsecname + sizeof "__start_");
1275 sprintf (symname, "__start_%s", outsecname);
1276 e_align = exp_unop (ALIGN_K,
1277 exp_intop ((bfd_vma) 1 << s->alignment_power));
1278 lang_add_assignment (exp_assop ('=', symname, e_align));
1282 if (link_info.relocateable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1283 address = exp_intop ((bfd_vma) 0);
1287 os = lang_enter_output_section_statement (outsecname, address, 0,
1289 (etree_type *) NULL,
1290 (etree_type *) NULL,
1291 (etree_type *) NULL);
1293 lang_add_section (&os->children, s, os, file);
1295 lang_leave_output_section_statement
1296 ((bfd_vma) 0, "*default*",
1297 (struct lang_output_section_phdr_list *) NULL, "*default*");
1299 if (config.build_constructors && *ps == '\0')
1303 /* lang_leave_ouput_section_statement resets stat_ptr. Put
1304 stat_ptr back where we want it. */
1308 symname = (char *) xmalloc (ps - outsecname + sizeof "__stop_");
1309 sprintf (symname, "__stop_%s", outsecname);
1310 lang_add_assignment (exp_assop ('=', symname,
1311 exp_nameop (NAME, ".")));
1314 /* Restore the global list pointer. */
1319 asection *snew, **pps;
1321 snew = os->bfd_section;
1323 /* Shuffle the bfd section list to make the output file look
1324 neater. This is really only cosmetic. */
1325 if (place->section == NULL)
1327 asection *bfd_section = place->os->bfd_section;
1329 /* If the output statement hasn't been used to place
1330 any input sections (and thus doesn't have an output
1331 bfd_section), look for the closest prior output statement
1332 having an output section. */
1333 if (bfd_section == NULL)
1334 bfd_section = output_prev_sec_find (place->os);
1336 if (bfd_section != NULL && bfd_section != snew)
1337 place->section = &bfd_section->next;
1340 if (place->section != NULL)
1342 /* Unlink the section. */
1343 for (pps = &output_bfd->sections; *pps != snew; pps = &(*pps)->next)
1345 bfd_section_list_remove (output_bfd, pps);
1347 /* Now tack it on to the "place->os" section list. */
1348 bfd_section_list_insert (output_bfd, place->section, snew);
1351 /* Save the end of this list. Further ophans of this type will
1352 follow the one we've just added. */
1353 place->section = &snew->next;
1355 /* The following is non-cosmetic. We try to put the output
1356 statements in some sort of reasonable order here, because
1357 they determine the final load addresses of the orphan
1358 sections. In addition, placing output statements in the
1359 wrong order may require extra segments. For instance,
1360 given a typical situation of all read-only sections placed
1361 in one segment and following that a segment containing all
1362 the read-write sections, we wouldn't want to place an orphan
1363 read/write section before or amongst the read-only ones. */
1364 if (add.head != NULL)
1366 if (place->stmt == NULL)
1368 /* Put the new statement list right at the head. */
1369 *add.tail = place->os->header.next;
1370 place->os->header.next = add.head;
1374 /* Put it after the last orphan statement we added. */
1375 *add.tail = *place->stmt;
1376 *place->stmt = add.head;
1379 /* Fix the global list pointer if we happened to tack our
1380 new list at the tail. */
1381 if (*old->tail == add.head)
1382 old->tail = add.tail;
1384 /* Save the end of this list. */
1385 place->stmt = add.tail;
1394 if test x"$LDEMUL_FINISH" != xgld"$EMULATION_NAME"_finish; then
1395 cat >>e${EMULATION_NAME}.c <<EOF
1398 gld${EMULATION_NAME}_finish ()
1400 if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
1402 lang_reset_memory_regions ();
1404 /* Resize the sections. */
1405 lang_size_sections (stat_ptr->head, abs_output_section,
1406 &stat_ptr->head, 0, (bfd_vma) 0, NULL);
1408 /* Redo special stuff. */
1409 ldemul_after_allocation ();
1411 /* Do the assignments again. */
1412 lang_do_assignments (stat_ptr->head, abs_output_section,
1413 (fill_type) 0, (bfd_vma) 0);
1419 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
1420 cat >>e${EMULATION_NAME}.c <<EOF
1423 gld${EMULATION_NAME}_get_script (isfile)
1427 if test -n "$COMPILE_IN"
1429 # Scripts compiled in.
1431 # sed commands to quote an ld script as a C string.
1432 sc="-f stringify.sed"
1434 cat >>e${EMULATION_NAME}.c <<EOF
1438 if (link_info.relocateable == true && config.build_constructors == true)
1441 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
1442 echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
1443 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
1444 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
1445 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
1446 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
1447 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
1448 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
1450 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
1451 echo ' ; else if (link_info.shared && link_info.combreloc) return' >> e${EMULATION_NAME}.c
1452 sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
1453 echo ' ; else if (link_info.shared) return' >> e${EMULATION_NAME}.c
1454 sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
1456 echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
1457 sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
1458 echo ' ; else return' >> e${EMULATION_NAME}.c
1459 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
1460 echo '; }' >> e${EMULATION_NAME}.c
1463 # Scripts read from the filesystem.
1465 cat >>e${EMULATION_NAME}.c <<EOF
1469 if (link_info.relocateable == true && config.build_constructors == true)
1470 return "ldscripts/${EMULATION_NAME}.xu";
1471 else if (link_info.relocateable == true)
1472 return "ldscripts/${EMULATION_NAME}.xr";
1473 else if (!config.text_read_only)
1474 return "ldscripts/${EMULATION_NAME}.xbn";
1475 else if (!config.magic_demand_paged)
1476 return "ldscripts/${EMULATION_NAME}.xn";
1477 else if (link_info.shared)
1478 return "ldscripts/${EMULATION_NAME}.xs";
1480 return "ldscripts/${EMULATION_NAME}.x";
1487 if test -n "$PARSE_AND_LIST_ARGS_CASES" -o x"$GENERATE_SHLIB_SCRIPT" = xyes; then
1489 if test x"$LDEMUL_PARSE_ARGS" != xgld"$EMULATION_NAME"_parse_args; then
1491 if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
1492 cat >>e${EMULATION_NAME}.c <<EOF
1493 $PARSE_AND_LIST_PROLOGUE
1497 cat >>e${EMULATION_NAME}.c <<EOF
1501 #define OPTION_DISABLE_NEW_DTAGS (400)
1502 #define OPTION_ENABLE_NEW_DTAGS (OPTION_DISABLE_NEW_DTAGS + 1)
1503 #define OPTION_GROUP (OPTION_ENABLE_NEW_DTAGS + 1)
1504 #define OPTION_EH_FRAME_HDR (OPTION_GROUP + 1)
1506 static struct option longopts[] =
1510 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
1511 cat >>e${EMULATION_NAME}.c <<EOF
1512 /* getopt allows abbreviations, so we do this to stop it from
1513 treating -d/-e as abbreviations for these options. */
1514 {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
1515 {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
1516 {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
1517 {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
1518 {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
1519 {"Bgroup", no_argument, NULL, OPTION_GROUP},
1520 {"Bgroup", no_argument, NULL, OPTION_GROUP},
1524 if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
1525 cat >>e${EMULATION_NAME}.c <<EOF
1526 $PARSE_AND_LIST_LONGOPTS
1530 cat >>e${EMULATION_NAME}.c <<EOF
1531 {NULL, no_argument, NULL, 0}
1535 static int gld${EMULATION_NAME}_parse_args PARAMS ((int, char **));
1538 gld${EMULATION_NAME}_parse_args (argc, argv)
1544 static int prevoptind = -1;
1545 int prevopterr = opterr;
1548 if (prevoptind != optind)
1552 prevoptind = optind;
1554 optc = getopt_long_only (argc, argv,
1555 "-${PARSE_AND_LIST_SHORTOPTS}z:", longopts,
1557 opterr = prevopterr;
1564 optind = prevoptind;
1569 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
1570 cat >>e${EMULATION_NAME}.c <<EOF
1571 case OPTION_DISABLE_NEW_DTAGS:
1572 link_info.new_dtags = false;
1575 case OPTION_ENABLE_NEW_DTAGS:
1576 link_info.new_dtags = true;
1579 case OPTION_EH_FRAME_HDR:
1580 link_info.eh_frame_hdr = true;
1584 link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
1585 /* Groups must be self-contained. */
1586 link_info.no_undefined = true;
1590 if (strcmp (optarg, "initfirst") == 0)
1591 link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
1592 else if (strcmp (optarg, "interpose") == 0)
1593 link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
1594 else if (strcmp (optarg, "loadfltr") == 0)
1595 link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
1596 else if (strcmp (optarg, "nodefaultlib") == 0)
1597 link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
1598 else if (strcmp (optarg, "nodelete") == 0)
1599 link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
1600 else if (strcmp (optarg, "nodlopen") == 0)
1601 link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
1602 else if (strcmp (optarg, "nodump") == 0)
1603 link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
1604 else if (strcmp (optarg, "now") == 0)
1606 link_info.flags |= (bfd_vma) DF_BIND_NOW;
1607 link_info.flags_1 |= (bfd_vma) DF_1_NOW;
1609 else if (strcmp (optarg, "origin") == 0)
1611 link_info.flags |= (bfd_vma) DF_ORIGIN;
1612 link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
1614 else if (strcmp (optarg, "defs") == 0)
1615 link_info.no_undefined = true;
1616 else if (strcmp (optarg, "combreloc") == 0)
1617 link_info.combreloc = true;
1618 else if (strcmp (optarg, "nocombreloc") == 0)
1619 link_info.combreloc = false;
1620 else if (strcmp (optarg, "nocopyreloc") == 0)
1621 link_info.nocopyreloc = true;
1622 /* What about the other Solaris -z options? FIXME. */
1627 if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
1628 cat >>e${EMULATION_NAME}.c <<EOF
1629 $PARSE_AND_LIST_ARGS_CASES
1633 cat >>e${EMULATION_NAME}.c <<EOF
1642 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
1643 cat >>e${EMULATION_NAME}.c <<EOF
1645 static void gld${EMULATION_NAME}_list_options PARAMS ((FILE * file));
1648 gld${EMULATION_NAME}_list_options (file)
1653 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
1654 cat >>e${EMULATION_NAME}.c <<EOF
1655 fprintf (file, _(" -Bgroup\t\tSelects group name lookup rules for DSO\n"));
1656 fprintf (file, _(" --disable-new-dtags\tDisable new dynamic tags\n"));
1657 fprintf (file, _(" --enable-new-dtags\tEnable new dynamic tags\n"));
1658 fprintf (file, _(" --eh-frame-hdr\tCreate .eh_frame_hdr section\n"));
1659 fprintf (file, _(" -z combreloc\t\tMerge dynamic relocs into one section and sort\n"));
1660 fprintf (file, _(" -z defs\t\tDisallows undefined symbols\n"));
1661 fprintf (file, _(" -z initfirst\t\tMark DSO to be initialized first at runtime\n"));
1662 fprintf (file, _(" -z interpose\t\tMark object to interpose all DSOs but executable\n"));
1663 fprintf (file, _(" -z loadfltr\t\tMark object requiring immediate process\n"));
1664 fprintf (file, _(" -z nocombreloc\tDon't merge dynamic relocs into one section\n"));
1665 fprintf (file, _(" -z nocopyreloc\tDon't create copy relocs\n"));
1666 fprintf (file, _(" -z nodefaultlib\tMark object not to use default search paths\n"));
1667 fprintf (file, _(" -z nodelete\t\tMark DSO non-deletable at runtime\n"));
1668 fprintf (file, _(" -z nodlopen\t\tMark DSO not available to dlopen\n"));
1669 fprintf (file, _(" -z nodump\t\tMark DSO not available to dldump\n"));
1670 fprintf (file, _(" -z now\t\tMark object non-lazy runtime binding\n"));
1671 fprintf (file, _(" -z origin\t\tMark object requiring immediate \$ORIGIN processing\n\t\t\t at runtime\n"));
1672 fprintf (file, _(" -z KEYWORD\t\tIgnored for Solaris compatibility\n"));
1676 if test -n "$PARSE_AND_LIST_OPTIONS" ; then
1677 cat >>e${EMULATION_NAME}.c <<EOF
1678 $PARSE_AND_LIST_OPTIONS
1682 cat >>e${EMULATION_NAME}.c <<EOF
1686 if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
1687 cat >>e${EMULATION_NAME}.c <<EOF
1688 $PARSE_AND_LIST_EPILOGUE
1693 if test x"$LDEMUL_PARSE_ARGS" != xgld"$EMULATION_NAME"_parse_args; then
1694 cat >>e${EMULATION_NAME}.c <<EOF
1695 #define gld${EMULATION_NAME}_parse_args NULL
1698 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
1699 cat >>e${EMULATION_NAME}.c <<EOF
1700 #define gld${EMULATION_NAME}_list_options NULL
1705 cat >>e${EMULATION_NAME}.c <<EOF
1707 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
1709 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
1710 ${LDEMUL_SYSLIB-syslib_default},
1711 ${LDEMUL_HLL-hll_default},
1712 ${LDEMUL_AFTER_PARSE-after_parse_default},
1713 ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
1714 ${LDEMUL_AFTER_ALLOCATION-after_allocation_default},
1715 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
1716 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
1717 ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
1718 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
1719 "${EMULATION_NAME}",
1721 ${LDEMUL_FINISH-gld${EMULATION_NAME}_finish},
1722 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
1723 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive},
1724 ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
1725 ${LDEMUL_SET_SYMBOLS-NULL},
1726 ${LDEMUL_PARSE_ARGS-gld${EMULATION_NAME}_parse_args},
1727 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
1728 ${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options},
1729 ${LDEMUL_RECOGNIZED_FILE-NULL},
1730 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},