From 0873df2aec48685715d2c5041c1f6f4ed43976c1 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 28 Aug 2004 08:55:47 +0000 Subject: [PATCH] * nm.c (show_synthetic): New var. (long_options): Add "synthetic". (usage): Here too. (display_rel_file): Handle show_synthetic. --- binutils/ChangeLog | 7 +++++++ binutils/nm.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 5b87074..490d091 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,12 @@ 2004-08-28 Alan Modra + * nm.c (show_synthetic): New var. + (long_options): Add "synthetic". + (usage): Here too. + (display_rel_file): Handle show_synthetic. + +2004-08-28 Alan Modra + * objdump.c (dump_bfd): Pass both symbol tables to bfd_get_synthetic_symtab. 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). */ -- 2.7.4