enable-non-contiguous-regions warnings
The warning about discarded sections in elf_link_input_bfd doesn't belong there since the code is dealing with symbols. Multiple symbols in a discarded section will result in multiple identical warnings about the section. Move the warning to a new function in ldlang.c. The patch also tidies the warning quoting of section and file names, consistently using `%pA' and `%pB'. I'm no stickler for one style of section and file name quoting, but they ought to be consistent within a warning, eg. see the first one fixed in ldlang.c, and when a warning is emitted for multiple targets they all ought to use exactly the same format string to reduce translation work. elf64-ppc.c loses the build_one_stub errors since we won't get there before hitting the fatal errors in size_one_stub. bfd/ * elflink.c (elf_link_input_bfd): Don't warn here about discarded sections. * elf32-arm.c (arm_build_one_stub): Use consistent style in --enable-non-contiguous-regions error. * 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. * elfnn-aarch64.c (aarch64_build_one_stub): Likewise. * xcofflink.c (xcoff_build_one_stub): Likewise. * elf64-ppc.c (ppc_size_one_stub): Likewise. (ppc_build_one_stub): Delete dead code. ld/ * ldlang.c (lang_add_section): Use consistent style in --enable-non-contiguous-regions warnings. (size_input_section): Likewise. (warn_non_contiguous_discards): New function. (lang_process): Call it. * testsuite/ld-arm/non-contiguous-arm.d: Update. * testsuite/ld-arm/non-contiguous-arm4.d: Update. * testsuite/ld-arm/non-contiguous-arm7.d: Add --enable-non-contiguous-regions-warnings. * testsuite/ld-arm/non-contiguous-arm7.err: New. * testsuite/ld-powerpc/non-contiguous-powerpc.d: Update. * testsuite/ld-powerpc/non-contiguous-powerpc64.d: Update.
This commit is contained in:
parent
8f2c64de86
commit
c63d486281
18 changed files with 59 additions and 66 deletions
|
@ -5053,7 +5053,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
||||
|
|
|
@ -3739,7 +3739,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
||||
|
|
|
@ -729,7 +729,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
|
||||
"section. Retry without "
|
||||
"--enable-non-contiguous-regions.\n"),
|
||||
hsh->target_section);
|
||||
|
@ -758,7 +758,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign %pA to an output "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
|
||||
"section. Retry without "
|
||||
"--enable-non-contiguous-regions.\n"),
|
||||
hsh->target_section);
|
||||
|
@ -839,7 +839,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign %pA to an output "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
|
||||
"section. Retry without "
|
||||
"--enable-non-contiguous-regions.\n"),
|
||||
hsh->target_section);
|
||||
|
|
|
@ -419,7 +419,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
||||
|
|
|
@ -539,7 +539,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
||||
|
|
|
@ -3342,7 +3342,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
hsh->target_section);
|
||||
|
||||
|
|
|
@ -2491,7 +2491,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
hsh->target_section);
|
||||
|
||||
|
|
|
@ -11701,25 +11701,6 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
|
|||
stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
|
||||
info = in_arg;
|
||||
|
||||
/* Fail if the target section could not be assigned to an output
|
||||
section. The user should fix his linker script. */
|
||||
if (stub_entry->target_section != NULL
|
||||
&& stub_entry->target_section->output_section == NULL
|
||||
&& info->non_contiguous_regions)
|
||||
info->callbacks->einfo (_("%F%P: Could 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)
|
||||
info->callbacks->einfo (_("%F%P: 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);
|
||||
|
||||
htab = ppc_hash_table (info);
|
||||
if (htab == NULL)
|
||||
return false;
|
||||
|
@ -12254,7 +12235,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign %pA to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
||||
|
@ -12262,11 +12243,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
|
|||
if (stub_entry->group->stub_sec != NULL
|
||||
&& stub_entry->group->stub_sec->output_section == NULL
|
||||
&& info->non_contiguous_regions)
|
||||
info->callbacks->einfo (_("%F%P: 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);
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
stub_entry->group->stub_sec);
|
||||
|
||||
/* Make a note of the offset within the stubs for this entry. */
|
||||
stub_offset = stub_entry->group->stub_sec->size;
|
||||
|
|
|
@ -11151,22 +11151,10 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
|
|||
|
||||
/* If this symbol is defined in a section which we are
|
||||
discarding, we don't need to keep it. */
|
||||
if (isym->st_shndx != SHN_UNDEF
|
||||
&& isym->st_shndx < SHN_LORESERVE
|
||||
&& isec->output_section == NULL
|
||||
&& flinfo->info->non_contiguous_regions)
|
||||
{
|
||||
if (flinfo->info->non_contiguous_regions_warnings)
|
||||
_bfd_error_handler (_("warning: --enable-non-contiguous-regions "
|
||||
"discards section `%s' from '%s'\n"),
|
||||
isec->name, bfd_get_filename (isec->owner));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isym->st_shndx != SHN_UNDEF
|
||||
&& isym->st_shndx < SHN_LORESERVE
|
||||
&& bfd_section_removed_from_list (output_bfd,
|
||||
isec->output_section))
|
||||
if (isym->st_shndx < SHN_LORESERVE
|
||||
&& (isec->output_section == NULL
|
||||
|| bfd_section_removed_from_list (output_bfd,
|
||||
isec->output_section)))
|
||||
continue;
|
||||
|
||||
/* Get the name of the symbol. */
|
||||
|
|
|
@ -3264,7 +3264,7 @@ 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)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without "
|
||||
"--enable-non-contiguous-regions.\n"),
|
||||
stub_entry->target_section);
|
||||
|
|
|
@ -4690,7 +4690,7 @@ xcoff_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
|
|||
if (hstub->target_section != NULL
|
||||
&& hstub->target_section->output_section == NULL
|
||||
&& info->non_contiguous_regions)
|
||||
info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
|
||||
info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
|
||||
"Retry without --enable-non-contiguous-regions.\n"),
|
||||
hstub->target_section);
|
||||
|
||||
|
|
38
ld/ldlang.c
38
ld/ldlang.c
|
@ -2539,7 +2539,7 @@ lang_add_section (lang_statement_list_type *ptr,
|
|||
}
|
||||
else if (link_info.non_contiguous_regions_warnings)
|
||||
einfo (_("%P:%pS: warning: --enable-non-contiguous-regions makes "
|
||||
"section `%pA' from '%pB' match /DISCARD/ clause.\n"),
|
||||
"section `%pA' from `%pB' match /DISCARD/ clause.\n"),
|
||||
NULL, section, section->owner);
|
||||
|
||||
return;
|
||||
|
@ -2572,7 +2572,7 @@ lang_add_section (lang_statement_list_type *ptr,
|
|||
|
||||
if (link_info.non_contiguous_regions_warnings && output->bfd_section)
|
||||
einfo (_("%P:%pS: warning: --enable-non-contiguous-regions may "
|
||||
"change behaviour for section `%pA' from '%pB' (assigned to "
|
||||
"change behaviour for section `%pA' from `%pB' (assigned to "
|
||||
"%pA, but additional match: %pA)\n"),
|
||||
NULL, section, section->owner, section->output_section,
|
||||
output->bfd_section);
|
||||
|
@ -5252,15 +5252,15 @@ size_input_section
|
|||
if (dot + TO_ADDR (i->size) > end)
|
||||
{
|
||||
if (i->flags & SEC_LINKER_CREATED)
|
||||
einfo (_("%F%P: Output section '%s' not large enough for the "
|
||||
"linker-created stubs section '%s'.\n"),
|
||||
i->output_section->name, i->name);
|
||||
einfo (_("%F%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 "
|
||||
"--enable-non-contiguous-regions (section '%s' "
|
||||
"would overflow '%s' after it changed size).\n"),
|
||||
i->name, i->output_section->name);
|
||||
"--enable-non-contiguous-regions (section `%pA' "
|
||||
"would overflow `%pA' after it changed size).\n"),
|
||||
i, i->output_section);
|
||||
|
||||
*removed = 1;
|
||||
dot = end;
|
||||
|
@ -7850,6 +7850,24 @@ lang_propagate_lma_regions (void)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
warn_non_contiguous_discards (void)
|
||||
{
|
||||
LANG_FOR_EACH_INPUT_STATEMENT (file)
|
||||
{
|
||||
if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
|
||||
|| file->flags.just_syms)
|
||||
continue;
|
||||
|
||||
for (asection *s = file->the_bfd->sections; s != NULL; s = s->next)
|
||||
if (s->output_section == NULL
|
||||
&& (s->flags & SEC_LINKER_CREATED) == 0)
|
||||
einfo (_("%P: warning: --enable-non-contiguous-regions "
|
||||
"discards section `%pA' from `%pB'\n"),
|
||||
s, file->the_bfd);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reset_one_wild (lang_statement_union_type *statement)
|
||||
{
|
||||
|
@ -8191,6 +8209,10 @@ lang_process (void)
|
|||
if (command_line.check_section_addresses)
|
||||
lang_check_section_addresses ();
|
||||
|
||||
if (link_info.non_contiguous_regions
|
||||
&& link_info.non_contiguous_regions_warnings)
|
||||
warn_non_contiguous_discards ();
|
||||
|
||||
/* Check any required symbols are known. */
|
||||
ldlang_check_require_defined_symbols ();
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#name: non-contiguous-arm
|
||||
#source: non-contiguous-arm.s
|
||||
#ld: --enable-non-contiguous-regions -T non-contiguous-arm.ld
|
||||
# error: \A.*Could not assign '.code.4' to an output section. Retry without --enable-non-contiguous-regions.*\Z
|
||||
# error: .*Could not assign .?\.code\.4.? to an output section. Retry without --enable-non-contiguous-regions\.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#name: non-contiguous-arm4
|
||||
#source: non-contiguous-arm.s
|
||||
#ld: --enable-non-contiguous-regions -T non-contiguous-arm4.ld
|
||||
# error: \A.*Output section '.ramu' not large enough for the linker-created stubs section '.code.3.__stub'.*\Z
|
||||
# error: .*Output section .?\.ramu.? not large enough for the linker-created stubs section .?\.code\.3\.__stub.\.?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#name: non-contiguous-arm7
|
||||
#source: non-contiguous-arm7.s
|
||||
#ld: --enable-non-contiguous-regions -T non-contiguous-arm7.ld
|
||||
#error: \A.*unresolvable R_ARM_ABS32 relocation against symbol .MY_BUF..*\Z
|
||||
#ld: --enable-non-contiguous-regions --enable-non-contiguous-regions-warnings -T non-contiguous-arm7.ld
|
||||
#error_output: non-contiguous-arm7.err
|
||||
|
|
4
ld/testsuite/ld-arm/non-contiguous-arm7.err
Normal file
4
ld/testsuite/ld-arm/non-contiguous-arm7.err
Normal file
|
@ -0,0 +1,4 @@
|
|||
.* may change behaviour for section .?\.bss.? from .*
|
||||
.* may change behaviour for section .?\.bss\.MY_BUF.? from .*
|
||||
.* discards section .?\.bss\.MY_BUF.? from .*
|
||||
.* unresolvable R_ARM_ABS32 relocation against symbol .?MY_BUF.?
|
|
@ -1,5 +1,5 @@
|
|||
#name: non-contiguous-powerpc
|
||||
#source: non-contiguous-powerpc.s
|
||||
#ld: --enable-non-contiguous-regions -T non-contiguous-powerpc.ld
|
||||
#error: \A.*Relaxation not supported with --enable-non-contiguous-regions.*
|
||||
#error: .*Relaxation not supported with --enable-non-contiguous-regions.*
|
||||
#skip: powerpc64*-*
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
#source: non-contiguous-powerpc.s
|
||||
#as: -a64
|
||||
#ld: -melf64ppc --enable-non-contiguous-regions -T non-contiguous-powerpc.ld
|
||||
#error: .*Could not assign group.*
|
||||
#error: .*Could not assign .?\.text\.one\.stub.? to an output section\. Retry without --enable-non-contiguous-regions\.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue