aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ldlang.c38
-rw-r--r--ld/testsuite/ld-arm/non-contiguous-arm.d2
-rw-r--r--ld/testsuite/ld-arm/non-contiguous-arm4.d2
-rw-r--r--ld/testsuite/ld-arm/non-contiguous-arm7.d4
-rw-r--r--ld/testsuite/ld-arm/non-contiguous-arm7.err4
-rw-r--r--ld/testsuite/ld-powerpc/non-contiguous-powerpc.d2
-rw-r--r--ld/testsuite/ld-powerpc/non-contiguous-powerpc64.d2
7 files changed, 40 insertions, 14 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 7829f86..315b916 100644
--- a/ld/ldlang.c
+++ b/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;
@@ -7851,6 +7851,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)
{
if (statement->header.type == lang_wild_statement_enum)
@@ -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 ();
diff --git a/ld/testsuite/ld-arm/non-contiguous-arm.d b/ld/testsuite/ld-arm/non-contiguous-arm.d
index d0e5fab..3479778 100644
--- a/ld/testsuite/ld-arm/non-contiguous-arm.d
+++ b/ld/testsuite/ld-arm/non-contiguous-arm.d
@@ -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\.
diff --git a/ld/testsuite/ld-arm/non-contiguous-arm4.d b/ld/testsuite/ld-arm/non-contiguous-arm4.d
index a55e8d6..a8e9d66 100644
--- a/ld/testsuite/ld-arm/non-contiguous-arm4.d
+++ b/ld/testsuite/ld-arm/non-contiguous-arm4.d
@@ -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.\.?
diff --git a/ld/testsuite/ld-arm/non-contiguous-arm7.d b/ld/testsuite/ld-arm/non-contiguous-arm7.d
index b8f08d4..94e9757 100644
--- a/ld/testsuite/ld-arm/non-contiguous-arm7.d
+++ b/ld/testsuite/ld-arm/non-contiguous-arm7.d
@@ -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
diff --git a/ld/testsuite/ld-arm/non-contiguous-arm7.err b/ld/testsuite/ld-arm/non-contiguous-arm7.err
new file mode 100644
index 0000000..3185ef5
--- /dev/null
+++ b/ld/testsuite/ld-arm/non-contiguous-arm7.err
@@ -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.?
diff --git a/ld/testsuite/ld-powerpc/non-contiguous-powerpc.d b/ld/testsuite/ld-powerpc/non-contiguous-powerpc.d
index c0618db..ea41e0d 100644
--- a/ld/testsuite/ld-powerpc/non-contiguous-powerpc.d
+++ b/ld/testsuite/ld-powerpc/non-contiguous-powerpc.d
@@ -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*-*
diff --git a/ld/testsuite/ld-powerpc/non-contiguous-powerpc64.d b/ld/testsuite/ld-powerpc/non-contiguous-powerpc64.d
index ff0e3fc..9f903bb 100644
--- a/ld/testsuite/ld-powerpc/non-contiguous-powerpc64.d
+++ b/ld/testsuite/ld-powerpc/non-contiguous-powerpc64.d
@@ -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\.