diff options
author | Alan Modra <amodra@gmail.com> | 2004-08-28 08:55:47 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2004-08-28 08:55:47 +0000 |
commit | 0873df2aec48685715d2c5041c1f6f4ed43976c1 (patch) | |
tree | f6f8ad95fa838dddf70ec84fba835cbea22da275 /binutils/nm.c | |
parent | a7535cf331659fc34e2add41b0bbc239a976ea38 (diff) | |
download | gdb-0873df2aec48685715d2c5041c1f6f4ed43976c1.zip gdb-0873df2aec48685715d2c5041c1f6f4ed43976c1.tar.gz gdb-0873df2aec48685715d2c5041c1f6f4ed43976c1.tar.bz2 |
* nm.c (show_synthetic): New var.
(long_options): Add "synthetic".
(usage): Here too.
(display_rel_file): Handle show_synthetic.
Diffstat (limited to 'binutils/nm.c')
-rw-r--r-- | binutils/nm.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/binutils/nm.c b/binutils/nm.c index bac7d38..95c267d 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -1,6 +1,6 @@ /* nm.c -- Describe symbol table of a rel file. Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003 + 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -177,6 +177,7 @@ static int undefined_only = 0; /* Print undefined symbols only. */ static int dynamic = 0; /* Print dynamic symbols. */ static int show_version = 0; /* Show the version number. */ static int show_stats = 0; /* Show statistics. */ +static int show_synthetic = 0; /* Display synthesized symbols too. */ static int line_numbers = 0; /* Print line numbers for symbols. */ /* When to print the names of files. Not mutually exclusive in SYSV format. */ @@ -232,6 +233,7 @@ static struct option long_options[] = {"reverse-sort", no_argument, &reverse_sort, 1}, {"size-sort", no_argument, &sort_by_size, 1}, {"stats", no_argument, &show_stats, 1}, + {"synthetic", no_argument, &show_synthetic, 1}, {"target", required_argument, 0, OPTION_TARGET}, {"defined-only", no_argument, &defined_only, 1}, {"undefined-only", no_argument, &undefined_only, 1}, @@ -271,6 +273,7 @@ usage (FILE *stream, int status) -S, --print-size Print size of defined symbols\n\ -s, --print-armap Include index for symbols from archive members\n\ --size-sort Sort symbols by size\n\ + --synthetic Display synthetic symbols as well\n\ -t, --radix=RADIX Use RADIX for printing symbol values\n\ --target=BFDNAME Specify the target object format as BFDNAME\n\ -u, --undefined-only Display only undefined symbols\n\ @@ -958,6 +961,45 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) return; } + if (show_synthetic && size == sizeof (asymbol *)) + { + asymbol *synthsyms; + long synth_count; + asymbol **static_syms = NULL; + asymbol **dyn_syms = NULL; + long static_count = 0; + long dyn_count = 0; + + if (dynamic) + { + dyn_count = symcount; + dyn_syms = minisyms; + } + else + { + static_count = symcount; + static_syms = minisyms; + } + synth_count = bfd_get_synthetic_symtab (abfd, static_count, static_syms, + dyn_count, dyn_syms, &synthsyms); + if (synth_count > 0) + { + asymbol **symp; + void *new_mini; + long i; + + new_mini = xmalloc ((symcount + synth_count + 1) * sizeof (*symp)); + symp = new_mini; + memcpy (symp, minisyms, symcount * sizeof (*symp)); + symp += symcount; + for (i = 0; i < synth_count; i++) + *symp++ = synthsyms + i; + *symp = 0; + minisyms = new_mini; + symcount += synth_count; + } + } + /* Discard the symbols we don't want to print. It's OK to do this in place; we'll free the storage anyway (after printing). */ |