diff options
Diffstat (limited to 'ld')
91 files changed, 916 insertions, 447 deletions
diff --git a/ld/emulparams/call_nop.sh b/ld/emulparams/call_nop.sh index 2c3c305..7dd6dfb 100644 --- a/ld/emulparams/call_nop.sh +++ b/ld/emulparams/call_nop.sh @@ -20,7 +20,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_CALL_NOP=' char *end; params.call_nop_byte = strtoul (optarg + 16 , &end, 0); if (*end) - einfo (_("%F%P: invalid number for -z call-nop=prefix-: %s\n"), + fatal (_("%P: invalid number for -z call-nop=prefix-: %s\n"), optarg + 16); params.call_nop_as_suffix = false; } @@ -29,12 +29,12 @@ PARSE_AND_LIST_ARGS_CASE_Z_CALL_NOP=' char *end; params.call_nop_byte = strtoul (optarg + 16, &end, 0); if (*end) - einfo (_("%F%P: invalid number for -z call-nop=suffix-: %s\n"), + fatal (_("%P: invalid number for -z call-nop=suffix-: %s\n"), optarg + 16); params.call_nop_as_suffix = true; } else - einfo (_("%F%P: unsupported option: -z %s\n"), optarg); + fatal (_("%P: unsupported option: -z %s\n"), optarg); } ' diff --git a/ld/emulparams/cet.sh b/ld/emulparams/cet.sh index 2c62799..e463441 100644 --- a/ld/emulparams/cet.sh +++ b/ld/emulparams/cet.sh @@ -29,7 +29,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_CET=' | prop_report_ibt | prop_report_shstk); else - einfo (_("%F%P: invalid option for -z cet-report=: %s\n"), + fatal (_("%P: invalid option for -z cet-report=: %s\n"), optarg + 11); } ' diff --git a/ld/emulparams/elf32mcore.sh b/ld/emulparams/elf32mcore.sh index 7d433fc..dc0f5d0 100644 --- a/ld/emulparams/elf32mcore.sh +++ b/ld/emulparams/elf32mcore.sh @@ -42,6 +42,6 @@ PARSE_AND_LIST_ARGS_CASES=' case OPTION_BASE_FILE: link_info.base_file = fopen (optarg, FOPEN_WB); if (link_info.base_file == NULL) - einfo (_("%F%P: cannot open base file %s\n"), optarg); + fatal (_("%P: cannot open base file %s\n"), optarg); break; ' diff --git a/ld/emulparams/x86-64-lam.sh b/ld/emulparams/x86-64-lam.sh index fab42ff..6e629eb 100644 --- a/ld/emulparams/x86-64-lam.sh +++ b/ld/emulparams/x86-64-lam.sh @@ -25,7 +25,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_LAM=' else if (strcmp (optarg + 15, "error") == 0) params.lam_u48_report = prop_report_error; else - einfo (_("%F%P: invalid option for -z lam-u48-report=: %s\n"), + fatal (_("%P: invalid option for -z lam-u48-report=: %s\n"), optarg + 15); } else if (strcmp (optarg, "lam-u57") == 0) @@ -39,7 +39,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_LAM=' else if (strcmp (optarg + 15, "error") == 0) params.lam_u57_report = prop_report_error; else - einfo (_("%F%P: invalid option for -z lam-u57-report=: %s\n"), + fatal (_("%P: invalid option for -z lam-u57-report=: %s\n"), optarg + 15); } else if (strncmp (optarg, "lam-report=", 11) == 0) @@ -60,7 +60,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_LAM=' params.lam_u57_report = prop_report_error; } else - einfo (_("%F%P: invalid option for -z lam-report=: %s\n"), + fatal (_("%P: invalid option for -z lam-report=: %s\n"), optarg + 11); } ' diff --git a/ld/emulparams/x86-64-level-report.sh b/ld/emulparams/x86-64-level-report.sh index 5185277..0463ad9 100644 --- a/ld/emulparams/x86-64-level-report.sh +++ b/ld/emulparams/x86-64-level-report.sh @@ -16,7 +16,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_X86_64_LEVEL_REPORT=' else if (strcmp (optarg + 17, "used") == 0) params.isa_level_report = isa_level_report_used; else - einfo (_("%F%P: invalid option for -z isa-level-report=: %s\n"), + fatal (_("%P: invalid option for -z isa-level-report=: %s\n"), optarg + 17); } ' diff --git a/ld/emulparams/x86-64-level.sh b/ld/emulparams/x86-64-level.sh index c46aacf..7e27cf1 100644 --- a/ld/emulparams/x86-64-level.sh +++ b/ld/emulparams/x86-64-level.sh @@ -10,7 +10,7 @@ PARSE_AND_LIST_ARGS_CASE_Z_X86_64_LEVEL=' char *end; unsigned int level = strtoul (optarg + 8 , &end, 10); if (*end != '\0' || level < 2 || level > 4) - einfo (_("%F%P: invalid x86-64 ISA level: %s\n"), optarg); + fatal (_("%P: invalid x86-64 ISA level: %s\n"), optarg); params.isa_level = level; } ' diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em index 7791aab..afa91af 100644 --- a/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em @@ -324,7 +324,7 @@ aarch64_elf_create_output_section_statements (void) These will only be created if the output format is an AArch64 format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format " + fatal (_("%P: error: cannot change output format " "whilst linking %s binaries\n"), "AArch64"); return; } @@ -346,7 +346,7 @@ aarch64_elf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -583,7 +583,7 @@ PARSE_AND_LIST_ARGS_CASES=' group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; ' diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index d69e13c..7754c16 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -307,7 +307,7 @@ read_file_list (const char *filename) f = fopen (filename, FOPEN_RT); if (f == NULL) { - einfo (_("%F%P: cannot open %s\n"), filename); + fatal (_("%P: cannot open %s\n"), filename); return; } if (fseek (f, 0L, SEEK_END) == -1) @@ -354,8 +354,8 @@ read_file_list (const char *filename) return; error: - einfo (_("%F%P: cannot read %s\n"), optarg); fclose (f); + fatal (_("%P: cannot read %s\n"), optarg); } static bool @@ -706,7 +706,7 @@ gld${EMULATION_NAME}_after_open (void) size = (p->count + 2) * 4; if (!bfd_xcoff_link_record_set (link_info.output_bfd, &link_info, p->h, size)) - einfo (_("%F%P: bfd_xcoff_link_record_set failed: %E\n")); + fatal (_("%P: bfd_xcoff_link_record_set failed: %E\n")); } } @@ -736,9 +736,9 @@ gld${EMULATION_NAME}_before_allocation (void) h = bfd_link_hash_lookup (link_info.hash, el->name, false, false, false); if (h == NULL) - einfo (_("%F%P: bfd_link_hash_lookup of export symbol failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup of export symbol failed: %E\n")); if (!bfd_xcoff_export_symbol (link_info.output_bfd, &link_info, h)) - einfo (_("%F%P: bfd_xcoff_export_symbol failed: %E\n")); + fatal (_("%P: bfd_xcoff_export_symbol failed: %E\n")); } /* Track down all relocations called for by the linker script (these @@ -821,7 +821,7 @@ gld${EMULATION_NAME}_before_allocation (void) (link_info.output_bfd, &link_info, libpath, entry_symbol.name, file_align, maxstack, maxdata, gc && !unix_ld, modtype, textro, flags, special_sections, rtld)) - einfo (_("%F%P: failed to set dynamic section sizes: %E\n")); + fatal (_("%P: failed to set dynamic section sizes: %E\n")); /* Look through the special sections, and put them in the right place in the link ordering. This is especially magic. */ @@ -843,8 +843,8 @@ gld${EMULATION_NAME}_before_allocation (void) is = NULL; os = lang_output_section_get (sec->output_section); if (os == NULL) - einfo (_("%F%P: can't find output section %s\n"), - sec->output_section->name); + fatal (_("%P: can't find output section %pA\n"), + sec->output_section); for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->header.next) { @@ -880,8 +880,7 @@ gld${EMULATION_NAME}_before_allocation (void) if (is == NULL) { - einfo (_("%F%P: can't find %s in output section\n"), - bfd_section_name (sec)); + fatal (_("%P: can't find %pA in output section\n"), sec); } /* Now figure out where the section should go. */ @@ -1134,7 +1133,7 @@ gld${EMULATION_NAME}_after_allocation (void) /* Now that everything is in place, finalize the dynamic sections. */ if (!bfd_xcoff_build_dynamic_sections (link_info.output_bfd, &link_info)) - einfo (_("%F%P: failed to layout dynamic sections: %E\n")); + fatal (_("%P: failed to layout dynamic sections: %E\n")); if (!bfd_link_relocatable (&link_info)) { @@ -1285,7 +1284,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bool import) if (f == NULL) { bfd_set_error (bfd_error_system_call); - einfo ("%F%P: %s: %E\n", filename); + fatal ("%P: %s: %E\n", filename); return; } @@ -1347,7 +1346,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bool import) obstack_free (o, obstack_base (o)); } else if (*s == '(') - einfo (_("%F%P:%s:%d: #! ([member]) is not supported " + fatal (_("%P:%s:%d: #! ([member]) is not supported " "in import files\n"), filename, linenumber); else @@ -1364,7 +1363,7 @@ gld${EMULATION_NAME}_read_file (const char *filename, bool import) *s = '\0'; if (!bfd_xcoff_split_import_path (link_info.output_bfd, start, &imppath, &impfile)) - einfo (_("%F%P: could not parse import path: %E\n")); + fatal (_("%P: could not parse import path: %E\n")); while (ISSPACE (cs)) { ++s; @@ -1519,10 +1518,10 @@ gld${EMULATION_NAME}_find_relocs (lang_statement_union_type *s) rs = &s->reloc_statement; if (rs->name == NULL) - einfo (_("%F%P: only relocations against symbols are permitted\n")); + fatal (_("%P: only relocations against symbols are permitted\n")); if (!bfd_xcoff_link_count_reloc (link_info.output_bfd, &link_info, rs->name)) - einfo (_("%F%P: bfd_xcoff_link_count_reloc failed: %E\n")); + fatal (_("%P: bfd_xcoff_link_count_reloc failed: %E\n")); } if (s->header.type == lang_assignment_statement_enum) @@ -1551,7 +1550,7 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp) if (!bfd_xcoff_record_link_assignment (link_info.output_bfd, &link_info, exp->assign.dst)) - einfo (_("%F%P: failed to record assignment to %s: %E\n"), + fatal (_("%P: failed to record assignment to %s: %E\n"), exp->assign.dst); } gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src); @@ -1646,7 +1645,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create stub BFD: %E\n")); + fatal (_("%P: can not create stub BFD: %E\n")); return; } @@ -1656,7 +1655,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void) /* Pass linker params to the back-end. */ if (!bfd_xcoff_link_init (&link_info, ¶ms)) - einfo (_("%F%P: can not init BFD: %E\n")); + fatal (_("%P: can not init BFD: %E\n")); /* __rtinit */ if (link_info.init_function != NULL @@ -1673,7 +1672,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -1683,7 +1682,7 @@ gld${EMULATION_NAME}_create_output_section_statements (void) link_info.fini_function, rtld)) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em index 02a97e7..6f652c5 100644 --- a/ld/emultempl/armelf.em +++ b/ld/emultempl/armelf.em @@ -521,7 +521,7 @@ arm_elf_create_output_section_statements (void) These will only be created if the output format is an arm format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format " + fatal (_("%P: error: cannot change output format " "whilst linking %s binaries\n"), "ARM"); return; } @@ -532,10 +532,10 @@ arm_elf_create_output_section_statements (void) bfd_get_target (link_info.output_bfd)); if (params.in_implib_bfd == NULL) - einfo (_("%F%P: %s: can't open: %E\n"), in_implib_filename); + fatal (_("%P: %s: can't open: %E\n"), in_implib_filename); if (!bfd_check_format (params.in_implib_bfd, bfd_object)) - einfo (_("%F%P: %s: not a relocatable file: %E\n"), in_implib_filename); + fatal (_("%P: %s: not a relocatable file: %E\n"), in_implib_filename); } bfd_elf32_arm_set_target_params (link_info.output_bfd, &link_info, ¶ms); @@ -549,7 +549,7 @@ arm_elf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -709,7 +709,7 @@ PARSE_AND_LIST_ARGS_CASES=' group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; diff --git a/ld/emultempl/avrelf.em b/ld/emultempl/avrelf.em index 0945702..ad2de99 100644 --- a/ld/emultempl/avrelf.em +++ b/ld/emultempl/avrelf.em @@ -116,7 +116,7 @@ avr_elf_create_output_section_statements (void) if (bfd_get_flavour (link_info.output_bfd) != bfd_target_elf_flavour) { - einfo (_("%F%P: error: cannot change output format " + fatal (_("%P: error: cannot change output format " "whilst linking %s binaries\n"), "AVR"); return; } diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em index 52e615b..4082449 100644 --- a/ld/emultempl/beos.em +++ b/ld/emultempl/beos.em @@ -210,7 +210,7 @@ set_pe_subsystem (void) return; } } - einfo (_("%F%P: invalid subsystem type %s\n"), optarg); + fatal (_("%P: invalid subsystem type %s\n"), optarg); } @@ -220,9 +220,7 @@ set_pe_value (char *name) char *end; set_pe_name (name, strtoul (optarg, &end, 0)); if (end == optarg) - { - einfo (_("%F%P: invalid hex number for PE parameter '%s'\n"), optarg); - } + fatal (_("%P: invalid hex number for PE parameter '%s'\n"), optarg); optarg = end; } @@ -237,9 +235,7 @@ set_pe_stack_heap (char *resname, char *comname) set_pe_value (comname); } else if (*optarg) - { - einfo (_("%F%P: strange hex info for PE parameter '%s'\n"), optarg); - } + fatal (_("%P: strange hex info for PE parameter '%s'\n"), optarg); } @@ -254,7 +250,7 @@ gld${EMULATION_NAME}_handle_option (int optc) case OPTION_BASE_FILE: link_info.base_file = fopen (optarg, FOPEN_WB); if (link_info.base_file == NULL) - einfo (_("%F%P: cannot open base file %s\n"), optarg); + fatal (_("%P: cannot open base file %s\n"), optarg); break; /* PE options */ @@ -363,9 +359,7 @@ gld${EMULATION_NAME}_after_open (void) FIXME: This should be done via a function, rather than by including an internal BFD header. */ if (!obj_pe (link_info.output_bfd)) - { - einfo (_("%F%P: PE operations on non PE file\n")); - } + fatal (_("%P: PE operations on non PE file\n")); pe_data(link_info.output_bfd)->pe_opthdr = pe; pe_data(link_info.output_bfd)->dll = init[DLLOFF].value; @@ -414,12 +408,12 @@ sort_by_file_name (const void *a, const void *b) if (!bfd_get_section_contents (sa->owner, sa, &a_sec, (file_ptr) 0, (bfd_size_type) sizeof (a_sec))) - einfo (_("%F%P: %pB: can't read contents of section .idata: %E\n"), + fatal (_("%P: %pB: can't read contents of section .idata: %E\n"), sa->owner); if (!bfd_get_section_contents (sb->owner, sb, &b_sec, (file_ptr) 0, (bfd_size_type) sizeof (b_sec))) - einfo (_("%F%P: %pB: can't read contents of section .idata: %E\n"), + fatal (_("%P: %pB: can't read contents of section .idata: %E\n"), sb->owner); i = a_sec < b_sec ? -1 : 0; @@ -651,7 +645,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, /* Everything from the '\$' on gets deleted so don't allow '\$' as the first character. */ if (*secname == '\$') - einfo (_("%F%P: section %s has '\$' as first character\n"), secname); + fatal (_("%P: section %s has '\$' as first character\n"), secname); if (strchr (secname + 1, '\$') == NULL) return NULL; @@ -681,7 +675,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, } ps[0] = 0; if (l == NULL) - einfo (_("%F%P: *(%s\$) missing from linker script\n"), output_secname); + fatal (_("%P: *(%s\$) missing from linker script\n"), output_secname); /* Link the input section in and we're done for now. The sections still have to be sorted, but that has to wait until diff --git a/ld/emultempl/cr16elf.em b/ld/emultempl/cr16elf.em index 27e616a..69ad393 100644 --- a/ld/emultempl/cr16elf.em +++ b/ld/emultempl/cr16elf.em @@ -58,7 +58,7 @@ cr16_elf_after_open (void) COFF and ELF. */ if (bfd_get_flavour (abfd) != bfd_target_coff_flavour && bfd_get_flavour (abfd) != bfd_target_elf_flavour) - einfo (_("%F%P: %pB: all input objects must be COFF or ELF " + fatal (_("%P: %pB: all input objects must be COFF or ELF " "for --embedded-relocs\n")); datasec = bfd_get_section_by_name (abfd, ".data.rel"); @@ -82,7 +82,7 @@ cr16_elf_after_open (void) | SEC_IN_MEMORY)) || !bfd_set_section_alignment (relsec, 2) || !bfd_set_section_size (relsec, datasec->reloc_count * 8)) - einfo (_("%F%P: %pB: can not create .emreloc section: %E\n")); + fatal (_("%P: %pB: can not create .emreloc section: %E\n")); } /* Double check that all other data sections are empty, as is diff --git a/ld/emultempl/cskyelf.em b/ld/emultempl/cskyelf.em index ab7f965..525e99b 100644 --- a/ld/emultempl/cskyelf.em +++ b/ld/emultempl/cskyelf.em @@ -151,7 +151,7 @@ csky_elf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -318,7 +318,7 @@ PARSE_AND_LIST_ARGS_CASES=' group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; ' diff --git a/ld/emultempl/elf-x86.em b/ld/emultempl/elf-x86.em index 8546923..f72a0cd 100644 --- a/ld/emultempl/elf-x86.em +++ b/ld/emultempl/elf-x86.em @@ -73,3 +73,44 @@ EOF LDEMUL_BEFORE_PARSE=elf_x86_64_before_parse ;; esac + +case x${OUTPUT_FORMAT} in + x*x86-64*) +fragment <<EOF + +static void +elf_x86_64_before_allocation (void) +{ + if (!bfd_link_relocatable (&link_info) + && is_elf_hash_table (link_info.hash) + && expld.phase != lang_mark_phase_enum) + { + struct elf_link_hash_table *htab = elf_hash_table (&link_info); + /* Run one_lang_size_sections_pass to estimate the output section + layout before sizing dynamic sections. */ + expld.dataseg.phase = exp_seg_none; + expld.phase = lang_mark_phase_enum; + /* NB: Exclude linker created GOT setions when estimating output + section layout as sizing dynamic sections may change linker + created GOT sections. */ + if (htab->sgot != NULL) + htab->sgot->flags |= SEC_EXCLUDE; + if (htab->sgotplt != NULL) + htab->sgotplt->flags |= SEC_EXCLUDE; + one_lang_size_sections_pass (NULL, false); + /* Restore linker created GOT setions. */ + if (htab->sgot != NULL) + htab->sgot->flags &= ~SEC_EXCLUDE; + if (htab->sgotplt != NULL) + htab->sgotplt->flags &= ~SEC_EXCLUDE; + lang_reset_memory_regions (); + } + + gld${EMULATION_NAME}_before_allocation (); +} + +EOF + +LDEMUL_BEFORE_ALLOCATION=elf_x86_64_before_allocation + ;; +esac diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em index 9dcb52e..431205f 100644 --- a/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em @@ -886,12 +886,12 @@ gld${EMULATION_NAME}_handle_option (int optc) { #ifndef HAVE_ZSTD if (config.compress_debug == COMPRESS_DEBUG_ZSTD) - einfo (_ ("%F%P: --compress-debug-sections=zstd: ld is not built " - "with zstd support\n")); + fatal (_("%P: --compress-debug-sections=zstd: ld is not built " + "with zstd support\n")); #endif } if (config.compress_debug == COMPRESS_UNKNOWN) - einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"), + fatal (_("%P: invalid --compress-debug-sections option: \`%s'\n"), optarg); break; @@ -953,7 +953,7 @@ fragment <<EOF link_info.emit_gnu_hash = true; } else - einfo (_("%F%P: invalid hash style \`%s'\n"), optarg); + fatal (_("%P: invalid hash style \`%s'\n"), optarg); break; EOF @@ -973,7 +973,7 @@ fragment <<EOF link_info.maxpagesize = strtoul (optarg + 14, &end, 0); if (*end || (link_info.maxpagesize & (link_info.maxpagesize - 1)) != 0) - einfo (_("%F%P: invalid maximum page size \`%s'\n"), + fatal (_("%P: invalid maximum page size \`%s'\n"), optarg + 14); link_info.maxpagesize_is_set = true; } @@ -983,7 +983,7 @@ fragment <<EOF link_info.commonpagesize = strtoul (optarg + 17, &end, 0); if (*end || (link_info.commonpagesize & (link_info.commonpagesize - 1)) != 0) - einfo (_("%F%P: invalid common page size \`%s'\n"), + fatal (_("%P: invalid common page size \`%s'\n"), optarg + 17); link_info.commonpagesize_is_set = true; } @@ -992,7 +992,7 @@ fragment <<EOF char *end; link_info.stacksize = strtoul (optarg + 11, &end, 0); if (*end || link_info.stacksize < 0) - einfo (_("%F%P: invalid stack size \`%s'\n"), optarg + 11); + fatal (_("%P: invalid stack size \`%s'\n"), optarg + 11); if (!link_info.stacksize) /* Use -1 for explicit no-stack, because zero means 'default'. */ @@ -1031,7 +1031,7 @@ fragment <<EOF else if (strcmp (optarg, "start-stop-visibility=protected") == 0) link_info.start_stop_visibility = STV_PROTECTED; else - einfo (_("%F%P: invalid visibility in \`-z %s'; " + fatal (_("%P: invalid visibility in \`-z %s'; " "must be default, internal, hidden, or protected"), optarg); } diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em index 512f7d9..8dfa257 100644 --- a/ld/emultempl/hppaelf.em +++ b/ld/emultempl/hppaelf.em @@ -82,7 +82,7 @@ hppaelf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -346,7 +346,7 @@ PARSE_AND_LIST_ARGS_CASES=' const char *end; group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; ' diff --git a/ld/emultempl/kvxelf.em b/ld/emultempl/kvxelf.em index cbfde0e..186f148 100644 --- a/ld/emultempl/kvxelf.em +++ b/ld/emultempl/kvxelf.em @@ -35,9 +35,8 @@ elf${ELFSIZE}_kvx_before_allocation (void) EOF if test x"${EMULATION_NAME}" != x"elf64kvx_linux"; then fragment <<EOF - if (bfd_link_pie (&link_info)) { - einfo (_("%F:%P: -pie not supported\n")); - } + if (bfd_link_pie (&link_info)) + fatal (_(":%P: -pie not supported\n")); EOF fi fragment <<EOF @@ -300,7 +299,7 @@ kvx_elf_create_output_section_statements (void) ldlang_add_file (stub_file); if (!kvx_elf${ELFSIZE}_init_stub_bfd (&link_info, stub_file->the_bfd)) - einfo ("%F%P: can not init BFD: %E\n"); + einfo ("%P: can not init BFD: %E\n"); } diff --git a/ld/emultempl/loongarchelf.em b/ld/emultempl/loongarchelf.em index de64b1d..928fd83 100644 --- a/ld/emultempl/loongarchelf.em +++ b/ld/emultempl/loongarchelf.em @@ -83,11 +83,11 @@ gld${EMULATION_NAME}_after_allocation (void) && !bfd_link_relocatable (&link_info)) { if (lang_phdr_list == NULL) - elf_seg_map (link_info.output_bfd) = NULL; + elf_seg_map (link_info.output_bfd) = NULL; if (!_bfd_elf_map_sections_to_segments (link_info.output_bfd, &link_info, NULL)) - einfo (_("%F%P: map sections to segments failed: %E\n")); + fatal (_("%P: map sections to segments failed: %E\n")); } /* Adjust program header size and .eh_frame_hdr size before diff --git a/ld/emultempl/m68hc1xelf.em b/ld/emultempl/m68hc1xelf.em index a7c3a3e..155b953 100644 --- a/ld/emultempl/m68hc1xelf.em +++ b/ld/emultempl/m68hc1xelf.em @@ -159,7 +159,7 @@ m68hc11elf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } diff --git a/ld/emultempl/m68kelf.em b/ld/emultempl/m68kelf.em index c195812..91fb3f8 100644 --- a/ld/emultempl/m68kelf.em +++ b/ld/emultempl/m68kelf.em @@ -82,7 +82,7 @@ m68k_elf_after_open (void) asection *datasec; if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) - einfo (_("%F%P: %pB: all input objects must be ELF " + fatal (_("%P: %pB: all input objects must be ELF " "for --embedded-relocs\n")); datasec = bfd_get_section_by_name (abfd, ".data"); @@ -106,7 +106,7 @@ m68k_elf_after_open (void) if (relsec == NULL || !bfd_set_section_alignment (relsec, 2) || !bfd_set_section_size (relsec, datasec->reloc_count * 12)) - einfo (_("%F%P: %pB: can not create .emreloc section: %E\n")); + fatal (_("%P: %pB: can not create .emreloc section: %E\n")); } /* Double check that all other data sections are empty, as is diff --git a/ld/emultempl/metagelf.em b/ld/emultempl/metagelf.em index 85b8d37..b6e5927 100644 --- a/ld/emultempl/metagelf.em +++ b/ld/emultempl/metagelf.em @@ -59,7 +59,7 @@ metagelf_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -305,7 +305,7 @@ PARSE_AND_LIST_ARGS_CASES=' const char *end; group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; ' diff --git a/ld/emultempl/mipself.em b/ld/emultempl/mipself.em index 89e7a89..9aa15bd 100644 --- a/ld/emultempl/mipself.em +++ b/ld/emultempl/mipself.em @@ -152,7 +152,7 @@ mips_add_stub_section (const char *stub_sec_name, asection *input_section, bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return NULL; } stub_bfd->flags |= BFD_LINKER_CREATED; diff --git a/ld/emultempl/mmix-elfnmmo.em b/ld/emultempl/mmix-elfnmmo.em index 8c62bf8..7258941 100644 --- a/ld/emultempl/mmix-elfnmmo.em +++ b/ld/emultempl/mmix-elfnmmo.em @@ -113,10 +113,7 @@ mmix_after_allocation (void) bfd_set_section_vma (sec, 0); if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info)) - { - /* This is a fatal error; make einfo call not return. */ - einfo (_("%F%P: can't finalize linker-allocated global registers\n")); - } + fatal (_("%P: can't finalize linker-allocated global registers\n")); } EOF diff --git a/ld/emultempl/nds32elf.em b/ld/emultempl/nds32elf.em index 9d59683..e8c72d9 100644 --- a/ld/emultempl/nds32elf.em +++ b/ld/emultempl/nds32elf.em @@ -44,7 +44,7 @@ nds32_elf_create_output_section_statements (void) if (strstr (bfd_get_target (link_info.output_bfd), "nds32") == NULL) { /* Check the output target is nds32. */ - einfo (_("%F%P: error: cannot change output format whilst " + fatal (_("%P: error: cannot change output format whilst " "linking %s binaries\n"), "NDS32"); return; } @@ -96,7 +96,7 @@ nds32_elf_after_open (void) && abi_ver != (elf_elfheader (abfd)->e_flags & EF_NDS_ABI)) { /* Incompatible objects. */ - einfo (_("%F%P: %pB: ABI version of object files mismatched\n"), + fatal (_("%P: %pB: ABI version of object files mismatched\n"), abfd); } } @@ -183,7 +183,7 @@ PARSE_AND_LIST_ARGS_CASES=' { sym_ld_script = fopen (optarg, FOPEN_WT); if(sym_ld_script == NULL) - einfo (_("%F%P: cannot open map file %s: %E\n"), optarg); + fatal (_("%P: cannot open map file %s: %E\n"), optarg); } break; case OPTION_HYPER_RELAX: diff --git a/ld/emultempl/nto.em b/ld/emultempl/nto.em index 873b943..ee00c79 100644 --- a/ld/emultempl/nto.em +++ b/ld/emultempl/nto.em @@ -51,7 +51,7 @@ nto_create_QNX_note_section(int type) is called before this function, stub_file should already be defined. */ if (!stub_file) { - einfo (_("%F%P: cannot create .note section in stub BFD.\n")); + fatal (_("%P: cannot create .note section in stub BFD.\n")); return NULL; } @@ -60,7 +60,7 @@ nto_create_QNX_note_section(int type) note_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd, ".note", flags); if (! note_sec) { - einfo (_("%F%P: failed to create .note section\n")); + fatal (_("%P: failed to create .note section\n")); return NULL; } @@ -101,7 +101,7 @@ nto_lookup_QNX_note_section(int type) sec->contents = xmalloc(sec->size); if (!bfd_get_section_contents (sec->owner, sec, sec->contents, (file_ptr) 0, sec->size)) - einfo (_("%F%P: %pB: can't read contents of section .note: %E\n"), + fatal (_("%P: %pB: can't read contents of section .note: %E\n"), sec->owner); e_note = (Elf_External_Note *) sec->contents; @@ -144,7 +144,7 @@ nto_add_note_section (void) { if (nto_lazy_stack && !link_info.stacksize) { - einfo (_("%F%P: error: --lazy-stack must follow -zstack-size=<size>\n")); + fatal (_("%P: error: --lazy-stack must follow -zstack-size=<size>\n")); return; } @@ -198,22 +198,22 @@ PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST_LONGOPTS}' PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}' fprintf (file, _("\ --stack <size> Set size of the initial stack\n\ - --lazy-stack Set lazy allocation of stack\n\ + --lazy-stack Set lazy allocation of stack\n\ ")); ' PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' case OPTION_STACK: { - char *end; - link_info.stacksize = strtoul (optarg, &end, 0); - if (*end || link_info.stacksize < 0) - einfo (_("%F%P: invalid stack size `%s'\''\n"), optarg + 11); - if (!link_info.stacksize) - /* Use -1 for explicit no-stack, because zero means - 'default'. */ - link_info.stacksize = -1; - break; + char *end; + link_info.stacksize = strtoul (optarg, &end, 0); + if (*end || link_info.stacksize < 0) + fatal (_("%P: invalid stack size `%s'\''\n"), optarg + 11); + if (!link_info.stacksize) + /* Use -1 for explicit no-stack, because zero means + 'default'. */ + link_info.stacksize = -1; + break; } case OPTION_LAZY_STACK: nto_lazy_stack = true; diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index 5fb14c9..9a2b576 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -648,7 +648,7 @@ set_pe_subsystem (void) if (v[i].name == NULL) { - einfo (_("%F%P: invalid subsystem type %s\n"), optarg); + fatal (_("%P: invalid subsystem type %s\n"), optarg); return; } @@ -669,7 +669,7 @@ set_pe_value (char *name) set_pe_name (name, strtoul (optarg, &end, 0)); if (end == optarg) - einfo (_("%F%P: invalid hex number for PE parameter '%s'\n"), optarg); + fatal (_("%P: invalid hex number for PE parameter '%s'\n"), optarg); optarg = end; } @@ -686,7 +686,7 @@ set_pe_stack_heap (char *resname, char *comname) set_pe_value (comname); } else if (*optarg) - einfo (_("%F%P: strange hex info for PE parameter '%s'\n"), optarg); + fatal (_("%P: strange hex info for PE parameter '%s'\n"), optarg); } #define DEFAULT_BUILD_ID_STYLE "md5" @@ -702,7 +702,7 @@ gld${EMULATION_NAME}_handle_option (int optc) case OPTION_BASE_FILE: link_info.base_file = fopen (optarg, FOPEN_WB); if (link_info.base_file == NULL) - einfo (_("%F%P: cannot open base file %s\n"), optarg); + fatal (_("%P: cannot open base file %s\n"), optarg); break; /* PE options. */ @@ -1231,7 +1231,7 @@ make_runtime_ref (void) = bfd_wrapped_link_hash_lookup (link_info.output_bfd, &link_info, rr, true, false, true); if (!h) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); else { if (h->type == bfd_link_hash_new) @@ -1529,7 +1529,7 @@ gld${EMULATION_NAME}_after_open (void) if (bfd_get_flavour (link_info.output_bfd) != bfd_target_coff_flavour || coff_data (link_info.output_bfd) == NULL || !obj_pe (link_info.output_bfd)) - einfo (_("%F%P: cannot perform PE operations on non PE output file '%pB'\n"), + fatal (_("%P: cannot perform PE operations on non PE output file '%pB'\n"), link_info.output_bfd); pe_data (link_info.output_bfd)->pe_opthdr = pe; @@ -1602,7 +1602,7 @@ gld${EMULATION_NAME}_after_open (void) These will only be created if the output format is an arm format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format " + fatal (_("%P: error: cannot change output format " "whilst linking %s binaries\n"), "ARM"); return; } @@ -1662,7 +1662,7 @@ gld${EMULATION_NAME}_after_open (void) if (!bfd_generic_link_read_symbols (is->the_bfd)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), + fatal (_("%P: %pB: could not read symbols: %E\n"), is->the_bfd); return; } @@ -1849,7 +1849,7 @@ gld${EMULATION_NAME}_after_open (void) if (!bfd_generic_link_read_symbols (is->the_bfd)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), + fatal (_("%P: %pB: could not read symbols: %E\n"), is->the_bfd); return; } @@ -1960,7 +1960,7 @@ gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBU h = bfd_link_hash_lookup (link_info.hash, buf, true, true, true); if (h == (struct bfd_link_hash_entry *) NULL) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); if (h->type == bfd_link_hash_new) { h->type = bfd_link_hash_undefined; diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index df74352..440c0bf 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -625,7 +625,7 @@ set_pep_subsystem (void) if (v[i].name == NULL) { - einfo (_("%F%P: invalid subsystem type %s\n"), optarg); + fatal (_("%P: invalid subsystem type %s\n"), optarg); return; } @@ -646,7 +646,7 @@ set_pep_value (char *name) set_pep_name (name, (bfd_vma) strtoull (optarg, &end, 0)); if (end == optarg) - einfo (_("%F%P: invalid hex number for PE parameter '%s'\n"), optarg); + fatal (_("%P: invalid hex number for PE parameter '%s'\n"), optarg); optarg = end; } @@ -663,7 +663,7 @@ set_pep_stack_heap (char *resname, char *comname) set_pep_value (comname); } else if (*optarg) - einfo (_("%F%P: strange hex info for PE parameter '%s'\n"), optarg); + fatal (_("%P: strange hex info for PE parameter '%s'\n"), optarg); } #define DEFAULT_BUILD_ID_STYLE "md5" @@ -680,7 +680,7 @@ gld${EMULATION_NAME}_handle_option (int optc) case OPTION_BASE_FILE: link_info.base_file = fopen (optarg, FOPEN_WB); if (link_info.base_file == NULL) - einfo (_("%F%P: cannot open base file %s\n"), optarg); + fatal (_("%P: cannot open base file %s\n"), optarg); break; /* PE options. */ @@ -1233,7 +1233,7 @@ make_runtime_ref (void) = bfd_wrapped_link_hash_lookup (link_info.output_bfd, &link_info, rr, true, false, true); if (!h) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); else { if (h->type == bfd_link_hash_new) @@ -1533,7 +1533,7 @@ gld${EMULATION_NAME}_after_open (void) if (bfd_get_flavour (link_info.output_bfd) != bfd_target_coff_flavour || coff_data (link_info.output_bfd) == NULL || !obj_pe (link_info.output_bfd)) - einfo (_("%F%P: cannot perform PE operations on non PE output file '%pB'\n"), + fatal (_("%P: cannot perform PE operations on non PE output file '%pB'\n"), link_info.output_bfd); pe_data (link_info.output_bfd)->pe_opthdr = pep; @@ -1645,7 +1645,7 @@ gld${EMULATION_NAME}_after_open (void) if (!bfd_generic_link_read_symbols (is->the_bfd)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), + fatal (_("%P: %pB: could not read symbols: %E\n"), is->the_bfd); return; } @@ -1849,7 +1849,7 @@ gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIBU h = bfd_link_hash_lookup (link_info.hash, buf, true, true, true); if (h == (struct bfd_link_hash_entry *) NULL) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); if (h->type == bfd_link_hash_new) { h->type = bfd_link_hash_undefined; diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em index 529a592..ae11bc9 100644 --- a/ld/emultempl/ppc32elf.em +++ b/ld/emultempl/ppc32elf.em @@ -366,7 +366,7 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' char *end; unsigned long val = strtoul (optarg, &end, 0); if (*end || val > 5) - einfo (_("%F%P: invalid --plt-align `%s'\''\n"), optarg); + fatal (_("%P: invalid --plt-align `%s'\''\n"), optarg); params.plt_stub_align = val; } else @@ -399,7 +399,7 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' if (*end || (params.pagesize < 4096 && params.pagesize != 0) || params.pagesize != (params.pagesize & -params.pagesize)) - einfo (_("%F%P: invalid pagesize `%s'\''\n"), optarg); + fatal (_("%P: invalid pagesize `%s'\''\n"), optarg); } break; diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em index 1e6ae7a..f7a8f1e 100644 --- a/ld/emultempl/ppc64elf.em +++ b/ld/emultempl/ppc64elf.em @@ -91,7 +91,7 @@ ppc_create_output_section_statements (void) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -101,7 +101,7 @@ ppc_create_output_section_statements (void) if (params.save_restore_funcs < 0) params.save_restore_funcs = !bfd_link_relocatable (&link_info); if (!ppc64_elf_init_stub_bfd (&link_info, ¶ms)) - einfo (_("%F%P: can not init BFD: %E\n")); + fatal (_("%P: can not init BFD: %E\n")); } /* Called after opening files but before mapping sections. */ @@ -825,7 +825,7 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' const char *end; params.group_size = bfd_scan_vma (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\''\n"), optarg); + fatal (_("%P: invalid number `%s'\''\n"), optarg); } break; @@ -851,7 +851,7 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' char *end; long val = strtol (optarg, &end, 0); if (*end || (unsigned long) val + 8 > 16) - einfo (_("%F%P: invalid --plt-align `%s'\''\n"), optarg); + fatal (_("%P: invalid --plt-align `%s'\''\n"), optarg); params.plt_stub_align = val; } else @@ -880,7 +880,7 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' else if (strcasecmp (optarg, "no") == 0) params.power10_stubs = 0; else - einfo (_("%F%P: invalid --power10-stubs argument `%s'\''\n"), + fatal (_("%P: invalid --power10-stubs argument `%s'\''\n"), optarg); } else diff --git a/ld/emultempl/riscvelf.em b/ld/emultempl/riscvelf.em index 6b67c7f..78e1fcd 100644 --- a/ld/emultempl/riscvelf.em +++ b/ld/emultempl/riscvelf.em @@ -131,7 +131,7 @@ riscv_create_output_section_statements (void) These will only be created if the output format is a RISC-V format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format" + fatal (_("%P: error: cannot change output format" " whilst linking %s binaries\n"), "RISC-V"); return; } diff --git a/ld/emultempl/s390.em b/ld/emultempl/s390.em index 8548768..a229662 100644 --- a/ld/emultempl/s390.em +++ b/ld/emultempl/s390.em @@ -34,7 +34,7 @@ static void s390_elf_create_output_section_statements (void) { if (!bfd_elf_s390_set_options (&link_info, ¶ms)) - einfo (_("%F%P: can not init BFD: %E\n")); + fatal (_("%P: can not init BFD: %E\n")); } EOF diff --git a/ld/emultempl/scoreelf.em b/ld/emultempl/scoreelf.em index d3a2205..fd67d5c 100644 --- a/ld/emultempl/scoreelf.em +++ b/ld/emultempl/scoreelf.em @@ -62,7 +62,7 @@ score_elf_after_open (void) These will only be created if the output format is an score format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format " + fatal (_("%P: error: cannot change output format " "whilst linking %s binaries\n"), "S+core"); return; } diff --git a/ld/emultempl/spuelf.em b/ld/emultempl/spuelf.em index 76776ba..cda9a06 100644 --- a/ld/emultempl/spuelf.em +++ b/ld/emultempl/spuelf.em @@ -202,7 +202,7 @@ spu_elf_load_ovl_mgr (void) /* User supplied __ovly_load. */ } else if (mgr_stream->start == mgr_stream->end) - einfo (_("%F%P: no built-in overlay manager\n")); + fatal (_("%P: no built-in overlay manager\n")); else { lang_input_statement_type *ovl_is; @@ -379,7 +379,7 @@ spu_elf_open_overlay_script (void) if (script == NULL) { file_err: - einfo (_("%F%P: can not open script: %E\n")); + fatal (_("%P: can not open script: %E\n")); } return script; } @@ -695,7 +695,7 @@ PARSE_AND_LIST_ARGS_CASES=' if (*end == 0) break; } - einfo (_("%F%P: invalid --local-store address range `%s'\''\n"), optarg); + fatal (_("%P: invalid --local-store address range `%s'\''\n"), optarg); } break; @@ -731,12 +731,12 @@ PARSE_AND_LIST_ARGS_CASES=' if (!num_lines_set) params.num_lines = 32; else if ((params.num_lines & -params.num_lines) != params.num_lines) - einfo (_("%F%P: invalid --num-lines/--num-regions `%u'\''\n"), + fatal (_("%P: invalid --num-lines/--num-regions `%u'\''\n"), params.num_lines); if (!line_size_set) params.line_size = 1024; else if ((params.line_size & -params.line_size) != params.line_size) - einfo (_("%F%P: invalid --line-size/--region-size `%u'\''\n"), + fatal (_("%P: invalid --line-size/--region-size `%u'\''\n"), params.line_size); break; @@ -757,7 +757,7 @@ PARSE_AND_LIST_ARGS_CASES=' && (params.ovly_flavour != ovly_soft_icache || (params.num_lines & -params.num_lines) == params.num_lines)) break; - einfo (_("%F%P: invalid --num-lines/--num-regions `%s'\''\n"), optarg); + fatal (_("%P: invalid --num-lines/--num-regions `%s'\''\n"), optarg); } break; @@ -770,7 +770,7 @@ PARSE_AND_LIST_ARGS_CASES=' && (params.ovly_flavour != ovly_soft_icache || (params.line_size & -params.line_size) == params.line_size)) break; - einfo (_("%F%P: invalid --line-size/--region-size `%s'\''\n"), optarg); + fatal (_("%P: invalid --line-size/--region-size `%s'\''\n"), optarg); } break; @@ -779,7 +779,7 @@ PARSE_AND_LIST_ARGS_CASES=' char *end; params.auto_overlay_fixed = strtoul (optarg, &end, 0); if (*end != 0) - einfo (_("%F%P: invalid --fixed-space value `%s'\''\n"), optarg); + fatal (_("%P: invalid --fixed-space value `%s'\''\n"), optarg); } break; @@ -788,7 +788,7 @@ PARSE_AND_LIST_ARGS_CASES=' char *end; params.auto_overlay_reserved = strtoul (optarg, &end, 0); if (*end != 0) - einfo (_("%F%P: invalid --reserved-space value `%s'\''\n"), optarg); + fatal (_("%P: invalid --reserved-space value `%s'\''\n"), optarg); } break; @@ -797,7 +797,7 @@ PARSE_AND_LIST_ARGS_CASES=' char *end; params.extra_stack_space = strtol (optarg, &end, 0); if (*end != 0) - einfo (_("%F%P: invalid --extra-stack-space value `%s'\''\n"), optarg); + fatal (_("%P: invalid --extra-stack-space value `%s'\''\n"), optarg); } break; diff --git a/ld/emultempl/tic6xdsbt.em b/ld/emultempl/tic6xdsbt.em index 0680bc8..4aec9ae 100644 --- a/ld/emultempl/tic6xdsbt.em +++ b/ld/emultempl/tic6xdsbt.em @@ -59,10 +59,8 @@ tic6x_after_open (void) if (is_tic6x_target ()) { if (params.dsbt_index >= params.dsbt_size) - { - einfo (_("%F%P: invalid --dsbt-index %d, outside DSBT size\n"), - params.dsbt_index); - } + fatal (_("%P: invalid --dsbt-index %d, outside DSBT size\n"), + params.dsbt_index); elf32_tic6x_setup (&link_info, ¶ms); } @@ -186,7 +184,7 @@ PARSE_AND_LIST_ARGS_CASES=' if (*end == 0 && params.dsbt_index >= 0 && params.dsbt_index < 0x7fff) break; - einfo (_("%F%P: invalid --dsbt-index %s\n"), optarg); + fatal (_("%P: invalid --dsbt-index %s\n"), optarg); } break; case OPTION_DSBT_SIZE: @@ -196,7 +194,7 @@ PARSE_AND_LIST_ARGS_CASES=' if (*end == 0 && params.dsbt_size >= 0 && params.dsbt_size < 0x7fff) break; - einfo (_("%F%P: invalid --dsbt-size %s\n"), optarg); + fatal (_("%P: invalid --dsbt-size %s\n"), optarg); } break; case OPTION_NO_MERGE_EXIDX_ENTRIES: diff --git a/ld/emultempl/ticoff.em b/ld/emultempl/ticoff.em index d4ef91f..2e6a4a0 100644 --- a/ld/emultempl/ticoff.em +++ b/ld/emultempl/ticoff.em @@ -88,9 +88,7 @@ gld${EMULATION_NAME}_handle_option (int optc) lang_add_output_format (buf, NULL, NULL, 0); } else - { - einfo (_("%F%P: invalid COFF format version %s\n"), optarg); - } + fatal (_("%P: invalid COFF format version %s\n"), optarg); break; } return false; diff --git a/ld/emultempl/v850elf.em b/ld/emultempl/v850elf.em index 84cd589..92a1ac4 100644 --- a/ld/emultempl/v850elf.em +++ b/ld/emultempl/v850elf.em @@ -63,7 +63,7 @@ v850_create_output_section_statements (void) These will only be created if the output format is an arm format, hence we do not support linking and changing output formats at the same time. Use a link followed by objcopy to change output formats. */ - einfo (_("%F%P: error: cannot change output format" + fatal (_("%P: error: cannot change output format" " whilst linking %s binaries\n"), "V850"); return; } diff --git a/ld/emultempl/vms.em b/ld/emultempl/vms.em index 1b68b0d..5bb6ae2 100644 --- a/ld/emultempl/vms.em +++ b/ld/emultempl/vms.em @@ -200,7 +200,7 @@ gld${EMULATION_NAME}_before_allocation (void) if (bed->elf_backend_late_size_sections && !bed->elf_backend_late_size_sections (link_info.output_bfd, &link_info)) - einfo (_("%F%P: failed to set dynamic section sizes: %E\n")); + fatal (_("%P: failed to set dynamic section sizes: %E\n")); before_allocation_default (); } diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em index e3a9b2e..027b773 100644 --- a/ld/emultempl/xtensaelf.em +++ b/ld/emultempl/xtensaelf.em @@ -390,7 +390,7 @@ check_xtensa_info (bfd *abfd, asection *info_sec) data = xmalloc (info_sec->size); if (! bfd_get_section_contents (abfd, info_sec, data, 0, info_sec->size)) - einfo (_("%F%P: %pB: cannot read contents of section %pA\n"), abfd, info_sec); + fatal (_("%P: %pB: cannot read contents of section %pA\n"), abfd, info_sec); if (info_sec->size > 24 && info_sec->size >= 24 + bfd_get_32 (abfd, data + 4) @@ -431,13 +431,13 @@ elf_xtensa_before_allocation (void) if (is_big_endian && link_info.output_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE) { - einfo (_("%F%P: little endian output does not match " + fatal (_("%P: little endian output does not match " "Xtensa configuration\n")); } if (!is_big_endian && link_info.output_bfd->xvec->byteorder == BFD_ENDIAN_BIG) { - einfo (_("%F%P: big endian output does not match " + fatal (_("%P: big endian output does not match " "Xtensa configuration\n")); } @@ -456,7 +456,7 @@ elf_xtensa_before_allocation (void) cannot go any further if there are any mismatches. */ if ((is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE) || (!is_big_endian && f->the_bfd->xvec->byteorder == BFD_ENDIAN_BIG)) - einfo (_("%F%P: cross-endian linking for %pB not supported\n"), + fatal (_("%P: cross-endian linking for %pB not supported\n"), f->the_bfd); if (! first_bfd) @@ -487,7 +487,7 @@ elf_xtensa_before_allocation (void) info_sec = bfd_make_section_with_flags (first_bfd, ".xtensa.info", SEC_HAS_CONTENTS | SEC_READONLY); if (! info_sec) - einfo (_("%F%P: failed to create .xtensa.info section\n")); + fatal (_("%P: failed to create .xtensa.info section\n")); } if (info_sec) { @@ -1226,7 +1226,7 @@ ld_build_required_section_dependence (lang_statement_union_type *s) lang_statement_union_type *l = iter_stack_current (&stack); if (l == NULL && link_info.non_contiguous_regions) - einfo (_("%F%P: Relaxation not supported with " + fatal (_("%P: Relaxation not supported with " "--enable-non-contiguous-regions.\n")); if (l->header.type == lang_input_section_enum) diff --git a/ld/emultempl/z80.em b/ld/emultempl/z80.em index a2a7f28..d566b9a 100644 --- a/ld/emultempl/z80.em +++ b/ld/emultempl/z80.em @@ -48,7 +48,7 @@ z80_after_open (void) const bfd_arch_info_type *info; info = bfd_arch_get_compatible (link_info.output_bfd, abfd, false); if (info == NULL) - einfo (_("%F%P: %pB: Instruction sets of object files incompatible\n"), + fatal (_("%P: %pB: Instruction sets of object files incompatible\n"), abfd); else bfd_set_arch_info (link_info.output_bfd, info); diff --git a/ld/ldcref.c b/ld/ldcref.c index 226d4e6..5d7891f 100644 --- a/ld/ldcref.c +++ b/ld/ldcref.c @@ -514,7 +514,7 @@ check_local_sym_xref (lang_input_statement_type *statement) return; if (!bfd_generic_link_read_symbols (abfd)) - einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd); + fatal (_("%P: %pB: could not read symbols: %E\n"), abfd); for (syms = bfd_get_outsymbols (abfd); *syms; ++syms) { @@ -625,7 +625,7 @@ check_refs (const char *name, BFD might contain a prohibited cross reference. */ if (!bfd_generic_link_read_symbols (abfd)) - einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd); + fatal (_("%P: %pB: could not read symbols: %E\n"), abfd); info.sym_name = name; info.global = global; @@ -687,14 +687,14 @@ check_reloc_refs (bfd *abfd, asection *sec, void *iarg) relsize = bfd_get_reloc_upper_bound (abfd, sec); if (relsize < 0) - einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd); + fatal (_("%P: %pB: could not read relocs: %E\n"), abfd); if (relsize == 0) return; relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols); if (relcount < 0) - einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd); + fatal (_("%P: %pB: could not read relocs: %E\n"), abfd); p = relpp; pend = p + relcount; @@ -95,7 +95,7 @@ ldelf_after_parse (void) else if (!link_info.maxpagesize_is_set) link_info.maxpagesize = link_info.commonpagesize; else - einfo (_("%F%P: common page size (0x%v) > maximum page size (0x%v)\n"), + fatal (_("%P: common page size (0x%v) > maximum page size (0x%v)\n"), link_info.commonpagesize, link_info.maxpagesize); } } @@ -121,7 +121,7 @@ ldelf_load_symbols (lang_input_statement_type *entry) if (entry->flags.just_syms && (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0) - einfo (_("%F%P: %pB: --just-symbols may not be used on DSO\n"), + fatal (_("%P: %pB: --just-symbols may not be used on DSO\n"), entry->the_bfd); if (link_class == 0 @@ -321,7 +321,7 @@ ldelf_try_needed (struct dt_needed *needed, int force, int is_linux) struct bfd_link_needed_list *needs; if (! bfd_elf_get_bfd_needed_list (abfd, &needs)) - einfo (_("%F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"), abfd); + fatal (_("%P: %pB: bfd_elf_get_bfd_needed_list failed: %E\n"), abfd); if (needs != NULL) { @@ -369,7 +369,7 @@ ldelf_try_needed (struct dt_needed *needed, int force, int is_linux) can only check that using stat. */ if (bfd_stat (abfd, &global_stat) != 0) - einfo (_("%F%P: %pB: bfd_stat failed: %E\n"), abfd); + fatal (_("%P: %pB: bfd_stat failed: %E\n"), abfd); /* First strip off everything before the last '/'. */ soname = lbasename (bfd_get_filename (abfd)); @@ -408,7 +408,7 @@ ldelf_try_needed (struct dt_needed *needed, int force, int is_linux) /* Add this file into the symbol table. */ if (! bfd_link_add_symbols (abfd, &link_info)) - einfo (_("%F%P: %pB: error adding symbols: %E\n"), abfd); + fatal (_("%P: %pB: error adding symbols: %E\n"), abfd); return true; } @@ -1206,7 +1206,7 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab, && elf_dt_name (abfd) != NULL) { if (bfd_elf_add_dt_needed_tag (abfd, &link_info) < 0) - einfo (_("%F%P: failed to add DT_NEEDED dynamic tag\n")); + fatal (_("%P: failed to add DT_NEEDED dynamic tag\n")); } link_info.input_bfds_tail = save_input_bfd_tail; @@ -1257,10 +1257,8 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd, bfd_get_target (link_info.output_bfd)); if (link_info.out_implib_bfd == NULL) - { - einfo (_("%F%P: %s: can't open for writing: %E\n"), - command_line.out_implib_filename); - } + fatal (_("%P: %s: can't open for writing: %E\n"), + command_line.out_implib_filename); } if (ldelf_emit_note_gnu_build_id != NULL @@ -1314,7 +1312,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd, && (elf_tdata (abfd)->elf_header->e_type == ET_EXEC || (elf_tdata (abfd)->elf_header->e_type == ET_DYN && elf_tdata (abfd)->is_pie))) - einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"), + fatal (_("%P: cannot use executable file '%pB' as input to a link\n"), abfd); } @@ -1368,7 +1366,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd, } else if (seen_type != type) { - einfo (_("%F%P: compact frame descriptions incompatible with" + fatal (_("%P: compact frame descriptions incompatible with" " DWARF2 .eh_frame from %pB\n"), type == DWARF2_EH_HDR ? abfd : elfbfd); break; @@ -1410,7 +1408,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd, if (link_info.eh_frame_hdr_type == COMPACT_EH_HDR) if (!bfd_elf_parse_eh_frame_entries (NULL, &link_info)) - einfo (_("%F%P: failed to parse EH frame entries\n")); + fatal (_("%P: failed to parse EH frame entries\n")); ldelf_handle_dt_needed (htab, use_libpath, native, is_linux, is_freebsd, elfsize, prefix); @@ -1669,7 +1667,7 @@ ldelf_find_exp_assignment (etree_type *exp) &link_info, exp->assign.dst, provide, exp->assign.hidden)) - einfo (_("%F%P: failed to record assignment to %s: %E\n"), + fatal (_("%P: failed to record assignment to %s: %E\n"), exp->assign.dst); } ldelf_find_exp_assignment (exp->assign.src); @@ -1772,8 +1770,7 @@ ldelf_before_allocation (char **audit, char **depaudit, if (!bfd_link_relocatable (&link_info)) { struct elf_link_hash_table *htab = elf_hash_table (&link_info); - struct elf_link_hash_entry *h - = elf_link_hash_lookup (htab, "__ehdr_start", false, false, true); + struct elf_link_hash_entry *h = htab->hehdr_start; /* Only adjust the export class if the symbol was referenced and not defined, otherwise leave it alone. */ @@ -1845,7 +1842,7 @@ ldelf_before_allocation (char **audit, char **depaudit, command_line.filter_shlib, *audit, *depaudit, (const char * const *) command_line.auxiliary_filters, &link_info, &sinterp))) - einfo (_("%F%P: failed to set dynamic section sizes: %E\n")); + fatal (_("%P: failed to set dynamic section sizes: %E\n")); if (sinterp != NULL) { @@ -1883,8 +1880,8 @@ ldelf_before_allocation (char **audit, char **depaudit, msg = (char *) xmalloc ((size_t) (sz + 1)); if (! bfd_get_section_contents (is->the_bfd, s, msg, (file_ptr) 0, sz)) - einfo (_("%F%P: %pB: can't read contents of section .gnu.warning: %E\n"), - is->the_bfd); + fatal (_("%P: %pB: can't read contents of section %pA: %E\n"), + is->the_bfd, s); msg[sz] = '\0'; (*link_info.callbacks->warning) (&link_info, msg, (const char *) NULL, is->the_bfd, @@ -1911,7 +1908,7 @@ ldelf_before_allocation (char **audit, char **depaudit, before_allocation_default (); if (!bfd_elf_size_dynsym_hash_dynstr (link_info.output_bfd, &link_info)) - einfo (_("%F%P: failed to set dynamic section sizes: %E\n")); + fatal (_("%P: failed to set dynamic section sizes: %E\n")); if (ehdr_start != NULL) { @@ -2091,6 +2088,7 @@ elf_orphan_compatible (asection *in, asection *out) && (elf_next_in_group (out) != NULL || ((elf_section_flags (in) & SHF_LINK_ORDER) != 0 && (elf_section_flags (out) & SHF_LINK_ORDER) != 0 + && elf_linked_to_section (in) != NULL && (elf_linked_to_section (in)->output_section != elf_linked_to_section (out)->output_section)) || ((elf_section_flags (out) ^ elf_section_flags (in)) diff --git a/ld/ldelfgen.c b/ld/ldelfgen.c index c649768..8e84b7a 100644 --- a/ld/ldelfgen.c +++ b/ld/ldelfgen.c @@ -282,7 +282,7 @@ ldelf_map_segments (bool need_layout) if (os_info->ordered != os_info->count && bfd_link_relocatable (&link_info)) { - einfo (_("%F%P: " + fatal (_("%P: " "%pA has both ordered and unordered sections\n"), os->bfd_section); return; @@ -307,7 +307,7 @@ ldelf_map_segments (bool need_layout) if (!_bfd_elf_map_sections_to_segments (link_info.output_bfd, &link_info, &need_layout)) - einfo (_("%F%P: map sections to segments failed: %E\n")); + fatal (_("%P: map sections to segments failed: %E\n")); if (phdr_size != elf_program_header_size (link_info.output_bfd)) { @@ -327,7 +327,7 @@ ldelf_map_segments (bool need_layout) while (need_layout && --tries); if (tries == 0) - einfo (_("%F%P: looping in map_segments\n")); + fatal (_("%P: looping in map_segments\n")); if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour && lang_phdr_list == NULL) @@ -337,9 +337,8 @@ ldelf_map_segments (bool need_layout) const struct elf_backend_data *bed = get_elf_backend_data (link_info.output_bfd); if (bed->elf_backend_strip_zero_sized_dynamic_sections - && !bed->elf_backend_strip_zero_sized_dynamic_sections - (&link_info)) - einfo (_("%F%P: failed to strip zero-sized dynamic sections\n")); + && !bed->elf_backend_strip_zero_sized_dynamic_sections (&link_info)) + fatal (_("%P: failed to strip zero-sized dynamic sections\n")); } } @@ -417,7 +416,7 @@ ldelf_acquire_strings_for_ctf { if (ctf_link_add_strtab (ctf_output, ldelf_ctf_strtab_iter_cb, &args) < 0) - einfo (_("%F%P: warning: CTF strtab association failed; strings will " + fatal (_("%P: warning: CTF strtab association failed; strings will " "not be shared: %s\n"), ctf_errmsg (ctf_errno (ctf_output))); } @@ -444,7 +443,7 @@ ldelf_new_dynsym_for_ctf (struct ctf_dict *ctf_output, int symidx, lsym.st_value = sym->st_value; if (ctf_link_add_linker_symbol (ctf_output, &lsym) < 0) { - einfo (_("%F%P: warning: CTF symbol addition failed; CTF will " + fatal (_("%P: warning: CTF symbol addition failed; CTF will " "not be tied to symbols: %s\n"), ctf_errmsg (ctf_errno (ctf_output))); } @@ -454,7 +453,7 @@ ldelf_new_dynsym_for_ctf (struct ctf_dict *ctf_output, int symidx, /* Shuffle all the symbols. */ if (ctf_link_shuffle_syms (ctf_output) < 0) - einfo (_("%F%P: warning: CTF symbol shuffling failed; CTF will " + fatal (_("%P: warning: CTF symbol shuffling failed; CTF will " "not be tied to symbols: %s\n"), ctf_errmsg (ctf_errno (ctf_output))); } diff --git a/ld/ldemul.c b/ld/ldemul.c index 0f3cb1a..dce0d38 100644 --- a/ld/ldemul.c +++ b/ld/ldemul.c @@ -349,7 +349,7 @@ ldemul_choose_mode (char *target) einfo (_("%P: unrecognised emulation mode: %s\n"), target); einfo (_("Supported emulations: ")); ldemul_list_emulations (stderr); - einfo ("%F\n"); + fatal ("\n"); } void @@ -282,7 +282,7 @@ definedness_newfunc (struct bfd_hash_entry *entry, bfd_hash_allocate (table, sizeof (struct definedness_hash_entry)); if (ret == NULL) - einfo (_("%F%P: bfd_hash_allocate failed creating symbol %s\n"), name); + fatal (_("%P: bfd_hash_allocate failed creating symbol %s\n"), name); ret->by_object = 0; ret->iteration = 0; @@ -313,7 +313,7 @@ update_definedness (const char *name, struct bfd_link_hash_entry *h) bfd_hash_lookup (&definedness_table, name, true, false); if (defentry == NULL) - einfo (_("%F%P: bfd_hash_lookup failed creating symbol %s\n"), name); + fatal (_("%P: bfd_hash_lookup failed creating symbol %s\n"), name); /* If the symbol was already defined, and not by a script, then it must be defined by an object file or by the linker target code. */ @@ -638,7 +638,7 @@ fold_binary (etree_type *tree) expld.result.value = ((bfd_signed_vma) lhs.value % (bfd_signed_vma) expld.result.value); else if (expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS %% by zero\n"), tree->binary.rhs); + fatal (_("%P:%pS %% by zero\n"), tree->binary.rhs); arith_result_section (&lhs); break; @@ -647,7 +647,7 @@ fold_binary (etree_type *tree) expld.result.value = ((bfd_signed_vma) lhs.value / (bfd_signed_vma) expld.result.value); else if (expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS / by zero\n"), tree->binary.rhs); + fatal (_("%P:%pS / by zero\n"), tree->binary.rhs); arith_result_section (&lhs); break; @@ -761,7 +761,7 @@ fold_name (etree_type *tree) if (!h) { if (expld.phase != lang_first_phase_enum) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); } else if (h->type == bfd_link_hash_defined || h->type == bfd_link_hash_defweak) @@ -789,7 +789,7 @@ fold_name (etree_type *tree) else if (expld.phase == lang_final_phase_enum || (expld.phase != lang_mark_phase_enum && expld.assigning_to_dot)) - einfo (_("%F%P:%pS: undefined symbol `%s'" + fatal (_("%P:%pS: undefined symbol `%s'" " referenced in expression\n"), tree, tree->name.name); else if (h->type == bfd_link_hash_new) @@ -827,7 +827,7 @@ fold_name (etree_type *tree) if (os == NULL) { if (expld.phase == lang_final_phase_enum) - einfo (_("%F%P:%pS: undefined section `%s'" + fatal (_("%P:%pS: undefined section `%s'" " referenced in expression\n"), tree, tree->name.name); } @@ -845,7 +845,7 @@ fold_name (etree_type *tree) if (os == NULL) { if (expld.phase == lang_final_phase_enum) - einfo (_("%F%P:%pS: undefined section `%s'" + fatal (_("%P:%pS: undefined section `%s'" " referenced in expression\n"), tree, tree->name.name); } @@ -873,7 +873,7 @@ fold_name (etree_type *tree) if (os == NULL) { if (expld.phase == lang_final_phase_enum) - einfo (_("%F%P:%pS: undefined section `%s'" + fatal (_("%P:%pS: undefined section `%s'" " referenced in expression\n"), tree, tree->name.name); new_number (0); @@ -912,7 +912,7 @@ fold_name (etree_type *tree) if (mem != NULL) new_number (mem->length); else - einfo (_("%F%P:%pS: undefined MEMORY region `%s'" + fatal (_("%P:%pS: undefined MEMORY region `%s'" " referenced in expression\n"), tree, tree->name.name); } @@ -926,7 +926,7 @@ fold_name (etree_type *tree) if (mem != NULL) new_rel_from_abs (mem->origin); else - einfo (_("%F%P:%pS: undefined MEMORY region `%s'" + fatal (_("%P:%pS: undefined MEMORY region `%s'" " referenced in expression\n"), tree, tree->name.name); } @@ -938,7 +938,7 @@ fold_name (etree_type *tree) else if (strcmp (tree->name.name, "COMMONPAGESIZE") == 0) new_number (link_info.commonpagesize); else - einfo (_("%F%P:%pS: unknown constant `%s' referenced in expression\n"), + fatal (_("%P:%pS: unknown constant `%s' referenced in expression\n"), tree, tree->name.name); break; @@ -1086,7 +1086,7 @@ exp_fold_tree_1 (etree_type *tree) if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0) { if (tree->type.node_class != etree_assign) - einfo (_("%F%P:%pS can not PROVIDE assignment to" + fatal (_("%P:%pS can not PROVIDE assignment to" " location counter\n"), tree); if (expld.phase != lang_first_phase_enum) { @@ -1119,11 +1119,11 @@ exp_fold_tree_1 (etree_type *tree) || expld.section == bfd_und_section_ptr) { if (expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS invalid assignment to" + fatal (_("%P:%pS invalid assignment to" " location counter\n"), tree); } else if (expld.dotp == NULL) - einfo (_("%F%P:%pS assignment to location counter" + fatal (_("%P:%pS assignment to location counter" " invalid outside of SECTIONS\n"), tree); /* After allocation, assignment to dot should not be @@ -1142,7 +1142,7 @@ exp_fold_tree_1 (etree_type *tree) nextdot += expld.section->vma; if (nextdot < expld.dot && expld.section != bfd_abs_section_ptr) - einfo (_("%F%P:%pS cannot move location counter backwards" + fatal (_("%P:%pS cannot move location counter backwards" " (from %V to %V)\n"), tree, expld.dot, nextdot); else @@ -1202,7 +1202,7 @@ exp_fold_tree_1 (etree_type *tree) h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst, true, false, true); if (h == NULL) - einfo (_("%F%P:%s: hash creation failed\n"), + fatal (_("%P:%s: hash creation failed\n"), tree->assign.dst); } @@ -1578,7 +1578,7 @@ exp_get_vma (etree_type *tree, lang_output_section_statement_type *os, if (expld.result.valid_p) return expld.result.value; else if (name != NULL && expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS: nonconstant expression for %s\n"), + fatal (_("%P:%pS: nonconstant expression for %s\n"), tree, name); } return def; @@ -1621,7 +1621,7 @@ exp_get_fill (etree_type *tree, fill_type *def, char *name) if (!expld.result.valid_p) { if (name != NULL && expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS: nonconstant expression for %s\n"), + fatal (_("%P:%pS: nonconstant expression for %s\n"), tree, name); return def; } @@ -1681,7 +1681,7 @@ exp_get_abs_int (etree_type *tree, int def, char *name) } else if (name != NULL && expld.phase != lang_mark_phase_enum) { - einfo (_("%F%P:%pS: nonconstant expression for %s\n"), + fatal (_("%P:%pS: nonconstant expression for %s\n"), tree, name); } } @@ -1708,7 +1708,7 @@ ldexp_init (bool object_only) definedness_newfunc, sizeof (struct definedness_hash_entry), 13)) - einfo (_("%F%P: can not create hash table: %E\n")); + fatal (_("%P: can not create hash table: %E\n")); } /* Convert absolute symbols defined by a script from "dot" (also diff --git a/ld/ldfile.c b/ld/ldfile.c index 404af5f..75fd360 100644 --- a/ld/ldfile.c +++ b/ld/ldfile.c @@ -184,7 +184,7 @@ ldfile_add_remap_file (const char * file) if (*p == '\0') { - einfo ("%F%P: malformed remap file entry: %s\n", line); + fatal ("%P: malformed remap file entry: %s\n", line); continue; } @@ -196,7 +196,7 @@ ldfile_add_remap_file (const char * file) if (*p == '\0') { - einfo ("%F%P: malformed remap file entry: %s\n", line); + fatal ("%P: malformed remap file entry: %s\n", line); continue; } @@ -361,7 +361,7 @@ ldfile_try_open_bfd (const char *attempt, if (entry->the_bfd == NULL) { if (bfd_get_error () == bfd_error_invalid_target) - einfo (_("%F%P: invalid BFD target `%s'\n"), entry->target); + fatal (_("%P: invalid BFD target `%s'\n"), entry->target); return false; } @@ -491,7 +491,7 @@ ldfile_try_open_bfd (const char *attempt, if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0) { - einfo (_("%F%P: attempted static link of dynamic object `%s'\n"), + fatal (_("%P: attempted static link of dynamic object `%s'\n"), attempt); bfd_close (entry->the_bfd); entry->the_bfd = NULL; @@ -897,7 +897,7 @@ ldfile_open_command_file_1 (const char *name, enum script_open_style open_how) if ((open_how != script_nonT || script->open_how != script_nonT) && strcmp (name, script->name) == 0) { - einfo (_("%F%P: error: linker script file '%s'" + fatal (_("%P: error: linker script file '%s'" " appears multiple times\n"), name); return; } @@ -916,7 +916,7 @@ ldfile_open_command_file_1 (const char *name, enum script_open_style open_how) if (ldlex_input_stack == NULL) { bfd_set_error (bfd_error_system_call); - einfo (_("%F%P: cannot open linker script file %s: %E\n"), name); + fatal (_("%P: cannot open linker script file %s: %E\n"), name); return; } @@ -1010,7 +1010,7 @@ ldfile_set_output_arch (const char *string, enum bfd_architecture defarch) else if (defarch != bfd_arch_unknown) ldfile_output_architecture = defarch; else - einfo (_("%F%P: cannot represent machine `%s'\n"), string); + fatal (_("%P: cannot represent machine `%s'\n"), string); } /* Tidy up memory. */ diff --git a/ld/ldgram.y b/ld/ldgram.y index 9bb98de..6635e59 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -210,7 +210,7 @@ mri_script_command: CHIP exp | CHIP exp ',' exp | NAME { - einfo(_("%F%P: unrecognised keyword in MRI style script '%s'\n"),$1); + fatal (_("%P: unrecognised keyword in MRI style script '%s'\n"), $1); } | LIST { config.map_filename = "-"; @@ -1580,7 +1580,7 @@ yyerror (const char *arg) einfo (_("%P:%s: file format not recognized; treating as linker script\n"), ldlex_filename ()); if (error_index > 0 && error_index < ERROR_NAME_MAX) - einfo (_("%F%P:%pS: %s in %s\n"), NULL, arg, error_names[error_index - 1]); + fatal (_("%P:%pS: %s in %s\n"), NULL, arg, error_names[error_index - 1]); else - einfo ("%F%P:%pS: %s\n", NULL, arg); + fatal ("%P:%pS: %s\n", NULL, arg); } diff --git a/ld/ldlang.c b/ld/ldlang.c index cd94e20..d2c9b96 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -1396,7 +1396,7 @@ output_section_statement_table_init (void) output_section_statement_newfunc, sizeof (struct out_section_hash_entry), 61)) - einfo (_("%F%P: can not create hash table: %E\n")); + fatal (_("%P: can not create hash table: %E\n")); } static void @@ -1529,7 +1529,7 @@ lang_memory_region_alias (const char *alias, const char *region_name) the default memory region. */ if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0 || strcmp (alias, DEFAULT_MEMORY_REGION) == 0) - einfo (_("%F%P:%pS: error: alias for default memory region\n"), NULL); + fatal (_("%P:%pS: error: alias for default memory region\n"), NULL); /* Look for the target region and check if the alias is not already in use. */ @@ -1540,14 +1540,14 @@ lang_memory_region_alias (const char *alias, const char *region_name) if (region == NULL && strcmp (n->name, region_name) == 0) region = r; if (strcmp (n->name, alias) == 0) - einfo (_("%F%P:%pS: error: redefinition of memory region " + fatal (_("%P:%pS: error: redefinition of memory region " "alias `%s'\n"), NULL, alias); } /* Check if the target region exists. */ if (region == NULL) - einfo (_("%F%P:%pS: error: memory region `%s' " + fatal (_("%P:%pS: error: memory region `%s' " "for alias `%s' does not exist\n"), NULL, region_name, alias); @@ -1608,7 +1608,7 @@ lang_output_section_statement_lookup (const char *name, if (entry == NULL) { if (create) - einfo (_("%F%P: failed creating section `%s': %E\n"), name); + fatal (_("%P: failed creating section `%s': %E\n"), name); return NULL; } @@ -1651,7 +1651,7 @@ lang_output_section_statement_lookup (const char *name, name); if (entry == NULL) { - einfo (_("%F%P: failed creating section `%s': %E\n"), name); + fatal (_("%P: failed creating section `%s': %E\n"), name); return NULL; } entry->root = last_ent->root; @@ -2523,7 +2523,7 @@ static void init_os (lang_output_section_statement_type *s, flagword flags) { if (strcmp (s->name, DISCARD_SECTION_NAME) == 0) - einfo (_("%F%P: illegal use of `%s' section\n"), DISCARD_SECTION_NAME); + fatal (_("%P: illegal use of `%s' section\n"), DISCARD_SECTION_NAME); if (!s->dup_output) s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name); @@ -2532,7 +2532,7 @@ init_os (lang_output_section_statement_type *s, flagword flags) s->name, flags); if (s->bfd_section == NULL) { - einfo (_("%F%P: output format %s cannot represent section" + fatal (_("%P: output format %s cannot represent section" " called %s: %E\n"), link_info.output_bfd->xvec->name, s->name); } @@ -3118,11 +3118,11 @@ load_symbols (lang_input_statement_type *entry, for (p = matching; *p != NULL; p++) einfo (" %s", *p); free (matching); - einfo ("%F\n"); + fatal ("\n"); } else if (err != bfd_error_file_not_recognized || place == NULL) - einfo (_("%F%P: %pB: file not recognized: %E\n"), entry->the_bfd); + fatal (_("%P: %pB: file not recognized: %E\n"), entry->the_bfd); bfd_close (entry->the_bfd); entry->the_bfd = NULL; @@ -3195,7 +3195,7 @@ load_symbols (lang_input_statement_type *entry, if (!bfd_check_format (member, bfd_object)) { - einfo (_("%F%P: %pB: member %pB in archive is not an object\n"), + fatal (_("%P: %pB: member %pB in archive is not an object\n"), entry->the_bfd, member); loaded = false; } @@ -3216,7 +3216,7 @@ load_symbols (lang_input_statement_type *entry, substitute BFD for us. */ if (!bfd_link_add_symbols (subsbfd, &link_info)) { - einfo (_("%F%P: %pB: error adding symbols: %E\n"), member); + fatal (_("%P: %pB: error adding symbols: %E\n"), member); loaded = false; } } @@ -3230,7 +3230,7 @@ load_symbols (lang_input_statement_type *entry, if (bfd_link_add_symbols (entry->the_bfd, &link_info)) entry->flags.loaded = true; else - einfo (_("%F%P: %pB: error adding symbols: %E\n"), entry->the_bfd); + fatal (_("%P: %pB: error adding symbols: %E\n"), entry->the_bfd); return entry->flags.loaded; } @@ -3471,7 +3471,7 @@ open_output (const char *name) { char *in = lrealpath (f->local_sym_name); if (filename_cmp (in, out) == 0) - einfo (_("%F%P: input file '%s' is the same as output file\n"), + fatal (_("%P: input file '%s' is the same as output file\n"), f->filename); free (in); } @@ -3533,23 +3533,23 @@ open_output (const char *name) if (link_info.output_bfd == NULL) { if (bfd_get_error () == bfd_error_invalid_target) - einfo (_("%F%P: target %s not found\n"), output_target); + fatal (_("%P: target %s not found\n"), output_target); - einfo (_("%F%P: cannot open output file %s: %E\n"), name); + fatal (_("%P: cannot open output file %s: %E\n"), name); } delete_output_file_on_failure = true; if (!bfd_set_format (link_info.output_bfd, bfd_object)) - einfo (_("%F%P: %s: can not make object file: %E\n"), name); + fatal (_("%P: %s: can not make object file: %E\n"), name); if (!bfd_set_arch_mach (link_info.output_bfd, - ldfile_output_architecture, - ldfile_output_machine)) - einfo (_("%F%P: %s: can not set architecture: %E\n"), name); + ldfile_output_architecture, + ldfile_output_machine)) + fatal (_("%P: %s: can not set architecture: %E\n"), name); link_info.hash = bfd_link_hash_table_create (link_info.output_bfd); if (link_info.hash == NULL) - einfo (_("%F%P: can not create hash table: %E\n")); + fatal (_("%P: can not create hash table: %E\n")); bfd_set_gp_size (link_info.output_bfd, g_switch_value); } @@ -3763,7 +3763,7 @@ open_input_bfds (lang_statement_union_type *s, /* Exit if any of the files were missing. */ if (input_flags.missing_file) - einfo ("%F"); + fatal (""); } #ifdef ENABLE_LIBCTF @@ -4074,7 +4074,7 @@ insert_undefined (const char *name) h = bfd_link_hash_lookup (link_info.hash, name, true, false, true); if (h == NULL) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); if (h->type == bfd_link_hash_new) { h->type = bfd_link_hash_undefined; @@ -4360,7 +4360,7 @@ map_input_to_output_sections else if (strcmp (name, "SHT_PREINIT_ARRAY") == 0) type = SHT_PREINIT_ARRAY; else - einfo (_ ("%F%P: invalid type for output section `%s'\n"), + fatal (_ ("%P: invalid type for output section `%s'\n"), os->name); } else @@ -4369,7 +4369,7 @@ map_input_to_output_sections if (expld.result.valid_p) type = expld.result.value; else - einfo (_ ("%F%P: invalid type for output section `%s'\n"), + fatal (_ ("%P: invalid type for output section `%s'\n"), os->name); } break; @@ -4518,7 +4518,7 @@ process_insert_statements (lang_statement_union_type **start) } if (where == NULL) { - einfo (_("%F%P: %s not found for insert\n"), i->where); + fatal (_("%P: %s not found for insert\n"), i->where); return; } @@ -5600,12 +5600,12 @@ size_input_section if (dot + TO_ADDR (i->size) > end) { if (i->flags & SEC_LINKER_CREATED) - einfo (_("%F%P: Output section `%pA' not large enough for " + fatal (_("%P: Output section `%pA' not large enough for " "the linker-created stubs section `%pA'.\n"), i->output_section, i); if (i->rawsize && i->rawsize != i->size) - einfo (_("%F%P: Relaxation not supported with " + fatal (_("%P: Relaxation not supported with " "--enable-non-contiguous-regions (section `%pA' " "would overflow `%pA' after it changed size).\n"), i, i->output_section); @@ -5961,7 +5961,7 @@ lang_size_sections_1 dot += expld.result.section->vma; } else if (expld.phase != lang_mark_phase_enum) - einfo (_("%F%P:%pS: non constant or forward reference" + fatal (_("%P:%pS: non constant or forward reference" " address expression for section %s\n"), os->addr_tree, os->name); } @@ -6044,7 +6044,7 @@ lang_size_sections_1 overridden by the using the --no-check-sections switch. */ if (command_line.check_section_addresses) - einfo (_("%F%P: error: no memory region specified" + fatal (_("%P: error: no memory region specified" " for loadable section `%s'\n"), bfd_section_name (os->bfd_section)); else @@ -6351,7 +6351,7 @@ lang_size_sections_1 bool again; if (!bfd_relax_section (i->owner, i, &link_info, &again)) - einfo (_("%F%P: can't relax section: %E\n")); + fatal (_("%P: can't relax section: %E\n")); if (again) *relax = true; } @@ -6760,7 +6760,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, s->data_statement.value += expld.result.section->vma; } else if (expld.phase == lang_final_phase_enum) - einfo (_("%F%P: invalid data statement\n")); + fatal (_("%P: invalid data statement\n")); { unsigned int size; switch (s->data_statement.type) @@ -6793,7 +6793,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, if (expld.result.valid_p) s->reloc_statement.addend_value = expld.result.value; else if (expld.phase == lang_final_phase_enum) - einfo (_("%F%P: invalid reloc statement\n")); + fatal (_("%P: invalid reloc statement\n")); dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto)); break; @@ -7176,6 +7176,7 @@ lang_symbol_tweaks (void) h->def_regular = 1; h->root.linker_def = 1; h->root.rel_from_abs = 1; + elf_hash_table (&link_info)->hehdr_start = h; } } } @@ -7211,7 +7212,7 @@ lang_end (void) break; } if (!sym) - einfo (_("%F%P: --gc-sections requires a defined symbol root " + fatal (_("%P: --gc-sections requires a defined symbol root " "specified by -e or -u\n")); } @@ -7236,7 +7237,7 @@ lang_end (void) + bfd_section_vma (h->u.def.section->output_section) + h->u.def.section->output_offset); if (!bfd_set_start_address (link_info.output_bfd, val)) - einfo (_("%F%P: %s: can't set start address\n"), entry_symbol.name); + fatal (_("%P: %s: can't set start address\n"), entry_symbol.name); } else { @@ -7249,7 +7250,7 @@ lang_end (void) if (*send == '\0') { if (!bfd_set_start_address (link_info.output_bfd, val)) - einfo (_("%F%P: can't set start address\n")); + fatal (_("%P: can't set start address\n")); } /* BZ 2004952: Only use the start of the entry section for executables. */ else if bfd_link_executable (&link_info) @@ -7268,7 +7269,7 @@ lang_end (void) bfd_section_vma (ts)); if (!bfd_set_start_address (link_info.output_bfd, bfd_section_vma (ts))) - einfo (_("%F%P: can't set start address\n")); + fatal (_("%P: can't set start address\n")); } else { @@ -7337,11 +7338,10 @@ lang_check (void) != bfd_get_flavour (link_info.output_bfd))) && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0) { - einfo (_("%F%P: relocatable linking with relocations from" + fatal (_("%P: relocatable linking with relocations from" " format %s (%pB) to format %s (%pB) is not supported\n"), bfd_get_target (input_bfd), input_bfd, bfd_get_target (link_info.output_bfd), link_info.output_bfd); - /* einfo with %F exits. */ } if (compatible == NULL) @@ -7442,7 +7442,7 @@ lang_one_common (struct bfd_link_hash_entry *h, void *info) section = h->u.c.p->section; if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h)) - einfo (_("%F%P: could not define common symbol `%pT': %E\n"), + fatal (_("%P: could not define common symbol `%pT': %E\n"), h->root.string); if (config.map_file != NULL) @@ -7620,7 +7620,7 @@ lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert) break; default: - einfo (_("%F%P: invalid character %c (%d) in flags\n"), + fatal (_("%P: invalid character %c (%d) in flags\n"), *flags, *flags); break; } @@ -7714,7 +7714,7 @@ lang_enter_output_section_statement (const char *output_section_statement_name, constraint, in_section_ordering ? 0 : 2); if (os == NULL) /* && in_section_ordering */ - einfo (_("%F%P:%pS: error: output section '%s' must already exist\n"), + fatal (_("%P:%pS: error: output section '%s' must already exist\n"), NULL, output_section_statement_name); current_section = os; @@ -7738,7 +7738,7 @@ lang_enter_output_section_statement (const char *output_section_statement_name, os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT; if (os->align_lma_with_input && align != NULL) - einfo (_("%F%P:%pS: error: align with input and explicit align specified\n"), + fatal (_("%P:%pS: error: align with input and explicit align specified\n"), NULL); os->subsection_alignment = subalign; @@ -8275,7 +8275,7 @@ lang_process (void) lang_place_undefineds (); if (!bfd_section_already_linked_table_init ()) - einfo (_("%F%P: can not create hash table: %E\n")); + fatal (_("%P: can not create hash table: %E\n")); /* A first pass through the memory regions ensures that if any region references a symbol for its origin or length then this symbol will be @@ -8313,7 +8313,7 @@ lang_process (void) files = file_chain; inputfiles = input_file_chain; if (plugin_call_all_symbols_read ()) - einfo (_("%F%P: %s: plugin reported error after all symbols read\n"), + fatal (_("%P: %s: plugin reported error after all symbols read\n"), plugin_error_plugin ()); link_info.lto_all_symbols_read = true; /* Open any newly added files, updating the file chains. */ @@ -8550,7 +8550,7 @@ lang_process (void) assigning dynamic symbols, since removing whole input sections is hard then. */ if (!bfd_merge_sections (link_info.output_bfd, &link_info)) - einfo (_("%F%P: bfd_merge_sections failed: %E\n")); + fatal (_("%P: bfd_merge_sections failed: %E\n")); /* Look for a text section and set the readonly attribute in it. */ found = bfd_get_section_by_name (link_info.output_bfd, ".text"); @@ -8926,9 +8926,7 @@ void lang_startup (const char *name) { if (first_file->filename != NULL) - { - einfo (_("%F%P: multiple STARTUP files\n")); - } + fatal (_("%P: multiple STARTUP files\n")); first_file->filename = name; first_file->local_sym_name = name; first_file->flags.real = true; @@ -9155,7 +9153,7 @@ lang_record_phdrs (void) break; } if (last == NULL) - einfo (_("%F%P: no sections assigned to phdrs\n")); + fatal (_("%P: no sections assigned to phdrs\n")); } pl = last; } @@ -9193,7 +9191,7 @@ lang_record_phdrs (void) if (!bfd_record_phdr (link_info.output_bfd, l->type, l->flags != NULL, flags, l->at != NULL, at, l->filehdr, l->phdrs, c, secs)) - einfo (_("%F%P: bfd_record_phdr failed: %E\n")); + fatal (_("%P: bfd_record_phdr failed: %E\n")); } free (secs); @@ -10471,7 +10469,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *p) loser: arg->status = 1; - einfo (_("%P%F: setup_section: %s: %s\n"), err, name); + fatal (_("%P: setup_section: %s: %s\n"), err, name); } /* Copy the data of input section ISECTION of IBFD @@ -10566,7 +10564,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *p) return; loser: - einfo (_("%P%F: copy_section: %s: %s\n"), err, isection->name); + fatal (_("%P: copy_section: %s: %s\n"), err, isection->name); } /* Open the temporary bfd created in the same directory as PATH. */ @@ -10803,7 +10801,7 @@ cmdline_add_object_only_section (bfd_byte *contents, size_t size) if (!bfd_close (obfd)) { unlink (ofilename); - einfo (_("%P%F: failed to finish output with object-only section\n")); + fatal (_("%P: failed to finish output with object-only section\n")); } /* Must be freed after bfd_close (). */ @@ -10813,7 +10811,7 @@ cmdline_add_object_only_section (bfd_byte *contents, size_t size) if (rename (ofilename, output_filename)) { unlink (ofilename); - einfo (_("%P%F: failed to rename output with object-only section\n")); + fatal (_("%P: failed to rename output with object-only section\n")); } free (ofilename); @@ -10829,7 +10827,7 @@ loser: unlink (ofilename); free (ofilename); } - einfo (_("%P%F: failed to add object-only section: %s\n"), err); + fatal (_("%P: failed to add object-only section: %s\n"), err); } /* Emit the final output with object-only section. */ @@ -10862,7 +10860,7 @@ cmdline_emit_object_only_section (void) ldemul_create_output_section_statements (); if (!bfd_section_already_linked_table_init ()) - einfo (_("%P%F: Failed to create hash table\n")); + fatal (_("%P: Failed to create hash table\n")); /* Call cmdline_on_object_only_archive_list_p to check which member should be loaded. */ @@ -10926,8 +10924,8 @@ cmdline_emit_object_only_section (void) lang_finish (); if (! bfd_close (link_info.output_bfd)) - einfo (_("%P%F:%s: final close failed on object-only output: %E\n"), - output_filename); + fatal (_("%P:%s: final close failed on object-only output: %E\n"), + output_filename); link_info.output_bfd = NULL; @@ -10936,7 +10934,7 @@ cmdline_emit_object_only_section (void) if (fd < 0) { bfd_set_error (bfd_error_system_call); - einfo (_("%P%F:%s: cannot open object-only output: %E\n"), + fatal (_("%P:%s: cannot open object-only output: %E\n"), output_filename); } @@ -10944,7 +10942,7 @@ cmdline_emit_object_only_section (void) if (fstat (fd, &st) != 0) { bfd_set_error (bfd_error_system_call); - einfo (_("%P%F:%s: cannot stat object-only output: %E\n"), + fatal (_("%P:%s: cannot stat object-only output: %E\n"), output_filename); } @@ -10959,7 +10957,7 @@ cmdline_emit_object_only_section (void) if (got < 0) { bfd_set_error (bfd_error_system_call); - einfo (_("%P%F:%s: read failed on object-only output: %E\n"), + fatal (_("%P:%s: read failed on object-only output: %E\n"), output_filename); } @@ -10986,8 +10984,7 @@ cmdline_extract_object_only_section (bfd *abfd) const char *name = bfd_extract_object_only_section (abfd); if (name == NULL) - einfo (_("%P%F: cannot extract object-only section from %B: %E\n"), - abfd); + fatal (_("%P: cannot extract object-only section from %B: %E\n"), abfd); /* It should be removed after it is done. */ cmdline_list_append (&cmdline_temp_object_only_list, @@ -11021,7 +11018,7 @@ cmdline_load_object_only_section (const char *name) if (bfd_link_add_symbols (entry->the_bfd, &link_info)) entry->flags.loaded = true; else - einfo (_("%F%P: %pB: error adding symbols: %E\n"), entry->the_bfd); + fatal (_("%P: %pB: error adding symbols: %E\n"), entry->the_bfd); } /* Check and handle the object-only section. */ @@ -507,9 +507,7 @@ void lex_push_file (FILE *file, const char *name, unsigned int sysrooted) { if (include_stack_ptr >= MAX_INCLUDE_DEPTH) - { - einfo (_("%F:includes nested too deeply\n")); - } + fatal (_("%P: includes nested too deeply\n")); file_name_stack[include_stack_ptr] = name; lineno_stack[include_stack_ptr] = lineno; sysrooted_stack[include_stack_ptr] = input_flags.sysrooted; @@ -571,9 +569,7 @@ lex_redirect (const char *string, const char *fake_filename, unsigned int count) yy_init = 0; if (include_stack_ptr >= MAX_INCLUDE_DEPTH) - { - einfo (_("%F: macros nested too deeply\n")); - } + fatal (_("%P: macros nested too deeply\n")); file_name_stack[include_stack_ptr] = fake_filename; lineno_stack[include_stack_ptr] = lineno; include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; @@ -677,7 +673,7 @@ yy_input (char *buf, int max_size) { result = fread (buf, 1, max_size, yyin); if (result < max_size && ferror (yyin)) - einfo (_("%F%P: read in flex scanner failed\n")); + fatal (_("%P: read in flex scanner failed\n")); } } return result; @@ -714,7 +710,7 @@ comment (void) if (c == 0) { - einfo (_("%F%P: EOF in comment\n")); + fatal (_("%P: EOF in comment\n")); break; } } @@ -735,7 +731,7 @@ lex_warn_invalid (char *where, char *what) if (ldfile_assumed_script) { bfd_set_error (bfd_error_file_not_recognized); - einfo (_("%F%s: file not recognized: %E\n"), ldlex_filename ()); + fatal (_("%s: file not recognized: %E\n"), ldlex_filename ()); } if (! ISPRINT (*what)) diff --git a/ld/ldmain.c b/ld/ldmain.c index f1c5f70..cb5e58d 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -195,7 +195,7 @@ write_dependency_file (void) if (out == NULL) { bfd_set_error (bfd_error_system_call); - einfo (_("%F%P: cannot open dependency file %s: %E\n"), + fatal (_("%P: cannot open dependency file %s: %E\n"), config.dependency_file); } @@ -288,7 +288,7 @@ main (int argc, char **argv) expandargv (&argc, &argv); if (bfd_init () != BFD_INIT_MAGIC) - einfo (_("%F%P: fatal error: libbfd ABI mismatch\n")); + fatal (_("%P: fatal error: libbfd ABI mismatch\n")); bfd_set_error_program_name (program_name); @@ -494,14 +494,14 @@ main (int argc, char **argv) xexit (0); if (link_info.inhibit_common_definition && !bfd_link_dll (&link_info)) - einfo (_("%F%P: --no-define-common may not be used without -shared\n")); + fatal (_("%P: --no-define-common may not be used without -shared\n")); if (!lang_has_input_file) { if (version_printed || command_line.print_output_format) xexit (0); output_unknown_cmdline_warnings (); - einfo (_("%F%P: no input files\n")); + fatal (_("%P: no input files\n")); } if (verbose) @@ -523,7 +523,7 @@ main (int argc, char **argv) if (config.map_file == (FILE *) NULL) { bfd_set_error (bfd_error_system_call); - einfo (_("%F%P: cannot open map file %s: %E\n"), + einfo (_("%P: cannot open map file %s: %E\n"), config.map_filename); } } @@ -598,7 +598,7 @@ main (int argc, char **argv) bfd *obfd = link_info.output_bfd; link_info.output_bfd = NULL; if (!bfd_close (obfd)) - einfo (_("%F%P: %s: final close failed: %E\n"), output_filename); + fatal (_("%P: %s: final close failed: %E\n"), output_filename); link_info.output_bfd = NULL; @@ -627,10 +627,10 @@ main (int argc, char **argv) dst = fopen (dst_name, FOPEN_WB); if (!src) - einfo (_("%F%P: unable to open for source of copy `%s'\n"), + fatal (_("%P: unable to open for source of copy `%s'\n"), output_filename); if (!dst) - einfo (_("%F%P: unable to open for destination of copy `%s'\n"), + fatal (_("%P: unable to open for destination of copy `%s'\n"), dst_name); while ((l = fread (buf, 1, bsize, src)) > 0) { @@ -744,7 +744,7 @@ get_emulation (int argc, char **argv) i++; } else - einfo (_("%F%P: missing argument to -m\n")); + fatal (_("%P: missing argument to -m\n")); } else if (strcmp (argv[i], "-mips1") == 0 || strcmp (argv[i], "-mips2") == 0 @@ -798,11 +798,11 @@ add_ysym (const char *name) bfd_hash_newfunc, sizeof (struct bfd_hash_entry), 61)) - einfo (_("%F%P: bfd_hash_table_init failed: %E\n")); + fatal (_("%P: bfd_hash_table_init failed: %E\n")); } if (bfd_hash_lookup (link_info.notice_hash, name, true, true) == NULL) - einfo (_("%F%P: bfd_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_hash_lookup failed: %E\n")); } void @@ -815,11 +815,11 @@ add_ignoresym (struct bfd_link_info *info, const char *name) bfd_hash_newfunc, sizeof (struct bfd_hash_entry), 61)) - einfo (_("%F%P: bfd_hash_table_init failed: %E\n")); + fatal (_("%P: bfd_hash_table_init failed: %E\n")); } if (bfd_hash_lookup (info->ignore_hash, name, true, true) == NULL) - einfo (_("%F%P: bfd_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_hash_lookup failed: %E\n")); } /* Record a symbol to be wrapped, from the --wrap option. */ @@ -835,11 +835,11 @@ add_wrap (const char *name) bfd_hash_newfunc, sizeof (struct bfd_hash_entry), 61)) - einfo (_("%F%P: bfd_hash_table_init failed: %E\n")); + fatal (_("%P: bfd_hash_table_init failed: %E\n")); } if (bfd_hash_lookup (link_info.wrap_hash, name, true, true) == NULL) - einfo (_("%F%P: bfd_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_hash_lookup failed: %E\n")); } /* Handle the -retain-symbols-file option. */ @@ -867,7 +867,7 @@ add_keepsyms_file (const char *filename) xmalloc (sizeof (struct bfd_hash_table)); if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc, sizeof (struct bfd_hash_entry))) - einfo (_("%F%P: bfd_hash_table_init failed: %E\n")); + fatal (_("%P: bfd_hash_table_init failed: %E\n")); bufsize = 100; buf = (char *) xmalloc (bufsize); @@ -897,7 +897,7 @@ add_keepsyms_file (const char *filename) buf[len] = '\0'; if (bfd_hash_lookup (link_info.keep_hash, buf, true, true) == NULL) - einfo (_("%F%P: bfd_hash_lookup for insertion failed: %E\n")); + fatal (_("%P: bfd_hash_lookup for insertion failed: %E\n")); } } @@ -1309,7 +1309,7 @@ constructor_callback (struct bfd_link_info *info, if (bfd_reloc_type_lookup (info->output_bfd, BFD_RELOC_CTOR) == NULL && (bfd_link_relocatable (info) || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL)) - einfo (_("%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n")); + fatal (_("%P: BFD backend error: BFD_RELOC_CTOR unsupported\n")); s = set_name; if (bfd_get_symbol_leading_char (abfd) != '\0') @@ -1321,7 +1321,7 @@ constructor_callback (struct bfd_link_info *info, h = bfd_link_hash_lookup (info->hash, set_name, true, true, true); if (h == (struct bfd_link_hash_entry *) NULL) - einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n")); + fatal (_("%P: bfd_link_hash_lookup failed: %E\n")); if (h->type == bfd_link_hash_new) { h->type = bfd_link_hash_undefined; @@ -1354,7 +1354,7 @@ symbol_warning (const char *warning, const char *symbol, bfd *abfd) struct warning_callback_info cinfo; if (!bfd_generic_link_read_symbols (abfd)) - einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd); + fatal (_("%P: %pB: could not read symbols: %E\n"), abfd); cinfo.found = false; cinfo.warning = warning; @@ -1416,14 +1416,14 @@ warning_find_reloc (bfd *abfd, asection *sec, void *iarg) relsize = bfd_get_reloc_upper_bound (abfd, sec); if (relsize < 0) - einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd); + fatal (_("%P: %pB: could not read relocs: %E\n"), abfd); if (relsize == 0) return; relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols); if (relcount < 0) - einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd); + fatal (_("%P: %pB: could not read relocs: %E\n"), abfd); p = relpp; pend = p + relcount; diff --git a/ld/ldmisc.c b/ld/ldmisc.c index f18a6b5..9ee0781 100644 --- a/ld/ldmisc.c +++ b/ld/ldmisc.c @@ -70,7 +70,7 @@ void vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning) { - bool fatal = false; + bool isfatal = false; const char *scan; int arg_type; unsigned int arg_count = 0; @@ -282,7 +282,7 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning) case 'F': /* Error is fatal. */ - fatal = true; + isfatal = true; break; case 'P': @@ -324,7 +324,7 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning) if (abfd != NULL) { if (!bfd_generic_link_read_symbols (abfd)) - einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd); + fatal (_("%P: %pB: could not read symbols: %E\n"), abfd); asymbols = bfd_get_outsymbols (abfd); } @@ -587,7 +587,7 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning) if (is_warning && config.fatal_warnings) config.make_executable = false; - if (fatal) + if (isfatal) xexit (1); } @@ -620,6 +620,21 @@ einfo (const char *fmt, ...) fflush (stderr); } +/* Fatal error. */ + +void +fatal (const char *fmt, ...) +{ + va_list arg; + + fflush (stdout); + va_start (arg, fmt); + vfinfo (stderr, fmt, arg, true); + va_end (arg); + fflush (stderr); + xexit (1); +} + /* The buffer size for each command-line option warning. */ #define CMDLINE_WARNING_SIZE 256 @@ -698,7 +713,7 @@ output_unknown_cmdline_warnings (void) void info_assert (const char *file, unsigned int line) { - einfo (_("%F%P: internal error %s %d\n"), file, line); + fatal (_("%P: internal error %s %d\n"), file, line); } /* ('m' for map) Format info message and print on map. */ @@ -767,8 +782,7 @@ ld_abort (const char *file, int line, const char *fn) else einfo (_("%P: internal error: aborting at %s:%d\n"), file, line); - einfo (_("%F%P: please report this bug\n")); - xexit (1); + fatal (_("%P: please report this bug\n")); } /* Decode a hexadecimal character. Return -1 on error. */ diff --git a/ld/ldmisc.h b/ld/ldmisc.h index cac36f0..7103b53 100644 --- a/ld/ldmisc.h +++ b/ld/ldmisc.h @@ -23,6 +23,7 @@ extern void vfinfo (FILE *fp, const char *fmt, va_list arg, bool is_warning); extern void einfo (const char *, ...); +extern void fatal (const char *, ...) ATTRIBUTE_NORETURN; extern void minfo (const char *, ...); extern void info_msg (const char *, ...); extern void lfinfo (FILE *, const char *, ...); diff --git a/ld/ldwrite.c b/ld/ldwrite.c index b8b9ff1..7613def 100644 --- a/ld/ldwrite.c +++ b/ld/ldwrite.c @@ -57,14 +57,14 @@ build_link_order (lang_statement_union_type *statement) link_order = bfd_new_link_order (link_info.output_bfd, output_section); if (link_order == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); link_order->type = bfd_data_link_order; link_order->offset = statement->data_statement.output_offset; link_order->u.data.contents = bfd_alloc (link_info.output_bfd, QUAD_SIZE); if (link_order->u.data.contents == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); value = statement->data_statement.value; @@ -170,7 +170,7 @@ build_link_order (lang_statement_union_type *statement) link_order = bfd_new_link_order (link_info.output_bfd, output_section); if (link_order == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); link_order->offset = rs->output_offset; link_order->size = bfd_get_reloc_size (rs->howto); @@ -178,7 +178,7 @@ build_link_order (lang_statement_union_type *statement) link_order->u.reloc.p = (struct bfd_link_order_reloc *) bfd_alloc (link_info.output_bfd, sizeof (struct bfd_link_order_reloc)); if (link_order->u.reloc.p == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); link_order->u.reloc.p->reloc = rs->reloc; link_order->u.reloc.p->addend = rs->addend_value; @@ -224,7 +224,7 @@ build_link_order (lang_statement_union_type *statement) link_order = bfd_new_link_order (link_info.output_bfd, output_section); if (link_order == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); if ((i->flags & SEC_NEVER_LOAD) != 0 && (i->flags & SEC_DEBUGGING) == 0) @@ -265,7 +265,7 @@ build_link_order (lang_statement_union_type *statement) link_order = bfd_new_link_order (link_info.output_bfd, output_section); if (link_order == NULL) - einfo (_("%F%P: bfd_new_link_order failed: %E\n")); + fatal (_("%P: bfd_new_link_order failed: %E\n")); link_order->type = bfd_data_link_order; link_order->size = statement->padding_statement.size; link_order->offset = statement->padding_statement.output_offset; @@ -334,8 +334,7 @@ clone_section (bfd *abfd, asection *s, const char *name, int *count) if (startswith (name, ".stab") || strcmp (name, "$GDB_SYMBOLS$") == 0) { - einfo (_ ("%F%P: cannot create split section name for %s\n"), name); - /* Silence gcc warnings. einfo exits, so we never reach here. */ + fatal (_ ("%P: cannot create split section name for %s\n"), name); return NULL; } tname[5] = 0; @@ -346,8 +345,7 @@ clone_section (bfd *abfd, asection *s, const char *name, int *count) || (h = bfd_link_hash_lookup (link_info.hash, sname, true, true, false)) == NULL) { - einfo (_("%F%P: clone section failed: %E\n")); - /* Silence gcc warnings. einfo exits, so we never reach here. */ + fatal (_("%P: clone section failed: %E\n")); return NULL; } free (tname); @@ -550,8 +548,8 @@ ldwrite (void) if (!bfd_final_link (link_info.output_bfd, &link_info)) { if (bfd_get_error () != bfd_error_no_error) - einfo (_("%F%P: final link failed: %E\n")); + fatal (_("%P: final link failed: %E\n")); else - einfo (_("%F%P: final link failed\n")); + fatal (_("%P: final link failed\n")); } } diff --git a/ld/lexsup.c b/ld/lexsup.c index 58b9bdd..7de6e25 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -810,7 +810,8 @@ parse_args (unsigned argc, char **argv) && optc != argv[last_optind][1]) { if (optarg) - einfo (_("%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"), + fatal (_("%P: Error: unable to disambiguate: " + "%s (did you mean -%s ?)\n"), argv[last_optind], argv[last_optind]); else einfo (_("%P: Warning: grouped short command line options are deprecated: %s\n"), argv[last_optind]); @@ -850,7 +851,7 @@ parse_args (unsigned argc, char **argv) /* Fall through. */ default: - einfo (_("%F%P: use the --help option for usage information\n")); + fatal (_("%P: use the --help option for usage information\n")); break; case 1: /* File name. */ @@ -869,7 +870,7 @@ parse_args (unsigned argc, char **argv) || strcmp (optarg, "default") == 0) input_flags.dynamic = true; else - einfo (_("%F%P: unrecognized -a option `%s'\n"), optarg); + fatal (_("%P: unrecognized -a option `%s'\n"), optarg); break; case OPTION_ASSERT: /* FIXME: We just ignore these, but we should handle them. */ @@ -882,7 +883,7 @@ parse_args (unsigned argc, char **argv) else if (strcmp (optarg, "pure-text") == 0) ; else - einfo (_("%F%P: unrecognized -assert option `%s'\n"), optarg); + fatal (_("%P: unrecognized -assert option `%s'\n"), optarg); break; case 'A': ldfile_add_arch (optarg); @@ -926,8 +927,7 @@ parse_args (unsigned argc, char **argv) style = cplus_demangle_name_to_style (optarg); if (style == unknown_demangling) - einfo (_("%F%P: unknown demangling style `%s'\n"), - optarg); + fatal (_("%P: unknown demangling style `%s'\n"), optarg); cplus_demangle_set_style (style); } @@ -1034,7 +1034,7 @@ parse_args (unsigned argc, char **argv) char *end; g_switch_value = strtoul (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\n"), optarg); + fatal (_("%P: invalid number `%s'\n"), optarg); } break; case 'g': @@ -1130,7 +1130,7 @@ parse_args (unsigned argc, char **argv) link_info.unresolved_syms_in_shared_libs = RM_IGNORE; } else - einfo (_("%F%P: bad --unresolved-symbols option: %s\n"), optarg); + fatal (_("%P: bad --unresolved-symbols option: %s\n"), optarg); break; case OPTION_WARN_UNRESOLVED_SYMBOLS: link_info.warn_unresolved_syms = true; @@ -1217,7 +1217,7 @@ parse_args (unsigned argc, char **argv) break; case OPTION_PLUGIN_OPT: if (plugin_opt_plugin_arg (optarg)) - einfo (_("%F%P: bad -plugin-opt option\n")); + fatal (_("%P: bad -plugin-opt option\n")); break; case OPTION_PLUGIN_SAVE_TEMPS: config.plugin_save_temps = true; @@ -1237,11 +1237,11 @@ parse_args (unsigned argc, char **argv) an error message here. We cannot just make this a warning, increment optind, and continue because getopt is too confused and will seg-fault the next time around. */ - einfo(_("%F%P: unrecognised option: %s\n"), argv[optind]); + fatal(_("%P: unrecognised option: %s\n"), argv[optind]); if (bfd_link_pic (&link_info)) - einfo (_("%F%P: -r and %s may not be used together\n"), - bfd_link_dll (&link_info) ? "-shared" : "-pie"); + fatal (_("%P: -r and %s may not be used together\n"), + bfd_link_dll (&link_info) ? "-shared" : "-pie"); link_info.type = type_relocatable; config.build_constructors = false; @@ -1350,7 +1350,7 @@ parse_args (unsigned argc, char **argv) if (config.has_shared) { if (bfd_link_relocatable (&link_info)) - einfo (_("%F%P: -r and %s may not be used together\n"), + fatal (_("%P: -r and %s may not be used together\n"), "-shared"); link_info.type = type_dll; @@ -1362,7 +1362,7 @@ parse_args (unsigned argc, char **argv) link_info.unresolved_syms_in_shared_libs = RM_IGNORE; } else - einfo (_("%F%P: -shared not supported\n")); + fatal (_("%P: -shared not supported\n")); break; case OPTION_NO_PIE: link_info.type = type_pde; @@ -1371,12 +1371,12 @@ parse_args (unsigned argc, char **argv) if (config.has_shared) { if (bfd_link_relocatable (&link_info)) - einfo (_("%F%P: -r and %s may not be used together\n"), "-pie"); + fatal (_("%P: -r and %s may not be used together\n"), "-pie"); link_info.type = type_pie; } else - einfo (_("%F%P: -pie not supported\n")); + fatal (_("%P: -pie not supported\n")); break; case 'h': /* Used on Solaris. */ case OPTION_SONAME: @@ -1393,7 +1393,7 @@ parse_args (unsigned argc, char **argv) else if (strcmp (optarg, N_("ascending")) == 0) config.sort_common = sort_ascending; else - einfo (_("%F%P: invalid common section sorting option: %s\n"), + fatal (_("%P: invalid common section sorting option: %s\n"), optarg); break; case OPTION_SORT_SECTION: @@ -1402,8 +1402,7 @@ parse_args (unsigned argc, char **argv) else if (strcmp (optarg, N_("alignment")) == 0) sort_section = by_alignment; else - einfo (_("%F%P: invalid section sorting option: %s\n"), - optarg); + fatal (_("%P: invalid section sorting option: %s\n"), optarg); break; case OPTION_SECTION_ORDERING_FILE: if (command_line.section_ordering_file != NULL @@ -1445,14 +1444,14 @@ parse_args (unsigned argc, char **argv) /* Check for <something>=<somthing>... */ optarg2 = strchr (optarg, '='); if (optarg2 == NULL) - einfo (_("%F%P: invalid argument to option" + fatal (_("%P: invalid argument to option" " \"--section-start\"\n")); optarg2++; /* So far so good. Are all the args present? */ if ((*optarg == '\0') || (*optarg2 == '\0')) - einfo (_("%F%P: missing argument(s) to option" + fatal (_("%P: missing argument(s) to option" " \"--section-start\"\n")); /* We must copy the section name as set_section_start @@ -1499,8 +1498,8 @@ parse_args (unsigned argc, char **argv) /* Fall through. */ case OPTION_UR: if (bfd_link_pic (&link_info)) - einfo (_("%F%P: -r and %s may not be used together\n"), - bfd_link_dll (&link_info) ? "-shared" : "-pie"); + fatal (_("%P: -r and %s may not be used together\n"), + bfd_link_dll (&link_info) ? "-shared" : "-pie"); link_info.type = type_relocatable; config.build_constructors = true; @@ -1530,7 +1529,7 @@ parse_args (unsigned argc, char **argv) char *end; int level ATTRIBUTE_UNUSED = strtoul (optarg, &end, 0); if (*end) - einfo (_("%F%P: invalid number `%s'\n"), optarg); + fatal (_("%P: invalid number `%s'\n"), optarg); #if BFD_SUPPORTS_PLUGINS report_plugin_symbols = level > 1; #endif /* BFD_SUPPORTS_PLUGINS */ @@ -1725,7 +1724,7 @@ parse_args (unsigned argc, char **argv) break; case ')': if (! ingroup) - einfo (_("%F%P: group ended before it began (--help for usage)\n")); + fatal (_("%P: group ended before it began (--help for usage)\n")); lang_leave_group (); ingroup--; @@ -1741,7 +1740,7 @@ parse_args (unsigned argc, char **argv) case OPTION_REMAP_INPUTS_FILE: if (! ldfile_add_remap_file (optarg)) - einfo (_("%F%P: failed to add remap file %s\n"), optarg); + fatal (_("%P: failed to add remap file %s\n"), optarg); break; case OPTION_REMAP_INPUTS: @@ -1750,7 +1749,7 @@ parse_args (unsigned argc, char **argv) if (optarg2 == NULL) /* FIXME: Should we allow --remap-inputs=@myfile as a synonym for --remap-inputs-file=myfile ? */ - einfo (_("%F%P: invalid argument to option --remap-inputs\n")); + fatal (_("%P: invalid argument to option --remap-inputs\n")); size_t len = optarg2 - optarg; char * pattern = xmalloc (len + 1); memcpy (pattern, optarg, len); @@ -1771,8 +1770,7 @@ parse_args (unsigned argc, char **argv) char *end; bfd_size_type cache_size = strtoul (optarg, &end, 0); if (*end != '\0') - einfo (_("%F%P: invalid cache memory size: %s\n"), - optarg); + fatal (_("%P: invalid cache memory size: %s\n"), optarg); link_info.max_cache_size = cache_size; } break; @@ -1797,7 +1795,7 @@ parse_args (unsigned argc, char **argv) case OPTION_POP_STATE: if (input_flags.pushed == NULL) - einfo (_("%F%P: no state pushed before popping\n")); + fatal (_("%P: no state pushed before popping\n")); else { struct lang_input_statement_flags *oldp = input_flags.pushed; @@ -1820,7 +1818,7 @@ parse_args (unsigned argc, char **argv) else if (strcasecmp (optarg, "discard") == 0) config.orphan_handling = orphan_handling_discard; else - einfo (_("%F%P: invalid argument to option" + fatal (_("%P: invalid argument to option" " \"--orphan-handling\"\n")); break; @@ -1858,7 +1856,7 @@ parse_args (unsigned argc, char **argv) else if (strcmp (optarg, "share-duplicated") == 0) config.ctf_share_duplicated = true; else - einfo (_("%F%P: bad --ctf-share-types option: %s\n"), optarg); + fatal (_("%P: bad --ctf-share-types option: %s\n"), optarg); break; } } @@ -2024,7 +2022,7 @@ parse_args (unsigned argc, char **argv) if (config.no_section_header) { if (bfd_link_relocatable (&link_info)) - einfo (_("%F%P: -r and -z nosectionheader may not be used together\n")); + fatal (_("%P: -r and -z nosectionheader may not be used together\n")); link_info.strip = strip_all; } @@ -2032,9 +2030,9 @@ parse_args (unsigned argc, char **argv) if (!bfd_link_dll (&link_info)) { if (command_line.filter_shlib) - einfo (_("%F%P: -F may not be used without -shared\n")); + fatal (_("%P: -F may not be used without -shared\n")); if (command_line.auxiliary_filters) - einfo (_("%F%P: -f may not be used without -shared\n")); + fatal (_("%P: -f may not be used without -shared\n")); } /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I @@ -2075,7 +2073,7 @@ set_section_start (char *sect, char *valstr) const char *end; bfd_vma val = bfd_scan_vma (valstr, &end, 16); if (*end) - einfo (_("%F%P: invalid hex number `%s'\n"), valstr); + fatal (_("%P: invalid hex number `%s'\n"), valstr); lang_section_start (sect, exp_intop (val), NULL); } @@ -2088,7 +2086,7 @@ set_segment_start (const char *section, char *valstr) bfd_vma val = bfd_scan_vma (valstr, &end, 16); if (*end) - einfo (_("%F%P: invalid hex number `%s'\n"), valstr); + fatal (_("%P: invalid hex number `%s'\n"), valstr); /* If we already have an entry for this segment, update the existing value. */ name = section + 1; @@ -288,7 +288,7 @@ mri_format (const char *name) lang_add_output_format ("srec", NULL, NULL, 1); else - einfo (_("%F%P: unknown format type %s\n"), name); + fatal (_("%P: unknown format type %s\n"), name); } void diff --git a/ld/pe-dll.c b/ld/pe-dll.c index f24b871..4e72f1b 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -779,7 +779,7 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * if (!bfd_generic_link_read_symbols (b)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), b); + fatal (_("%P: %pB: could not read symbols: %E\n"), b); return; } @@ -1071,7 +1071,7 @@ build_filler_bfd (bool include_edata) bfd_get_arch (link_info.output_bfd), bfd_get_mach (link_info.output_bfd))) { - einfo (_("%F%P: can not create BFD: %E\n")); + fatal (_("%P: can not create BFD: %E\n")); return; } @@ -1349,7 +1349,7 @@ pe_walk_relocs (struct bfd_link_info *info, if (!bfd_generic_link_read_symbols (b)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), b); + fatal (_("%P: %pB: could not read symbols: %E\n"), b); return; } @@ -1430,7 +1430,7 @@ pe_find_data_imports (const char *symhead, if (!bfd_hash_table_init (import_hash, bfd_hash_newfunc, sizeof (struct bfd_hash_entry))) - einfo (_("%F%P: bfd_hash_table_init failed: %E\n")); + fatal (_("%P: bfd_hash_table_init failed: %E\n")); } else import_hash = NULL; @@ -1470,7 +1470,7 @@ pe_find_data_imports (const char *symhead, if (!bfd_generic_link_read_symbols (b)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), b); + fatal (_("%P: %pB: could not read symbols: %E\n"), b); return; } @@ -1572,7 +1572,7 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info) if (!bfd_generic_link_read_symbols (b)) { - einfo (_("%F%P: %pB: could not read symbols: %E\n"), b); + fatal (_("%P: %pB: could not read symbols: %E\n"), b); return; } diff --git a/ld/plugin.c b/ld/plugin.c index 8aec848..dedd1a0 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -252,7 +252,7 @@ plugin_opt_plugin (const char *plugin) newplug->name = plugin; newplug->dlhandle = dlopen (plugin, RTLD_NOW); if (!newplug->dlhandle) - einfo (_("%F%P: %s: error loading plugin: %s\n"), plugin, dlerror ()); + fatal (_("%P: %s: error loading plugin: %s\n"), plugin, dlerror ()); /* Check if plugin has been loaded already. */ while (curplug) @@ -343,7 +343,7 @@ plugin_get_ir_dummy_bfd (const char *name, bfd *srctemplate) } } report_error: - einfo (_("%F%P: could not create dummy IR bfd: %E\n")); + fatal (_("%P: could not create dummy IR bfd: %E\n")); return NULL; } @@ -425,7 +425,7 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, unsigned char visibility; if (!elfsym) - einfo (_("%F%P: %s: non-ELF symbol in ELF BFD!\n"), asym->name); + fatal (_("%P: %s: non-ELF symbol in ELF BFD!\n"), asym->name); if (ldsym->def == LDPK_COMMON) { @@ -436,7 +436,7 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym, switch (ldsym->visibility) { default: - einfo (_("%F%P: unknown ELF symbol visibility: %d!\n"), + fatal (_("%P: unknown ELF symbol visibility: %d!\n"), ldsym->visibility); return LDPS_ERR; @@ -558,7 +558,7 @@ get_view (const void *handle, const void **viewp) /* FIXME: einfo should support %lld. */ if ((off_t) size != input->filesize) - einfo (_("%F%P: unsupported input file size: %s (%ld bytes)\n"), + fatal (_("%P: unsupported input file size: %s (%ld bytes)\n"), input->name, (long) input->filesize); /* Check the cached view buffer. */ @@ -834,7 +834,7 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms, && blhe->type != bfd_link_hash_common) { /* We should not have a new, indirect or warning symbol here. */ - einfo (_("%F%P: %s: plugin symbol table corrupt (sym type %d)\n"), + fatal (_("%P: %s: plugin symbol table corrupt (sym type %d)\n"), called_plugin->name, blhe->type); } @@ -986,13 +986,14 @@ message (int level, const char *format, ...) case LDPL_ERROR: default: { - char *newfmt = concat (level == LDPL_FATAL ? "%F" : "%X", - _("%P: error: "), format, "\n", + char *newfmt = concat (_("%X%P: error: "), format, "\n", (const char *) NULL); fflush (stdout); vfinfo (stderr, newfmt, args, true); fflush (stderr); free (newfmt); + if (level == LDPL_FATAL) + fatal (""); } break; } @@ -1135,14 +1136,14 @@ plugin_load_plugins (void) if (!onloadfn) onloadfn = (ld_plugin_onload) dlsym (curplug->dlhandle, "_onload"); if (!onloadfn) - einfo (_("%F%P: %s: error loading plugin: %s\n"), + fatal (_("%P: %s: error loading plugin: %s\n"), curplug->name, dlerror ()); set_tv_plugin_args (curplug, &my_tv[tv_header_size]); called_plugin = curplug; rv = (*onloadfn) (my_tv); called_plugin = NULL; if (rv != LDPS_OK) - einfo (_("%F%P: %s: plugin error: %d\n"), curplug->name, rv); + fatal (_("%P: %s: plugin error: %d\n"), curplug->name, rv); curplug = curplug->next; } @@ -1206,7 +1207,7 @@ plugin_strdup (bfd *abfd, const char *str) strlength = strlen (str) + 1; copy = bfd_alloc (abfd, strlength); if (copy == NULL) - einfo (_("%F%P: plugin_strdup failed to allocate memory: %s\n"), + fatal (_("%P: plugin_strdup failed to allocate memory: %s\n"), bfd_get_error ()); memcpy (copy, str, strlength); return copy; @@ -1248,7 +1249,7 @@ plugin_object_p (bfd *ibfd, bool known_used) input = bfd_alloc (abfd, sizeof (*input)); if (input == NULL) - einfo (_("%F%P: plugin failed to allocate memory for input: %s\n"), + fatal (_("%P: plugin failed to allocate memory for input: %s\n"), bfd_get_error ()); if (!bfd_plugin_open_input (ibfd, &file)) @@ -1277,7 +1278,7 @@ plugin_object_p (bfd *ibfd, bool known_used) if (plugin_call_claim_file (&file, &claimed, &claim_file_handler_v2, known_used)) - einfo (_("%F%P: %s: plugin reported error claiming file\n"), + fatal (_("%P: %s: plugin reported error claiming file\n"), plugin_error_plugin ()); if (input->fd != -1 diff --git a/ld/testsuite/ld-loongarch-elf/relax.exp b/ld/testsuite/ld-loongarch-elf/relax.exp index 81924cd..49e6b23 100644 --- a/ld/testsuite/ld-loongarch-elf/relax.exp +++ b/ld/testsuite/ld-loongarch-elf/relax.exp @@ -412,6 +412,8 @@ if [istarget loongarch64-*-*] { "relax-segment-max" \ ] \ ] + + run_dump_test "start_stop" } run_ld_link_tests \ diff --git a/ld/testsuite/ld-loongarch-elf/start_stop.d b/ld/testsuite/ld-loongarch-elf/start_stop.d new file mode 100644 index 0000000..b887dcc --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/start_stop.d @@ -0,0 +1,13 @@ +#ld: -z norelro -pie -e0 +#objdump: -d + +.*: file format .* + + +Disassembly of section sec1: + +[0-9a-f]+ <_start>: + [0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + [0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + [0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + [0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* diff --git a/ld/testsuite/ld-loongarch-elf/start_stop.s b/ld/testsuite/ld-loongarch-elf/start_stop.s new file mode 100644 index 0000000..f50bc60 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/start_stop.s @@ -0,0 +1,10 @@ + .section sec1,"ax",@progbits + .globl _start + .type _start, @function +_start: + la.got $a0,__start_sec1 + la.got $a0,__stop_sec1 + .size _start, .-_start + + .hidden __start_sec1 + .hidden __stop_sec1 diff --git a/ld/testsuite/ld-x86-64/apx-load1a.d b/ld/testsuite/ld-x86-64/apx-load1a.d index ce4d167..83d4cd2 100644 --- a/ld/testsuite/ld-x86-64/apx-load1a.d +++ b/ld/testsuite/ld-x86-64/apx-load1a.d @@ -51,24 +51,24 @@ Disassembly of section .text: +[a-f0-9]+: d5 18 81 ee 21 20 60 00 sub \$0x602021,%r22 +[a-f0-9]+: d5 18 81 f7 21 20 60 00 xor \$0x602021,%r23 +[a-f0-9]+: d5 19 f7 c0 21 20 60 00 test \$0x602021,%r24 - +[a-f0-9]+: 62 6c 7c 08 81 d0 20 20 60 00 adc \$0x602020,%r16d - +[a-f0-9]+: 62 6c 7c 0c 81 c1 20 20 60 00 \{nf\} add \$0x602020,%r17d - +[a-f0-9]+: 62 6c 7c 0c 81 e2 20 20 60 00 \{nf\} and \$0x602020,%r18d - +[a-f0-9]+: 62 6c 04 0a 81 fb 20 20 60 00 ccmpt \{dfv=\} \$0x602020,%r19d - +[a-f0-9]+: 62 6c 7c 0c 81 cc 20 20 60 00 \{nf\} or \$0x602020,%r20d - +[a-f0-9]+: 62 6c 7c 08 81 dd 20 20 60 00 sbb \$0x602020,%r21d - +[a-f0-9]+: 62 6c 7c 0c 81 ee 20 20 60 00 \{nf\} sub \$0x602020,%r22d - +[a-f0-9]+: 62 6c 7c 0c 81 f7 20 20 60 00 \{nf\} xor \$0x602020,%r23d - +[a-f0-9]+: 62 4c 04 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24d - +[a-f0-9]+: 62 6c fc 08 81 d0 20 20 60 00 adc \$0x602020,%r16 - +[a-f0-9]+: 62 6c fc 0c 81 c1 20 20 60 00 \{nf\} add \$0x602020,%r17 - +[a-f0-9]+: 62 6c fc 0c 81 e2 20 20 60 00 \{nf\} and \$0x602020,%r18 - +[a-f0-9]+: 62 6c 84 0a 81 fb 20 20 60 00 ccmpt \{dfv=\} \$0x602020,%r19 - +[a-f0-9]+: 62 6c fc 0c 81 cc 20 20 60 00 \{nf\} or \$0x602020,%r20 - +[a-f0-9]+: 62 6c fc 08 81 dd 20 20 60 00 sbb \$0x602020,%r21 - +[a-f0-9]+: 62 6c fc 0c 81 ee 20 20 60 00 \{nf\} sub \$0x602020,%r22 - +[a-f0-9]+: 62 6c fc 0c 81 f7 20 20 60 00 \{nf\} xor \$0x602020,%r23 - +[a-f0-9]+: 62 4c 84 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24 + +[a-f0-9]+: 62 fc 7c 08 81 d0 20 20 60 00 adc \$0x602020,%r16d + +[a-f0-9]+: 62 fc 7c 0c 81 c1 20 20 60 00 \{nf\} add \$0x602020,%r17d + +[a-f0-9]+: 62 fc 7c 0c 81 e2 20 20 60 00 \{nf\} and \$0x602020,%r18d + +[a-f0-9]+: 62 fc 04 0a 81 fb 20 20 60 00 ccmpt \{dfv=\} \$0x602020,%r19d + +[a-f0-9]+: 62 fc 7c 0c 81 cc 20 20 60 00 \{nf\} or \$0x602020,%r20d + +[a-f0-9]+: 62 fc 7c 08 81 dd 20 20 60 00 sbb \$0x602020,%r21d + +[a-f0-9]+: 62 fc 7c 0c 81 ee 20 20 60 00 \{nf\} sub \$0x602020,%r22d + +[a-f0-9]+: 62 fc 7c 0c 81 f7 20 20 60 00 \{nf\} xor \$0x602020,%r23d + +[a-f0-9]+: 62 dc 04 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24d + +[a-f0-9]+: 62 fc fc 08 81 d0 20 20 60 00 adc \$0x602020,%r16 + +[a-f0-9]+: 62 fc fc 0c 81 c1 20 20 60 00 \{nf\} add \$0x602020,%r17 + +[a-f0-9]+: 62 fc fc 0c 81 e2 20 20 60 00 \{nf\} and \$0x602020,%r18 + +[a-f0-9]+: 62 fc 84 0a 81 fb 20 20 60 00 ccmpt \{dfv=\} \$0x602020,%r19 + +[a-f0-9]+: 62 fc fc 0c 81 cc 20 20 60 00 \{nf\} or \$0x602020,%r20 + +[a-f0-9]+: 62 fc fc 08 81 dd 20 20 60 00 sbb \$0x602020,%r21 + +[a-f0-9]+: 62 fc fc 0c 81 ee 20 20 60 00 \{nf\} sub \$0x602020,%r22 + +[a-f0-9]+: 62 fc fc 0c 81 f7 20 20 60 00 \{nf\} xor \$0x602020,%r23 + +[a-f0-9]+: 62 dc 84 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24 +[a-f0-9]+: 62 e4 7c 08 11 05 22 0e 20 00 adc %r16d,0x200e22\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 7c 0c 01 0d 18 0e 20 00 \{nf\} add %r17d,0x200e18\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 7c 0c 21 15 0e 0e 20 00 \{nf\} and %r18d,0x200e0e\(%rip\) # 602000 <.*> @@ -77,7 +77,7 @@ Disassembly of section .text: +[a-f0-9]+: 62 e4 7c 08 19 2d f0 0d 20 00 sbb %r21d,0x200df0\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 7c 0c 29 35 e6 0d 20 00 \{nf\} sub %r22d,0x200de6\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 7c 0c 31 3d dc 0d 20 00 \{nf\} xor %r23d,0x200ddc\(%rip\) # 602000 <.*> - +[a-f0-9]+: 62 4c 04 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24d + +[a-f0-9]+: 62 dc 04 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24d +[a-f0-9]+: 62 e4 fc 08 11 05 c8 0d 20 00 adc %r16,0x200dc8\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 fc 0c 01 0d be 0d 20 00 \{nf\} add %r17,0x200dbe\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 fc 0c 21 15 b4 0d 20 00 \{nf\} and %r18,0x200db4\(%rip\) # 602000 <.*> @@ -86,33 +86,33 @@ Disassembly of section .text: +[a-f0-9]+: 62 e4 fc 08 19 2d 96 0d 20 00 sbb %r21,0x200d96\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 fc 0c 29 35 8c 0d 20 00 \{nf\} sub %r22,0x200d8c\(%rip\) # 602000 <.*> +[a-f0-9]+: 62 e4 fc 0c 31 3d 82 0d 20 00 \{nf\} xor %r23,0x200d82\(%rip\) # 602000 <.*> - +[a-f0-9]+: 62 4c 84 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24 - +[a-f0-9]+: 62 6c 7c 18 81 d0 20 20 60 00 adc \$0x602020,%r16d,%eax - +[a-f0-9]+: 62 6c 74 18 81 c1 20 20 60 00 add \$0x602020,%r17d,%ecx - +[a-f0-9]+: 62 6c 6c 18 81 e2 20 20 60 00 and \$0x602020,%r18d,%edx - +[a-f0-9]+: 62 6c 64 18 81 cb 20 20 60 00 or \$0x602020,%r19d,%ebx - +[a-f0-9]+: 62 6c 5c 18 81 dc 20 20 60 00 sbb \$0x602020,%r20d,%esp - +[a-f0-9]+: 62 6c 54 18 81 ed 20 20 60 00 sub \$0x602020,%r21d,%ebp - +[a-f0-9]+: 62 6c 4c 18 81 f6 20 20 60 00 xor \$0x602020,%r22d,%esi - +[a-f0-9]+: 62 6c fc 18 81 d0 20 20 60 00 adc \$0x602020,%r16,%rax - +[a-f0-9]+: 62 6c f4 18 81 c1 20 20 60 00 add \$0x602020,%r17,%rcx - +[a-f0-9]+: 62 6c ec 18 81 e2 20 20 60 00 and \$0x602020,%r18,%rdx - +[a-f0-9]+: 62 6c e4 18 81 cb 20 20 60 00 or \$0x602020,%r19,%rbx - +[a-f0-9]+: 62 6c dc 18 81 dc 20 20 60 00 sbb \$0x602020,%r20,%rsp - +[a-f0-9]+: 62 6c d4 18 81 ed 20 20 60 00 sub \$0x602020,%r21,%rbp - +[a-f0-9]+: 62 6c cc 18 81 f6 20 20 60 00 xor \$0x602020,%r22,%rsi - +[a-f0-9]+: 62 64 7c 10 81 d0 20 20 60 00 adc \$0x602020,%eax,%r16d - +[a-f0-9]+: 62 64 74 10 81 c1 20 20 60 00 add \$0x602020,%ecx,%r17d - +[a-f0-9]+: 62 64 6c 10 81 e2 20 20 60 00 and \$0x602020,%edx,%r18d - +[a-f0-9]+: 62 64 64 10 81 cb 20 20 60 00 or \$0x602020,%ebx,%r19d + +[a-f0-9]+: 62 dc 84 0a f7 c0 20 20 60 00 ctestt \{dfv=\} \$0x602020,%r24 + +[a-f0-9]+: 62 fc 7c 18 81 d0 20 20 60 00 adc \$0x602020,%r16d,%eax + +[a-f0-9]+: 62 fc 74 18 81 c1 20 20 60 00 add \$0x602020,%r17d,%ecx + +[a-f0-9]+: 62 fc 6c 18 81 e2 20 20 60 00 and \$0x602020,%r18d,%edx + +[a-f0-9]+: 62 fc 64 18 81 cb 20 20 60 00 or \$0x602020,%r19d,%ebx + +[a-f0-9]+: 62 fc 5c 18 81 dc 20 20 60 00 sbb \$0x602020,%r20d,%esp + +[a-f0-9]+: 62 fc 54 18 81 ed 20 20 60 00 sub \$0x602020,%r21d,%ebp + +[a-f0-9]+: 62 fc 4c 18 81 f6 20 20 60 00 xor \$0x602020,%r22d,%esi + +[a-f0-9]+: 62 fc fc 18 81 d0 20 20 60 00 adc \$0x602020,%r16,%rax + +[a-f0-9]+: 62 fc f4 18 81 c1 20 20 60 00 add \$0x602020,%r17,%rcx + +[a-f0-9]+: 62 fc ec 18 81 e2 20 20 60 00 and \$0x602020,%r18,%rdx + +[a-f0-9]+: 62 fc e4 18 81 cb 20 20 60 00 or \$0x602020,%r19,%rbx + +[a-f0-9]+: 62 fc dc 18 81 dc 20 20 60 00 sbb \$0x602020,%r20,%rsp + +[a-f0-9]+: 62 fc d4 18 81 ed 20 20 60 00 sub \$0x602020,%r21,%rbp + +[a-f0-9]+: 62 fc cc 18 81 f6 20 20 60 00 xor \$0x602020,%r22,%rsi + +[a-f0-9]+: 62 f4 7c 10 81 d0 20 20 60 00 adc \$0x602020,%eax,%r16d + +[a-f0-9]+: 62 f4 74 10 81 c1 20 20 60 00 add \$0x602020,%ecx,%r17d + +[a-f0-9]+: 62 f4 6c 10 81 e2 20 20 60 00 and \$0x602020,%edx,%r18d + +[a-f0-9]+: 62 f4 64 10 81 cb 20 20 60 00 or \$0x602020,%ebx,%r19d +[a-f0-9]+: 62 f4 5c 10 19 25 ba 0c 20 00 sbb %esp,0x200cba\(%rip\),%r20d # 602000 <.*> +[a-f0-9]+: 62 f4 54 10 29 2d b0 0c 20 00 sub %ebp,0x200cb0\(%rip\),%r21d # 602000 <.*> - +[a-f0-9]+: 62 64 4c 10 81 f6 20 20 60 00 xor \$0x602020,%esi,%r22d - +[a-f0-9]+: 62 64 fc 10 81 d0 20 20 60 00 adc \$0x602020,%rax,%r16 - +[a-f0-9]+: 62 64 f4 10 81 c1 20 20 60 00 add \$0x602020,%rcx,%r17 - +[a-f0-9]+: 62 64 ec 10 81 e2 20 20 60 00 and \$0x602020,%rdx,%r18 - +[a-f0-9]+: 62 64 e4 10 81 cb 20 20 60 00 or \$0x602020,%rbx,%r19 + +[a-f0-9]+: 62 f4 4c 10 81 f6 20 20 60 00 xor \$0x602020,%esi,%r22d + +[a-f0-9]+: 62 f4 fc 10 81 d0 20 20 60 00 adc \$0x602020,%rax,%r16 + +[a-f0-9]+: 62 f4 f4 10 81 c1 20 20 60 00 add \$0x602020,%rcx,%r17 + +[a-f0-9]+: 62 f4 ec 10 81 e2 20 20 60 00 and \$0x602020,%rdx,%r18 + +[a-f0-9]+: 62 f4 e4 10 81 cb 20 20 60 00 or \$0x602020,%rbx,%r19 +[a-f0-9]+: 62 f4 dc 10 19 25 74 0c 20 00 sbb %rsp,0x200c74\(%rip\),%r20 # 602000 <.*> +[a-f0-9]+: 62 f4 d4 10 29 2d 6a 0c 20 00 sub %rbp,0x200c6a\(%rip\),%r21 # 602000 <.*> - +[a-f0-9]+: 62 64 cc 10 81 f6 20 20 60 00 xor \$0x602020,%rsi,%r22 + +[a-f0-9]+: 62 f4 cc 10 81 f6 20 20 60 00 xor \$0x602020,%rsi,%r22 #pass diff --git a/ld/testsuite/ld-x86-64/pr19609-2a.d b/ld/testsuite/ld-x86-64/pr19609-2a.d index 6d3db92..401d64a 100644 --- a/ld/testsuite/ld-x86-64/pr19609-2a.d +++ b/ld/testsuite/ld-x86-64/pr19609-2a.d @@ -1,4 +1,13 @@ #source: pr19609-2.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+70000000 <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} cmp -?0x[a-f0-9]+\(%rip\),%rax # .* +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-2b.d b/ld/testsuite/ld-x86-64/pr19609-2b.d index 4fee93d..7e6e8cd 100644 --- a/ld/testsuite/ld-x86-64/pr19609-2b.d +++ b/ld/testsuite/ld-x86-64/pr19609-2b.d @@ -1,4 +1,13 @@ #source: pr19609-2.s #as: --x32 -mrelax-relocations=yes #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +70000000 <_start>: +[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} cmp -?0x[a-f0-9]+\(%rip\),%rax # .* +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-4a.d b/ld/testsuite/ld-x86-64/pr19609-4a.d index eb37d0c..b6e41f5 100644 --- a/ld/testsuite/ld-x86-64/pr19609-4a.d +++ b/ld/testsuite/ld-x86-64/pr19609-4a.d @@ -1,4 +1,13 @@ #source: pr19609-4.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+70000000 <_start>: +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov [-]?0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x1000> +[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov [-]?0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_start\+0x1000> diff --git a/ld/testsuite/ld-x86-64/pr19609-5d.d b/ld/testsuite/ld-x86-64/pr19609-5d.d index 0ab28ef..0b011e0 100644 --- a/ld/testsuite/ld-x86-64/pr19609-5d.d +++ b/ld/testsuite/ld-x86-64/pr19609-5d.d @@ -1,4 +1,12 @@ #source: pr19609-5.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x80000000 -#error: .*failed to convert GOTPCREL relocation against 'bar'; relink with --no-relax +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> diff --git a/ld/testsuite/ld-x86-64/pr19609-7a.d b/ld/testsuite/ld-x86-64/pr19609-7a.d index 34704a9..f00f0b8 100644 --- a/ld/testsuite/ld-x86-64/pr19609-7a.d +++ b/ld/testsuite/ld-x86-64/pr19609-7a.d @@ -1,4 +1,13 @@ #source: pr19609-7.s #as: --64 -mrelax-relocations=yes -#ld: -melf_x86_64 -Ttext=0x80000000 -#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax +#ld: -melf_x86_64 -Ttext=0x80000000 -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x1000> +#pass diff --git a/ld/testsuite/ld-x86-64/pr19609-7c.d b/ld/testsuite/ld-x86-64/pr19609-7c.d index 09488e2..c1ee443 100644 --- a/ld/testsuite/ld-x86-64/pr19609-7c.d +++ b/ld/testsuite/ld-x86-64/pr19609-7c.d @@ -1,4 +1,13 @@ #source: pr19609-7.s #as: --x32 -mrelax-relocations=yes -#ld: -melf32_x86_64 -Ttext=0x80000000 -#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax +#ld: -melf32_x86_64 -Ttext=0x80000000 -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * call \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x1000> +#pass diff --git a/ld/testsuite/ld-x86-64/pr32591-1.s b/ld/testsuite/ld-x86-64/pr32591-1.s new file mode 100644 index 0000000..8536456 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1.s @@ -0,0 +1,24 @@ +.section .text.foo,"ax" +.globl _foo +.type _foo, @function +_foo: + movl __start_data@GOTPCREL(%rip), %eax + addq foo_1@GOTPCREL(%rip), %rax + addq foo@GOTPCREL(%rip), %rax + +.section .text,"ax" +.globl _start +.type _start, @function +_start: + movl __stop_data@GOTPCREL(%rip), %eax + movq __stop_data@GOTPCREL(%rip), %rax + movq __stop_data@GOTPCREL(%rip), %rax + movl __stop_data@GOTPCREL(%rip), %eax + +.section foo,"aw",@progbits +.space 1 +foo_1: +.space 1 + +.section data,"aw",@progbits +.space 13 diff --git a/ld/testsuite/ld-x86-64/pr32591-1a-x32.d b/ld/testsuite/ld-x86-64/pr32591-1a-x32.d new file mode 100644 index 0000000..6934373 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1a-x32.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-1a.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +00100000 <_foo>: + 100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax + 100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000> + 10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +00200000 <_start>: + 200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax + 200006: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax + 20000d: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax + 200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1a.d b/ld/testsuite/ld-x86-64/pr32591-1a.d new file mode 100644 index 0000000..30637a7 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1a.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-1a.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +0000000000100000 <_foo>: + 100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax + 100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000> + 10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +0000000000200000 <_start>: + 200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax + 200006: 48 8b 05 fb ff 0f 00 mov 0xffffb\(%rip\),%rax # 300008 <_start\+0x100008> + 20000d: 48 8b 05 f4 ff 0f 00 mov 0xffff4\(%rip\),%rax # 300008 <_start\+0x100008> + 200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1a.t b/ld/testsuite/ld-x86-64/pr32591-1a.t new file mode 100644 index 0000000..efe8a07 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1a.t @@ -0,0 +1,7 @@ +SECTIONS { + .text.foo 0x100000 : { *(.text.foo) } + .text 0x200000 : { *(.text) } + .got 0x300000 : { *(.got) } + foo 0x7fffffff : { *(foo) } + data 0x80200000 : { *(data) } +} diff --git a/ld/testsuite/ld-x86-64/pr32591-1b-x32.d b/ld/testsuite/ld-x86-64/pr32591-1b-x32.d new file mode 100644 index 0000000..0b98e87 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1b-x32.d @@ -0,0 +1,27 @@ +#source: pr32591-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-1b.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +00100000 <_foo>: + 100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax + 100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000> + 10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +001ff000 <_start-0x1000>: + 1ff000: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\) +#... + 1ffffa: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) + +00200000 <_start>: + 200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax + 200006: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax + 20000d: 40 c7 c0 0d 00 20 80 rex mov \$0x8020000d,%eax + 200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1b.d b/ld/testsuite/ld-x86-64/pr32591-1b.d new file mode 100644 index 0000000..149f851 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1b.d @@ -0,0 +1,27 @@ +#source: pr32591-1.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-1b.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +0000000000100000 <_foo>: + 100000: c7 c0 00 00 20 80 mov \$0x80200000,%eax + 100006: 48 03 05 f3 ff 1f 00 add 0x1ffff3\(%rip\),%rax # 300000 <_start\+0x100000> + 10000d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +00000000001ff000 <_start-0x1000>: + 1ff000: 66 2e 0f 1f 84 00 00 00 00 00 cs nopw 0x0\(%rax,%rax,1\) +#... + 1ffffa: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) + +0000000000200000 <_start>: + 200000: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax + 200006: 48 8b 05 fb ff 0f 00 mov 0xffffb\(%rip\),%rax # 300008 <_start\+0x100008> + 20000d: 48 8b 05 f4 ff 0f 00 mov 0xffff4\(%rip\),%rax # 300008 <_start\+0x100008> + 200014: c7 c0 0d 00 20 80 mov \$0x8020000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1b.t b/ld/testsuite/ld-x86-64/pr32591-1b.t new file mode 100644 index 0000000..1f7a0e1 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1b.t @@ -0,0 +1,7 @@ +SECTIONS { + .text.foo 0x100000 : { *(.text.foo) } + .text 0x1ff000 : { . = . + 0x1000 ; *(.text) } + .got 0x300000 : { *(.got) } + foo 0x7fffffff : { *(foo) } + data 0x80200000 : { *(data) } +} diff --git a/ld/testsuite/ld-x86-64/pr32591-1c-x32.d b/ld/testsuite/ld-x86-64/pr32591-1c-x32.d new file mode 100644 index 0000000..e1c7fc6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1c-x32.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-1c.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +00100000 <_foo>: + 100000: c7 c0 00 00 40 00 mov \$0x400000,%eax + 100006: 48 81 c0 0e 00 40 00 add \$0x40000e,%rax + 10000d: 48 81 c0 0d 00 40 00 add \$0x40000d,%rax + +Disassembly of section .text: + +00200000 <_start>: + 200000: c7 c0 0d 00 40 00 mov \$0x40000d,%eax + 200006: 40 c7 c0 0d 00 40 00 rex mov \$0x40000d,%eax + 20000d: 40 c7 c0 0d 00 40 00 rex mov \$0x40000d,%eax + 200014: c7 c0 0d 00 40 00 mov \$0x40000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1c.d b/ld/testsuite/ld-x86-64/pr32591-1c.d new file mode 100644 index 0000000..f7b390f --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1c.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-1c.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +0000000000100000 <_foo>: + 100000: c7 c0 00 00 40 00 mov \$0x400000,%eax + 100006: 48 81 c0 0e 00 40 00 add \$0x40000e,%rax + 10000d: 48 81 c0 0d 00 40 00 add \$0x40000d,%rax + +Disassembly of section .text: + +0000000000200000 <_start>: + 200000: c7 c0 0d 00 40 00 mov \$0x40000d,%eax + 200006: 48 c7 c0 0d 00 40 00 mov \$0x40000d,%rax + 20000d: 48 c7 c0 0d 00 40 00 mov \$0x40000d,%rax + 200014: c7 c0 0d 00 40 00 mov \$0x40000d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1c.t b/ld/testsuite/ld-x86-64/pr32591-1c.t new file mode 100644 index 0000000..3bfb7f2 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1c.t @@ -0,0 +1,6 @@ +SECTIONS { + .text.foo 0x100000 : { *(.text.foo) } + .text 0x200000 : { *(.text) } + .got 0x300000 : { *(.got) } + data 0x400000 : { *(data) } +} diff --git a/ld/testsuite/ld-x86-64/pr32591-1d-x32.d b/ld/testsuite/ld-x86-64/pr32591-1d-x32.d new file mode 100644 index 0000000..c5bc0ee --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1d-x32.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-1d.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +00002000 <_foo>: + 2000: c7 c0 00 10 00 80 mov \$0x80001000,%eax + 2006: 48 03 05 f3 1f 00 00 add 0x1ff3\(%rip\),%rax # 4000 <_start\+0x1000> + 200d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +00003000 <_start>: + 3000: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax + 3006: 40 c7 c0 0d 10 00 80 rex mov \$0x8000100d,%eax + 300d: 40 c7 c0 0d 10 00 80 rex mov \$0x8000100d,%eax + 3014: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1d.d b/ld/testsuite/ld-x86-64/pr32591-1d.d new file mode 100644 index 0000000..36b0853 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1d.d @@ -0,0 +1,22 @@ +#source: pr32591-1.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-1d.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text.foo: + +0000000000002000 <_foo>: + 2000: c7 c0 00 10 00 80 mov \$0x80001000,%eax + 2006: 48 03 05 f3 1f 00 00 add 0x1ff3\(%rip\),%rax # 4000 <_start\+0x1000> + 200d: 48 81 c0 ff ff ff 7f add \$0x7fffffff,%rax + +Disassembly of section .text: + +0000000000003000 <_start>: + 3000: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax + 3006: 48 8b 05 fb 0f 00 00 mov 0xffb\(%rip\),%rax # 4008 <_start\+0x1008> + 300d: 48 8b 05 f4 0f 00 00 mov 0xff4\(%rip\),%rax # 4008 <_start\+0x1008> + 3014: c7 c0 0d 10 00 80 mov \$0x8000100d,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-1d.t b/ld/testsuite/ld-x86-64/pr32591-1d.t new file mode 100644 index 0000000..accfd80 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-1d.t @@ -0,0 +1,7 @@ +SECTIONS { + .text.foo 0x02000 : { *(.text.foo) } + .text 0x3000 : { *(.text) } + .got 0x4000 : { *(.got) } + foo 0x7fffffff : { *(foo) } + data 0x80001000 : { *(data) } +} diff --git a/ld/testsuite/ld-x86-64/pr32591-2-x32.d b/ld/testsuite/ld-x86-64/pr32591-2-x32.d new file mode 100644 index 0000000..765b379 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-2-x32.d @@ -0,0 +1,12 @@ +#source: pr32591-2.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-2.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +ffff0000 <_start>: +ffff0000: 40 c7 c0 08 00 ff ff rex mov \$0xffff0008,%eax diff --git a/ld/testsuite/ld-x86-64/pr32591-2.d b/ld/testsuite/ld-x86-64/pr32591-2.d new file mode 100644 index 0000000..dccf546 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-2.d @@ -0,0 +1,12 @@ +#source: pr32591-2.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-2.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +00000000ffff0000 <_start>: + ffff0000: 48 8b 05 09 00 00 00 mov 0x9\(%rip\),%rax # ffff0010 <__stack_chk_guard\+0x8> diff --git a/ld/testsuite/ld-x86-64/pr32591-2.s b/ld/testsuite/ld-x86-64/pr32591-2.s new file mode 100644 index 0000000..76168ce --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-2.s @@ -0,0 +1,13 @@ + .text + .p2align 4 + .globl _start + .type _start, @function +_start: + movq __stack_chk_guard@GOTPCREL(%rip), %rax + .globl __stack_chk_guard + .section .rodata + .align 8 + .type __stack_chk_guard, @object +__stack_chk_guard: + .quad -1 + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-x86-64/pr32591-2.t b/ld/testsuite/ld-x86-64/pr32591-2.t new file mode 100644 index 0000000..0b1109c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-2.t @@ -0,0 +1,4 @@ +SECTIONS { + .text 0xffff0000 : { *(.text*) } + .rodata : AT(ADDR(".rodata") - 0xffff0000) { *(.rodata*) } +} diff --git a/ld/testsuite/ld-x86-64/pr32591-3-x32.d b/ld/testsuite/ld-x86-64/pr32591-3-x32.d new file mode 100644 index 0000000..3b91f7d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-3-x32.d @@ -0,0 +1,13 @@ +#source: pr32591-3.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -T pr32591-3.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +f0000000 <_start>: +f0000000: 40 c7 c0 08 00 30 ff rex mov \$0xff300008,%eax +f0000007: 48 03 1d f2 ff 2f 0f add 0xf2ffff2\(%rip\),%rbx # ff300000 <_start\+0xf300000> diff --git a/ld/testsuite/ld-x86-64/pr32591-3.d b/ld/testsuite/ld-x86-64/pr32591-3.d new file mode 100644 index 0000000..4ad0878 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-3.d @@ -0,0 +1,13 @@ +#source: pr32591-3.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -T pr32591-3.t -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +00000000f0000000 <_start>: + f0000000: 48 8b 05 f9 ff 2f 0f mov 0xf2ffff9\(%rip\),%rax # ff300000 <_start\+0xf300000> + f0000007: 48 03 1d f2 ff 2f 0f add 0xf2ffff2\(%rip\),%rbx # ff300000 <_start\+0xf300000> diff --git a/ld/testsuite/ld-x86-64/pr32591-3.s b/ld/testsuite/ld-x86-64/pr32591-3.s new file mode 100644 index 0000000..ba8ebf3 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-3.s @@ -0,0 +1,7 @@ + .text + .globl _start + .type _start, @function +_start: + movq foo@GOTPCREL(%rip), %rax + addq foo@GOTPCREL(%rip), %rbx + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr32591-3.t b/ld/testsuite/ld-x86-64/pr32591-3.t new file mode 100644 index 0000000..91feb7c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-3.t @@ -0,0 +1,5 @@ +SECTIONS { + .text 0xf0000000 : { *(.text) } + .got 0xff300000 : { *(.got) } + foo = .; +} diff --git a/ld/testsuite/ld-x86-64/pr32591-4-x32.d b/ld/testsuite/ld-x86-64/pr32591-4-x32.d new file mode 100644 index 0000000..12e1790 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-4-x32.d @@ -0,0 +1,13 @@ +#source: pr32591-4.s +#as: --x32 -mrelax-relocations=yes +#ld: -melf32_x86_64 -Ttext-segment=0xf0000000 -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +f0001000 <_start>: +f0001000: 40 c7 c0 00 00 00 f0 rex mov \$0xf0000000,%eax +f0001007: 48 03 1d f2 0f 00 00 add 0xff2\(%rip\),%rbx # f0002000 <_start\+0x1000> diff --git a/ld/testsuite/ld-x86-64/pr32591-4.d b/ld/testsuite/ld-x86-64/pr32591-4.d new file mode 100644 index 0000000..ac57805 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-4.d @@ -0,0 +1,13 @@ +#source: pr32591-4.s +#as: --64 -mrelax-relocations=yes +#ld: -melf_x86_64 -Ttext-segment=0xf0000000 -z max-page-size=0x1000 -z separate-code --no-rosegment +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +00000000f0001000 <_start>: + f0001000: 48 8b 05 f9 0f 00 00 mov 0xff9\(%rip\),%rax # f0002000 <_start\+0x1000> + f0001007: 48 03 1d f2 0f 00 00 add 0xff2\(%rip\),%rbx # f0002000 <_start\+0x1000> diff --git a/ld/testsuite/ld-x86-64/pr32591-4.s b/ld/testsuite/ld-x86-64/pr32591-4.s new file mode 100644 index 0000000..aa784b8 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr32591-4.s @@ -0,0 +1,7 @@ + .text + .globl _start + .type _start, @function +_start: + movq __ehdr_start@GOTPCREL(%rip), %rax + addq __ehdr_start@GOTPCREL(%rip), %rbx + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index bde29fb..bcec5c1 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -544,6 +544,20 @@ run_dump_test "tlsdesc4" run_dump_test "tlsdesc5" run_dump_test "pr32191" run_dump_test "pr32191-x32" +run_dump_test "pr32591-1a" +run_dump_test "pr32591-1a-x32" +run_dump_test "pr32591-1b" +run_dump_test "pr32591-1b-x32" +run_dump_test "pr32591-1c" +run_dump_test "pr32591-1c-x32" +run_dump_test "pr32591-1d" +run_dump_test "pr32591-1d-x32" +run_dump_test "pr32591-2" +run_dump_test "pr32591-2-x32" +run_dump_test "pr32591-3" +run_dump_test "pr32591-3-x32" +run_dump_test "pr32591-4" +run_dump_test "pr32591-4-x32" if { ![skip_sframe_tests] } { run_dump_test "sframe-simple-1" |