From 7fe1b1388ff80f10e932cde5d82d7268742ef336 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 26 Feb 2021 09:25:45 -0800 Subject: [PATCH] nm: Add --quiet to suppress "no symbols" diagnostic PR binutils/27408 * readelf.c (quiet): New option flag. (enum long_option_values): New enum to hold long option value. (long_options): Add --quiet. (usage): Mention --quiet. (display_rel_file): If quiet is enabled, suppress "no symbols". (main): Handle the new option. * NEWS: Mention --quiet. * docs/binutils.texi: Document --quiet. --- binutils/ChangeLog | 12 ++++++++++++ binutils/NEWS | 3 +++ binutils/doc/binutils.texi | 5 +++++ binutils/nm.c | 18 ++++++++++++++---- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 0a89ac2f914..4289eb5e83d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,15 @@ +2021-02-26 Fangrui Song + + PR 27408 + * readelf.c (quiet): New option flag. + (enum long_option_values): New enum to hold long option value. + (long_options): Add --quiet. + (usage): Mention --quiet. + (display_rel_file): If quiet is enabled, suppress "no symbols". + (main): Handle the new option. + * NEWS: Mention --quiet. + * docs/binutils.texi: Document --quiet. + 2021-02-26 Tom de Vries * dwarf.c (display_debug_addr): Handle dwarf-5 .debug_addr bits. diff --git a/binutils/NEWS b/binutils/NEWS index 61aca952f2d..d66944e95e0 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -10,6 +10,9 @@ restored by the use of the --enable-follow-debug-links=no configure time option. +* Nm has a new command line option: --quiet. This suppresses "no symbols" + diagnostic. + Changes in 2.36: * Update elfedit and readelf with LAM_U48 and LAM_U57 support. diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 94ea5720be8..b7740dfc8a4 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -4741,6 +4741,7 @@ readelf [@option{-a}|@option{--all}] [@option{-s}|@option{--syms}|@option{--symbols}] [@option{--dyn-syms}|@option{--lto-syms}] [@option{--demangle@var{=style}}|@option{--no-demangle}] + [@option{--quiet}] [@option{--recurse-limit}|@option{--no-recurse-limit}] [@option{-n}|@option{--notes}] [@option{-r}|@option{--relocs}] @@ -4822,6 +4823,10 @@ file. Displays the information contained in the file's segment headers, if it has any. +@item --quiet +@cindex quiet +Suppress "no symbols" diagnostic. + @item -S @itemx --sections @itemx --section-headers diff --git a/binutils/nm.c b/binutils/nm.c index acfdf665c03..a51d2eff75d 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -161,6 +161,7 @@ static int show_version = 0; /* Show the version number. */ static int show_synthetic = 0; /* Display synthesized symbols too. */ static int line_numbers = 0; /* Print line numbers for symbols. */ static int allow_special_symbols = 0; /* Allow special symbols. */ +static int quiet = 0; /* Suppress "no symbols" diagnostic. */ /* The characters to use for global and local ifunc symbols. */ #if DEFAULT_F_FOR_IFUNC_SYMBOLS @@ -200,7 +201,8 @@ enum long_option_values OPTION_RECURSE_LIMIT, OPTION_NO_RECURSE_LIMIT, OPTION_IFUNC_CHARS, - OPTION_WITH_SYMBOL_VERSIONS + OPTION_WITH_SYMBOL_VERSIONS, + OPTION_QUIET }; static struct option long_options[] = @@ -224,6 +226,7 @@ static struct option long_options[] = {"print-armap", no_argument, &print_armap, 1}, {"print-file-name", no_argument, 0, 'o'}, {"print-size", no_argument, 0, 'S'}, + {"quiet", no_argument, 0, OPTION_QUIET}, {"radix", required_argument, 0, 't'}, {"recurse-limit", no_argument, NULL, OPTION_RECURSE_LIMIT}, {"recursion-limit", no_argument, NULL, OPTION_RECURSE_LIMIT}, @@ -279,6 +282,7 @@ usage (FILE *stream, int status) fprintf (stream, _("\ -S, --print-size Print size of defined symbols\n\ -s, --print-armap Include index for symbols from archive members\n\ + --quiet Suppress \"no symbols\" diagnostic\n\ --size-sort Sort symbols by size\n\ --special-syms Include special symbols in the output\n\ --synthetic Display synthetic symbols as well\n\ @@ -1130,7 +1134,8 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) { if (!(bfd_get_file_flags (abfd) & HAS_SYMS)) { - non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); + if (!quiet) + non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); return; } } @@ -1140,7 +1145,8 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) { if (dynamic && bfd_get_error () == bfd_error_no_symbols) { - non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); + if (!quiet) + non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); return; } @@ -1149,7 +1155,8 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) if (symcount == 0) { - non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); + if (!quiet) + non_fatal (_("%s: no symbols"), bfd_get_filename (abfd)); return; } @@ -1776,6 +1783,9 @@ main (int argc, char **argv) case OPTION_WITH_SYMBOL_VERSIONS: /* Ignored for backward compatibility. */ break; + case OPTION_QUIET: + quiet = 1; + break; case 'D': dynamic = 1; break; -- 2.30.2