From: Nick Clifton Date: Fri, 4 Aug 2006 14:53:26 +0000 (+0000) Subject: * ldmain.c (main): Initialise print_gc_sections field of link_info structure. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c17d87de17351aed016a9d0b0712cdee4cca5f9e;p=binutils-gdb.git * 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. * bfdlink.h (struct bfd_link_info): New field: print_gc_sections. * elflink.c (elf_gc_sweep): If info.print_gc_sections is true, list removed sections to stderr. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 401c6b37312..0ba154dfd80 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2006-08-04 Marcelo Tosatti + + * elflink.c (elf_gc_sweep): If info.print_gc_sections is true, + list removed sections to stderr. + 2006-08-04 Richard Sandiford Kazu Hirata Phil Edwards diff --git a/bfd/elflink.c b/bfd/elflink.c index 99f0acc7588..ba0e77e3aa4 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 75f1ed22f05..5140f8d1964 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2006-08-04 Marcelo Tosatti + + * bfdlink.h (struct bfd_link_info): New field: print_gc_sections. + 2006-07-10 Jakub Jelinek * bfdlink.h (struct bfd_link_info): Add emit_hash and diff --git a/include/bfdlink.h b/include/bfdlink.h index 761bd0513e3..bbedd6089f2 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 45129658a3a..1ee78d4e381 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2006-08-04 Marcelo Tosatti + + * 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 Kazu Hirata Phil Edwards diff --git a/ld/NEWS b/ld/NEWS index 27fb0ae1154..4ca2e9b1ccb 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 f3d95805188..835482d1c29 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 cb56a8d85f9..4dab0d6bd4d 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 c2bef1dd482..4d526b0b673 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=", required_argument, NULL, OPTION_HASH_SIZE}, '\0', NULL, N_("Set default hash table size close to "), 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;