projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for reading Aarch64 core dumps.
[binutils-gdb.git]
/
binutils
/
nm.c
diff --git
a/binutils/nm.c
b/binutils/nm.c
index 5ad9c2060e5553fe9ad4b120b15f05f993d23c81..2a44a846004885f06f288af6c38fa42eddf5a7f2 100644
(file)
--- a/
binutils/nm.c
+++ b/
binutils/nm.c
@@
-1,7
+1,5
@@
/* nm.c -- Describe symbol table of a rel file.
/* 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, 2007, 2008, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2014 Free Software Foundation, Inc.
This file is part of GNU Binutils.
This file is part of GNU Binutils.
@@
-164,7
+162,11
@@
static char value_format_32bit[] = "%08lx";
#if BFD_HOST_64BIT_LONG
static char value_format_64bit[] = "%016lx";
#elif BFD_HOST_64BIT_LONG_LONG
#if BFD_HOST_64BIT_LONG
static char value_format_64bit[] = "%016lx";
#elif BFD_HOST_64BIT_LONG_LONG
+#ifndef __MSVCRT__
static char value_format_64bit[] = "%016llx";
static char value_format_64bit[] = "%016llx";
+#else
+static char value_format_64bit[] = "%016I64x";
+#endif
#endif
static int print_width = 0;
static int print_radix = 16;
#endif
static int print_width = 0;
static int print_radix = 16;
@@
-173,13
+175,19
@@
static char other_format[] = "%02x";
static char desc_format[] = "%04x";
static char *target = NULL;
static char desc_format[] = "%04x";
static char *target = NULL;
+#if BFD_SUPPORTS_PLUGINS
+static const char *plugin_target = "plugin";
+#else
+static const char *plugin_target = NULL;
+#endif
/* 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
+#define OPTION_PLUGIN (OPTION_TARGET + 1)
+#define OPTION_SIZE_SORT (OPTION_PLUGIN + 1)
static struct option long_options[] =
{
static struct option long_options[] =
{
@@
-192,8
+200,8
@@
static struct option long_options[] =
{"line-numbers", no_argument, 0, 'l'},
{"no-cplus", no_argument, &do_demangle, 0}, /* Linux compatibility. */
{"no-demangle", no_argument, &do_demangle, 0},
{"line-numbers", no_argument, 0, 'l'},
{"no-cplus", no_argument, &do_demangle, 0}, /* Linux compatibility. */
{"no-demangle", no_argument, &do_demangle, 0},
- {"no-sort", no_argument,
&no_sort, 1
},
- {"numeric-sort", no_argument,
&sort_numerically, 1
},
+ {"no-sort", no_argument,
0, 'p'
},
+ {"numeric-sort", no_argument,
0, 'n'
},
{"plugin", required_argument, 0, OPTION_PLUGIN},
{"portability", no_argument, 0, 'P'},
{"print-armap", no_argument, &print_armap, 1},
{"plugin", required_argument, 0, OPTION_PLUGIN},
{"portability", no_argument, 0, 'P'},
{"print-armap", no_argument, &print_armap, 1},
@@
-201,7
+209,7
@@
static struct option long_options[] =
{"print-size", no_argument, 0, 'S'},
{"radix", required_argument, 0, 't'},
{"reverse-sort", no_argument, &reverse_sort, 1},
{"print-size", no_argument, 0, 'S'},
{"radix", required_argument, 0, 't'},
{"reverse-sort", no_argument, &reverse_sort, 1},
- {"size-sort", no_argument,
&sort_by_size, 1
},
+ {"size-sort", no_argument,
0, OPTION_SIZE_SORT
},
{"special-syms", no_argument, &allow_special_symbols, 1},
{"stats", no_argument, &show_stats, 1},
{"synthetic", no_argument, &show_synthetic, 1},
{"special-syms", no_argument, &allow_special_symbols, 1},
{"stats", no_argument, &show_stats, 1},
{"synthetic", no_argument, &show_synthetic, 1},
@@
-246,7
+254,7
@@
usage (FILE *stream, int status)
--plugin NAME Load the specified plugin\n"));
#endif
fprintf (stream, _("\
--plugin NAME Load the specified plugin\n"));
#endif
fprintf (stream, _("\
- -S, --print-size Print size of defined symbols\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\
--special-syms Include special symbols in the output\n\
-s, --print-armap Include index for symbols from archive members\n\
--size-sort Sort symbols by size\n\
--special-syms Include special symbols in the output\n\
@@
-284,7
+292,11
@@
set_print_radix (char *radix)
#if BFD_HOST_64BIT_LONG
value_format_64bit[5] = *radix;
#elif BFD_HOST_64BIT_LONG_LONG
#if BFD_HOST_64BIT_LONG
value_format_64bit[5] = *radix;
#elif BFD_HOST_64BIT_LONG_LONG
+#ifndef __MSVCRT__
value_format_64bit[6] = *radix;
value_format_64bit[6] = *radix;
+#else
+ value_format_64bit[7] = *radix;
+#endif
#endif
other_format[3] = desc_format[3] = *radix;
break;
#endif
other_format[3] = desc_format[3] = *radix;
break;
@@
-425,8
+437,10
@@
filter_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
if (undefined_only)
keep = bfd_is_und_section (sym->section);
else if (external_only)
if (undefined_only)
keep = bfd_is_und_section (sym->section);
else if (external_only)
- keep = ((sym->flags & BSF_GLOBAL) != 0
- || (sym->flags & BSF_WEAK) != 0
+ /* PR binutls/12753: Unique symbols are global too. */
+ keep = ((sym->flags & (BSF_GLOBAL
+ | BSF_WEAK
+ | 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
@@
-939,19
+953,12
@@
print_size_symbols (bfd *abfd, bfd_boolean is_dynamic,
for (; from < fromend; from++)
{
asymbol *sym;
for (; from < fromend; from++)
{
asymbol *sym;
- bfd_vma ssize;
sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from->minisym, store);
if (sym == NULL)
bfd_fatal (bfd_get_filename (abfd));
sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from->minisym, store);
if (sym == NULL)
bfd_fatal (bfd_get_filename (abfd));
- /* For elf we have already computed the correct symbol size. */
- if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
- ssize = from->size;
- else
- ssize = from->size - bfd_section_vma (abfd, bfd_get_section (sym));
-
- print_symbol (abfd, sym, ssize, archive_bfd);
+ print_symbol (abfd, sym, from->size, archive_bfd);
}
}
}
}
@@
-1005,7
+1012,15
@@
display_rel_file (bfd *abfd, bfd *archive_bfd)
symcount = bfd_read_minisymbols (abfd, dynamic, &minisyms, &size);
if (symcount < 0)
symcount = bfd_read_minisymbols (abfd, dynamic, &minisyms, &size);
if (symcount < 0)
- bfd_fatal (bfd_get_filename (abfd));
+ {
+ if (dynamic && bfd_get_error () == bfd_error_no_symbols)
+ {
+ non_fatal (_("%s: no symbols"), bfd_get_filename (abfd));
+ return;
+ }
+
+ bfd_fatal (bfd_get_filename (abfd));
+ }
if (symcount == 0)
{
if (symcount == 0)
{
@@
-1092,6
+1107,7
@@
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
}
static void
@@
-1183,13
+1199,17
@@
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);
if (bfd_check_format (file, bfd_archive))
{
display_archive (file);
@@
-1577,10
+1597,19
@@
main (int argc, char **argv)
break;
case 'n':
case 'v':
break;
case 'n':
case 'v':
+ no_sort = 0;
sort_numerically = 1;
sort_numerically = 1;
+ sort_by_size = 0;
break;
case 'p':
no_sort = 1;
break;
case 'p':
no_sort = 1;
+ sort_numerically = 0;
+ sort_by_size = 0;
+ break;
+ case OPTION_SIZE_SORT:
+ no_sort = 0;
+ sort_numerically = 0;
+ sort_by_size = 1;
break;
case 'P':
set_output_format ("posix");
break;
case 'P':
set_output_format ("posix");