Add vmfunc
[deliverable/binutils-gdb.git] / binutils / nm.c
index 917137fecd55d7e4f84e3b1b9cc22441e411ee7d..04067b158130b7cb2caa716e678acd4b6b9c156f 100644 (file)
@@ -1,13 +1,13 @@
 /* nm.c -- Describe symbol table of a rel file.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 /* nm.c -- Describe symbol table of a rel file.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005
+   2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "progress.h"
 #include "bfd.h"
 #include "progress.h"
-#include "bucomm.h"
-#include "budemang.h"
 #include "getopt.h"
 #include "aout/stab_gnu.h"
 #include "aout/ranlib.h"
 #include "getopt.h"
 #include "aout/stab_gnu.h"
 #include "aout/ranlib.h"
@@ -31,6 +30,8 @@
 #include "libiberty.h"
 #include "elf-bfd.h"
 #include "elf/common.h"
 #include "libiberty.h"
 #include "elf-bfd.h"
 #include "elf/common.h"
+#include "bucomm.h"
+#include "plugin.h"
 
 /* When sorting by size, we use this structure to hold the size and a
    pointer to the minisymbol.  */
 
 /* When sorting by size, we use this structure to hold the size and a
    pointer to the minisymbol.  */
@@ -159,32 +160,31 @@ static int filename_per_file = 0; /* Once per file, on its own line.  */
 static int filename_per_symbol = 0;    /* Once per symbol, at start of line.  */
 
 /* Print formats for printing a symbol value.  */
 static int filename_per_symbol = 0;    /* Once per symbol, at start of line.  */
 
 /* Print formats for printing a symbol value.  */
-#ifndef BFD64
-static char value_format[] = "%08lx";
-#else
+static char value_format_32bit[] = "%08lx";
 #if BFD_HOST_64BIT_LONG
 #if BFD_HOST_64BIT_LONG
-static char value_format[] = "%016lx";
+static char value_format_64bit[] = "%016lx";
+#elif BFD_HOST_64BIT_LONG_LONG
+#ifndef __MSVCRT__
+static char value_format_64bit[] = "%016llx";
 #else
 #else
-/* We don't use value_format for this case.  */
+static char value_format_64bit[] = "%016I64x";
 #endif
 #endif
 #endif
 #endif
-#ifdef BFD64
-static int print_width = 16;
-#else
-static int print_width = 8;
-#endif
+static int print_width = 0;
 static int print_radix = 16;
 /* Print formats for printing stab info.  */
 static char other_format[] = "%02x";
 static char desc_format[] = "%04x";
 
 static char *target = NULL;
 static int print_radix = 16;
 /* Print formats for printing stab info.  */
 static char other_format[] = "%02x";
 static char desc_format[] = "%04x";
 
 static char *target = NULL;
+static char *plugin_target = NULL;
 
 /* Used to cache the line numbers for a BFD.  */
 static bfd *lineno_cache_bfd;
 static bfd *lineno_cache_rel_bfd;
 
 #define OPTION_TARGET 200
 
 /* Used to cache the line numbers for a BFD.  */
 static bfd *lineno_cache_bfd;
 static bfd *lineno_cache_rel_bfd;
 
 #define OPTION_TARGET 200
+#define OPTION_PLUGIN 201
 
 static struct option long_options[] =
 {
 
 static struct option long_options[] =
 {
@@ -199,6 +199,7 @@ static struct option long_options[] =
   {"no-demangle", no_argument, &do_demangle, 0},
   {"no-sort", no_argument, &no_sort, 1},
   {"numeric-sort", no_argument, &sort_numerically, 1},
   {"no-demangle", no_argument, &do_demangle, 0},
   {"no-sort", no_argument, &no_sort, 1},
   {"numeric-sort", no_argument, &sort_numerically, 1},
+  {"plugin", required_argument, 0, OPTION_PLUGIN},
   {"portability", no_argument, 0, 'P'},
   {"print-armap", no_argument, &print_armap, 1},
   {"print-file-name", no_argument, 0, 'o'},
   {"portability", no_argument, 0, 'P'},
   {"print-armap", no_argument, &print_armap, 1},
   {"print-file-name", no_argument, 0, 'o'},
@@ -244,7 +245,12 @@ usage (FILE *stream, int status)
   -o                     Same as -A\n\
   -p, --no-sort          Do not sort the symbols\n\
   -P, --portability      Same as --format=posix\n\
   -o                     Same as -A\n\
   -p, --no-sort          Do not sort the symbols\n\
   -P, --portability      Same as --format=posix\n\
-  -r, --reverse-sort     Reverse the sense of the sort\n\
+  -r, --reverse-sort     Reverse the sense of the sort\n"));
+#if BFD_SUPPORTS_PLUGINS
+  fprintf (stream, _("\
+      --plugin NAME      Load the specified plugin\n"));
+#endif
+  fprintf (stream, _("\
   -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\
   -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\
@@ -254,11 +260,12 @@ usage (FILE *stream, int status)
       --target=BFDNAME   Specify the target object format as BFDNAME\n\
   -u, --undefined-only   Display only undefined symbols\n\
   -X 32_64               (ignored)\n\
       --target=BFDNAME   Specify the target object format as BFDNAME\n\
   -u, --undefined-only   Display only undefined symbols\n\
   -X 32_64               (ignored)\n\
+  @FILE                  Read options from FILE\n\
   -h, --help             Display this information\n\
   -V, --version          Display this program's version number\n\
 \n"));
   list_supported_targets (program_name, stream);
   -h, --help             Display this information\n\
   -V, --version          Display this program's version number\n\
 \n"));
   list_supported_targets (program_name, stream);
-  if (status == 0)
+  if (REPORT_BUGS_TO[0] && status == 0)
     fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
   exit (status);
 }
     fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
   exit (status);
 }
@@ -278,14 +285,14 @@ set_print_radix (char *radix)
        print_radix = 10;
       else
        print_radix = 8;
        print_radix = 10;
       else
        print_radix = 8;
-#ifndef BFD64
-      value_format[4] = *radix;
-#else
+      value_format_32bit[4] = *radix;
 #if BFD_HOST_64BIT_LONG
 #if BFD_HOST_64BIT_LONG
-      value_format[5] = *radix;
+      value_format_64bit[5] = *radix;
+#elif BFD_HOST_64BIT_LONG_LONG
+#ifndef __MSVCRT__
+      value_format_64bit[6] = *radix;
 #else
 #else
-      /* This case requires special handling for octal and decimal
-         printing.  */
+      value_format_64bit[7] = *radix;
 #endif
 #endif
       other_format[3] = desc_format[3] = *radix;
 #endif
 #endif
       other_format[3] = desc_format[3] = *radix;
@@ -345,22 +352,25 @@ get_symbol_type (unsigned int type)
     }
 }
 \f
     }
 }
 \f
-/* Print symbol name NAME, read from ABFD, with printf format FORMAT,
+/* Print symbol name NAME, read from ABFD, with printf format FORM,
    demangling it if requested.  */
 
 static void
    demangling it if requested.  */
 
 static void
-print_symname (const char *format, const char *name, bfd *abfd)
+print_symname (const char *form, const char *name, bfd *abfd)
 {
   if (do_demangle && *name)
     {
 {
   if (do_demangle && *name)
     {
-      char *res = demangle (abfd, name);
+      char *res = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
 
 
-      printf (format, res);
-      free (res);
-      return;
+      if (res != NULL)
+       {
+         printf (form, res);
+         free (res);
+         return;
+       }
     }
 
     }
 
-  printf (format, name);
+  printf (form, name);
 }
 
 static void
 }
 
 static void
@@ -396,7 +406,7 @@ print_symdef_entry (bfd *abfd)
    Return the number of symbols to be printed.  */
 
 static long
    Return the number of symbols to be printed.  */
 
 static long
-filter_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms,
+filter_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
                long symcount, unsigned int size)
 {
   bfd_byte *from, *fromend, *to;
                long symcount, unsigned int size)
 {
   bfd_byte *from, *fromend, *to;
@@ -417,7 +427,7 @@ filter_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms,
 
       PROGRESS (1);
 
 
       PROGRESS (1);
 
-      sym = bfd_minisymbol_to_symbol (abfd, dynamic, (const void *) from, store);
+      sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, (const void *) from, store);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
@@ -426,6 +436,8 @@ filter_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms,
       else if (external_only)
        keep = ((sym->flags & BSF_GLOBAL) != 0
                || (sym->flags & BSF_WEAK) != 0
       else if (external_only)
        keep = ((sym->flags & BSF_GLOBAL) != 0
                || (sym->flags & BSF_WEAK) != 0
+               /* PR binutls/12753: Unique symbols are global too.  */
+               || (sym->flags & BSF_GNU_UNIQUE) != 0
                || bfd_is_und_section (sym->section)
                || bfd_is_com_section (sym->section));
       else
                || bfd_is_und_section (sym->section)
                || bfd_is_com_section (sym->section));
       else
@@ -456,7 +468,8 @@ filter_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms,
 
       if (keep)
        {
 
       if (keep)
        {
-         memcpy (to, from, size);
+         if (to != from)
+           memcpy (to, from, size);
          to += size;
        }
     }
          to += size;
        }
     }
@@ -657,7 +670,7 @@ size_forward2 (const void *P_x, const void *P_y)
    size.  */
 
 static long
    size.  */
 
 static long
-sort_symbols_by_size (bfd *abfd, bfd_boolean dynamic, void *minisyms,
+sort_symbols_by_size (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
                      long symcount, unsigned int size,
                      struct size_sym **symsizesp)
 {
                      long symcount, unsigned int size,
                      struct size_sym **symsizesp)
 {
@@ -670,7 +683,7 @@ sort_symbols_by_size (bfd *abfd, bfd_boolean dynamic, void *minisyms,
 
   /* We are going to return a special set of symbols and sizes to
      print.  */
 
   /* We are going to return a special set of symbols and sizes to
      print.  */
-  symsizes = xmalloc (symcount * sizeof (struct size_sym));
+  symsizes = (struct size_sym *) xmalloc (symcount * sizeof (struct size_sym));
   *symsizesp = symsizes;
 
   /* Note that filter_symbols has already removed all absolute and
   *symsizesp = symsizes;
 
   /* Note that filter_symbols has already removed all absolute and
@@ -684,7 +697,7 @@ sort_symbols_by_size (bfd *abfd, bfd_boolean dynamic, void *minisyms,
 
   if (from < fromend)
     {
 
   if (from < fromend)
     {
-      sym = bfd_minisymbol_to_symbol (abfd, dynamic, (const void *) from,
+      sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, (const void *) from,
                                      store_sym);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
                                      store_sym);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
@@ -700,7 +713,7 @@ sort_symbols_by_size (bfd *abfd, bfd_boolean dynamic, void *minisyms,
       if (from + size < fromend)
        {
          next = bfd_minisymbol_to_symbol (abfd,
       if (from + size < fromend)
        {
          next = bfd_minisymbol_to_symbol (abfd,
-                                          dynamic,
+                                          is_dynamic,
                                           (const void *) (from + size),
                                           store_next);
          if (next == NULL)
                                           (const void *) (from + size),
                                           store_next);
          if (next == NULL)
@@ -771,7 +784,7 @@ get_relocs (bfd *abfd, asection *sec, void *dataarg)
       if (relsize < 0)
        bfd_fatal (bfd_get_filename (abfd));
 
       if (relsize < 0)
        bfd_fatal (bfd_get_filename (abfd));
 
-      *data->relocs = xmalloc (relsize);
+      *data->relocs = (arelent **) xmalloc (relsize);
       *data->relcount = bfd_canonicalize_reloc (abfd, sec, *data->relocs,
                                                data->syms);
       if (*data->relcount < 0)
       *data->relcount = bfd_canonicalize_reloc (abfd, sec, *data->relocs,
                                                data->syms);
       if (*data->relcount < 0)
@@ -826,7 +839,7 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
          symsize = bfd_get_symtab_upper_bound (abfd);
          if (symsize < 0)
            bfd_fatal (bfd_get_filename (abfd));
          symsize = bfd_get_symtab_upper_bound (abfd);
          if (symsize < 0)
            bfd_fatal (bfd_get_filename (abfd));
-         syms = xmalloc (symsize);
+         syms = (asymbol **) xmalloc (symsize);
          symcount = bfd_canonicalize_symtab (abfd, syms);
          if (symcount < 0)
            bfd_fatal (bfd_get_filename (abfd));
          symcount = bfd_canonicalize_symtab (abfd, syms);
          if (symcount < 0)
            bfd_fatal (bfd_get_filename (abfd));
@@ -859,19 +872,19 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
 
          if (relocs == NULL)
            {
 
          if (relocs == NULL)
            {
-             struct get_relocs_info info;
+             struct get_relocs_info rinfo;
 
              seccount = bfd_count_sections (abfd);
 
 
              seccount = bfd_count_sections (abfd);
 
-             secs = xmalloc (seccount * sizeof *secs);
-             relocs = xmalloc (seccount * sizeof *relocs);
-             relcount = xmalloc (seccount * sizeof *relcount);
+             secs = (asection **) xmalloc (seccount * sizeof *secs);
+             relocs = (arelent ***) xmalloc (seccount * sizeof *relocs);
+             relcount = (long *) xmalloc (seccount * sizeof *relcount);
 
 
-             info.secs = secs;
-             info.relocs = relocs;
-             info.relcount = relcount;
-             info.syms = syms;
-             bfd_map_over_sections (abfd, get_relocs, (void *) &info);
+             rinfo.secs = secs;
+             rinfo.relocs = relocs;
+             rinfo.relcount = relcount;
+             rinfo.syms = syms;
+             bfd_map_over_sections (abfd, get_relocs, (void *) &rinfo);
              lineno_cache_rel_bfd = abfd;
            }
 
              lineno_cache_rel_bfd = abfd;
            }
 
@@ -905,9 +918,10 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
        }
       else if (bfd_get_section (sym)->owner == abfd)
        {
        }
       else if (bfd_get_section (sym)->owner == abfd)
        {
-         if (bfd_find_nearest_line (abfd, bfd_get_section (sym), syms,
-                                    sym->value, &filename, &functionname,
-                                    &lineno)
+         if ((bfd_find_line (abfd, syms, sym, &filename, &lineno)
+              || bfd_find_nearest_line (abfd, bfd_get_section (sym),
+                                        syms, sym->value, &filename,
+                                        &functionname, &lineno))
              && filename != NULL
              && lineno != 0)
            printf ("\t%s:%u", filename, lineno);
              && filename != NULL
              && lineno != 0)
            printf ("\t%s:%u", filename, lineno);
@@ -920,7 +934,7 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
 /* Print the symbols when sorting by size.  */
 
 static void
 /* Print the symbols when sorting by size.  */
 
 static void
-print_size_symbols (bfd *abfd, bfd_boolean dynamic,
+print_size_symbols (bfd *abfd, bfd_boolean is_dynamic,
                    struct size_sym *symsizes, long symcount,
                    bfd *archive_bfd)
 {
                    struct size_sym *symsizes, long symcount,
                    bfd *archive_bfd)
 {
@@ -938,7 +952,7 @@ print_size_symbols (bfd *abfd, bfd_boolean dynamic,
       asymbol *sym;
       bfd_vma ssize;
 
       asymbol *sym;
       bfd_vma ssize;
 
-      sym = bfd_minisymbol_to_symbol (abfd, dynamic, from->minisym, store);
+      sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from->minisym, store);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
@@ -957,7 +971,7 @@ print_size_symbols (bfd *abfd, bfd_boolean dynamic,
    containing ABFD.  */
 
 static void
    containing ABFD.  */
 
 static void
-print_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms, long symcount,
+print_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms, long symcount,
               unsigned int size, bfd *archive_bfd)
 {
   asymbol *store;
               unsigned int size, bfd *archive_bfd)
 {
   asymbol *store;
@@ -973,7 +987,7 @@ print_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms, long symcount,
     {
       asymbol *sym;
 
     {
       asymbol *sym;
 
-      sym = bfd_minisymbol_to_symbol (abfd, dynamic, from, store);
+      sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from, store);
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
       if (sym == NULL)
        bfd_fatal (bfd_get_filename (abfd));
 
@@ -1022,18 +1036,18 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
       if (dynamic)
        {
          dyn_count = symcount;
       if (dynamic)
        {
          dyn_count = symcount;
-         dyn_syms = minisyms;
+         dyn_syms = (asymbol **) minisyms;
        }
       else
        {
          long storage = bfd_get_dynamic_symtab_upper_bound (abfd);
 
          static_count = symcount;
        }
       else
        {
          long storage = bfd_get_dynamic_symtab_upper_bound (abfd);
 
          static_count = symcount;
-         static_syms = minisyms;
+         static_syms = (asymbol **) minisyms;
 
          if (storage > 0)
            {
 
          if (storage > 0)
            {
-             dyn_syms = xmalloc (storage);
+             dyn_syms = (asymbol **) xmalloc (storage);
              dyn_count = bfd_canonicalize_dynamic_symtab (abfd, dyn_syms);
              if (dyn_count < 0)
                bfd_fatal (bfd_get_filename (abfd));
              dyn_count = bfd_canonicalize_dynamic_symtab (abfd, dyn_syms);
              if (dyn_count < 0)
                bfd_fatal (bfd_get_filename (abfd));
@@ -1048,7 +1062,7 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
          long i;
 
          new_mini = xmalloc ((symcount + synth_count + 1) * sizeof (*symp));
          long i;
 
          new_mini = xmalloc ((symcount + synth_count + 1) * sizeof (*symp));
-         symp = new_mini;
+         symp = (asymbol **) new_mini;
          memcpy (symp, minisyms, symcount * sizeof (*symp));
          symp += symcount;
          for (i = 0; i < synth_count; i++)
          memcpy (symp, minisyms, symcount * sizeof (*symp));
          symp += symcount;
          for (i = 0; i < synth_count; i++)
@@ -1089,6 +1103,27 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
     print_size_symbols (abfd, dynamic, symsizes, symcount, archive_bfd);
 
   free (minisyms);
     print_size_symbols (abfd, dynamic, symsizes, symcount, archive_bfd);
 
   free (minisyms);
+  free (symsizes);
+}
+
+static void
+set_print_width (bfd *file)
+{
+  print_width = bfd_get_arch_size (file);
+
+  if (print_width == -1)
+    {
+      /* PR binutils/4292
+        Guess the target's bitsize based on its name.
+        We assume here than any 64-bit format will include
+        "64" somewhere in its name.  The only known exception
+        is the MMO object file format.  */
+      if (strstr (bfd_get_target (file), "64") != NULL
+         || strcmp (bfd_get_target (file), "mmo") == 0)
+       print_width = 64;
+      else
+       print_width = 32;
+    }
 }
 
 static void
 }
 
 static void
@@ -1118,10 +1153,7 @@ display_archive (bfd *file)
 
       if (bfd_check_format_matches (arfile, bfd_object, &matching))
        {
 
       if (bfd_check_format_matches (arfile, bfd_object, &matching))
        {
-         char buf[30];
-
-         bfd_sprintf_vma (arfile, buf, (bfd_vma) -1);
-         print_width = strlen (buf);
+         set_print_width (arfile);
          format->print_archive_member (bfd_get_filename (file),
                                        bfd_get_filename (arfile));
          display_rel_file (arfile, file);
          format->print_archive_member (bfd_get_filename (file),
                                        bfd_get_filename (arfile));
          display_rel_file (arfile, file);
@@ -1163,23 +1195,24 @@ display_file (char *filename)
   if (get_file_size (filename) < 1)
     return FALSE;
 
   if (get_file_size (filename) < 1)
     return FALSE;
 
-  file = bfd_openr (filename, target);
+  file = bfd_openr (filename, target ? target : plugin_target);
   if (file == NULL)
     {
       bfd_nonfatal (filename);
       return FALSE;
     }
 
   if (file == NULL)
     {
       bfd_nonfatal (filename);
       return FALSE;
     }
 
+  /* If printing line numbers, decompress the debug sections.  */
+  if (line_numbers)
+    file->flags |= BFD_DECOMPRESS;
+
   if (bfd_check_format (file, bfd_archive))
     {
       display_archive (file);
     }
   else if (bfd_check_format_matches (file, bfd_object, &matching))
     {
   if (bfd_check_format (file, bfd_archive))
     {
       display_archive (file);
     }
   else if (bfd_check_format_matches (file, bfd_object, &matching))
     {
-      char buf[30];
-
-      bfd_sprintf_vma (file, buf, (bfd_vma) -1);
-      print_width = strlen (buf);
+      set_print_width (file);
       format->print_object_filename (filename);
       display_rel_file (file, NULL);
     }
       format->print_object_filename (filename);
       display_rel_file (file, NULL);
     }
@@ -1225,7 +1258,7 @@ print_object_filename_sysv (char *filename)
     printf (_("\n\nUndefined symbols from %s:\n\n"), filename);
   else
     printf (_("\n\nSymbols from %s:\n\n"), filename);
     printf (_("\n\nUndefined symbols from %s:\n\n"), filename);
   else
     printf (_("\n\nSymbols from %s:\n\n"), filename);
-  if (print_width == 8)
+  if (print_width == 32)
     printf (_("\
 Name                  Value   Class        Type         Size     Line  Section\n\n"));
   else
     printf (_("\
 Name                  Value   Class        Type         Size     Line  Section\n\n"));
   else
@@ -1276,7 +1309,7 @@ print_archive_member_sysv (char *archive, const char *filename)
     printf (_("\n\nUndefined symbols from %s[%s]:\n\n"), archive, filename);
   else
     printf (_("\n\nSymbols from %s[%s]:\n\n"), archive, filename);
     printf (_("\n\nUndefined symbols from %s[%s]:\n\n"), archive, filename);
   else
     printf (_("\n\nSymbols from %s[%s]:\n\n"), archive, filename);
-  if (print_width == 8)
+  if (print_width == 32)
     printf (_("\
 Name                  Value   Class        Type         Size     Line  Section\n\n"));
   else
     printf (_("\
 Name                  Value   Class        Type         Size     Line  Section\n\n"));
   else
@@ -1334,29 +1367,42 @@ print_symbol_filename_posix (bfd *archive_bfd, bfd *abfd)
 static void
 print_value (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma val)
 {
 static void
 print_value (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma val)
 {
-#if ! defined (BFD64) || BFD_HOST_64BIT_LONG
-  printf (value_format, val);
-#else
-  /* We have a 64 bit value to print, but the host is only 32 bit.  */
-  if (print_radix == 16)
-    bfd_fprintf_vma (abfd, stdout, val);
-  else
+  switch (print_width)
     {
     {
-      char buf[30];
-      char *s;
+    case 32:
+      printf (value_format_32bit, (unsigned long) val);
+      break;
 
 
-      s = buf + sizeof buf;
-      *--s = '\0';
-      while (val > 0)
+    case 64:
+#if BFD_HOST_64BIT_LONG || BFD_HOST_64BIT_LONG_LONG
+      printf (value_format_64bit, val);
+#else
+      /* We have a 64 bit value to print, but the host is only 32 bit.  */
+      if (print_radix == 16)
+       bfd_fprintf_vma (abfd, stdout, val);
+      else
        {
        {
-         *--s = (val % print_radix) + '0';
-         val /= print_radix;
+         char buf[30];
+         char *s;
+
+         s = buf + sizeof buf;
+         *--s = '\0';
+         while (val > 0)
+           {
+             *--s = (val % print_radix) + '0';
+             val /= print_radix;
+           }
+         while ((buf + sizeof buf - 1) - s < 16)
+           *--s = '0';
+         printf ("%s", s);
        }
        }
-      while ((buf + sizeof buf - 1) - s < 16)
-       *--s = '0';
-      printf ("%s", s);
-    }
 #endif
 #endif
+      break;
+
+    default:
+      fatal (_("Print width has not been initialized (%d)"), print_width);
+      break;
+    }
 }
 
 /* Print a line of information about a symbol.  */
 }
 
 /* Print a line of information about a symbol.  */
@@ -1366,7 +1412,7 @@ print_symbol_info_bsd (struct extended_symbol_info *info, bfd *abfd)
 {
   if (bfd_is_undefined_symclass (SYM_TYPE (info)))
     {
 {
   if (bfd_is_undefined_symclass (SYM_TYPE (info)))
     {
-      if (print_width == 16)
+      if (print_width == 64)
        printf ("        ");
       printf ("        ");
     }
        printf ("        ");
       printf ("        ");
     }
@@ -1409,7 +1455,7 @@ print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd)
 
   if (bfd_is_undefined_symclass (SYM_TYPE (info)))
     {
 
   if (bfd_is_undefined_symclass (SYM_TYPE (info)))
     {
-      if (print_width == 8)
+      if (print_width == 32)
        printf ("        ");
       else
        printf ("                ");
        printf ("        ");
       else
        printf ("                ");
@@ -1439,7 +1485,7 @@ print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd)
        print_value (abfd, SYM_SIZE (info));
       else
        {
        print_value (abfd, SYM_SIZE (info));
       else
        {
-         if (print_width == 8)
+         if (print_width == 32)
            printf ("        ");
          else
            printf ("                ");
            printf ("        ");
          else
            printf ("                ");
@@ -1487,9 +1533,14 @@ main (int argc, char **argv)
 
   program_name = *argv;
   xmalloc_set_program_name (program_name);
 
   program_name = *argv;
   xmalloc_set_program_name (program_name);
+#if BFD_SUPPORTS_PLUGINS
+  bfd_plugin_set_program_name (program_name);
+#endif
 
   START_PROGRESS (program_name, 0);
 
 
   START_PROGRESS (program_name, 0);
 
+  expandargv (&argc, &argv);
+
   bfd_init ();
   set_default_bfd_target ();
 
   bfd_init ();
   set_default_bfd_target ();
 
@@ -1584,6 +1635,15 @@ main (int argc, char **argv)
          target = optarg;
          break;
 
          target = optarg;
          break;
 
+       case OPTION_PLUGIN:     /* --plugin */
+#if BFD_SUPPORTS_PLUGINS
+         plugin_target = "plugin";
+         bfd_plugin_set_plugin (optarg);
+#else
+         fatal (_("sorry - this program has been built without plugin support\n"));
+#endif
+         break;
+
        case 0:         /* A long option that just sets a flag.  */
          break;
 
        case 0:         /* A long option that just sets a flag.  */
          break;
 
This page took 0.03081 seconds and 4 git commands to generate.