aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elflink.c6
-rw-r--r--include/ChangeLog4
-rw-r--r--include/bfdlink.h3
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/NEWS4
-rw-r--r--ld/ld.texinfo16
-rw-r--r--ld/ldmain.c1
-rw-r--r--ld/lexsup.c14
9 files changed, 59 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 401c6b3..0ba154d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * elflink.c (elf_gc_sweep): If info.print_gc_sections is true,
+ list removed sections to stderr.
+
2006-08-04 Richard Sandiford <richard@codesourcery.com>
Kazu Hirata <kazu@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 99f0acc..ba0e77e 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -9356,7 +9356,8 @@ _bfd_elf_gc_mark (struct bfd_link_info *info,
/* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */
-struct elf_gc_sweep_symbol_info {
+struct elf_gc_sweep_symbol_info
+{
struct bfd_link_info *info;
void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
bfd_boolean);
@@ -9419,6 +9420,9 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
to remove a section from the output. */
o->flags |= SEC_EXCLUDE;
+ if (info->print_gc_sections == TRUE)
+ _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
+
/* But we also have to update some of the relocation
info we collected before. */
if (gc_sweep_hook
diff --git a/include/ChangeLog b/include/ChangeLog
index 75f1ed2..5140f8d 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * bfdlink.h (struct bfd_link_info): New field: print_gc_sections.
+
2006-07-10 Jakub Jelinek <jakub@redhat.com>
* bfdlink.h (struct bfd_link_info): Add emit_hash and
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 761bd05..bbedd60 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -324,6 +324,9 @@ struct bfd_link_info
/* TRUE if unreferenced sections should be removed. */
unsigned int gc_sections: 1;
+ /* TRUE if user shoudl be informed of removed unreferenced sections. */
+ unsigned int print_gc_sections: 1;
+
/* TRUE if .hash section should be created. */
unsigned int emit_hash: 1;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 4512965..1ee78d4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
+
+ * ldmain.c (main): Initialise print_gc_sections field of link_info
+ structure.
+ * lexsup.c: Add --print-gc-sections and --no-print-gc-sections
+ switches.
+ * ld.texinfo: Document new switches.
+ * NEWS: Mention new switches.
+
2006-08-04 Richard Sandiford <richard@codesourcery.com>
Kazu Hirata <kazu@codesourcery.com>
Phil Edwards <phil@codesourcery.com>
diff --git a/ld/NEWS b/ld/NEWS
index 27fb0ae..4ca2e9b 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,4 +1,8 @@
-*- text -*-
+* New switch: --print-gc-sections to list any sections removed by garabge
+ collection.
+
+Changes in 2.17:
* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index f3d9580..835482d 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -1230,14 +1230,26 @@ it ends in a @code{.exe} suffix.
@kindex --gc-sections
@kindex --no-gc-sections
@cindex garbage collection
-@item --no-gc-sections
-@itemx --gc-sections
+@item --gc-sections
+@itemx --no-gc-sections
Enable garbage collection of unused input sections. It is ignored on
targets that do not support this option. This option is not compatible
with @samp{-r}. The default behaviour (of not performing this garbage
collection) can be restored by specifying @samp{--no-gc-sections} on
the command line.
+@kindex --print-gc-sections
+@kindex --no-print-gc-sections
+@cindex garbage collection
+@item --print-gc-sections
+@itemx --no-print-gc-sections
+List all sections removed by garbage collection. The listing is
+printed on stderr. This option is only effective if garbage
+collection has been enabled via the @samp{--gc-sections}) option. The
+default behaviour (of not listing the sections that are removed) can
+be restored by specifying @samp{--no-print-gc-sections} on the command
+line.
+
@cindex help
@cindex usage
@kindex --help
diff --git a/ld/ldmain.c b/ld/ldmain.c
index cb56a8d..4dab0d6 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -318,6 +318,7 @@ main (int argc, char **argv)
link_info.relax_pass = 1;
link_info.warn_shared_textrel = FALSE;
link_info.gc_sections = FALSE;
+ link_info.print_gc_sections = FALSE;
config.maxpagesize = 0;
config.commonpagesize = 0;
diff --git a/ld/lexsup.c b/ld/lexsup.c
index c2bef1d..4d526b0 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -124,6 +124,8 @@ enum option_values
OPTION_FORCE_EXE_SUFFIX,
OPTION_GC_SECTIONS,
OPTION_NO_GC_SECTIONS,
+ OPTION_PRINT_GC_SECTIONS,
+ OPTION_NO_PRINT_GC_SECTIONS,
OPTION_HASH_SIZE,
OPTION_CHECK_SECTIONS,
OPTION_NO_CHECK_SECTIONS,
@@ -370,6 +372,12 @@ static const struct ld_option ld_options[] =
{ {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
'\0', NULL, N_("Don't remove unused sections (default)"),
TWO_DASHES },
+ { {"print-gc-sections", no_argument, NULL, OPTION_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("List removed unused sections on stderr"),
+ TWO_DASHES },
+ { {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
+ '\0', NULL, N_("Do not list removed unused sections"),
+ TWO_DASHES },
{ {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
'\0', NULL, N_("Set default hash table size close to <NUMBER>"),
TWO_DASHES },
@@ -812,6 +820,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_GC_SECTIONS:
link_info.gc_sections = TRUE;
break;
+ case OPTION_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = TRUE;
+ break;
case OPTION_HELP:
help ();
xexit (0);
@@ -855,6 +866,9 @@ parse_args (unsigned argc, char **argv)
case OPTION_NO_GC_SECTIONS:
link_info.gc_sections = FALSE;
break;
+ case OPTION_NO_PRINT_GC_SECTIONS:
+ link_info.print_gc_sections = FALSE;
+ break;
case OPTION_NO_KEEP_MEMORY:
link_info.keep_memory = FALSE;
break;