aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog18
-rw-r--r--ld/NEWS2
-rw-r--r--ld/ld.h3
-rw-r--r--ld/ld.texi8
-rw-r--r--ld/ldlang.c25
-rw-r--r--ld/ldlex.h2
-rw-r--r--ld/ldmain.c1
-rw-r--r--ld/lexsup.c14
-rw-r--r--ld/testsuite/ld-gc/gc.exp2
-rw-r--r--ld/testsuite/ld-gc/skip-map-discarded.d3
-rw-r--r--ld/testsuite/ld-gc/skip-map-discarded.map5
-rw-r--r--ld/testsuite/ld-gc/skip-map-discarded.s5
12 files changed, 76 insertions, 12 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 8e6a2d4..c8eda47 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,21 @@
+2019-04-11 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ * NEWS: Mention new option --no-print-map-discarded.
+ * ld.h (ld_config_type) <print_map_discarded>: New field.
+ * ldlang.c (lang_map): Conditionally output discarded sections
+ in map files based on configuration option.
+ * ldlex.h (option_values) <OPTION_PRINT_MAP_DISCARDED,
+ OPTION_NO_PRINT_MAP_DISCARDED>: New.
+ * ldmain.c (main): Enabled print_map_discarded by default.
+ * lexsup.c (ld_options): Add new command-line options.
+ (parse_args) <OPTION_NO_PRINT_MAP_DISCARDED,
+ OPTION_PRINT_MAP_DISCARDED>: New cases.
+ * ld.texi: Document new options.
+ * testsuite/ld-gc/gc.exp: Add new test.
+ * testsuite/ld-gc/skip-map-discarded.s: New file.
+ * testsuite/ld-gc/skip-map-discarded.d: New file.
+ * testsuite/ld-gc/skip-map-discarded.map: New file.
+
2019-04-11 H.J. Lu <hongjiu.lu@intel.com>
* ld.texi: Document -z cet-report=[none|warning|error].
diff --git a/ld/NEWS b/ld/NEWS
index 597845a..de2cd16 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,5 +1,7 @@
-*- text -*-
+* Add command-line option --no-print-map-discarded.
+
Changes in 2.33:
* Add target handlers for AArch64 for ELF GNU program properties.
diff --git a/ld/ld.h b/ld/ld.h
index b97d977..55078a9 100644
--- a/ld/ld.h
+++ b/ld/ld.h
@@ -318,6 +318,9 @@ typedef struct
/* The common page size for ELF. */
bfd_vma commonpagesize;
+
+ /* If set, print discarded sections in map file output. */
+ bfd_boolean print_map_discarded;
} ld_config_type;
extern ld_config_type config;
diff --git a/ld/ld.texi b/ld/ld.texi
index 8e2ce86..71c8d25 100644
--- a/ld/ld.texi
+++ b/ld/ld.texi
@@ -783,6 +783,14 @@ when merging properties in @file{foo.o}, whose 0xc0010001 property value
is 0x1, and @file{bar.o}, whose 0xc0010001 property value is 0x1.
@end itemize
+@cindex link map discarded
+@kindex --print-map-discarded
+@kindex --no-print-map-discarded
+@item --print-map-discarded
+@itemx --no-print-map-discarded
+Print (or do not print) the list of discarded and garbage collected sections
+in the link map. Enabled by default.
+
@kindex -n
@cindex read-only text
@cindex NMAGIC
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 1952d4a..898735e 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -2251,19 +2251,20 @@ lang_map (void)
|| file->flags.just_syms)
continue;
- for (s = file->the_bfd->sections; s != NULL; s = s->next)
- if ((s->output_section == NULL
- || s->output_section->owner != link_info.output_bfd)
- && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
- {
- if (!dis_header_printed)
- {
- fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
- dis_header_printed = TRUE;
- }
+ if (config.print_map_discarded)
+ for (s = file->the_bfd->sections; s != NULL; s = s->next)
+ if ((s->output_section == NULL
+ || s->output_section->owner != link_info.output_bfd)
+ && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
+ {
+ if (! dis_header_printed)
+ {
+ fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
+ dis_header_printed = TRUE;
+ }
- print_input_section (s, TRUE);
- }
+ print_input_section (s, TRUE);
+ }
}
minfo (_("\nMemory Configuration\n\n"));
diff --git a/ld/ldlex.h b/ld/ldlex.h
index 32853de..32a7a64 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -148,6 +148,8 @@ enum option_values
OPTION_REQUIRE_DEFINED_SYMBOL,
OPTION_ORPHAN_HANDLING,
OPTION_FORCE_GROUP_ALLOCATION,
+ OPTION_PRINT_MAP_DISCARDED,
+ OPTION_NO_PRINT_MAP_DISCARDED,
};
/* The initial parser states. */
diff --git a/ld/ldmain.c b/ld/ldmain.c
index 77cdbd0..da1c6a7 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -264,6 +264,7 @@ main (int argc, char **argv)
config.make_executable = TRUE;
config.magic_demand_paged = TRUE;
config.text_read_only = TRUE;
+ config.print_map_discarded = TRUE;
link_info.disable_target_specific_optimizations = -1;
command_line.warn_mismatch = TRUE;
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 88e85c7..dacb962 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -543,6 +543,12 @@ static const struct ld_option ld_options[] =
{ {"orphan-handling", required_argument, NULL, OPTION_ORPHAN_HANDLING},
'\0', N_("=MODE"), N_("Control how orphan sections are handled."),
TWO_DASHES },
+ { {"print-map-discarded", no_argument, NULL, OPTION_PRINT_MAP_DISCARDED},
+ '\0', NULL, N_("Show discarded sections in map file output (default)"),
+ TWO_DASHES },
+ { {"no-print-map-discarded", no_argument, NULL, OPTION_NO_PRINT_MAP_DISCARDED},
+ '\0', NULL, N_("Do not show discarded sections in map file output"),
+ TWO_DASHES },
};
#define OPTION_COUNT ARRAY_SIZE (ld_options)
@@ -1577,6 +1583,14 @@ parse_args (unsigned argc, char **argv)
einfo (_("%F%P: invalid argument to option"
" \"--orphan-handling\"\n"));
break;
+
+ case OPTION_NO_PRINT_MAP_DISCARDED:
+ config.print_map_discarded = FALSE;
+ break;
+
+ case OPTION_PRINT_MAP_DISCARDED:
+ config.print_map_discarded = TRUE;
+ break;
}
}
diff --git a/ld/testsuite/ld-gc/gc.exp b/ld/testsuite/ld-gc/gc.exp
index 536356c..13968cc 100644
--- a/ld/testsuite/ld-gc/gc.exp
+++ b/ld/testsuite/ld-gc/gc.exp
@@ -171,3 +171,5 @@ if { [is_elf_format] && [check_shared_lib_support] \
]
run_dump_test "pr20306"
}
+
+run_dump_test "skip-map-discarded"
diff --git a/ld/testsuite/ld-gc/skip-map-discarded.d b/ld/testsuite/ld-gc/skip-map-discarded.d
new file mode 100644
index 0000000..2e79f0b
--- /dev/null
+++ b/ld/testsuite/ld-gc/skip-map-discarded.d
@@ -0,0 +1,3 @@
+#name: Check --no-print-map-discarded linker option
+#ld: -e 0 --gc-sections --no-print-map-discarded
+#map: skip-map-discarded.map
diff --git a/ld/testsuite/ld-gc/skip-map-discarded.map b/ld/testsuite/ld-gc/skip-map-discarded.map
new file mode 100644
index 0000000..ca4818e
--- /dev/null
+++ b/ld/testsuite/ld-gc/skip-map-discarded.map
@@ -0,0 +1,5 @@
+#failif
+Discarded input sections
+#...
+ _foo.*
+#...
diff --git a/ld/testsuite/ld-gc/skip-map-discarded.s b/ld/testsuite/ld-gc/skip-map-discarded.s
new file mode 100644
index 0000000..630aab0
--- /dev/null
+++ b/ld/testsuite/ld-gc/skip-map-discarded.s
@@ -0,0 +1,5 @@
+.globl __start
+__start:
+ .section _foo
+foo:
+ .long 1