X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=binutils%2Freadelf.c;h=122bd7357dd8268728d1e44e346c972f8fb82f32;hb=2c610e4b46f46d5ca5aa0982051791dcbea0f67e;hp=8550c310f38bbcb44c5e77e2f1b2cb001df1321b;hpb=4d421096e0d5a63190fa79e721a06c4e943f599f;p=thirdparty%2Fbinutils-gdb.git diff --git a/binutils/readelf.c b/binutils/readelf.c index 8550c310f38..122bd7357dd 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -178,6 +178,7 @@ static Elf_Internal_Shdr * symtab_shndx_hdr; static int show_name; static int do_dynamic; static int do_syms; +static int do_dyn_syms; static int do_reloc; static int do_sections; static int do_section_groups; @@ -2923,6 +2924,7 @@ get_section_type_name (unsigned int sh_type) } #define OPTION_DEBUG_DUMP 512 +#define OPTION_DYN_SYMS 513 static struct option options[] = { @@ -2939,6 +2941,7 @@ static struct option options[] = {"full-section-name",no_argument, 0, 'N'}, {"symbols", no_argument, 0, 's'}, {"syms", no_argument, 0, 's'}, + {"dyn-syms", no_argument, 0, OPTION_DYN_SYMS}, {"relocs", no_argument, 0, 'r'}, {"notes", no_argument, 0, 'n'}, {"dynamic", no_argument, 0, 'd'}, @@ -2978,6 +2981,7 @@ usage (FILE * stream) -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\ -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\ @@ -3202,6 +3206,9 @@ parse_args (int argc, char ** argv) dwarf_select_sections_by_names (optarg); } break; + case OPTION_DYN_SYMS: + do_dyn_syms++; + break; #ifdef SUPPORT_DISASSEMBLY case 'i': request_dump (DISASS_DUMP); @@ -3228,7 +3235,8 @@ parse_args (int argc, char ** argv) if (!do_dynamic && !do_syms && !do_reloc && !do_unwind && !do_sections && !do_segments && !do_header && !do_dump && !do_version && !do_histogram && !do_debugging && !do_arch && !do_notes - && !do_section_groups && !do_archive_index) + && !do_section_groups && !do_archive_index + && !do_dyn_syms) usage (stderr); else if (argc < 3) { @@ -7343,12 +7351,14 @@ process_symbol_table (FILE * file) bfd_vma * gnuchains = NULL; bfd_vma gnusymidx = 0; - if (! do_syms && !do_histogram) + if (!do_syms && !do_dyn_syms && !do_histogram) return 1; if (dynamic_info[DT_HASH] && (do_histogram - || (do_using_dynamic && dynamic_strings != NULL))) + || (do_using_dynamic + && !do_dyn_syms + && dynamic_strings != NULL))) { unsigned char nb[8]; unsigned char nc[8]; @@ -7404,7 +7414,9 @@ process_symbol_table (FILE * file) if (dynamic_info_DT_GNU_HASH && (do_histogram - || (do_using_dynamic && dynamic_strings != NULL))) + || (do_using_dynamic + && !do_dyn_syms + && dynamic_strings != NULL))) { unsigned char nb[16]; bfd_vma i, maxchain = 0xffffffff, bitmaskwords; @@ -7561,7 +7573,7 @@ process_symbol_table (FILE * file) } } } - else if (do_syms && !do_using_dynamic) + else if (do_dyn_syms || (do_syms && !do_using_dynamic)) { unsigned int i; @@ -7575,8 +7587,10 @@ process_symbol_table (FILE * file) Elf_Internal_Sym * symtab; Elf_Internal_Sym * psym; - if ( section->sh_type != SHT_SYMTAB - && section->sh_type != SHT_DYNSYM) + if ((section->sh_type != SHT_SYMTAB + && section->sh_type != SHT_DYNSYM) + || (!do_syms + && section->sh_type == SHT_SYMTAB)) continue; printf (_("\nSymbol table '%s' contains %lu entries:\n"), @@ -10859,7 +10873,7 @@ process_object (char * file_name, FILE * file) do_unwind = do_version = do_dump = do_arch = 0; if (! do_using_dynamic) - do_syms = do_reloc = 0; + do_syms = do_dyn_syms = do_reloc = 0; } if (! process_section_groups (file)) @@ -11463,7 +11477,7 @@ process_archive (char * file_name, FILE * file, bfd_boolean is_thin_archive) if (!do_dynamic && !do_syms && !do_reloc && !do_unwind && !do_sections && !do_segments && !do_header && !do_dump && !do_version && !do_histogram && !do_debugging && !do_arch && !do_notes - && !do_section_groups) + && !do_section_groups && !do_dyn_syms) { ret = 0; /* Archive index only. */ goto out;