1 /* nm.c -- Describe symbol table of a rel file.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 This file is part of GNU Binutils.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
27 #include "aout/stab_gnu.h"
28 #include "aout/ranlib.h"
30 #include "libiberty.h"
32 #include "elf/common.h"
36 /* When sorting by size, we use this structure to hold the size and a
37 pointer to the minisymbol. */
45 /* When fetching relocs, we use this structure to pass information to
48 struct get_relocs_info
56 struct extended_symbol_info
60 elf_symbol_type *elfinfo;
61 /* FIXME: We should add more fields for Type, Line, Section. */
63 #define SYM_NAME(sym) (sym->sinfo->name)
64 #define SYM_VALUE(sym) (sym->sinfo->value)
65 #define SYM_TYPE(sym) (sym->sinfo->type)
66 #define SYM_STAB_NAME(sym) (sym->sinfo->stab_name)
67 #define SYM_STAB_DESC(sym) (sym->sinfo->stab_desc)
68 #define SYM_STAB_OTHER(sym) (sym->sinfo->stab_other)
69 #define SYM_SIZE(sym) \
70 (sym->elfinfo ? sym->elfinfo->internal_elf_sym.st_size: sym->ssize)
72 /* The output formatting functions. */
73 static void print_object_filename_bsd (char *);
74 static void print_object_filename_sysv (char *);
75 static void print_object_filename_posix (char *);
76 static void print_archive_filename_bsd (char *);
77 static void print_archive_filename_sysv (char *);
78 static void print_archive_filename_posix (char *);
79 static void print_archive_member_bsd (char *, const char *);
80 static void print_archive_member_sysv (char *, const char *);
81 static void print_archive_member_posix (char *, const char *);
82 static void print_symbol_filename_bsd (bfd *, bfd *);
83 static void print_symbol_filename_sysv (bfd *, bfd *);
84 static void print_symbol_filename_posix (bfd *, bfd *);
85 static void print_value (bfd *, bfd_vma);
86 static void print_symbol_info_bsd (struct extended_symbol_info *, bfd *);
87 static void print_symbol_info_sysv (struct extended_symbol_info *, bfd *);
88 static void print_symbol_info_posix (struct extended_symbol_info *, bfd *);
90 /* Support for different output formats. */
93 /* Print the name of an object file given on the command line. */
94 void (*print_object_filename) (char *);
96 /* Print the name of an archive file given on the command line. */
97 void (*print_archive_filename) (char *);
99 /* Print the name of an archive member file. */
100 void (*print_archive_member) (char *, const char *);
102 /* Print the name of the file (and archive, if there is one)
103 containing a symbol. */
104 void (*print_symbol_filename) (bfd *, bfd *);
106 /* Print a line of information about a symbol. */
107 void (*print_symbol_info) (struct extended_symbol_info *, bfd *);
110 static struct output_fns formats[] =
112 {print_object_filename_bsd,
113 print_archive_filename_bsd,
114 print_archive_member_bsd,
115 print_symbol_filename_bsd,
116 print_symbol_info_bsd},
117 {print_object_filename_sysv,
118 print_archive_filename_sysv,
119 print_archive_member_sysv,
120 print_symbol_filename_sysv,
121 print_symbol_info_sysv},
122 {print_object_filename_posix,
123 print_archive_filename_posix,
124 print_archive_member_posix,
125 print_symbol_filename_posix,
126 print_symbol_info_posix}
129 /* Indices in `formats'. */
131 #define FORMAT_SYSV 1
132 #define FORMAT_POSIX 2
133 #define FORMAT_DEFAULT FORMAT_BSD
135 /* The output format to use. */
136 static struct output_fns *format = &formats[FORMAT_DEFAULT];
138 /* Command options. */
140 static int do_demangle = 0; /* Pretty print C++ symbol names. */
141 static int external_only = 0; /* Print external symbols only. */
142 static int defined_only = 0; /* Print defined symbols only. */
143 static int no_sort = 0; /* Don't sort; print syms in order found. */
144 static int print_debug_syms = 0;/* Print debugger-only symbols too. */
145 static int print_armap = 0; /* Describe __.SYMDEF data in archive files. */
146 static int print_size = 0; /* Print size of defined symbols. */
147 static int reverse_sort = 0; /* Sort in downward(alpha or numeric) order. */
148 static int sort_numerically = 0;/* Sort in numeric rather than alpha order. */
149 static int sort_by_size = 0; /* Sort by size of symbol. */
150 static int undefined_only = 0; /* Print undefined symbols only. */
151 static int dynamic = 0; /* Print dynamic symbols. */
152 static int show_version = 0; /* Show the version number. */
153 static int show_stats = 0; /* Show statistics. */
154 static int show_synthetic = 0; /* Display synthesized symbols too. */
155 static int line_numbers = 0; /* Print line numbers for symbols. */
156 static int allow_special_symbols = 0; /* Allow special symbols. */
158 /* When to print the names of files. Not mutually exclusive in SYSV format. */
159 static int filename_per_file = 0; /* Once per file, on its own line. */
160 static int filename_per_symbol = 0; /* Once per symbol, at start of line. */
162 /* Print formats for printing a symbol value. */
163 static char value_format_32bit[] = "%08lx";
164 #if BFD_HOST_64BIT_LONG
165 static char value_format_64bit[] = "%016lx";
166 #elif BFD_HOST_64BIT_LONG_LONG
167 static char value_format_64bit[] = "%016llx";
169 static int print_width = 0;
170 static int print_radix = 16;
171 /* Print formats for printing stab info. */
172 static char other_format[] = "%02x";
173 static char desc_format[] = "%04x";
175 static char *target = NULL;
176 static char *plugin_target = NULL;
178 /* Used to cache the line numbers for a BFD. */
179 static bfd *lineno_cache_bfd;
180 static bfd *lineno_cache_rel_bfd;
182 #define OPTION_TARGET 200
183 #define OPTION_PLUGIN 201
185 static struct option long_options[] =
187 {"debug-syms", no_argument, &print_debug_syms, 1},
188 {"demangle", optional_argument, 0, 'C'},
189 {"dynamic", no_argument, &dynamic, 1},
190 {"extern-only", no_argument, &external_only, 1},
191 {"format", required_argument, 0, 'f'},
192 {"help", no_argument, 0, 'h'},
193 {"line-numbers", no_argument, 0, 'l'},
194 {"no-cplus", no_argument, &do_demangle, 0}, /* Linux compatibility. */
195 {"no-demangle", no_argument, &do_demangle, 0},
196 {"no-sort", no_argument, &no_sort, 1},
197 {"numeric-sort", no_argument, &sort_numerically, 1},
198 {"plugin", required_argument, 0, OPTION_PLUGIN},
199 {"portability", no_argument, 0, 'P'},
200 {"print-armap", no_argument, &print_armap, 1},
201 {"print-file-name", no_argument, 0, 'o'},
202 {"print-size", no_argument, 0, 'S'},
203 {"radix", required_argument, 0, 't'},
204 {"reverse-sort", no_argument, &reverse_sort, 1},
205 {"size-sort", no_argument, &sort_by_size, 1},
206 {"special-syms", no_argument, &allow_special_symbols, 1},
207 {"stats", no_argument, &show_stats, 1},
208 {"synthetic", no_argument, &show_synthetic, 1},
209 {"target", required_argument, 0, OPTION_TARGET},
210 {"defined-only", no_argument, &defined_only, 1},
211 {"undefined-only", no_argument, &undefined_only, 1},
212 {"version", no_argument, &show_version, 1},
213 {0, no_argument, 0, 0}
216 /* Some error-reporting functions. */
219 usage (FILE *stream, int status)
221 fprintf (stream, _("Usage: %s [option(s)] [file(s)]\n"), program_name);
222 fprintf (stream, _(" List symbols in [file(s)] (a.out by default).\n"));
223 fprintf (stream, _(" The options are:\n\
224 -a, --debug-syms Display debugger-only symbols\n\
225 -A, --print-file-name Print name of the input file before every symbol\n\
226 -B Same as --format=bsd\n\
227 -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n\
228 The STYLE, if specified, can be `auto' (the default),\n\
229 `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\
231 --no-demangle Do not demangle low-level symbol names\n\
232 -D, --dynamic Display dynamic symbols instead of normal symbols\n\
233 --defined-only Display only defined symbols\n\
235 -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n\
236 `sysv' or `posix'. The default is `bsd'\n\
237 -g, --extern-only Display only external symbols\n\
238 -l, --line-numbers Use debugging information to find a filename and\n\
239 line number for each symbol\n\
240 -n, --numeric-sort Sort symbols numerically by address\n\
242 -p, --no-sort Do not sort the symbols\n\
243 -P, --portability Same as --format=posix\n\
244 -r, --reverse-sort Reverse the sense of the sort\n"));
245 #if BFD_SUPPORTS_PLUGINS
246 fprintf (stream, _("\
247 --plugin NAME Load the specified plugin\n"));
249 fprintf (stream, _("\
250 -S, --print-size Print size of defined symbols\n\
251 -s, --print-armap Include index for symbols from archive members\n\
252 --size-sort Sort symbols by size\n\
253 --special-syms Include special symbols in the output\n\
254 --synthetic Display synthetic symbols as well\n\
255 -t, --radix=RADIX Use RADIX for printing symbol values\n\
256 --target=BFDNAME Specify the target object format as BFDNAME\n\
257 -u, --undefined-only Display only undefined symbols\n\
258 -X 32_64 (ignored)\n\
259 @FILE Read options from FILE\n\
260 -h, --help Display this information\n\
261 -V, --version Display this program's version number\n\
263 list_supported_targets (program_name, stream);
264 if (REPORT_BUGS_TO[0] && status == 0)
265 fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
269 /* Set the radix for the symbol value and size according to RADIX. */
272 set_print_radix (char *radix)
284 value_format_32bit[4] = *radix;
285 #if BFD_HOST_64BIT_LONG
286 value_format_64bit[5] = *radix;
287 #elif BFD_HOST_64BIT_LONG_LONG
288 value_format_64bit[6] = *radix;
290 other_format[3] = desc_format[3] = *radix;
293 fatal (_("%s: invalid radix"), radix);
298 set_output_format (char *f)
317 fatal (_("%s: invalid output format"), f);
319 format = &formats[i];
323 get_symbol_type (unsigned int type)
325 static char buff [32];
329 case STT_NOTYPE: return "NOTYPE";
330 case STT_OBJECT: return "OBJECT";
331 case STT_FUNC: return "FUNC";
332 case STT_SECTION: return "SECTION";
333 case STT_FILE: return "FILE";
334 case STT_COMMON: return "COMMON";
335 case STT_TLS: return "TLS";
337 if (type >= STT_LOPROC && type <= STT_HIPROC)
338 sprintf (buff, _("<processor specific>: %d"), type);
339 else if (type >= STT_LOOS && type <= STT_HIOS)
340 sprintf (buff, _("<OS specific>: %d"), type);
342 sprintf (buff, _("<unknown>: %d"), type);
347 /* Print symbol name NAME, read from ABFD, with printf format FORM,
348 demangling it if requested. */
351 print_symname (const char *form, const char *name, bfd *abfd)
353 if (do_demangle && *name)
355 char *res = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
369 print_symdef_entry (bfd *abfd)
371 symindex idx = BFD_NO_MORE_SYMBOLS;
373 bfd_boolean everprinted = FALSE;
375 for (idx = bfd_get_next_mapent (abfd, idx, &thesym);
376 idx != BFD_NO_MORE_SYMBOLS;
377 idx = bfd_get_next_mapent (abfd, idx, &thesym))
382 printf (_("\nArchive index:\n"));
385 elt = bfd_get_elt_at_index (abfd, idx);
387 bfd_fatal ("bfd_get_elt_at_index");
388 if (thesym->name != (char *) NULL)
390 print_symname ("%s", thesym->name, abfd);
391 printf (" in %s\n", bfd_get_filename (elt));
396 /* Choose which symbol entries to print;
397 compact them downward to get rid of the rest.
398 Return the number of symbols to be printed. */
401 filter_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
402 long symcount, unsigned int size)
404 bfd_byte *from, *fromend, *to;
407 store = bfd_make_empty_symbol (abfd);
409 bfd_fatal (bfd_get_filename (abfd));
411 from = (bfd_byte *) minisyms;
412 fromend = from + symcount * size;
413 to = (bfd_byte *) minisyms;
415 for (; from < fromend; from += size)
422 sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, (const void *) from, store);
424 bfd_fatal (bfd_get_filename (abfd));
427 keep = bfd_is_und_section (sym->section);
428 else if (external_only)
429 keep = ((sym->flags & BSF_GLOBAL) != 0
430 || (sym->flags & BSF_WEAK) != 0
431 || bfd_is_und_section (sym->section)
432 || bfd_is_com_section (sym->section));
437 && ! print_debug_syms
438 && (sym->flags & BSF_DEBUGGING) != 0)
443 && (bfd_is_abs_section (sym->section)
444 || bfd_is_und_section (sym->section)))
450 if (bfd_is_und_section (sym->section))
455 && bfd_is_target_special_symbol (abfd, sym)
456 && ! allow_special_symbols)
462 memcpy (to, from, size);
467 return (to - (bfd_byte *) minisyms) / size;
470 /* These globals are used to pass information into the sorting
472 static bfd *sort_bfd;
473 static bfd_boolean sort_dynamic;
474 static asymbol *sort_x;
475 static asymbol *sort_y;
477 /* Symbol-sorting predicates */
478 #define valueof(x) ((x)->section->vma + (x)->value)
480 /* Numeric sorts. Undefined symbols are always considered "less than"
481 defined symbols with zero values. Common symbols are not treated
482 specially -- i.e., their sizes are used as their "values". */
485 non_numeric_forward (const void *P_x, const void *P_y)
490 x = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_x, sort_x);
491 y = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_y, sort_y);
492 if (x == NULL || y == NULL)
493 bfd_fatal (bfd_get_filename (sort_bfd));
495 xn = bfd_asymbol_name (x);
496 yn = bfd_asymbol_name (y);
504 /* Solaris 2.5 has a bug in strcoll.
505 strcoll returns invalid values when confronted with empty strings. */
511 return strcoll (xn, yn);
513 return strcmp (xn, yn);
518 non_numeric_reverse (const void *x, const void *y)
520 return - non_numeric_forward (x, y);
524 numeric_forward (const void *P_x, const void *P_y)
529 x = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_x, sort_x);
530 y = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_y, sort_y);
531 if (x == NULL || y == NULL)
532 bfd_fatal (bfd_get_filename (sort_bfd));
534 xs = bfd_get_section (x);
535 ys = bfd_get_section (y);
537 if (bfd_is_und_section (xs))
539 if (! bfd_is_und_section (ys))
542 else if (bfd_is_und_section (ys))
544 else if (valueof (x) != valueof (y))
545 return valueof (x) < valueof (y) ? -1 : 1;
547 return non_numeric_forward (P_x, P_y);
551 numeric_reverse (const void *x, const void *y)
553 return - numeric_forward (x, y);
556 static int (*(sorters[2][2])) (const void *, const void *) =
558 { non_numeric_forward, non_numeric_reverse },
559 { numeric_forward, numeric_reverse }
562 /* This sort routine is used by sort_symbols_by_size. It is similar
563 to numeric_forward, but when symbols have the same value it sorts
564 by section VMA. This simplifies the sort_symbols_by_size code
565 which handles symbols at the end of sections. Also, this routine
566 tries to sort file names before other symbols with the same value.
567 That will make the file name have a zero size, which will make
568 sort_symbols_by_size choose the non file name symbol, leading to
569 more meaningful output. For similar reasons, this code sorts
570 gnu_compiled_* and gcc2_compiled before other symbols with the same
574 size_forward1 (const void *P_x, const void *P_y)
582 x = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_x, sort_x);
583 y = bfd_minisymbol_to_symbol (sort_bfd, sort_dynamic, P_y, sort_y);
584 if (x == NULL || y == NULL)
585 bfd_fatal (bfd_get_filename (sort_bfd));
587 xs = bfd_get_section (x);
588 ys = bfd_get_section (y);
590 if (bfd_is_und_section (xs))
592 if (bfd_is_und_section (ys))
595 if (valueof (x) != valueof (y))
596 return valueof (x) < valueof (y) ? -1 : 1;
598 if (xs->vma != ys->vma)
599 return xs->vma < ys->vma ? -1 : 1;
601 xn = bfd_asymbol_name (x);
602 yn = bfd_asymbol_name (y);
606 /* The symbols gnu_compiled and gcc2_compiled convey even less
607 information than the file name, so sort them out first. */
609 xf = (strstr (xn, "gnu_compiled") != NULL
610 || strstr (xn, "gcc2_compiled") != NULL);
611 yf = (strstr (yn, "gnu_compiled") != NULL
612 || strstr (yn, "gcc2_compiled") != NULL);
619 /* We use a heuristic for the file name. It may not work on non
620 Unix systems, but it doesn't really matter; the only difference
621 is precisely which symbol names get printed. */
623 #define file_symbol(s, sn, snl) \
624 (((s)->flags & BSF_FILE) != 0 \
625 || ((sn)[(snl) - 2] == '.' \
626 && ((sn)[(snl) - 1] == 'o' \
627 || (sn)[(snl) - 1] == 'a')))
629 xf = file_symbol (x, xn, xnl);
630 yf = file_symbol (y, yn, ynl);
637 return non_numeric_forward (P_x, P_y);
640 /* This sort routine is used by sort_symbols_by_size. It is sorting
641 an array of size_sym structures into size order. */
644 size_forward2 (const void *P_x, const void *P_y)
646 const struct size_sym *x = (const struct size_sym *) P_x;
647 const struct size_sym *y = (const struct size_sym *) P_y;
649 if (x->size < y->size)
650 return reverse_sort ? 1 : -1;
651 else if (x->size > y->size)
652 return reverse_sort ? -1 : 1;
654 return sorters[0][reverse_sort] (x->minisym, y->minisym);
657 /* Sort the symbols by size. ELF provides a size but for other formats
658 we have to make a guess by assuming that the difference between the
659 address of a symbol and the address of the next higher symbol is the
663 sort_symbols_by_size (bfd *abfd, bfd_boolean is_dynamic, void *minisyms,
664 long symcount, unsigned int size,
665 struct size_sym **symsizesp)
667 struct size_sym *symsizes;
668 bfd_byte *from, *fromend;
670 asymbol *store_sym, *store_next;
672 qsort (minisyms, symcount, size, size_forward1);
674 /* We are going to return a special set of symbols and sizes to
676 symsizes = (struct size_sym *) xmalloc (symcount * sizeof (struct size_sym));
677 *symsizesp = symsizes;
679 /* Note that filter_symbols has already removed all absolute and
680 undefined symbols. Here we remove all symbols whose size winds
682 from = (bfd_byte *) minisyms;
683 fromend = from + symcount * size;
690 sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, (const void *) from,
693 bfd_fatal (bfd_get_filename (abfd));
696 for (; from < fromend; from += size)
703 if (from + size < fromend)
705 next = bfd_minisymbol_to_symbol (abfd,
707 (const void *) (from + size),
710 bfd_fatal (bfd_get_filename (abfd));
715 sec = bfd_get_section (sym);
717 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
718 sz = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
719 else if (bfd_is_com_section (sec))
723 if (from + size < fromend
724 && sec == bfd_get_section (next))
725 sz = valueof (next) - valueof (sym);
727 sz = (bfd_get_section_vma (abfd, sec)
728 + bfd_section_size (abfd, sec)
734 symsizes->minisym = (const void *) from;
742 store_sym = store_next;
746 symcount = symsizes - *symsizesp;
748 /* We must now sort again by size. */
749 qsort ((void *) *symsizesp, symcount, sizeof (struct size_sym), size_forward2);
754 /* This function is used to get the relocs for a particular section.
755 It is called via bfd_map_over_sections. */
758 get_relocs (bfd *abfd, asection *sec, void *dataarg)
760 struct get_relocs_info *data = (struct get_relocs_info *) dataarg;
764 if ((sec->flags & SEC_RELOC) == 0)
766 *data->relocs = NULL;
773 relsize = bfd_get_reloc_upper_bound (abfd, sec);
775 bfd_fatal (bfd_get_filename (abfd));
777 *data->relocs = (arelent **) xmalloc (relsize);
778 *data->relcount = bfd_canonicalize_reloc (abfd, sec, *data->relocs,
780 if (*data->relcount < 0)
781 bfd_fatal (bfd_get_filename (abfd));
789 /* Print a single symbol. */
792 print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
795 struct extended_symbol_info info;
799 format->print_symbol_filename (archive_bfd, abfd);
801 bfd_get_symbol_info (abfd, sym, &syminfo);
802 info.sinfo = &syminfo;
804 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
805 info.elfinfo = (elf_symbol_type *) sym;
808 format->print_symbol_info (&info, abfd);
812 static asymbol **syms;
813 static long symcount;
814 const char *filename, *functionname;
817 /* We need to get the canonical symbols in order to call
818 bfd_find_nearest_line. This is inefficient, but, then, you
819 don't have to use --line-numbers. */
820 if (abfd != lineno_cache_bfd && syms != NULL)
829 symsize = bfd_get_symtab_upper_bound (abfd);
831 bfd_fatal (bfd_get_filename (abfd));
832 syms = (asymbol **) xmalloc (symsize);
833 symcount = bfd_canonicalize_symtab (abfd, syms);
835 bfd_fatal (bfd_get_filename (abfd));
836 lineno_cache_bfd = abfd;
839 if (bfd_is_und_section (bfd_get_section (sym)))
841 static asection **secs;
842 static arelent ***relocs;
843 static long *relcount;
844 static unsigned int seccount;
848 /* For an undefined symbol, we try to find a reloc for the
849 symbol, and print the line number of the reloc. */
850 if (abfd != lineno_cache_rel_bfd && relocs != NULL)
852 for (i = 0; i < seccount; i++)
853 if (relocs[i] != NULL)
865 struct get_relocs_info rinfo;
867 seccount = bfd_count_sections (abfd);
869 secs = (asection **) xmalloc (seccount * sizeof *secs);
870 relocs = (arelent ***) xmalloc (seccount * sizeof *relocs);
871 relcount = (long *) xmalloc (seccount * sizeof *relcount);
874 rinfo.relocs = relocs;
875 rinfo.relcount = relcount;
877 bfd_map_over_sections (abfd, get_relocs, (void *) &rinfo);
878 lineno_cache_rel_bfd = abfd;
881 symname = bfd_asymbol_name (sym);
882 for (i = 0; i < seccount; i++)
886 for (j = 0; j < relcount[i]; j++)
891 if (r->sym_ptr_ptr != NULL
892 && (*r->sym_ptr_ptr)->section == sym->section
893 && (*r->sym_ptr_ptr)->value == sym->value
895 bfd_asymbol_name (*r->sym_ptr_ptr)) == 0
896 && bfd_find_nearest_line (abfd, secs[i], syms,
897 r->address, &filename,
898 &functionname, &lineno)
901 /* We only print the first one we find. */
902 printf ("\t%s:%u", filename, lineno);
909 else if (bfd_get_section (sym)->owner == abfd)
911 if ((bfd_find_line (abfd, syms, sym, &filename, &lineno)
912 || bfd_find_nearest_line (abfd, bfd_get_section (sym),
913 syms, sym->value, &filename,
914 &functionname, &lineno))
917 printf ("\t%s:%u", filename, lineno);
924 /* Print the symbols when sorting by size. */
927 print_size_symbols (bfd *abfd, bfd_boolean is_dynamic,
928 struct size_sym *symsizes, long symcount,
932 struct size_sym *from, *fromend;
934 store = bfd_make_empty_symbol (abfd);
936 bfd_fatal (bfd_get_filename (abfd));
939 fromend = from + symcount;
940 for (; from < fromend; from++)
945 sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from->minisym, store);
947 bfd_fatal (bfd_get_filename (abfd));
949 /* For elf we have already computed the correct symbol size. */
950 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
953 ssize = from->size - bfd_section_vma (abfd, bfd_get_section (sym));
955 print_symbol (abfd, sym, ssize, archive_bfd);
960 /* Print the symbols. If ARCHIVE_BFD is non-NULL, it is the archive
964 print_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms, long symcount,
965 unsigned int size, bfd *archive_bfd)
968 bfd_byte *from, *fromend;
970 store = bfd_make_empty_symbol (abfd);
972 bfd_fatal (bfd_get_filename (abfd));
974 from = (bfd_byte *) minisyms;
975 fromend = from + symcount * size;
976 for (; from < fromend; from += size)
980 sym = bfd_minisymbol_to_symbol (abfd, is_dynamic, from, store);
982 bfd_fatal (bfd_get_filename (abfd));
984 print_symbol (abfd, sym, (bfd_vma) 0, archive_bfd);
988 /* If ARCHIVE_BFD is non-NULL, it is the archive containing ABFD. */
991 display_rel_file (bfd *abfd, bfd *archive_bfd)
996 struct size_sym *symsizes;
1000 if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
1002 non_fatal (_("%s: no symbols"), bfd_get_filename (abfd));
1007 symcount = bfd_read_minisymbols (abfd, dynamic, &minisyms, &size);
1009 bfd_fatal (bfd_get_filename (abfd));
1013 non_fatal (_("%s: no symbols"), bfd_get_filename (abfd));
1017 if (show_synthetic && size == sizeof (asymbol *))
1021 asymbol **static_syms = NULL;
1022 asymbol **dyn_syms = NULL;
1023 long static_count = 0;
1028 dyn_count = symcount;
1029 dyn_syms = (asymbol **) minisyms;
1033 long storage = bfd_get_dynamic_symtab_upper_bound (abfd);
1035 static_count = symcount;
1036 static_syms = (asymbol **) minisyms;
1040 dyn_syms = (asymbol **) xmalloc (storage);
1041 dyn_count = bfd_canonicalize_dynamic_symtab (abfd, dyn_syms);
1043 bfd_fatal (bfd_get_filename (abfd));
1046 synth_count = bfd_get_synthetic_symtab (abfd, static_count, static_syms,
1047 dyn_count, dyn_syms, &synthsyms);
1048 if (synth_count > 0)
1054 new_mini = xmalloc ((symcount + synth_count + 1) * sizeof (*symp));
1055 symp = (asymbol **) new_mini;
1056 memcpy (symp, minisyms, symcount * sizeof (*symp));
1058 for (i = 0; i < synth_count; i++)
1059 *symp++ = synthsyms + i;
1061 minisyms = new_mini;
1062 symcount += synth_count;
1066 /* Discard the symbols we don't want to print.
1067 It's OK to do this in place; we'll free the storage anyway
1068 (after printing). */
1070 symcount = filter_symbols (abfd, dynamic, minisyms, symcount, size);
1076 sort_dynamic = dynamic;
1077 sort_x = bfd_make_empty_symbol (abfd);
1078 sort_y = bfd_make_empty_symbol (abfd);
1079 if (sort_x == NULL || sort_y == NULL)
1080 bfd_fatal (bfd_get_filename (abfd));
1083 qsort (minisyms, symcount, size,
1084 sorters[sort_numerically][reverse_sort]);
1086 symcount = sort_symbols_by_size (abfd, dynamic, minisyms, symcount,
1091 print_symbols (abfd, dynamic, minisyms, symcount, size, archive_bfd);
1093 print_size_symbols (abfd, dynamic, symsizes, symcount, archive_bfd);
1099 set_print_width (bfd *file)
1101 print_width = bfd_get_arch_size (file);
1103 if (print_width == -1)
1106 Guess the target's bitsize based on its name.
1107 We assume here than any 64-bit format will include
1108 "64" somewhere in its name. The only known exception
1109 is the MMO object file format. */
1110 if (strstr (bfd_get_target (file), "64") != NULL
1111 || strcmp (bfd_get_target (file), "mmo") == 0)
1119 display_archive (bfd *file)
1122 bfd *last_arfile = NULL;
1125 format->print_archive_filename (bfd_get_filename (file));
1128 print_symdef_entry (file);
1134 arfile = bfd_openr_next_archived_file (file, arfile);
1138 if (bfd_get_error () != bfd_error_no_more_archived_files)
1139 bfd_fatal (bfd_get_filename (file));
1143 if (bfd_check_format_matches (arfile, bfd_object, &matching))
1145 set_print_width (arfile);
1146 format->print_archive_member (bfd_get_filename (file),
1147 bfd_get_filename (arfile));
1148 display_rel_file (arfile, file);
1152 bfd_nonfatal (bfd_get_filename (arfile));
1153 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
1155 list_matching_formats (matching);
1160 if (last_arfile != NULL)
1162 bfd_close (last_arfile);
1163 lineno_cache_bfd = NULL;
1164 lineno_cache_rel_bfd = NULL;
1166 last_arfile = arfile;
1169 if (last_arfile != NULL)
1171 bfd_close (last_arfile);
1172 lineno_cache_bfd = NULL;
1173 lineno_cache_rel_bfd = NULL;
1178 display_file (char *filename)
1180 bfd_boolean retval = TRUE;
1184 if (get_file_size (filename) < 1)
1187 file = bfd_openr (filename, target ? target : plugin_target);
1190 bfd_nonfatal (filename);
1194 if (bfd_check_format (file, bfd_archive))
1196 display_archive (file);
1198 else if (bfd_check_format_matches (file, bfd_object, &matching))
1200 set_print_width (file);
1201 format->print_object_filename (filename);
1202 display_rel_file (file, NULL);
1206 bfd_nonfatal (filename);
1207 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
1209 list_matching_formats (matching);
1215 if (!bfd_close (file))
1216 bfd_fatal (filename);
1218 lineno_cache_bfd = NULL;
1219 lineno_cache_rel_bfd = NULL;
1224 /* The following 3 groups of functions are called unconditionally,
1225 once at the start of processing each file of the appropriate type.
1226 They should check `filename_per_file' and `filename_per_symbol',
1227 as appropriate for their output format, to determine whether to
1230 /* Print the name of an object file given on the command line. */
1233 print_object_filename_bsd (char *filename)
1235 if (filename_per_file && !filename_per_symbol)
1236 printf ("\n%s:\n", filename);
1240 print_object_filename_sysv (char *filename)
1243 printf (_("\n\nUndefined symbols from %s:\n\n"), filename);
1245 printf (_("\n\nSymbols from %s:\n\n"), filename);
1246 if (print_width == 32)
1248 Name Value Class Type Size Line Section\n\n"));
1251 Name Value Class Type Size Line Section\n\n"));
1255 print_object_filename_posix (char *filename)
1257 if (filename_per_file && !filename_per_symbol)
1258 printf ("%s:\n", filename);
1261 /* Print the name of an archive file given on the command line. */
1264 print_archive_filename_bsd (char *filename)
1266 if (filename_per_file)
1267 printf ("\n%s:\n", filename);
1271 print_archive_filename_sysv (char *filename ATTRIBUTE_UNUSED)
1276 print_archive_filename_posix (char *filename ATTRIBUTE_UNUSED)
1280 /* Print the name of an archive member file. */
1283 print_archive_member_bsd (char *archive ATTRIBUTE_UNUSED,
1284 const char *filename)
1286 if (!filename_per_symbol)
1287 printf ("\n%s:\n", filename);
1291 print_archive_member_sysv (char *archive, const char *filename)
1294 printf (_("\n\nUndefined symbols from %s[%s]:\n\n"), archive, filename);
1296 printf (_("\n\nSymbols from %s[%s]:\n\n"), archive, filename);
1297 if (print_width == 32)
1299 Name Value Class Type Size Line Section\n\n"));
1302 Name Value Class Type Size Line Section\n\n"));
1306 print_archive_member_posix (char *archive, const char *filename)
1308 if (!filename_per_symbol)
1309 printf ("%s[%s]:\n", archive, filename);
1312 /* Print the name of the file (and archive, if there is one)
1313 containing a symbol. */
1316 print_symbol_filename_bsd (bfd *archive_bfd, bfd *abfd)
1318 if (filename_per_symbol)
1321 printf ("%s:", bfd_get_filename (archive_bfd));
1322 printf ("%s:", bfd_get_filename (abfd));
1327 print_symbol_filename_sysv (bfd *archive_bfd, bfd *abfd)
1329 if (filename_per_symbol)
1332 printf ("%s:", bfd_get_filename (archive_bfd));
1333 printf ("%s:", bfd_get_filename (abfd));
1338 print_symbol_filename_posix (bfd *archive_bfd, bfd *abfd)
1340 if (filename_per_symbol)
1343 printf ("%s[%s]: ", bfd_get_filename (archive_bfd),
1344 bfd_get_filename (abfd));
1346 printf ("%s: ", bfd_get_filename (abfd));
1350 /* Print a symbol value. */
1353 print_value (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma val)
1355 switch (print_width)
1358 printf (value_format_32bit, (unsigned long) val);
1362 #if BFD_HOST_64BIT_LONG || BFD_HOST_64BIT_LONG_LONG
1363 printf (value_format_64bit, val);
1365 /* We have a 64 bit value to print, but the host is only 32 bit. */
1366 if (print_radix == 16)
1367 bfd_fprintf_vma (abfd, stdout, val);
1373 s = buf + sizeof buf;
1377 *--s = (val % print_radix) + '0';
1380 while ((buf + sizeof buf - 1) - s < 16)
1388 fatal (_("Print width has not been initialized (%d)"), print_width);
1393 /* Print a line of information about a symbol. */
1396 print_symbol_info_bsd (struct extended_symbol_info *info, bfd *abfd)
1398 if (bfd_is_undefined_symclass (SYM_TYPE (info)))
1400 if (print_width == 64)
1406 /* Normally we print the value of the symbol. If we are printing the
1407 size or sorting by size then we print its size, except for the
1408 (weird) special case where both flags are defined, in which case we
1409 print both values. This conforms to documented behaviour. */
1410 if (sort_by_size && !print_size)
1411 print_value (abfd, SYM_SIZE (info));
1413 print_value (abfd, SYM_VALUE (info));
1415 if (print_size && SYM_SIZE (info))
1418 print_value (abfd, SYM_SIZE (info));
1422 printf (" %c", SYM_TYPE (info));
1424 if (SYM_TYPE (info) == '-')
1428 printf (other_format, SYM_STAB_OTHER (info));
1430 printf (desc_format, SYM_STAB_DESC (info));
1431 printf (" %5s", SYM_STAB_NAME (info));
1433 print_symname (" %s", SYM_NAME (info), abfd);
1437 print_symbol_info_sysv (struct extended_symbol_info *info, bfd *abfd)
1439 print_symname ("%-20s|", SYM_NAME (info), abfd);
1441 if (bfd_is_undefined_symclass (SYM_TYPE (info)))
1443 if (print_width == 32)
1449 print_value (abfd, SYM_VALUE (info));
1451 printf ("| %c |", SYM_TYPE (info));
1453 if (SYM_TYPE (info) == '-')
1456 printf ("%18s| ", SYM_STAB_NAME (info)); /* (C) Type. */
1457 printf (desc_format, SYM_STAB_DESC (info)); /* Size. */
1458 printf ("| |"); /* Line, Section. */
1462 /* Type, Size, Line, Section */
1465 get_symbol_type (ELF_ST_TYPE (info->elfinfo->internal_elf_sym.st_info)));
1469 if (SYM_SIZE (info))
1470 print_value (abfd, SYM_SIZE (info));
1473 if (print_width == 32)
1480 printf("| |%s", info->elfinfo->symbol.section->name);
1487 print_symbol_info_posix (struct extended_symbol_info *info, bfd *abfd)
1489 print_symname ("%s ", SYM_NAME (info), abfd);
1490 printf ("%c ", SYM_TYPE (info));
1492 if (bfd_is_undefined_symclass (SYM_TYPE (info)))
1496 print_value (abfd, SYM_VALUE (info));
1498 if (SYM_SIZE (info))
1499 print_value (abfd, SYM_SIZE (info));
1504 main (int argc, char **argv)
1509 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
1510 setlocale (LC_MESSAGES, "");
1512 #if defined (HAVE_SETLOCALE)
1513 setlocale (LC_CTYPE, "");
1514 setlocale (LC_COLLATE, "");
1516 bindtextdomain (PACKAGE, LOCALEDIR);
1517 textdomain (PACKAGE);
1519 program_name = *argv;
1520 xmalloc_set_program_name (program_name);
1521 #if BFD_SUPPORTS_PLUGINS
1522 bfd_plugin_set_program_name (program_name);
1525 START_PROGRESS (program_name, 0);
1527 expandargv (&argc, &argv);
1530 set_default_bfd_target ();
1532 while ((c = getopt_long (argc, argv, "aABCDef:gHhlnopPrSst:uvVvX:",
1533 long_options, (int *) 0)) != EOF)
1538 print_debug_syms = 1;
1542 filename_per_symbol = 1;
1544 case 'B': /* For MIPS compatibility. */
1545 set_output_format ("bsd");
1551 enum demangling_styles style;
1553 style = cplus_demangle_name_to_style (optarg);
1554 if (style == unknown_demangling)
1555 fatal (_("unknown demangling style `%s'"),
1558 cplus_demangle_set_style (style);
1565 /* Ignored for HP/UX compatibility. */
1568 set_output_format (optarg);
1581 sort_numerically = 1;
1587 set_output_format ("posix");
1599 set_print_radix (optarg);
1608 /* Ignored for (partial) AIX compatibility. On AIX, the
1609 argument has values 32, 64, or 32_64, and specifies that
1610 only 32-bit, only 64-bit, or both kinds of objects should
1611 be examined. The default is 32. So plain AIX nm on a
1612 library archive with both kinds of objects will ignore
1613 the 64-bit ones. For GNU nm, the default is and always
1614 has been -X 32_64, and other options are not supported. */
1615 if (strcmp (optarg, "32_64") != 0)
1616 fatal (_("Only -X 32_64 is supported"));
1619 case OPTION_TARGET: /* --target */
1623 case OPTION_PLUGIN: /* --plugin */
1624 #if BFD_SUPPORTS_PLUGINS
1625 plugin_target = "plugin";
1626 bfd_plugin_set_plugin (optarg);
1628 fatal (_("sorry - this program has been built without plugin support\n"));
1632 case 0: /* A long option that just sets a flag. */
1641 print_version ("nm");
1643 if (sort_by_size && undefined_only)
1645 non_fatal (_("Using the --size-sort and --undefined-only options together"));
1646 non_fatal (_("will produce no output, since undefined symbols have no size."));
1650 /* OK, all options now parsed. If no filename specified, do a.out. */
1652 return !display_file ("a.out");
1656 if (argc - optind > 1)
1657 filename_per_file = 1;
1659 /* We were given several filenames to do. */
1660 while (optind < argc)
1663 if (!display_file (argv[optind++]))
1667 END_PROGRESS (program_name);
1672 char *lim = (char *) sbrk (0);
1674 non_fatal (_("data size %ld"), (long) (lim - (char *) &environ));