1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
4 /* This file is is generated by a shell script. DO NOT EDIT! */
6 /* Emulate the original gld for the given ${EMULATION_NAME}
7 Copyright (C) 2014-2021 Free Software Foundation, Inc.
8 Written by Steve Chamberlain steve@cygnus.com
9 Extended for the MSP430 by Nick Clifton nickc@redhat.com
11 This file is part of the GNU Binutils.
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 3 of the License, or
16 (at your option) any later version.
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26 MA 02110-1301, USA. */
28 #define TARGET_IS_${EMULATION_NAME}
43 #include "libiberty.h"
54 enum either_placement_stage
62 static int data_region = REGION_NONE;
63 static int code_region = REGION_NONE;
64 static bfd_boolean disable_sec_transformation = FALSE;
66 #define MAX_PREFIX_LENGTH 7
70 # Import any needed special functions and/or overrides.
72 if test -n "$EXTRA_EM_FILE" ; then
73 source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
76 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
80 gld${EMULATION_NAME}_before_parse (void)
82 #ifndef TARGET_ /* I.e., if not generic. */
83 ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
84 #endif /* not TARGET_ */
86 /* The MSP430 port *needs* linker relaxtion in order to cope with large
87 functions where conditional branches do not fit into a +/- 1024 byte range. */
88 if (!bfd_link_relocatable (&link_info))
89 TARGET_ENABLE_RELAXATION;
95 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
99 gld${EMULATION_NAME}_get_script (int *isfile)
102 if test x"$COMPILE_IN" = xyes
104 # Scripts compiled in.
106 # sed commands to quote an ld script as a C string.
107 sc="-f stringify.sed"
113 if (bfd_link_relocatable (&link_info) && config.build_constructors)
116 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
117 echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
118 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
119 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
120 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
121 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
122 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
123 echo ' ; else return' >> e${EMULATION_NAME}.c
124 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
125 echo '; }' >> e${EMULATION_NAME}.c
128 # Scripts read from the filesystem.
134 if (bfd_link_relocatable (&link_info) && config.build_constructors)
135 return "ldscripts/${EMULATION_NAME}.xu";
136 else if (bfd_link_relocatable (&link_info))
137 return "ldscripts/${EMULATION_NAME}.xr";
138 else if (!config.text_read_only)
139 return "ldscripts/${EMULATION_NAME}.xbn";
140 else if (!config.magic_demand_paged)
141 return "ldscripts/${EMULATION_NAME}.xn";
143 return "ldscripts/${EMULATION_NAME}.x";
149 if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
153 data_statement_size (lang_data_statement_type *d)
155 unsigned int size = 0;
172 einfo (_("%P: error: unhandled data_statement size\n"));
178 /* Helper function for place_orphan that computes the size
179 of sections already mapped to the given statement. */
182 scan_children (lang_statement_union_type * l)
184 bfd_size_type amount = 0;
188 switch (l->header.type)
190 case lang_input_section_enum:
191 if (l->input_section.section->flags & SEC_ALLOC)
192 amount += l->input_section.section->size;
195 case lang_constructors_statement_enum:
196 case lang_assignment_statement_enum:
197 case lang_padding_statement_enum:
200 case lang_wild_statement_enum:
201 amount += scan_children (l->wild_statement.children.head);
204 case lang_data_statement_enum:
205 amount += data_statement_size (&l->data_statement);
209 fprintf (stderr, "msp430 orphan placer: unhandled lang type %d\n", l->header.type);
224 #define WARN_RODATA 3
226 /* Warn only once per output section.
227 * NAME starts with ".upper." or ".lower.". */
229 warn_no_output_section (const char *name)
231 static bfd_boolean warned[2][4] = {{FALSE, FALSE, FALSE, FALSE},
232 {FALSE, FALSE, FALSE, FALSE}};
235 if (strncmp (name, ".upper.", 7) == 0)
238 if (!warned[i][WARN_TEXT] && strcmp (name + 6, ".text") == 0)
239 warned[i][WARN_TEXT] = TRUE;
240 else if (!warned[i][WARN_DATA] && strcmp (name + 6, ".data") == 0)
241 warned[i][WARN_DATA] = TRUE;
242 else if (!warned[i][WARN_BSS] && strcmp (name + 6, ".bss") == 0)
243 warned[i][WARN_BSS] = TRUE;
244 else if (!warned[i][WARN_RODATA] && strcmp (name + 6, ".rodata") == 0)
245 warned[i][WARN_RODATA] = TRUE;
248 einfo ("%P: warning: no input section rule matches %s in linker script\n",
253 /* Place an orphan section. We use this to put .either sections
254 into either their lower or their upper equivalents. */
256 static lang_output_section_statement_type *
257 gld${EMULATION_NAME}_place_orphan (asection * s,
258 const char * secname,
264 lang_output_section_statement_type * lower;
265 lang_output_section_statement_type * upper;
267 if ((s->flags & SEC_ALLOC) == 0)
270 if (bfd_link_relocatable (&link_info))
273 /* If constraints are involved let the linker handle the placement normally. */
277 if (strncmp (secname, ".upper.", 7) == 0
278 || strncmp (secname, ".lower.", 7) == 0)
280 warn_no_output_section (secname);
284 /* We only need special handling for .either sections. */
285 if (strncmp (secname, ".either.", 8) != 0)
288 /* Skip the .either prefix. */
291 /* Compute the names of the corresponding upper and lower
292 sections. If the input section name contains another period,
293 only use the part of the name before the second dot. */
294 if (strchr (secname + 1, '.') != NULL)
296 name = xstrdup (secname);
298 * strchr (name + 1, '.') = 0;
301 name = (char *) secname;
303 lower_name = concat (".lower", name, NULL);
304 upper_name = concat (".upper", name, NULL);
306 /* Find the corresponding lower and upper sections. */
307 lower = lang_output_section_find (lower_name);
308 upper = lang_output_section_find (upper_name);
310 if (lower == NULL && upper == NULL)
312 einfo (_("%P: error: no section named %s or %s in linker script\n"),
313 lower_name, upper_name);
316 else if (lower == NULL)
318 lower = lang_output_section_find (name);
321 einfo (_("%P: error: no section named %s in linker script\n"), name);
326 /* Always place orphaned sections in lower. Optimal placement of either
327 sections is performed later, once section sizes have been finalized. */
328 lang_add_section (& lower->children, s, NULL, lower);
340 change_output_section (lang_statement_union_type **head,
342 lang_output_section_statement_type *new_os,
343 lang_output_section_statement_type *old_os)
346 lang_statement_union_type * prev = NULL;
347 lang_statement_union_type * curr;
352 switch (curr->header.type)
354 case lang_input_section_enum:
355 is = curr->input_section.section;
358 lang_statement_list_type *old_list
359 = (lang_statement_list_type *) &old_os->children;
360 s->output_section = NULL;
361 lang_add_section (&new_os->children, s, NULL, new_os);
363 /* Remove the section from the old output section. */
365 *head = curr->header.next;
367 prev->header.next = curr->header.next;
368 /* If the input section we just moved is the tail of the old
369 output section, then we also need to adjust that tail. */
370 if (old_list->tail == (lang_statement_union_type **) curr)
371 old_list->tail = (lang_statement_union_type **) prev;
376 case lang_wild_statement_enum:
377 if (change_output_section (&(curr->wild_statement.children.head),
385 curr = curr->header.next;
391 add_region_prefix (bfd *abfd ATTRIBUTE_UNUSED, asection *s,
392 void *unused ATTRIBUTE_UNUSED)
394 const char *curr_name = bfd_section_name (s);
395 int region = REGION_NONE;
397 if (strncmp (curr_name, ".text", 5) == 0)
398 region = code_region;
399 else if (strncmp (curr_name, ".data", 5) == 0)
400 region = data_region;
401 else if (strncmp (curr_name, ".bss", 4) == 0)
402 region = data_region;
403 else if (strncmp (curr_name, ".rodata", 7) == 0)
404 region = data_region;
413 bfd_rename_section (s, concat (".upper", curr_name, NULL));
416 bfd_rename_section (s, concat (".lower", curr_name, NULL));
419 s->name = concat (".either", curr_name, NULL);
429 msp430_elf_after_open (void)
433 gld${EMULATION_NAME}_after_open ();
435 /* If neither --code-region or --data-region have been passed, do not
436 transform sections names. */
437 if ((code_region == REGION_NONE && data_region == REGION_NONE)
438 || disable_sec_transformation)
441 for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link.next)
442 bfd_map_over_sections (abfd, add_region_prefix, NULL);
445 #define OPTION_CODE_REGION 321
446 #define OPTION_DATA_REGION (OPTION_CODE_REGION + 1)
447 #define OPTION_DISABLE_TRANS (OPTION_CODE_REGION + 2)
450 gld${EMULATION_NAME}_add_options
451 (int ns, char **shortopts, int nl, struct option **longopts,
452 int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
454 static const char xtra_short[] = { };
456 static const struct option xtra_long[] =
458 { "code-region", required_argument, NULL, OPTION_CODE_REGION },
459 { "data-region", required_argument, NULL, OPTION_DATA_REGION },
460 { "disable-sec-transformation", no_argument, NULL,
461 OPTION_DISABLE_TRANS },
462 { NULL, no_argument, NULL, 0 }
465 *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
466 memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
467 *longopts = (struct option *)
468 xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
469 memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
473 gld${EMULATION_NAME}_list_options (FILE * file)
475 fprintf (file, _(" --code-region={either,lower,upper,none}\n\
476 Transform .text* sections to {either,lower,upper,none}.text* sections\n"));
477 fprintf (file, _(" --data-region={either,lower,upper,none}\n\
478 Transform .data*, .rodata* and .bss* sections to\n\
479 {either,lower,upper,none}.{bss,data,rodata}* sections\n"));
480 fprintf (file, _(" --disable-sec-transformation\n\
481 Disable transformation of .{text,data,bss,rodata}* sections to\n\
482 add the {either,lower,upper,none} prefixes\n"));
486 gld${EMULATION_NAME}_handle_option (int optc)
490 case OPTION_CODE_REGION:
491 if (strcmp (optarg, "upper") == 0)
492 code_region = REGION_UPPER;
493 else if (strcmp (optarg, "lower") == 0)
494 code_region = REGION_LOWER;
495 else if (strcmp (optarg, "either") == 0)
496 code_region = REGION_EITHER;
497 else if (strcmp (optarg, "none") == 0)
498 code_region = REGION_NONE;
499 else if (strlen (optarg) == 0)
501 einfo (_("%P: --code-region requires an argument: "
502 "{upper,lower,either,none}\n"));
507 einfo (_("%P: error: unrecognized argument to --code-region= option: "
508 "\"%s\"\n"), optarg);
513 case OPTION_DATA_REGION:
514 if (strcmp (optarg, "upper") == 0)
515 data_region = REGION_UPPER;
516 else if (strcmp (optarg, "lower") == 0)
517 data_region = REGION_LOWER;
518 else if (strcmp (optarg, "either") == 0)
519 data_region = REGION_EITHER;
520 else if (strcmp (optarg, "none") == 0)
521 data_region = REGION_NONE;
522 else if (strlen (optarg) == 0)
524 einfo (_("%P: --data-region requires an argument: "
525 "{upper,lower,either,none}\n"));
530 einfo (_("%P: error: unrecognized argument to --data-region= option: "
531 "\"%s\"\n"), optarg);
536 case OPTION_DISABLE_TRANS:
537 disable_sec_transformation = TRUE;
547 eval_upper_either_sections (bfd *abfd ATTRIBUTE_UNUSED,
548 asection *s, void *data)
550 const char * base_sec_name;
551 const char * curr_name;
555 lang_output_section_statement_type * lower;
556 lang_output_section_statement_type * upper;
557 static bfd_size_type *lower_size = 0;
558 static bfd_size_type *upper_size = 0;
559 static bfd_size_type lower_size_rom = 0;
560 static bfd_size_type lower_size_ram = 0;
561 static bfd_size_type upper_size_rom = 0;
562 static bfd_size_type upper_size_ram = 0;
564 if ((s->flags & SEC_ALLOC) == 0)
566 if (bfd_link_relocatable (&link_info))
569 base_sec_name = (const char *) data;
570 curr_name = bfd_section_name (s);
572 /* Only concerned with .either input sections in the upper output section. */
573 either_name = concat (".either", base_sec_name, NULL);
574 if (strncmp (curr_name, either_name, strlen (either_name)) != 0
575 || strncmp (s->output_section->name, ".upper", 6) != 0)
578 lower = lang_output_section_find (concat (".lower", base_sec_name, NULL));
579 upper = lang_output_section_find (concat (".upper", base_sec_name, NULL));
581 if (upper == NULL || upper->region == NULL)
583 else if (lower == NULL)
584 lower = lang_output_section_find (base_sec_name);
585 if (lower == NULL || lower->region == NULL)
588 if (strcmp (base_sec_name, ".text") == 0
589 || strcmp (base_sec_name, ".rodata") == 0)
594 if (curr_region == ROM)
596 if (lower_size_rom == 0)
598 lower_size_rom = lower->region->current - lower->region->origin;
599 upper_size_rom = upper->region->current - upper->region->origin;
601 lower_size = &lower_size_rom;
602 upper_size = &upper_size_rom;
604 else if (curr_region == RAM)
606 if (lower_size_ram == 0)
608 lower_size_ram = lower->region->current - lower->region->origin;
609 upper_size_ram = upper->region->current - upper->region->origin;
611 lower_size = &lower_size_ram;
612 upper_size = &upper_size_ram;
615 /* If the upper region is overflowing, try moving sections to the lower
617 Note that there isn't any general benefit to using lower memory over upper
618 memory, so we only move sections around with the goal of making the program
620 if (*upper_size > upper->region->length
621 && *lower_size + s->size < lower->region->length)
623 if (change_output_section (&(upper->children.head), s, lower, upper))
625 *upper_size -= s->size;
626 *lower_size += s->size;
634 eval_lower_either_sections (bfd *abfd ATTRIBUTE_UNUSED,
635 asection *s, void *data)
637 const char * base_sec_name;
638 const char * curr_name;
641 lang_output_section_statement_type * output_sec;
642 lang_output_section_statement_type * lower;
643 lang_output_section_statement_type * upper;
645 static bfd_size_type *lower_size = 0;
646 static bfd_size_type lower_size_rom = 0;
647 static bfd_size_type lower_size_ram = 0;
649 if ((s->flags & SEC_ALLOC) == 0)
651 if (bfd_link_relocatable (&link_info))
654 base_sec_name = (const char *) data;
655 curr_name = bfd_section_name (s);
657 /* Only concerned with .either input sections in the lower or "default"
658 output section i.e. not in the upper output section. */
659 either_name = concat (".either", base_sec_name, NULL);
660 if (strncmp (curr_name, either_name, strlen (either_name)) != 0
661 || strncmp (s->output_section->name, ".upper", 6) == 0)
664 if (strcmp (base_sec_name, ".text") == 0
665 || strcmp (base_sec_name, ".rodata") == 0)
670 output_sec = lang_output_section_find (s->output_section->name);
672 /* If the output_section doesn't exist, this has already been reported in
673 place_orphan, so don't need to warn again. */
674 if (output_sec == NULL || output_sec->region == NULL)
677 /* lower and output_sec might be the same, but in some cases an .either
678 section can end up in base_sec_name if it hasn't been placed by
680 lower = lang_output_section_find (concat (".lower", base_sec_name, NULL));
681 upper = lang_output_section_find (concat (".upper", base_sec_name, NULL));
685 if (curr_region == ROM)
687 if (lower_size_rom == 0)
689 /* Get the size of other items in the lower region that aren't the
690 sections to be moved around. */
692 = (output_sec->region->current - output_sec->region->origin)
693 - scan_children (output_sec->children.head);
694 if (output_sec != lower && lower != NULL)
695 lower_size_rom -= scan_children (lower->children.head);
697 lower_size = &lower_size_rom;
699 else if (curr_region == RAM)
701 if (lower_size_ram == 0)
704 = (output_sec->region->current - output_sec->region->origin)
705 - scan_children (output_sec->children.head);
706 if (output_sec != lower && lower != NULL)
707 lower_size_ram -= scan_children (lower->children.head);
709 lower_size = &lower_size_ram;
711 /* Move sections that cause the lower region to overflow to the upper region. */
712 if (*lower_size + s->size > output_sec->region->length)
713 change_output_section (&(output_sec->children.head), s, upper, output_sec);
715 *lower_size += s->size;
720 /* This function is similar to lang_relax_sections, but without the size
721 evaluation code that is always executed after relaxation. */
723 intermediate_relax_sections (void)
725 int i = link_info.relax_pass;
727 /* The backend can use it to determine the current pass. */
728 link_info.relax_pass = 0;
732 bfd_boolean relax_again;
734 link_info.relax_trip = -1;
737 link_info.relax_trip++;
739 lang_do_assignments (lang_assigning_phase_enum);
741 lang_reset_memory_regions ();
744 lang_size_sections (&relax_again, FALSE);
748 link_info.relax_pass++;
753 msp430_elf_after_allocation (void)
757 /* Go over each section twice, once to place either sections that don't fit
758 in lower into upper, and then again to move any sections in upper that
759 fit in lower into lower. */
760 for (i = 0; i < 8; i++)
762 int placement_stage = (i < 4) ? LOWER_TO_UPPER : UPPER_TO_LOWER;
763 const char * base_sec_name;
764 lang_output_section_statement_type * upper;
770 base_sec_name = ".text";
773 base_sec_name = ".data";
776 base_sec_name = ".bss";
779 base_sec_name = ".rodata";
782 upper = lang_output_section_find (concat (".upper", base_sec_name, NULL));
785 /* Can't just use one iteration over the all the sections to make
786 both lower->upper and upper->lower transformations because the
787 iterator encounters upper sections before all lower sections have
791 if (placement_stage == LOWER_TO_UPPER)
793 /* Perform relaxation and get the final size of sections
794 before trying to fit .either sections in the correct
796 if (relax_count == 0)
798 intermediate_relax_sections ();
801 for (abfd = link_info.input_bfds; abfd != NULL;
802 abfd = abfd->link.next)
804 bfd_map_over_sections (abfd, eval_lower_either_sections,
805 (void *) base_sec_name);
808 else if (placement_stage == UPPER_TO_LOWER)
810 /* Relax again before moving upper->lower. */
811 if (relax_count == 1)
813 intermediate_relax_sections ();
816 for (abfd = link_info.input_bfds; abfd != NULL;
817 abfd = abfd->link.next)
819 bfd_map_over_sections (abfd, eval_upper_either_sections,
820 (void *) base_sec_name);
826 gld${EMULATION_NAME}_after_allocation ();
829 /* Return TRUE if a non-debug input section in L has positive size and matches
832 input_section_exists (lang_statement_union_type * l, const char * name)
836 switch (l->header.type)
838 case lang_input_section_enum:
839 if ((l->input_section.section->flags & SEC_ALLOC)
840 && l->input_section.section->size > 0
841 && !strcmp (l->input_section.section->name, name))
845 case lang_wild_statement_enum:
846 if (input_section_exists (l->wild_statement.children.head, name))
858 /* Some MSP430 linker scripts do not include ALIGN directives to ensure
859 __preinit_array_start, __init_array_start or __fini_array_start are word
861 If __*_array_start symbols are not word aligned, the code in crt0 to run
862 through the array and call the functions will crash.
863 To avoid warning unnecessarily when the .*_array sections are not being
864 used for running constructors/destructors, only emit the warning if
865 the associated section exists and has size. */
867 check_array_section_alignment (void)
870 lang_output_section_statement_type * rodata_sec;
871 lang_output_section_statement_type * rodata2_sec;
872 const char * array_names[3][2] = { { ".init_array", "__init_array_start" },
873 { ".preinit_array", "__preinit_array_start" },
874 { ".fini_array", "__fini_array_start" } };
876 /* .{preinit,init,fini}_array could be in either .rodata or .rodata2. */
877 rodata_sec = lang_output_section_find (".rodata");
878 rodata2_sec = lang_output_section_find (".rodata2");
879 if (rodata_sec == NULL && rodata2_sec == NULL)
882 /* There are 3 .*_array sections which must be checked for alignment. */
883 for (i = 0; i < 3; i++)
885 struct bfd_link_hash_entry * sym;
886 if (((rodata_sec && input_section_exists (rodata_sec->children.head,
888 || (rodata2_sec && input_section_exists (rodata2_sec->children.head,
890 && (sym = bfd_link_hash_lookup (link_info.hash, array_names[i][1],
892 && sym->type == bfd_link_hash_defined
893 && sym->u.def.value % 2)
895 einfo ("%P: warning: \"%s\" symbol (%pU) is not word aligned\n",
896 array_names[i][1], NULL);
902 gld${EMULATION_NAME}_finish (void)
905 check_array_section_alignment ();
908 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
910 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
911 ${LDEMUL_SYSLIB-syslib_default},
912 ${LDEMUL_HLL-hll_default},
913 ${LDEMUL_AFTER_PARSE-after_parse_default},
914 msp430_elf_after_open,
915 after_check_relocs_default,
916 before_place_orphans_default,
917 msp430_elf_after_allocation,
918 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
919 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
920 ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
921 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
924 gld${EMULATION_NAME}_finish,
925 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
926 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
927 ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan},
928 ${LDEMUL_SET_SYMBOLS-NULL},
929 ${LDEMUL_PARSE_ARGS-NULL},
930 gld${EMULATION_NAME}_add_options,
931 gld${EMULATION_NAME}_handle_option,
932 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
933 gld${EMULATION_NAME}_list_options,
934 ${LDEMUL_RECOGNIZED_FILE-NULL},
935 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
936 ${LDEMUL_NEW_VERS_PATTERN-NULL},
937 ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
938 ${LDEMUL_EMIT_CTF_EARLY-NULL},
939 ${LDEMUL_ACQUIRE_STRINGS_FOR_CTF-NULL},
940 ${LDEMUL_NEW_DYNSYM_FOR_CTF-NULL},
941 ${LDEMUL_PRINT_SYMBOL-NULL}