non-contiguous elf test
Christophe Lyon
christophe.lyon@linaro.org
Tue Mar 17 16:17:06 GMT 2020
On Tue, 17 Mar 2020 at 13:37, Alan Modra <amodra@gmail.com> wrote:
>
> On Tue, Mar 17, 2020 at 11:56:17AM +0100, Christophe Lyon wrote:
> > On Mon, 16 Mar 2020 at 12:09, Alan Modra <amodra@gmail.com> wrote:
> > >
> > > On Mon, Mar 16, 2020 at 11:21:01AM +0100, Christophe Lyon wrote:
> > > > OK, sure, but what's the recommended way of issuing a fatal error message?
> > > > I'd like to stop processing at that point (and similarly in the other
> > > > parts of my patch where I use abort)
> > >
> > > In the linker, use %F in an error message output by einfo. Lots of
> > > examples in ldelf.c.
> > >
> > Thanks, I'd missed that indeed.
> >
> > But what about the code in elfNN-XXX ?
> > It uses _bfd_error_handler instead of einfo, which does not support %F AFAICT
>
> It could use info->callbacks->einfo.
>
Ha thanks!
I missed that because almost none of the backends I patched use it
(except for ppc)
The attached patch uses %F and removes the calls to abort introduced
by my main patch.
Use '%F' format when printing error messages to exit cleanly rather
than by calling abort().
2020-03-17 Christophe Lyon <christophe.lyon@linaro.org>
bfd/
* elf32-arm.c (arm_build_one_stub): Emit a fatal error message
instead of calling abort.
* elf32-csky.c (csky_build_one_stub): Likewise.
* elf32-hppa.c (hppa_build_one_stub): Likewise.
* elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise.
* elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise.
* elf32-metag.c (metag_build_one_stub): Likewise.
* elf32-nios2.c (nios2_build_one_stub): Likewise.
* elf64-ppc.c (ppc_build_one_stub): Likewise.
(ppc_size_one_stub): Likewise.
* elfnn-aarch64.c (aarch64_build_one_stub): Likewise.
ld/
* emultempl/xtensaelf.em: Emit a fatal error message
instead of calling abort.
* ldlang.c: Likewise.
OK?
Thanks,
Christophe
> --
> Alan Modra
> Australia Development Lab, IBM
-------------- next part --------------
From 019146b23e52f895b833c0b64cd0fc33537dc404 Mon Sep 17 00:00:00 2001
From: Christophe Lyon <christophe.lyon@linaro.org>
Date: Tue, 17 Mar 2020 15:59:01 +0000
Subject: [PATCH 1/1] Non-contiguous memory regions support: Avoid calls to
abort
Use '%F' format when printing error messages to exit cleanly rather
than by calling abort().
2020-03-17 Christophe Lyon <christophe.lyon@linaro.org>
bfd/
* elf32-arm.c (arm_build_one_stub): Emit a fatal error message
instead of calling abort.
* elf32-csky.c (csky_build_one_stub): Likewise.
* elf32-hppa.c (hppa_build_one_stub): Likewise.
* elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise.
* elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise.
* elf32-metag.c (metag_build_one_stub): Likewise.
* elf32-nios2.c (nios2_build_one_stub): Likewise.
* elf64-ppc.c (ppc_build_one_stub): Likewise.
(ppc_size_one_stub): Likewise.
* elfnn-aarch64.c (aarch64_build_one_stub): Likewise.
ld/
* emultempl/xtensaelf.em: Emit a fatal error message
instead of calling abort.
* ldlang.c: Likewise.
Change-Id: I60deaeeee59d4e7cab06b8a40a3e51837c43a8ab
---
bfd/elf32-arm.c | 9 +++------
bfd/elf32-csky.c | 9 +++------
bfd/elf32-hppa.c | 32 ++++++++++++++------------------
bfd/elf32-m68hc11.c | 9 +++------
bfd/elf32-m68hc12.c | 9 +++------
bfd/elf32-metag.c | 9 +++------
bfd/elf32-nios2.c | 10 ++++------
bfd/elf64-ppc.c | 44 ++++++++++++++++----------------------------
bfd/elfnn-aarch64.c | 10 ++++------
ld/emultempl/xtensaelf.em | 6 ++----
ld/ldlang.c | 20 +++++++-------------
11 files changed, 62 insertions(+), 105 deletions(-)
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index e8b2ac4..56a9ee4 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -5068,12 +5068,9 @@ arm_build_one_stub (struct bfd_hash_entry *gen_entry,
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
globals = elf32_arm_hash_table (info);
if (globals == NULL)
diff --git a/bfd/elf32-csky.c b/bfd/elf32-csky.c
index 8415f7c..44a491f 100644
--- a/bfd/elf32-csky.c
+++ b/bfd/elf32-csky.c
@@ -3625,12 +3625,9 @@ csky_build_one_stub (struct bfd_hash_entry *gen_entry,
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
globals = csky_elf_hash_table (info);
if (globals == NULL)
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 9760b75..1479f87 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -735,12 +735,10 @@ hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- hsh->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output "
+ "section. Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ hsh->target_section);
/* Create the long branch. A long branch is formed with "ldil"
loading the upper bits of the target address into a register,
@@ -766,12 +764,11 @@ hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign %pA to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- hsh->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign %pA to an output "
+ "section. Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ hsh->target_section);
+
/* Branches are relative. This is where we are going to. */
sym_value = (hsh->target_value
+ hsh->target_section->output_offset
@@ -848,12 +845,11 @@ hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign %pA to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- hsh->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign %pA to an output "
+ "section. Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ hsh->target_section);
+
/* Branches are relative. This is where we are going to. */
sym_value = (hsh->target_value
+ hsh->target_section->output_offset
diff --git a/bfd/elf32-m68hc11.c b/bfd/elf32-m68hc11.c
index 3e12ae5..bfdc780 100644
--- a/bfd/elf32-m68hc11.c
+++ b/bfd/elf32-m68hc11.c
@@ -419,12 +419,9 @@ m68hc11_elf_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
htab = m68hc11_elf_hash_table (info);
if (htab == NULL)
diff --git a/bfd/elf32-m68hc12.c b/bfd/elf32-m68hc12.c
index a04efd8..d4b822f 100644
--- a/bfd/elf32-m68hc12.c
+++ b/bfd/elf32-m68hc12.c
@@ -539,12 +539,9 @@ m68hc12_elf_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
htab = m68hc11_elf_hash_table (info);
diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c
index 3f30d6d..12f1313 100644
--- a/bfd/elf32-metag.c
+++ b/bfd/elf32-metag.c
@@ -3477,12 +3477,9 @@ metag_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- hsh->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ hsh->target_section);
stub_sec = hsh->stub_sec;
diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c
index 8c8bc0c..8516a27 100644
--- a/bfd/elf32-nios2.c
+++ b/bfd/elf32-nios2.c
@@ -2498,12 +2498,10 @@ nios2_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_U
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- hsh->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ hsh->target_section);
+
/* Make a note of the offset within the stubs for this entry. */
hsh->stub_offset = stub_sec->size;
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 83eaadf..a540d45 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -11367,25 +11367,19 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (stub_entry->target_section != NULL
&& stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
/* Same for the group. */
if (stub_entry->group->stub_sec != NULL
&& stub_entry->group->stub_sec->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign group %pA target %pA to an "
- "output section. Retry without "
- "--enable-non-contiguous-regions.\n"),
- stub_entry->group->stub_sec,
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign group %pA target %pA to an "
+ "output section. Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ stub_entry->group->stub_sec,
+ stub_entry->target_section);
htab = ppc_hash_table (info);
if (htab == NULL)
@@ -11917,25 +11911,19 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
if (stub_entry->target_section != NULL
&& stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign %pA to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign %pA to an output section. "
+ "Retry without --enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
/* Same for the group. */
if (stub_entry->group->stub_sec != NULL
&& stub_entry->group->stub_sec->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign group %pA target %pA to an "
- "output section. Retry without "
- "--enable-non-contiguous-regions.\n"),
- stub_entry->group->stub_sec,
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign group %pA target %pA to an "
+ "output section. Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ stub_entry->group->stub_sec,
+ stub_entry->target_section);
/* Make a note of the offset within the stubs for this entry. */
stub_entry->stub_offset = stub_entry->group->stub_sec->size;
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index b00b6c4..0be6f4d 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -3302,12 +3302,10 @@ aarch64_build_one_stub (struct bfd_hash_entry *gen_entry,
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- {
- _bfd_error_handler (_("Could not assign '%pA' to an output section. "
- "Retry without --enable-non-contiguous-regions.\n"),
- stub_entry->target_section);
- abort();
- }
+ info->callbacks->einfo (_("%FCould not assign '%pA' to an output section. "
+ "Retry without "
+ "--enable-non-contiguous-regions.\n"),
+ stub_entry->target_section);
stub_sec = stub_entry->stub_sec;
diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em
index 74bd11c..11b6cc4 100644
--- a/ld/emultempl/xtensaelf.em
+++ b/ld/emultempl/xtensaelf.em
@@ -1225,10 +1225,8 @@ 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 (_("Relaxation not supported with --enable-non-contiguous-regions.\n"));
- abort();
- }
+ einfo (_("%FRelaxation not supported with "
+ "--enable-non-contiguous-regions.\n"));
if (l->header.type == lang_input_section_enum)
{
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 8e56e86..98ccc10 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -5220,21 +5220,15 @@ size_input_section
if (dot + TO_ADDR (i->size) > end)
{
if (i->flags & SEC_LINKER_CREATED)
- {
- einfo (_("Output section '%s' not large enough for the "
- "linker-created stubs section '%s'.\n"),
- i->output_section->name, i->name);
- abort();
- }
+ einfo (_("%FOutput section '%s' not large enough for the "
+ "linker-created stubs section '%s'.\n"),
+ i->output_section->name, i->name);
if (i->rawsize && i->rawsize != i->size)
- {
- einfo (_("Relaxation not supported with "
- "--enable-non-contiguous-regions (section '%s' "
- "would overflow '%s' after it changed size).\n"),
- i->name, i->output_section->name);
- abort();
- }
+ einfo (_("%FRelaxation not supported with "
+ "--enable-non-contiguous-regions (section '%s' "
+ "would overflow '%s' after it changed size).\n"),
+ i->name, i->output_section->name);
*removed = 1;
dot = end;
--
2.7.4
More information about the Binutils
mailing list