From 1dada9c5d3ceefca8e97165ee8c07882407afde8 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Sun, 21 Nov 1999 11:37:21 +0000 Subject: [PATCH] Overhaul --help output --- binutils/ChangeLog | 12 +++ binutils/binutils.texi | 39 ++++++--- binutils/objdump.c | 221 ++++++++++++++++++++++++++++++------------------- 3 files changed, 176 insertions(+), 96 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index bf9f27b..ae0b27c 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,15 @@ +1999-11-21 Nick Clifton + + * objdump.c (usage): Overhaul output: One line per switch. + Textual description of each switch. Distinguish between + optional switches and required switches. + (long_options): Add 'g', 'G' and 'z' short options. + (main): Distinguish between optional switches and required + switches. + + * binutils.texi: Add -g -G and -z short options for + --debugging, --stabs and --disassemble-zeroes. + 1999-11-03 Nick Clifton * dlltool.c (flush_page): Clip short values to prevent warnings diff --git a/binutils/binutils.texi b/binutils/binutils.texi index c6f872d..d21f0da 100644 --- a/binutils/binutils.texi +++ b/binutils/binutils.texi @@ -1157,25 +1157,37 @@ Show a summary of the options to @code{objcopy}. @smallexample objdump [ -a | --archive-headers ] - [ -b @var{bfdname} | --target=@var{bfdname} ] [ --debugging ] - [ -C | --demangle ] [ -d | --disassemble ] - [ -D | --disassemble-all ] [ --disassemble-zeroes ] + [ -b @var{bfdname} | --target=@var{bfdname} ] + [ -C | --demangle ] + [ -d | --disassemble ] + [ -D | --disassemble-all ] + [ -z | --disassemble-zeroes ] [ -EB | -EL | --endian=@{big | little @} ] [ -f | --file-headers ] - [ -h | --section-headers | --headers ] [ -i | --info ] + [ -g | --debugging ] + [ -h | --section-headers | --headers ] + [ -i | --info ] [ -j @var{section} | --section=@var{section} ] - [ -l | --line-numbers ] [ -S | --source ] + [ -l | --line-numbers ] + [ -S | --source ] [ -m @var{machine} | --architecture=@var{machine} ] [ -M @var{options} | --disassembler-options=@var{options}] [ -p | --private-headers ] - [ -r | --reloc ] [ -R | --dynamic-reloc ] - [ -s | --full-contents ] [ --stabs ] - [ -t | --syms ] [ -T | --dynamic-syms ] [ -x | --all-headers ] - [ -w | --wide ] [ --start-address=@var{address} ] + [ -r | --reloc ] + [ -R | --dynamic-reloc ] + [ -s | --full-contents ] + [ -G | --stabs ] + [ -t | --syms ] + [ -T | --dynamic-syms ] + [ -x | --all-headers ] + [ -w | --wide ] + [ --start-address=@var{address} ] [ --stop-address=@var{address} ] - [ --prefix-addresses] [ --[no-]show-raw-insn ] + [ --prefix-addresses] + [ --[no-]show-raw-insn ] [ --adjust-vma=@var{offset} ] - [ --version ] [ --help ] + [ -V | --version ] + [ -H | --help ] @var{objfile}@dots{} @end smallexample @@ -1190,7 +1202,8 @@ specify archives, @code{objdump} shows information on each of the member object files. The long and short forms of options, shown here as alternatives, are -equivalent. At least one option besides @samp{-l} must be given. +equivalent. At least one option from the list +@samp{-a,-d,-D,-f,-g,-G,-h,-H,-p,-r,-R,-S,-t,-T,-V,-x} must be given. @table @code @item -a @@ -1236,6 +1249,7 @@ Besides removing any initial underscore prepended by the system, this makes C++ function names readable. @xref{c++filt}, for more information on demangling. +@item -G @item --debugging Display debugging information. This attempts to parse debugging information stored in the file and print it out using a C like syntax. @@ -1382,6 +1396,7 @@ in symbolic form. This is the default except when When disassembling instructions, do not print the instruction bytes. This is the default when @code{--prefix-addresses} is used. +@item -G @item --stabs @cindex stab @cindex .stab diff --git a/binutils/objdump.c b/binutils/objdump.c index 71bb65f..44c92e7 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -225,23 +225,50 @@ usage (stream, status) FILE *stream; int status; { + fprintf (stream, _("Usage: %s file(s)\n"), program_name); + fprintf (stream, _(" At least one of the following switches must be given:\n")); fprintf (stream, _("\ -Usage: %s [-ahifCdDprRtTxsSlw] [-b bfdname] [-m machine] \n\ - [-j section-name] [-M disassembler-options]\n\ - [--archive-headers] [--target=bfdname] [--debugging] [--disassemble]\n\ - [--disassemble-all] [--disassemble-zeroes] [--file-headers]\n\ - [--section-headers] [--headers]\n\ - [--info] [--section=section-name] [--line-numbers] [--source]\n"), - program_name); - fprintf (stream, _("\ - [--architecture=machine] [--reloc] [--full-contents] [--stabs]\n\ - [--syms] [--all-headers] [--dynamic-syms] [--dynamic-reloc]\n\ - [--wide] [--version] [--help] [--private-headers]\n\ - [--start-address=addr] [--stop-address=addr]\n\ - [--prefix-addresses] [--[no-]show-raw-insn] [--demangle]\n\ - [--adjust-vma=offset] [-EB|-EL] [--endian={big|little}] objfile...\n\ -at least one option besides -l (--line-numbers) must be given\n")); - list_supported_targets (program_name, stream); + -a --archive-headers Display archive header information\n\ + -f --file-headers Display the contents of the overall file header\n\ + -p --private-headers Display object format specific file header contents\n\ + -h --[section-]headers Display the contents of the section headers\n\ + -x --all-headers Display the contents of all headers\n\ + -d --disassemble Display assembler contents of executable sections\n\ + -D --disassemble-all Display assembler contents of all sections\n\ + -S --source Intermix source code with disassembly\n\ + -s --full-contents Display the full contents of all sections requested\n\ + -g --debugging Display debug information in object file\n\ + -G --stabs Display the STABS contents of an ELF format file\n\ + -t --syms Display the contents of the symbol table(s)\n\ + -T --dynamic-syms Display the contents of the dynamic symbol table\n\ + -r --reloc Display the relocation entries in the file\n\ + -R --dynamic-reloc Display the dynamic relocation entries in the file\n\ + -V --version Display this program's version number\n\ + -i --info List object formats and architectures supported\n\ + -H --help Display this information\n\ +")); + if (status != 2) + { + fprintf (stream, _("\n The following switches are optional:\n")); + fprintf (stream, _("\ + -b --target Specify the target object format as \n\ + -m --architecture Specify the target architecture as \n\ + -j --section Only display information for section \n\ + -M --disassembler-options Pass text on to the disassembler\n\ + -EB --endian=big Assume big endian format when disassembling\n\ + -EL --endian=little Assume little endian format when disassembling\n\ + -l --line-numbers Include line numbers and filenames in output\n\ + -C --demangle Decode mangled/processed symbol names\n\ + -w --wide Format output for more than 80 columns\n\ + -z --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n\ + --start-address Only process data whoes address is >= \n\ + --stop-address Only process data whoes address is <= \n\ + --prefix-addresses Print complete address alongside disassembly\n\ + --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\ + --adjust-vma Add to all displayed section addresses\n\ +\n")); + list_supported_targets (program_name, stream); + } if (status == 0) fprintf (stream, _("Report bugs to bug-gnu-utils@gnu.org\n")); exit (status); @@ -261,12 +288,12 @@ static struct option long_options[]= {"private-headers", no_argument, NULL, 'p'}, {"architecture", required_argument, NULL, 'm'}, {"archive-headers", no_argument, NULL, 'a'}, - {"debugging", no_argument, &dump_debugging, 1}, - {"demangle", no_argument, &do_demangle, 1}, + {"debugging", no_argument, NULL, 'g'}, + {"demangle", no_argument, NULL, 'C'}, {"disassemble", no_argument, NULL, 'd'}, {"disassemble-all", no_argument, NULL, 'D'}, {"disassembler-options", required_argument, NULL, 'M'}, - {"disassemble-zeroes", no_argument, &disassemble_zeroes, 1}, + {"disassemble-zeroes", no_argument, NULL, 'z'}, {"dynamic-reloc", no_argument, NULL, 'R'}, {"dynamic-syms", no_argument, NULL, 'T'}, {"endian", required_argument, NULL, OPTION_ENDIAN}, @@ -283,13 +310,13 @@ static struct option long_options[]= {"section-headers", no_argument, NULL, 'h'}, {"show-raw-insn", no_argument, &show_raw_insn, 1}, {"source", no_argument, NULL, 'S'}, - {"stabs", no_argument, &dump_stab_section_info, 1}, + {"stabs", no_argument, NULL, 'G'}, {"start-address", required_argument, NULL, OPTION_START_ADDRESS}, {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS}, {"syms", no_argument, NULL, 't'}, {"target", required_argument, NULL, 'b'}, - {"version", no_argument, &show_version, 1}, - {"wide", no_argument, &wide_output, 'w'}, + {"version", no_argument, NULL, 'V'}, + {"wide", no_argument, NULL, 'w'}, {0, no_argument, 0, 0} }; @@ -2767,12 +2794,10 @@ main (argc, argv) bfd_init (); set_default_bfd_target (); - while ((c = getopt_long (argc, argv, "pib:m:M:VCdDlfahrRtTxsSj:wE:", + while ((c = getopt_long (argc, argv, "pib:m:M:VCdDlfahHrRtTxsSj:wE:zgG", long_options, (int *) 0)) != EOF) { - if (c != 'l' && c != OPTION_START_ADDRESS && c != OPTION_STOP_ADDRESS) - seenflag = true; switch (c) { case 0: @@ -2787,103 +2812,133 @@ main (argc, argv) only = optarg; break; case 'l': - with_line_numbers = 1; + with_line_numbers = true; break; case 'b': target = optarg; break; + case 'C': + do_demangle = true; + break; + case 'w': + wide_output = true; + break; + case OPTION_ADJUST_VMA: + adjust_section_vma = parse_vma (optarg, "--adjust-vma"); + break; + case OPTION_START_ADDRESS: + start_address = parse_vma (optarg, "--start-address"); + break; + case OPTION_STOP_ADDRESS: + stop_address = parse_vma (optarg, "--stop-address"); + break; + case 'E': + if (strcmp (optarg, "B") == 0) + endian = BFD_ENDIAN_BIG; + else if (strcmp (optarg, "L") == 0) + endian = BFD_ENDIAN_LITTLE; + else + { + fprintf (stderr, _("%s: unrecognized -E option\n"), + program_name); + usage (stderr, 1); + } + break; + case OPTION_ENDIAN: + if (strncmp (optarg, "big", strlen (optarg)) == 0) + endian = BFD_ENDIAN_BIG; + else if (strncmp (optarg, "little", strlen (optarg)) == 0) + endian = BFD_ENDIAN_LITTLE; + else + { + fprintf (stderr, _("%s: unrecognized --endian type `%s'\n"), + program_name, optarg); + usage (stderr, 1); + } + break; + case 'f': dump_file_header = true; + seenflag = true; break; case 'i': formats_info = true; + seenflag = true; break; case 'p': - dump_private_headers = 1; + dump_private_headers = true; + seenflag = true; break; case 'x': - dump_private_headers = 1; - dump_symtab = 1; - dump_reloc_info = 1; + dump_private_headers = true; + dump_symtab = true; + dump_reloc_info = true; dump_file_header = true; - dump_ar_hdrs = 1; - dump_section_headers = 1; + dump_ar_hdrs = true; + dump_section_headers = true; + seenflag = true; break; case 't': - dump_symtab = 1; + dump_symtab = true; + seenflag = true; break; case 'T': - dump_dynamic_symtab = 1; - break; - case 'C': - do_demangle = 1; + dump_dynamic_symtab = true; + seenflag = true; break; case 'd': disassemble = true; + seenflag = true; + break; + case 'z': + disassemble_zeroes = true; break; case 'D': - disassemble = disassemble_all = true; + disassemble = true; + disassemble_all = true; + seenflag = true; break; case 'S': disassemble = true; with_source_code = true; + seenflag = true; + break; + case 'g': + dump_debugging = 1; + seenflag = true; + break; + case 'G': + dump_stab_section_info = true; + seenflag = true; break; case 's': - dump_section_contents = 1; + dump_section_contents = true; + seenflag = true; break; case 'r': - dump_reloc_info = 1; + dump_reloc_info = true; + seenflag = true; break; case 'R': - dump_dynamic_reloc_info = 1; + dump_dynamic_reloc_info = true; + seenflag = true; break; case 'a': - dump_ar_hdrs = 1; + dump_ar_hdrs = true; + seenflag = true; break; case 'h': - dump_section_headers = 1; + dump_section_headers = true; + seenflag = true; break; case 'H': usage (stdout, 0); + seenflag = true; case 'V': - show_version = 1; - break; - case 'w': - wide_output = 1; - break; - case OPTION_ADJUST_VMA: - adjust_section_vma = parse_vma (optarg, "--adjust-vma"); - break; - case OPTION_START_ADDRESS: - start_address = parse_vma (optarg, "--start-address"); - break; - case OPTION_STOP_ADDRESS: - stop_address = parse_vma (optarg, "--stop-address"); - break; - case 'E': - if (strcmp (optarg, "B") == 0) - endian = BFD_ENDIAN_BIG; - else if (strcmp (optarg, "L") == 0) - endian = BFD_ENDIAN_LITTLE; - else - { - fprintf (stderr, _("%s: unrecognized -E option\n"), - program_name); - usage (stderr, 1); - } - break; - case OPTION_ENDIAN: - if (strncmp (optarg, "big", strlen (optarg)) == 0) - endian = BFD_ENDIAN_BIG; - else if (strncmp (optarg, "little", strlen (optarg)) == 0) - endian = BFD_ENDIAN_LITTLE; - else - { - fprintf (stderr, _("%s: unrecognized --endian type `%s'\n"), - program_name, optarg); - usage (stderr, 1); - } + show_version = true; + seenflag = true; break; + default: usage (stderr, 1); } @@ -2893,12 +2948,10 @@ main (argc, argv) print_version ("objdump"); if (seenflag == false) - usage (stderr, 1); + usage (stderr, 2); if (formats_info) - { - display_info (); - } + display_info (); else { if (optind == argc) -- 2.7.4