aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/emulparams/call_nop.sh6
-rw-r--r--ld/emulparams/cet.sh2
-rw-r--r--ld/emulparams/elf32mcore.sh2
-rw-r--r--ld/emulparams/x86-64-lam.sh6
-rw-r--r--ld/emulparams/x86-64-level-report.sh2
-rw-r--r--ld/emulparams/x86-64-level.sh2
-rw-r--r--ld/emultempl/aarch64elf.em6
-rw-r--r--ld/emultempl/aix.em41
-rw-r--r--ld/emultempl/armelf.em10
-rw-r--r--ld/emultempl/avrelf.em2
-rw-r--r--ld/emultempl/beos.em24
-rw-r--r--ld/emultempl/cr16elf.em4
-rw-r--r--ld/emultempl/cskyelf.em4
-rw-r--r--ld/emultempl/elf-x86.em41
-rw-r--r--ld/emultempl/elf.em16
-rw-r--r--ld/emultempl/hppaelf.em4
-rw-r--r--ld/emultempl/kvxelf.em7
-rw-r--r--ld/emultempl/loongarchelf.em4
-rw-r--r--ld/emultempl/m68hc1xelf.em2
-rw-r--r--ld/emultempl/m68kelf.em4
-rw-r--r--ld/emultempl/metagelf.em4
-rw-r--r--ld/emultempl/mipself.em2
-rw-r--r--ld/emultempl/mmix-elfnmmo.em5
-rw-r--r--ld/emultempl/nds32elf.em6
-rw-r--r--ld/emultempl/nto.em28
-rw-r--r--ld/emultempl/pe.em20
-rw-r--r--ld/emultempl/pep.em16
-rw-r--r--ld/emultempl/ppc32elf.em4
-rw-r--r--ld/emultempl/ppc64elf.em10
-rw-r--r--ld/emultempl/riscvelf.em2
-rw-r--r--ld/emultempl/s390.em2
-rw-r--r--ld/emultempl/scoreelf.em2
-rw-r--r--ld/emultempl/spuelf.em20
-rw-r--r--ld/emultempl/tic6xdsbt.em10
-rw-r--r--ld/emultempl/ticoff.em4
-rw-r--r--ld/emultempl/v850elf.em2
-rw-r--r--ld/emultempl/vms.em2
-rw-r--r--ld/emultempl/xtensaelf.em12
-rw-r--r--ld/emultempl/z80.em2
-rw-r--r--ld/ldcref.c8
-rw-r--r--ld/ldelf.c38
-rw-r--r--ld/ldelfgen.c17
-rw-r--r--ld/ldemul.c2
-rw-r--r--ld/ldexp.c42
-rw-r--r--ld/ldfile.c14
-rw-r--r--ld/ldgram.y6
-rw-r--r--ld/ldlang.c127
-rw-r--r--ld/ldlex.l14
-rw-r--r--ld/ldmain.c44
-rw-r--r--ld/ldmisc.c28
-rw-r--r--ld/ldmisc.h1
-rw-r--r--ld/ldwrite.c22
-rw-r--r--ld/lexsup.c72
-rw-r--r--ld/mri.c2
-rw-r--r--ld/pe-dll.c12
-rw-r--r--ld/plugin.c27
-rw-r--r--ld/testsuite/ld-loongarch-elf/relax.exp2
-rw-r--r--ld/testsuite/ld-loongarch-elf/start_stop.d13
-rw-r--r--ld/testsuite/ld-loongarch-elf/start_stop.s10
-rw-r--r--ld/testsuite/ld-x86-64/apx-load1a.d88
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-2a.d11
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-2b.d11
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-4a.d11
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-5d.d10
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-7a.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr19609-7c.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1.s24
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1a-x32.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1a.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1a.t7
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1b-x32.d27
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1b.d27
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1b.t7
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1c-x32.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1c.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1c.t6
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1d-x32.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1d.d22
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-1d.t7
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-2-x32.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-2.d12
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-2.s13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-2.t4
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-3-x32.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-3.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-3.s7
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-3.t5
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-4-x32.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-4.d13
-rw-r--r--ld/testsuite/ld-x86-64/pr32591-4.s7
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp14
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, &params))
- 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, &params);
@@ -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, &params))
- 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, &params))
- 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, &params);
}
@@ -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;
diff --git a/ld/ldelf.c b/ld/ldelf.c
index dbc3d77..f4f27fc 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -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
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 87d882e..fd741ec 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -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. */
diff --git a/ld/ldlex.l b/ld/ldlex.l
index 58eca1b..a7bf491 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -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;
diff --git a/ld/mri.c b/ld/mri.c
index 68c024a..586d23d 100644
--- a/ld/mri.c
+++ b/ld/mri.c
@@ -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"