diff options
author | David MacKenzie <djm@cygnus> | 1993-04-29 06:45:39 +0000 |
---|---|---|
committer | David MacKenzie <djm@cygnus> | 1993-04-29 06:45:39 +0000 |
commit | d244269886c8448239b88126983243481eeb71b3 (patch) | |
tree | feb10d9a6ba6f8946d0ff0bbdc32825f13b718f5 /binutils/nm.c | |
parent | b703c078e291a2deb52906c3fbb5fe9fceebf6bc (diff) | |
download | gdb-d244269886c8448239b88126983243481eeb71b3.zip gdb-d244269886c8448239b88126983243481eeb71b3.tar.gz gdb-d244269886c8448239b88126983243481eeb71b3.tar.bz2 |
Clean up usage messages and option parsers.
Add program name to some error messages.
Diffstat (limited to 'binutils/nm.c')
-rw-r--r-- | binutils/nm.c | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/binutils/nm.c b/binutils/nm.c index 8a9b642..4fe3e58 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -28,13 +28,14 @@ static boolean display_file PARAMS ((char *filename)); static void -do_one_rel_file PARAMS ((bfd *file)); +do_one_rel_file PARAMS ((bfd* file, bfd *archive)); static unsigned int filter_symbols PARAMS ((bfd *file, asymbol **syms, unsigned long symcount)); static void -print_symbols PARAMS ((bfd *file, asymbol **syms, unsigned long symcount)); +print_symbols PARAMS ((bfd *file, asymbol **syms, unsigned long symcount, + bfd *archive)); static void print_symdef_entry PARAMS ((bfd * abfd)); @@ -62,14 +63,14 @@ extern int print_version; struct option long_options[] = { {"debug-syms", no_argument, &print_debug_syms, 1}, {"extern-only", no_argument, &external_only, 1}, - {"no-sort", no_argument, &no_sort, 1}, + {"no-sort", no_argument, &no_sort, 1}, {"numeric-sort", no_argument, &sort_numerically, 1}, {"print-armap", no_argument, &print_armap, 1}, {"print-file-name", no_argument, &file_on_each_line, 1}, {"reverse-sort", no_argument, &reverse_sort, 1}, - {"target", optional_argument, (int *)NULL, 0}, + {"target", optional_argument, 0, 200}, {"undefined-only", no_argument, &undefined_only, 1}, - {"version", no_argument, &show_version, 1}, + {"version", no_argument, &show_version, 1}, {0, no_argument, 0, 0} }; @@ -80,9 +81,12 @@ int show_names = 0; void usage () { - fprintf(stderr, "nm %s\nUsage: %s [-agnoprsuV] filename...\n", + fprintf(stderr, "nm %s\n\ +Usage: %s [-agnoprsuV] [--debug-syms] [--extern-only] [--print-armap]\n\ + [--print-file-name] [--numeric-sort] [--no-sort] [--reverse-sort]\n\ + [--undefined-only] [--target=bfdname] [file...]\n", program_version, program_name); - exit(0); + exit(1); } int @@ -91,13 +95,12 @@ main (argc, argv) char **argv; { int c; /* sez which option char */ - int option_index = 0; /* used by getopt and ignored by us */ int retval; program_name = *argv; bfd_init(); - while ((c = getopt_long(argc, argv, "agnoprsuV", long_options, &option_index)) != EOF) { + while ((c = getopt_long(argc, argv, "agnoprsuvABV", long_options, (int *) 0)) != EOF) { switch (c) { case 'a': print_debug_syms = 1; break; case 'g': external_only = 1; break; @@ -107,14 +110,18 @@ main (argc, argv) case 'r': reverse_sort = 1; break; case 's': print_armap = 1; break; case 'u': undefined_only = 1; break; + case 'v': case 'V': show_version = 1; break; - case 0: - if (!strcmp("target",(long_options[option_index]).name)) { - target = optarg; - } + /* For MIPS compatibility, -A selects System V style output, -B + selects BSD style output. These are not implemented. When + they are, they should be added to usage (). */ + case 'A': break; + case 'B': break; - break; /* we've been given a long option */ + case 200: /* --target */ + target = optarg; + break; default: usage (); @@ -128,7 +135,7 @@ main (argc, argv) on sucess -- the inverse of the C sense. */ /* OK, all options now parsed. If no filename specified, do a.out. */ - if (option_index == argc) return !display_file ("a.out"); + if (optind == argc) return !display_file ("a.out"); retval = 0; show_names = (argc -optind)>1; @@ -156,7 +163,8 @@ display_file (filename) file = bfd_openr(filename, target); if (file == NULL) { - fprintf (stderr, "\n%s: can't open '%s'.\n", program_name, filename); + fprintf (stderr, "%s: ", program_name); + bfd_perror (filename); return false; } @@ -165,16 +173,17 @@ display_file (filename) if (show_names) { printf ("\n%s:\n",filename); } - do_one_rel_file (file); + do_one_rel_file (file, NULL); } else if (bfd_check_format (file, bfd_archive)) { if (!bfd_check_format (file, bfd_archive)) { - fprintf (stderr, "%s: %s: unknown format.\n", program_name, filename); + fprintf (stderr, "%s: %s: unknown format\n", program_name, filename); retval = false; goto closer; } - printf("\n%s:\n", filename); + if (!file_on_each_line) + printf("\n%s:\n", filename); if (print_armap) print_symdef_entry (file); for (;;) { arfile = bfd_openr_next_archived_file (file, arfile); @@ -188,13 +197,14 @@ display_file (filename) if (!bfd_check_format(arfile, bfd_object)) printf("%s: not an object file\n", arfile->filename); else { - printf ("\n%s:\n", arfile->filename); - do_one_rel_file (arfile) ; + if (!file_on_each_line) + printf ("\n%s:\n", arfile->filename); + do_one_rel_file (arfile, file) ; } } } else { - fprintf (stderr, "\n%s: %s: unknown format.\n", program_name, filename); + fprintf (stderr, "\n%s: %s: unknown format\n", program_name, filename); retval = false; } @@ -249,8 +259,9 @@ int (*(sorters[2][2])) PARAMS ((CONST void *, CONST void *)) = { }; static void -do_one_rel_file (abfd) +do_one_rel_file (abfd, archive_bfd) bfd *abfd; + bfd *archive_bfd; /* If non-NULL: archive containing abfd. */ { unsigned int storage; asymbol **syms; @@ -266,7 +277,7 @@ do_one_rel_file (abfd) nosymz: fprintf (stderr, "%s: Symflags set but there are none?\n", bfd_get_filename (abfd)); - exit (1); + return; } syms = (asymbol **) xmalloc (storage); @@ -287,7 +298,7 @@ do_one_rel_file (abfd) if (print_each_filename && !file_on_each_line) printf("\n%s:\n", bfd_get_filename(abfd)); - print_symbols (abfd, syms, symcount); + print_symbols (abfd, syms, symcount, archive_bfd); free (syms); } @@ -315,7 +326,7 @@ filter_symbols (abfd, syms, symcount) } else if (external_only) { keep = ((flags & BSF_GLOBAL) || (sym->section == &bfd_und_section) - || (sym->section == &bfd_com_section)); + || (bfd_is_com_section (sym->section))); } else { keep = 1; } @@ -333,15 +344,20 @@ filter_symbols (abfd, syms, symcount) } static void -print_symbols (abfd, syms, symcount) +print_symbols (abfd, syms, symcount, archive_bfd) bfd *abfd; asymbol **syms; unsigned long symcount; + bfd *archive_bfd; { asymbol **sym = syms, **end = syms + symcount; for (; sym < end; ++sym) { - if (file_on_each_line) printf("%s:", bfd_get_filename(abfd)); + if (file_on_each_line) { + if (archive_bfd) + printf("%s:", bfd_get_filename(archive_bfd)); + printf("%s:", bfd_get_filename(abfd)); + } if (undefined_only) { if ((*sym)->section == &bfd_und_section) |