From d6249f5f1cfc5c37bf026a90a031e8c6463f169b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 27 May 2021 10:21:59 +0930 Subject: [PATCH] readelf and objdump help Splitting up help strings makes it more likely that at least some of the help translation survives adding new options. * readelf.c (parse_args): Call dwarf_select_sections_all on --debug-dump without optarg. (usage): Associate -w and --debug-dump options closely. Split up help message. Remove extraneous blank lines around ctf help. * objdump.c (usage): Similarly. --- binutils/ChangeLog | 9 ++ binutils/objdump.c | 207 +++++++++++++++++++++++++++++---------------- binutils/readelf.c | 170 ++++++++++++++++++++++++------------- 3 files changed, 254 insertions(+), 132 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index a0f77e97e01..cd7bd6ef05d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +2021-05-29 Alan Modra + + * readelf.c (parse_args): Call dwarf_select_sections_all on + --debug-dump without optarg. + (usage): Associate -w and --debug-dump options closely. + Split up help message. Remove extraneous blank lines around + ctf help. + * objdump.c (usage): Similarly. + 2021-05-29 Maciej W. Rozycki * testsuite/binutils-all/mips/mips-xpa-virt-1.d: Correct CFC0 diff --git a/binutils/objdump.c b/binutils/objdump.c index 39b5793bc2e..977f8172092 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -213,105 +213,164 @@ usage (FILE *stream, int status) fprintf (stream, _(" Display information from object .\n")); fprintf (stream, _(" At least one of the following switches must be given:\n")); fprintf (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\ - -P, --private=OPT,OPT... Display object format specific 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\ - --disassemble= Display assembler contents from \n\ - -S, --source Intermix source code with disassembly\n\ - --source-comment[=] Prefix lines of source code with \n\ - -s, --full-contents Display the full contents of all sections requested\n\ - -g, --debugging Display debug information in object file\n\ - -e, --debugging-tags Display debug information using ctags style\n\ - -G, --stabs Display (in raw form) any STABS info in the file\n\ - -W[lLiaprmfFsoORtUuTgAck] or\n\ - --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n\ - =frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,\n\ - =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n\ - =addr,=cu_index,=links]\n\ - Display DWARF info in the file\n\ -")); + -a, --archive-headers Display archive header information\n")); + fprintf (stream, _("\ + -f, --file-headers Display the contents of the overall file header\n")); + fprintf (stream, _("\ + -p, --private-headers Display object format specific file header contents\n")); + fprintf (stream, _("\ + -P, --private=OPT,OPT... Display object format specific contents\n")); + fprintf (stream, _("\ + -h, --[section-]headers Display the contents of the section headers\n")); + fprintf (stream, _("\ + -x, --all-headers Display the contents of all headers\n")); + fprintf (stream, _("\ + -d, --disassemble Display assembler contents of executable sections\n")); + fprintf (stream, _("\ + -D, --disassemble-all Display assembler contents of all sections\n")); + fprintf (stream, _("\ + --disassemble= Display assembler contents from \n")); + fprintf (stream, _("\ + -S, --source Intermix source code with disassembly\n")); + fprintf (stream, _("\ + --source-comment[=] Prefix lines of source code with \n")); + fprintf (stream, _("\ + -s, --full-contents Display the full contents of all sections requested\n")); + fprintf (stream, _("\ + -g, --debugging Display debug information in object file\n")); + fprintf (stream, _("\ + -e, --debugging-tags Display debug information using ctags style\n")); + fprintf (stream, _("\ + -G, --stabs Display (in raw form) any STABS info in the file\n")); + fprintf (stream, _("\ + -W, --dwarf[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n\ + f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n\ + m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n\ + s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n\ + U/=trace_info]\n\ + Display the contents of DWARF debug sections\n")); + fprintf (stream, _("\ + -Wk,--dwarf=links Display the contents of sections that link to\n\ + separate debuginfo files\n")); #if DEFAULT_FOR_FOLLOW_LINKS fprintf (stream, _("\ - -WK,--dwarf=follow-links Follow links to separate debug info files (default)\n\ - -WN,--dwarf=no-follow-links Do not follow links to separate debug info files\n\ -")); + -WK,--dwarf=follow-links\ + Follow links to separate debug info files (default)\n")); + fprintf (stream, _("\ + -WN,--dwarf=no-follow-links\ + Do not follow links to separate debug info files\n")); #else fprintf (stream, _("\ - -WK,--dwarf=follow-links Follow links to separate debug info files\n\ - -WN,--dwarf=no-follow-links Do not follow links to separate debug info files (default)\n\ -")); + -WK,--dwarf=follow-links\ + Follow links to separate debug info files\n")); + fprintf (stream, _("\ + -WN,--dwarf=no-follow-links\ + Do not follow links to separate debug info files\n\ + (default)\n")); #endif fprintf (stream, _("\ - -L, --process-links Display the contents of non-debug sections in separate debuginfo files.\n\ -")); + -L, --process-links Display the contents of non-debug sections in\n\ + separate debuginfo files. (Implies -WK)\n")); #ifdef ENABLE_LIBCTF fprintf (stream, _("\ - --ctf=SECTION Display CTF info from SECTION\n\ -")); + --ctf=SECTION Display CTF info from SECTION\n")); #endif fprintf (stream, _("\ - -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\ - @ Read options from \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\ -")); + -t, --syms Display the contents of the symbol table(s)\n")); + fprintf (stream, _("\ + -T, --dynamic-syms Display the contents of the dynamic symbol table\n")); + fprintf (stream, _("\ + -r, --reloc Display the relocation entries in the file\n")); + fprintf (stream, _("\ + -R, --dynamic-reloc Display the dynamic relocation entries in the file\n")); + fprintf (stream, _("\ + @ Read options from \n")); + fprintf (stream, _("\ + -v, --version Display this program's version number\n")); + fprintf (stream, _("\ + -i, --info List object formats and architectures supported\n")); + fprintf (stream, _("\ + -H, --help Display this information\n")); + if (status != 2) { const struct objdump_private_desc * const *desc; fprintf (stream, _("\n The following switches are optional:\n")); fprintf (stream, _("\ - -b, --target=BFDNAME Specify the target object format as BFDNAME\n\ - -m, --architecture=MACHINE Specify the target architecture as MACHINE\n\ - -j, --section=NAME Only display information for section NAME\n\ - -M, --disassembler-options=OPT Pass text OPT 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\ - --file-start-context Include context from start of file (with -S)\n\ - -I, --include=DIR Add DIR to search list for source files\n\ - -l, --line-numbers Include line numbers and filenames in output\n\ - -F, --file-offsets Include file offsets when displaying information\n\ + -b, --target=BFDNAME Specify the target object format as BFDNAME\n")); + fprintf (stream, _("\ + -m, --architecture=MACHINE Specify the target architecture as MACHINE\n")); + fprintf (stream, _("\ + -j, --section=NAME Only display information for section NAME\n")); + fprintf (stream, _("\ + -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n")); + fprintf (stream, _("\ + -EB --endian=big Assume big endian format when disassembling\n")); + fprintf (stream, _("\ + -EL --endian=little Assume little endian format when disassembling\n")); + fprintf (stream, _("\ + --file-start-context Include context from start of file (with -S)\n")); + fprintf (stream, _("\ + -I, --include=DIR Add DIR to search list for source files\n")); + fprintf (stream, _("\ + -l, --line-numbers Include line numbers and filenames in output\n")); + fprintf (stream, _("\ + -F, --file-offsets Include file offsets when displaying information\n")); + fprintf (stream, _("\ -C, --demangle[=STYLE] Decode mangled/processed symbol names\n\ The STYLE, if specified, can be `auto', `gnu',\n\ `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\ - or `gnat'\n\ - --recurse-limit Enable a limit on recursion whilst demangling. [Default]\n\ - --no-recurse-limit Disable a limit on recursion whilst demangling\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=ADDR Only process data whose address is >= ADDR\n\ - --stop-address=ADDR Only process data whose address is < ADDR\n\ - --no-addresses Do not print address alongside disassembly\n\ - --prefix-addresses Print complete address alongside disassembly\n\ - --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\ - --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n\ - --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\ - --special-syms Include special symbols in symbol dumps\n\ - --inlines Print all inlines for source line (with -l)\n\ - --prefix=PREFIX Add PREFIX to absolute paths for -S\n\ + or `gnat'\n")); + fprintf (stream, _("\ + --recurse-limit Enable a limit on recursion whilst demangling\n\ + (default)\n")); + fprintf (stream, _("\ + --no-recurse-limit Disable a limit on recursion whilst demangling\n")); + fprintf (stream, _("\ + -w, --wide Format output for more than 80 columns\n")); + fprintf (stream, _("\ + -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n")); + fprintf (stream, _("\ + --start-address=ADDR Only process data whose address is >= ADDR\n")); + fprintf (stream, _("\ + --stop-address=ADDR Only process data whose address is < ADDR\n")); + fprintf (stream, _("\ + --no-addresses Do not print address alongside disassembly\n")); + fprintf (stream, _("\ + --prefix-addresses Print complete address alongside disassembly\n")); + fprintf (stream, _("\ + --[no-]show-raw-insn Display hex alongside symbolic disassembly\n")); + fprintf (stream, _("\ + --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n")); + fprintf (stream, _("\ + --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n")); + fprintf (stream, _("\ + --special-syms Include special symbols in symbol dumps\n")); + fprintf (stream, _("\ + --inlines Print all inlines for source line (with -l)\n")); + fprintf (stream, _("\ + --prefix=PREFIX Add PREFIX to absolute paths for -S\n")); + fprintf (stream, _("\ --prefix-strip=LEVEL Strip initial directory names for -S\n")); fprintf (stream, _("\ - --dwarf-depth=N Do not display DIEs at depth N or greater\n\ - --dwarf-start=N Display DIEs starting with N, at the same depth\n\ - or deeper\n\ - --dwarf-check Make additional dwarf internal consistency checks.\n")); + --dwarf-depth=N Do not display DIEs at depth N or greater\n")); + fprintf (stream, _("\ + --dwarf-start=N Display DIEs starting at offset N\n")); + fprintf (stream, _("\ + --dwarf-check Make additional dwarf consistency checks.\n")); #ifdef ENABLE_LIBCTF fprintf (stream, _("\ - --ctf-parent=SECTION Use SECTION as the CTF parent\n")); + --ctf-parent=SECTION Use SECTION as the CTF parent\n")); #endif fprintf (stream, _("\ - --visualize-jumps Visualize jumps by drawing ASCII art lines\n\ - --visualize-jumps=color Use colors in the ASCII art\n\ - --visualize-jumps=extended-color Use extended 8-bit color codes\n\ + --visualize-jumps Visualize jumps by drawing ASCII art lines\n")); + fprintf (stream, _("\ + --visualize-jumps=color Use colors in the ASCII art\n")); + fprintf (stream, _("\ + --visualize-jumps=extended-color\n\ + Use extended 8-bit color codes\n")); + fprintf (stream, _("\ --visualize-jumps=off Disable jump visualization\n\n")); list_supported_targets (program_name, stream); diff --git a/binutils/readelf.c b/binutils/readelf.c index d773b9a4931..ebb93b7dc1a 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -4613,77 +4613,123 @@ usage (FILE * stream) { fprintf (stream, _("Usage: readelf elf-file(s)\n")); fprintf (stream, _(" Display information about the contents of ELF format files\n")); - fprintf (stream, _(" Options are:\n\ - -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n\ - -h --file-header Display the ELF file header\n\ - -l --program-headers Display the program headers\n\ - --segments An alias for --program-headers\n\ - -S --section-headers Display the sections' header\n\ - --sections An alias for --section-headers\n\ - -g --section-groups Display the section groups\n\ - -t --section-details Display the section details\n\ - -e --headers Equivalent to: -h -l -S\n\ - -s --syms Display the symbol table\n\ - --symbols An alias for --syms\n\ - --dyn-syms Display the dynamic symbol table\n\ - --lto-syms Display LTO symbol tables\n\ + fprintf (stream, _(" Options are:\n")); + fprintf (stream, _("\ + -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n")); + fprintf (stream, _("\ + -h --file-header Display the ELF file header\n")); + fprintf (stream, _("\ + -l --program-headers Display the program headers\n")); + fprintf (stream, _("\ + --segments An alias for --program-headers\n")); + fprintf (stream, _("\ + -S --section-headers Display the sections' header\n")); + fprintf (stream, _("\ + --sections An alias for --section-headers\n")); + fprintf (stream, _("\ + -g --section-groups Display the section groups\n")); + fprintf (stream, _("\ + -t --section-details Display the section details\n")); + fprintf (stream, _("\ + -e --headers Equivalent to: -h -l -S\n")); + fprintf (stream, _("\ + -s --syms Display the symbol table\n")); + fprintf (stream, _("\ + --symbols An alias for --syms\n")); + fprintf (stream, _("\ + --dyn-syms Display the dynamic symbol table\n")); + fprintf (stream, _("\ + --lto-syms Display LTO symbol tables\n")); + fprintf (stream, _("\ --sym-base=[0|8|10|16] \n\ Force base for symbol sizes. The options are \n\ - mixed (the default), octal, decimal, hexadecimal.\n\ + mixed (the default), octal, decimal, hexadecimal.\n")); + fprintf (stream, _("\ -C --demangle[=STYLE] Decode low-level symbol names into user-level names\n\ The STYLE, if specified, can be `auto' (the default),\n\ `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\ - or `gnat'\n\ - --no-demangle Do not demangle low-level symbol names. (This is the default)\n\ - --recurse-limit Enable a demangling recursion limit. (This is the default)\n\ - --no-recurse-limit Disable a demangling recursion limit\n\ - -n --notes Display the core notes (if present)\n\ - -r --relocs Display the relocations (if present)\n\ - -u --unwind Display the unwind info (if present)\n\ - -d --dynamic Display the dynamic section (if present)\n\ - -V --version-info Display the version sections (if present)\n\ - -A --arch-specific Display architecture specific information (if any)\n\ - -c --archive-index Display the symbol/file index in an archive\n\ - -D --use-dynamic Use the dynamic section info when displaying symbols\n\ - -L --lint|--enable-checks Display warning messages for possible problems\n\ + or `gnat'\n")); + fprintf (stream, _("\ + --no-demangle Do not demangle low-level symbol names. (default)\n")); + fprintf (stream, _("\ + --recurse-limit Enable a demangling recursion limit. (default)\n")); + fprintf (stream, _("\ + --no-recurse-limit Disable a demangling recursion limit\n")); + fprintf (stream, _("\ + -n --notes Display the core notes (if present)\n")); + fprintf (stream, _("\ + -r --relocs Display the relocations (if present)\n")); + fprintf (stream, _("\ + -u --unwind Display the unwind info (if present)\n")); + fprintf (stream, _("\ + -d --dynamic Display the dynamic section (if present)\n")); + fprintf (stream, _("\ + -V --version-info Display the version sections (if present)\n")); + fprintf (stream, _("\ + -A --arch-specific Display architecture specific information (if any)\n")); + fprintf (stream, _("\ + -c --archive-index Display the symbol/file index in an archive\n")); + fprintf (stream, _("\ + -D --use-dynamic Use the dynamic section info when displaying symbols\n")); + fprintf (stream, _("\ + -L --lint|--enable-checks\n\ + Display warning messages for possible problems\n")); + fprintf (stream, _("\ -x --hex-dump=\n\ - Dump the contents of section as bytes\n\ + Dump the contents of section as bytes\n")); + fprintf (stream, _("\ -p --string-dump=\n\ - Dump the contents of section as strings\n\ + Dump the contents of section as strings\n")); + fprintf (stream, _("\ -R --relocated-dump=\n\ - Dump the contents of section as relocated bytes\n\ - -z --decompress Decompress section before dumping it\n\ - -w[lLiaprmfFsOoRtgUuTAc] or\n\ - --debug-dump=[rawline,decodedline,info,abbrev,pubnames,aranges,macro,frames,\n\ - frames-interp,str,str-offsets,loc,Ranges,pubtypes,gdb_index,\n\ - trace_info,trace_abbrev,trace_aranges,addr,cu_index]\n\ - Display the contents of DWARF debug sections\n\ - -wk,--debug-dump=links Display the contents of sections that link to separate debuginfo files\n\ - -P,--process-links Display the contents of non-debug sections in separate debuginfo files. (Implies -wK)\n")); + Dump the relocated contents of section \n")); + fprintf (stream, _("\ + -z --decompress Decompress section before dumping it\n")); + fprintf (stream, _("\ + -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,\n\ + f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,\n\ + m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,\n\ + s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,\n\ + U/=trace_info]\n\ + Display the contents of DWARF debug sections\n")); + fprintf (stream, _("\ + -wk --debug-dump=links Display the contents of sections that link to separate\n\ + debuginfo files\n")); + fprintf (stream, _("\ + -P --process-links Display the contents of non-debug sections in separate\n\ + debuginfo files. (Implies -wK)\n")); #if DEFAULT_FOR_FOLLOW_LINKS fprintf (stream, _("\ - -wK,--debug-dump=follow-links Follow links to separate debug info files (default)\n\ - -wN,--debug-dump=no-follow-links Do not follow links to separate debug info files\n\ -")); + -wK --debug-dump=follow-links\n\ + Follow links to separate debug info files (default)\n")); + fprintf (stream, _("\ + -wN --debug-dump=no-follow-links\n\ + Do not follow links to separate debug info files\n")); #else fprintf (stream, _("\ - -wK,--debug-dump=follow-links Follow links to separate debug info files\n\ - -wN,--debug-dump=no-follow-links Do not follow links to separate debug info files (default)\n\ -")); + -wK --debug-dump=follow-links\n\ + Follow links to separate debug info files\n")); + fprintf (stream, _("\ + -wN --debug-dump=no-follow-links\n\ + Do not follow links to separate debug info files\n\ + (default)\n")); #endif fprintf (stream, _("\ - --dwarf-depth=N Do not display DIEs at depth N or greater\n\ - --dwarf-start=N Display DIEs starting with N, at the same depth\n\ - or deeper\n")); + --dwarf-depth=N Do not display DIEs at depth N or greater\n")); + fprintf (stream, _("\ + --dwarf-start=N Display DIEs starting at offset N\n")); #ifdef ENABLE_LIBCTF fprintf (stream, _("\ - --ctf= Display CTF info from section \n\ + --ctf= Display CTF info from section \n")); + fprintf (stream, _("\ --ctf-parent=\n\ - Use section as the CTF parent\n\n\ + Use section as the CTF parent\n")); + fprintf (stream, _("\ --ctf-symbols=\n\ - Use section as the CTF external symtab\n\n\ + Use section as the CTF external symtab\n")); + fprintf (stream, _("\ --ctf-strings=\n\ - Use section as the CTF external strtab\n\n")); + Use section as the CTF external strtab\n")); #endif #ifdef SUPPORT_DISASSEMBLY @@ -4692,11 +4738,16 @@ usage (FILE * stream) Disassemble the contents of section \n")); #endif fprintf (stream, _("\ - -I --histogram Display histogram of bucket list lengths\n\ - -W --wide Allow output width to exceed 80 characters\n\ - -T --silent-truncation If a symbol name is truncated, do not add a suffix [...]\n\ - @ Read options from \n\ - -H --help Display this information\n\ + -I --histogram Display histogram of bucket list lengths\n")); + fprintf (stream, _("\ + -W --wide Allow output width to exceed 80 characters\n")); + fprintf (stream, _("\ + -T --silent-truncation If a symbol name is truncated, do not add [...] suffix\n")); + fprintf (stream, _("\ + @ Read options from \n")); + fprintf (stream, _("\ + -H --help Display this information\n")); + fprintf (stream, _("\ -v --version Display the version number of readelf\n")); if (REPORT_BUGS_TO[0] && stream == stdout) @@ -4899,7 +4950,10 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv) case OPTION_DEBUG_DUMP: do_dump = true; if (optarg == NULL) - do_debugging = true; + { + do_debugging = true; + dwarf_select_sections_all (); + } else { do_debugging = false; -- 2.30.2