diff options
author | Mark Wielaard <mark@klomp.org> | 2019-09-03 00:03:22 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2019-09-10 15:45:53 +0200 |
commit | 08986c35d7bee335f447f542918bbbc2bdd638a9 (patch) | |
tree | 3caab495fb05ad5bd1a33b091a608c45e0bea8ac /src/readelf.c | |
parent | b833c731359af12af9f16bcb621b3cdc170eafbc (diff) | |
download | elfutils-08986c35d7bee335f447f542918bbbc2bdd638a9.tar.gz |
readelf: Add --dyn-sym option.
It is already possible to select the symbol table to print by name,
using --symbols=SECTION. This allows printing the dynamic symbol table
with --symbols=.dynsym. binutils readelf allows printing just the
dynamic symbol table by type using --dyn-sym. Add the same option
and document it. Also add a testcase to show --symbols=.dynsym and
--dyn-sym produce the same output.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'src/readelf.c')
-rw-r--r-- | src/readelf.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/readelf.c b/src/readelf.c index 77f9c3a3..5d2b5f43 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -84,6 +84,9 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; /* argp key value for --dwarf-skeleton, non-ascii. */ #define DWARF_SKELETON 257 +/* argp key value for --dyn-syms, non-ascii. */ +#define PRINT_DYNSYM_TABLE 258 + /* Terrible hack for hooking unrelated skeleton/split compile units, see __libdw_link_skel_split in print_debug. */ static bool do_not_close_dwfl = false; @@ -113,6 +116,8 @@ static const struct argp_option options[] = { "sections", 'S', NULL, OPTION_ALIAS | OPTION_HIDDEN, NULL, 0 }, { "symbols", 's', "SECTION", OPTION_ARG_OPTIONAL, N_("Display the symbol table sections"), 0 }, + { "dyn-syms", PRINT_DYNSYM_TABLE, NULL, 0, + N_("Display (only) the dynamic symbol table"), 0 }, { "version-info", 'V', NULL, 0, N_("Display versioning information"), 0 }, { "notes", 'n', "SECTION", OPTION_ARG_OPTIONAL, N_("Display the ELF notes"), 0 }, { "arch-specific", 'A', NULL, 0, @@ -187,6 +192,9 @@ static bool print_section_header; /* True if the symbol table should be printed. */ static bool print_symbol_table; +/* True if (only) the dynsym table should be printed. */ +static bool print_dynsym_table; + /* A specific section name, or NULL to print all symbol tables. */ static char *symbol_table_section; @@ -457,6 +465,10 @@ parse_opt (int key, char *arg, any_control_option = true; symbol_table_section = arg; break; + case PRINT_DYNSYM_TABLE: + print_dynsym_table = true; + any_control_option = true; + break; case 'V': print_version_info = true; any_control_option = true; @@ -998,7 +1010,7 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) print_relocs (pure_ebl, ehdr); if (print_histogram) handle_hash (ebl); - if (print_symbol_table) + if (print_symbol_table || print_dynsym_table) print_symtab (ebl, SHT_DYNSYM); if (print_version_info) print_verinfo (ebl); |