# This shell script emits a C file. -*- C -*- # LDEMUL_GET_SCRIPT=${EMULATION_NAME}_get_script LDEMUL_AFTER_PARSE=${EMULATION_NAME}_after_parse LDEMUL_RECOGNIZED_FILE=${EMULATION_NAME}_recognized_file LDEMUL_ALLOW_DYNAMIC_ENTRIES_IN_RELOCATABLE_LINK=\ ${EMULATION_NAME}_allow_dynamic_entries_in_relocatable_link fragment <name, ".pack_pure_eir") == 0; } static bfd_boolean ${LDEMUL_RECOGNIZED_FILE} (lang_input_statement_type *entry) { if (link_mixed_eir != 0 && (entry->the_bfd->flags & DYNAMIC) != 0) return TRUE; if (ignore_pure_eir_files && bfd_sections_find_if (entry->the_bfd, pure_eir_finder, NULL)) return TRUE; /* Otherwise, the standard implementation from 'elf32.em' will do. */ return gld${EMULATION_NAME}_load_symbols (entry); } static bfd_boolean ${LDEMUL_ALLOW_DYNAMIC_ENTRIES_IN_RELOCATABLE_LINK} (void) { if (link_mixed_eir != 0) return TRUE; return FALSE; } EOF PARSE_AND_LIST_PROLOGUE=' #define OPTION_LINK_MIXED_EIR 301 #define OPTION_BINARY_EIR_OUTPUT 302 #define OPTION_MARK_REGULAR_OBJECTS 303 #define OPTION_START_REGULAR_OBJECTS 304 #define OPTION_END_REGULAR_OBJECTS 305 #define OPTION_IGNORE_PURE_EIR_FILES 306 ' PARSE_AND_LIST_LONGOPTS=' { "link-mixed-eir", required_argument, NULL, OPTION_LINK_MIXED_EIR }, { "binary-eir-output", no_argument, NULL, OPTION_BINARY_EIR_OUTPUT}, { "mark-regular-objects", no_argument, NULL, OPTION_MARK_REGULAR_OBJECTS}, { "start-regular-objects", no_argument, NULL, OPTION_START_REGULAR_OBJECTS}, { "end-regular-objects", no_argument, NULL, OPTION_END_REGULAR_OBJECTS}, { "ignore-pure-eir-files", no_argument, NULL, OPTION_IGNORE_PURE_EIR_FILES}, ' PARSE_AND_LIST_OPTIONS=' fprintf (file, _(" --link-mixed-eir={1,2,3}\n")); fprintf (file, _("\t\t\tLink mixed EIR\n")); ' PARSE_AND_LIST_ARGS_CASES=' case OPTION_LINK_MIXED_EIR: if ((optarg[0] != '\''1'\'' && optarg[0] != '\''2'\'' && optarg[0] != '\''3'\'') || optarg[1] != '\''\0'\'') einfo (_("%P%F: invalid value for `--link-mixed-eir'\'' option: '\''%s'\''\n"), optarg); link_mixed_eir = optarg[0] - '\''0'\''; break; case OPTION_BINARY_EIR_OUTPUT: break; case OPTION_MARK_REGULAR_OBJECTS: mark_objects = TRUE; break; case OPTION_START_REGULAR_OBJECTS: inside_marked_objects = TRUE; break; case OPTION_END_REGULAR_OBJECTS: inside_marked_objects = FALSE; break; case OPTION_IGNORE_PURE_EIR_FILES: ignore_pure_eir_files = TRUE; break; case 1: if (!mark_objects || inside_marked_objects) return FALSE; { bfd_boolean ret = FALSE; bfd *abfd = bfd_openr (optarg, "default"); if (abfd == NULL) return FALSE; if (bfd_check_format (abfd, bfd_object)) ret = TRUE; bfd_close (abfd); return ret; } break; '