diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2010-01-11 14:45:42 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2010-01-11 14:45:42 +0000 |
commit | 2c610e4b46f46d5ca5aa0982051791dcbea0f67e (patch) | |
tree | f368a4cf5e4d6dc6609537e4b11f30e69da56a03 /binutils/readelf.c | |
parent | 4d421096e0d5a63190fa79e721a06c4e943f599f (diff) | |
download | gdb-2c610e4b46f46d5ca5aa0982051791dcbea0f67e.zip gdb-2c610e4b46f46d5ca5aa0982051791dcbea0f67e.tar.gz gdb-2c610e4b46f46d5ca5aa0982051791dcbea0f67e.tar.bz2 |
Add --dyn-syms to readelf
binutils/
2010-01-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11146
* NEWS: Mention --dyn-syms for readelf.
* readelf.c (do_dyn_syms): New.
(OPTION_DYN_SYMS): Likewise.
(options): Add "dyn-syms".
(usage): Add --dyn-syms.
(parse_args): Handle OPTION_DYN_SYMS.
(process_symbol_table): Handle do_dyn_syms.
(process_object): Likewise.
(process_archive): Likewise.
* doc/binutils.texi: Document --dyn-syms for readelf. Mention
symbol hash tables for -D.
ld/testsuite/
2010-01-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11146
* ld-elf/dynsym1.d: New.
Diffstat (limited to 'binutils/readelf.c')
-rw-r--r-- | binutils/readelf.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 8550c31..122bd73 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; |