[AArch64] Make register indices be full 64-bit values
[external/binutils.git] / binutils / objdump.c
1 /* objdump.c -- dump information about an object file.
2    Copyright (C) 1990-2016 Free Software Foundation, Inc.
3
4    This file is part of GNU Binutils.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3, or (at your option)
9    any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20
21
22 /* Objdump overview.
23
24    Objdump displays information about one or more object files, either on
25    their own, or inside libraries.  It is commonly used as a disassembler,
26    but it can also display information about file headers, symbol tables,
27    relocations, debugging directives and more.
28
29    The flow of execution is as follows:
30
31    1. Command line arguments are checked for control switches and the
32       information to be displayed is selected.
33
34    2. Any remaining arguments are assumed to be object files, and they are
35       processed in order by display_bfd().  If the file is an archive each
36       of its elements is processed in turn.
37
38    3. The file's target architecture and binary file format are determined
39       by bfd_check_format().  If they are recognised, then dump_bfd() is
40       called.
41
42    4. dump_bfd() in turn calls separate functions to display the requested
43       item(s) of information(s).  For example disassemble_data() is called if
44       a disassembly has been requested.
45
46    When disassembling the code loops through blocks of instructions bounded
47    by symbols, calling disassemble_bytes() on each block.  The actual
48    disassembling is done by the libopcodes library, via a function pointer
49    supplied by the disassembler() function.  */
50
51 #include "sysdep.h"
52 #include "bfd.h"
53 #include "elf-bfd.h"
54 #include "coff-bfd.h"
55 #include "progress.h"
56 #include "bucomm.h"
57 #include "elfcomm.h"
58 #include "dwarf.h"
59 #include "getopt.h"
60 #include "safe-ctype.h"
61 #include "dis-asm.h"
62 #include "libiberty.h"
63 #include "demangle.h"
64 #include "filenames.h"
65 #include "debug.h"
66 #include "budbg.h"
67 #include "objdump.h"
68
69 #ifdef HAVE_MMAP
70 #include <sys/mman.h>
71 #endif
72
73 /* Internal headers for the ELF .stab-dump code - sorry.  */
74 #define BYTES_IN_WORD   32
75 #include "aout/aout64.h"
76
77 /* Exit status.  */
78 static int exit_status = 0;
79
80 static char *default_target = NULL;     /* Default at runtime.  */
81
82 /* The following variables are set based on arguments passed on the
83    command line.  */
84 static int show_version = 0;            /* Show the version number.  */
85 static int dump_section_contents;       /* -s */
86 static int dump_section_headers;        /* -h */
87 static bfd_boolean dump_file_header;    /* -f */
88 static int dump_symtab;                 /* -t */
89 static int dump_dynamic_symtab;         /* -T */
90 static int dump_reloc_info;             /* -r */
91 static int dump_dynamic_reloc_info;     /* -R */
92 static int dump_ar_hdrs;                /* -a */
93 static int dump_private_headers;        /* -p */
94 static char *dump_private_options;      /* -P */
95 static int prefix_addresses;            /* --prefix-addresses */
96 static int with_line_numbers;           /* -l */
97 static bfd_boolean with_source_code;    /* -S */
98 static int show_raw_insn;               /* --show-raw-insn */
99 static int dump_dwarf_section_info;     /* --dwarf */
100 static int dump_stab_section_info;      /* --stabs */
101 static int do_demangle;                 /* -C, --demangle */
102 static bfd_boolean disassemble;         /* -d */
103 static bfd_boolean disassemble_all;     /* -D */
104 static int disassemble_zeroes;          /* --disassemble-zeroes */
105 static bfd_boolean formats_info;        /* -i */
106 static int wide_output;                 /* -w */
107 static int insn_width;                  /* --insn-width */
108 static bfd_vma start_address = (bfd_vma) -1; /* --start-address */
109 static bfd_vma stop_address = (bfd_vma) -1;  /* --stop-address */
110 static int dump_debugging;              /* --debugging */
111 static int dump_debugging_tags;         /* --debugging-tags */
112 static int suppress_bfd_header;
113 static int dump_special_syms = 0;       /* --special-syms */
114 static bfd_vma adjust_section_vma = 0;  /* --adjust-vma */
115 static int file_start_context = 0;      /* --file-start-context */
116 static bfd_boolean display_file_offsets;/* -F */
117 static const char *prefix;              /* --prefix */
118 static int prefix_strip;                /* --prefix-strip */
119 static size_t prefix_length;
120
121 /* A structure to record the sections mentioned in -j switches.  */
122 struct only
123 {
124   const char * name; /* The name of the section.  */
125   bfd_boolean  seen; /* A flag to indicate that the section has been found in one or more input files.  */
126   struct only * next; /* Pointer to the next structure in the list.  */
127 };
128 /* Pointer to an array of 'only' structures.
129    This pointer is NULL if the -j switch has not been used.  */
130 static struct only * only_list = NULL;
131
132 /* Variables for handling include file path table.  */
133 static const char **include_paths;
134 static int include_path_count;
135
136 /* Extra info to pass to the section disassembler and address printing
137    function.  */
138 struct objdump_disasm_info
139 {
140   bfd *              abfd;
141   asection *         sec;
142   bfd_boolean        require_sec;
143   arelent **         dynrelbuf;
144   long               dynrelcount;
145   disassembler_ftype disassemble_fn;
146   arelent *          reloc;
147 };
148
149 /* Architecture to disassemble for, or default if NULL.  */
150 static char *machine = NULL;
151
152 /* Target specific options to the disassembler.  */
153 static char *disassembler_options = NULL;
154
155 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN.  */
156 static enum bfd_endian endian = BFD_ENDIAN_UNKNOWN;
157
158 /* The symbol table.  */
159 static asymbol **syms;
160
161 /* Number of symbols in `syms'.  */
162 static long symcount = 0;
163
164 /* The sorted symbol table.  */
165 static asymbol **sorted_syms;
166
167 /* Number of symbols in `sorted_syms'.  */
168 static long sorted_symcount = 0;
169
170 /* The dynamic symbol table.  */
171 static asymbol **dynsyms;
172
173 /* The synthetic symbol table.  */
174 static asymbol *synthsyms;
175 static long synthcount = 0;
176
177 /* Number of symbols in `dynsyms'.  */
178 static long dynsymcount = 0;
179
180 static bfd_byte *stabs;
181 static bfd_size_type stab_size;
182
183 static char *strtab;
184 static bfd_size_type stabstr_size;
185
186 static bfd_boolean is_relocatable = FALSE;
187
188 /* Handlers for -P/--private.  */
189 static const struct objdump_private_desc * const objdump_private_vectors[] =
190   {
191     OBJDUMP_PRIVATE_VECTORS
192     NULL
193   };
194 \f
195 static void usage (FILE *, int) ATTRIBUTE_NORETURN;
196 static void
197 usage (FILE *stream, int status)
198 {
199   fprintf (stream, _("Usage: %s <option(s)> <file(s)>\n"), program_name);
200   fprintf (stream, _(" Display information from object <file(s)>.\n"));
201   fprintf (stream, _(" At least one of the following switches must be given:\n"));
202   fprintf (stream, _("\
203   -a, --archive-headers    Display archive header information\n\
204   -f, --file-headers       Display the contents of the overall file header\n\
205   -p, --private-headers    Display object format specific file header contents\n\
206   -P, --private=OPT,OPT... Display object format specific contents\n\
207   -h, --[section-]headers  Display the contents of the section headers\n\
208   -x, --all-headers        Display the contents of all headers\n\
209   -d, --disassemble        Display assembler contents of executable sections\n\
210   -D, --disassemble-all    Display assembler contents of all sections\n\
211   -S, --source             Intermix source code with disassembly\n\
212   -s, --full-contents      Display the full contents of all sections requested\n\
213   -g, --debugging          Display debug information in object file\n\
214   -e, --debugging-tags     Display debug information using ctags style\n\
215   -G, --stabs              Display (in raw form) any STABS info in the file\n\
216   -W[lLiaprmfFsoRt] or\n\
217   --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n\
218           =frames-interp,=str,=loc,=Ranges,=pubtypes,\n\
219           =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n\
220           =addr,=cu_index]\n\
221                            Display DWARF info in the file\n\
222   -t, --syms               Display the contents of the symbol table(s)\n\
223   -T, --dynamic-syms       Display the contents of the dynamic symbol table\n\
224   -r, --reloc              Display the relocation entries in the file\n\
225   -R, --dynamic-reloc      Display the dynamic relocation entries in the file\n\
226   @<file>                  Read options from <file>\n\
227   -v, --version            Display this program's version number\n\
228   -i, --info               List object formats and architectures supported\n\
229   -H, --help               Display this information\n\
230 "));
231   if (status != 2)
232     {
233       const struct objdump_private_desc * const *desc;
234
235       fprintf (stream, _("\n The following switches are optional:\n"));
236       fprintf (stream, _("\
237   -b, --target=BFDNAME           Specify the target object format as BFDNAME\n\
238   -m, --architecture=MACHINE     Specify the target architecture as MACHINE\n\
239   -j, --section=NAME             Only display information for section NAME\n\
240   -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n\
241   -EB --endian=big               Assume big endian format when disassembling\n\
242   -EL --endian=little            Assume little endian format when disassembling\n\
243       --file-start-context       Include context from start of file (with -S)\n\
244   -I, --include=DIR              Add DIR to search list for source files\n\
245   -l, --line-numbers             Include line numbers and filenames in output\n\
246   -F, --file-offsets             Include file offsets when displaying information\n\
247   -C, --demangle[=STYLE]         Decode mangled/processed symbol names\n\
248                                   The STYLE, if specified, can be `auto', `gnu',\n\
249                                   `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\
250                                   or `gnat'\n\
251   -w, --wide                     Format output for more than 80 columns\n\
252   -z, --disassemble-zeroes       Do not skip blocks of zeroes when disassembling\n\
253       --start-address=ADDR       Only process data whose address is >= ADDR\n\
254       --stop-address=ADDR        Only process data whose address is <= ADDR\n\
255       --prefix-addresses         Print complete address alongside disassembly\n\
256       --[no-]show-raw-insn       Display hex alongside symbolic disassembly\n\
257       --insn-width=WIDTH         Display WIDTH bytes on a single line for -d\n\
258       --adjust-vma=OFFSET        Add OFFSET to all displayed section addresses\n\
259       --special-syms             Include special symbols in symbol dumps\n\
260       --prefix=PREFIX            Add PREFIX to absolute paths for -S\n\
261       --prefix-strip=LEVEL       Strip initial directory names for -S\n"));
262       fprintf (stream, _("\
263       --dwarf-depth=N        Do not display DIEs at depth N or greater\n\
264       --dwarf-start=N        Display DIEs starting with N, at the same depth\n\
265                              or deeper\n\
266       --dwarf-check          Make additional dwarf internal consistency checks.\
267       \n\n"));
268       list_supported_targets (program_name, stream);
269       list_supported_architectures (program_name, stream);
270
271       disassembler_usage (stream);
272
273       if (objdump_private_vectors[0] != NULL)
274         {
275           fprintf (stream,
276                    _("\nOptions supported for -P/--private switch:\n"));
277           for (desc = objdump_private_vectors; *desc != NULL; desc++)
278             (*desc)->help (stream);
279         }
280     }
281   if (REPORT_BUGS_TO[0] && status == 0)
282     fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
283   exit (status);
284 }
285
286 /* 150 isn't special; it's just an arbitrary non-ASCII char value.  */
287 enum option_values
288   {
289     OPTION_ENDIAN=150,
290     OPTION_START_ADDRESS,
291     OPTION_STOP_ADDRESS,
292     OPTION_DWARF,
293     OPTION_PREFIX,
294     OPTION_PREFIX_STRIP,
295     OPTION_INSN_WIDTH,
296     OPTION_ADJUST_VMA,
297     OPTION_DWARF_DEPTH,
298     OPTION_DWARF_CHECK,
299     OPTION_DWARF_START
300   };
301
302 static struct option long_options[]=
303 {
304   {"adjust-vma", required_argument, NULL, OPTION_ADJUST_VMA},
305   {"all-headers", no_argument, NULL, 'x'},
306   {"private-headers", no_argument, NULL, 'p'},
307   {"private", required_argument, NULL, 'P'},
308   {"architecture", required_argument, NULL, 'm'},
309   {"archive-headers", no_argument, NULL, 'a'},
310   {"debugging", no_argument, NULL, 'g'},
311   {"debugging-tags", no_argument, NULL, 'e'},
312   {"demangle", optional_argument, NULL, 'C'},
313   {"disassemble", no_argument, NULL, 'd'},
314   {"disassemble-all", no_argument, NULL, 'D'},
315   {"disassembler-options", required_argument, NULL, 'M'},
316   {"disassemble-zeroes", no_argument, NULL, 'z'},
317   {"dynamic-reloc", no_argument, NULL, 'R'},
318   {"dynamic-syms", no_argument, NULL, 'T'},
319   {"endian", required_argument, NULL, OPTION_ENDIAN},
320   {"file-headers", no_argument, NULL, 'f'},
321   {"file-offsets", no_argument, NULL, 'F'},
322   {"file-start-context", no_argument, &file_start_context, 1},
323   {"full-contents", no_argument, NULL, 's'},
324   {"headers", no_argument, NULL, 'h'},
325   {"help", no_argument, NULL, 'H'},
326   {"info", no_argument, NULL, 'i'},
327   {"line-numbers", no_argument, NULL, 'l'},
328   {"no-show-raw-insn", no_argument, &show_raw_insn, -1},
329   {"prefix-addresses", no_argument, &prefix_addresses, 1},
330   {"reloc", no_argument, NULL, 'r'},
331   {"section", required_argument, NULL, 'j'},
332   {"section-headers", no_argument, NULL, 'h'},
333   {"show-raw-insn", no_argument, &show_raw_insn, 1},
334   {"source", no_argument, NULL, 'S'},
335   {"special-syms", no_argument, &dump_special_syms, 1},
336   {"include", required_argument, NULL, 'I'},
337   {"dwarf", optional_argument, NULL, OPTION_DWARF},
338   {"stabs", no_argument, NULL, 'G'},
339   {"start-address", required_argument, NULL, OPTION_START_ADDRESS},
340   {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
341   {"syms", no_argument, NULL, 't'},
342   {"target", required_argument, NULL, 'b'},
343   {"version", no_argument, NULL, 'V'},
344   {"wide", no_argument, NULL, 'w'},
345   {"prefix", required_argument, NULL, OPTION_PREFIX},
346   {"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP},
347   {"insn-width", required_argument, NULL, OPTION_INSN_WIDTH},
348   {"dwarf-depth",      required_argument, 0, OPTION_DWARF_DEPTH},
349   {"dwarf-start",      required_argument, 0, OPTION_DWARF_START},
350   {"dwarf-check",      no_argument, 0, OPTION_DWARF_CHECK},
351   {0, no_argument, 0, 0}
352 };
353 \f
354 static void
355 nonfatal (const char *msg)
356 {
357   bfd_nonfatal (msg);
358   exit_status = 1;
359 }
360 \f
361 /* Returns TRUE if the specified section should be dumped.  */
362
363 static bfd_boolean
364 process_section_p (asection * section)
365 {
366   struct only * only;
367
368   if (only_list == NULL)
369     return TRUE;
370
371   for (only = only_list; only; only = only->next)
372     if (strcmp (only->name, section->name) == 0)
373       {
374         only->seen = TRUE;
375         return TRUE;
376       }
377
378   return FALSE;
379 }
380
381 /* Add an entry to the 'only' list.  */
382
383 static void
384 add_only (char * name)
385 {
386   struct only * only;
387
388   /* First check to make sure that we do not
389      already have an entry for this name.  */
390   for (only = only_list; only; only = only->next)
391     if (strcmp (only->name, name) == 0)
392       return;
393
394   only = xmalloc (sizeof * only);
395   only->name = name;
396   only->seen = FALSE;
397   only->next = only_list;
398   only_list = only;
399 }
400
401 /* Release the memory used by the 'only' list.
402    PR 11225: Issue a warning message for unseen sections.
403    Only do this if none of the sections were seen.  This is mainly to support
404    tools like the GAS testsuite where an object file is dumped with a list of
405    generic section names known to be present in a range of different file
406    formats.  */
407
408 static void
409 free_only_list (void)
410 {
411   bfd_boolean at_least_one_seen = FALSE;
412   struct only * only;
413   struct only * next;
414
415   if (only_list == NULL)
416     return;
417
418   for (only = only_list; only; only = only->next)
419     if (only->seen)
420       {
421         at_least_one_seen = TRUE;
422         break;
423       }
424
425   for (only = only_list; only; only = next)
426     {
427       if (! at_least_one_seen)
428         {
429           non_fatal (_("section '%s' mentioned in a -j option, "
430                        "but not found in any input file"),
431                      only->name);
432           exit_status = 1;
433         }
434       next = only->next;
435       free (only);
436     }
437 }
438
439 \f
440 static void
441 dump_section_header (bfd *abfd, asection *section,
442                      void *ignored ATTRIBUTE_UNUSED)
443 {
444   char *comma = "";
445   unsigned int opb = bfd_octets_per_byte (abfd);
446
447   /* Ignore linker created section.  See elfNN_ia64_object_p in
448      bfd/elfxx-ia64.c.  */
449   if (section->flags & SEC_LINKER_CREATED)
450     return;
451
452   /* PR 10413: Skip sections that we are ignoring.  */
453   if (! process_section_p (section))
454     return;
455
456   printf ("%3d %-13s %08lx  ", section->index,
457           bfd_get_section_name (abfd, section),
458           (unsigned long) bfd_section_size (abfd, section) / opb);
459   bfd_printf_vma (abfd, bfd_get_section_vma (abfd, section));
460   printf ("  ");
461   bfd_printf_vma (abfd, section->lma);
462   printf ("  %08lx  2**%u", (unsigned long) section->filepos,
463           bfd_get_section_alignment (abfd, section));
464   if (! wide_output)
465     printf ("\n                ");
466   printf ("  ");
467
468 #define PF(x, y) \
469   if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
470
471   PF (SEC_HAS_CONTENTS, "CONTENTS");
472   PF (SEC_ALLOC, "ALLOC");
473   PF (SEC_CONSTRUCTOR, "CONSTRUCTOR");
474   PF (SEC_LOAD, "LOAD");
475   PF (SEC_RELOC, "RELOC");
476   PF (SEC_READONLY, "READONLY");
477   PF (SEC_CODE, "CODE");
478   PF (SEC_DATA, "DATA");
479   PF (SEC_ROM, "ROM");
480   PF (SEC_DEBUGGING, "DEBUGGING");
481   PF (SEC_NEVER_LOAD, "NEVER_LOAD");
482   PF (SEC_EXCLUDE, "EXCLUDE");
483   PF (SEC_SORT_ENTRIES, "SORT_ENTRIES");
484   if (bfd_get_arch (abfd) == bfd_arch_tic54x)
485     {
486       PF (SEC_TIC54X_BLOCK, "BLOCK");
487       PF (SEC_TIC54X_CLINK, "CLINK");
488     }
489   PF (SEC_SMALL_DATA, "SMALL_DATA");
490   if (bfd_get_flavour (abfd) == bfd_target_coff_flavour)
491     {
492       PF (SEC_COFF_SHARED, "SHARED");
493       PF (SEC_COFF_NOREAD, "NOREAD");
494     }
495   else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
496     {
497       /* Note - sections can have both the READONLY and NOREAD attributes
498          set.  In this case the NOREAD takes precedence, but we report both
499          since the user may need to know that both bits are set.  */
500       PF (SEC_ELF_NOREAD, "NOREAD");
501     }
502   PF (SEC_THREAD_LOCAL, "THREAD_LOCAL");
503   PF (SEC_GROUP, "GROUP");
504   if (bfd_get_arch (abfd) == bfd_arch_mep)
505     {
506       PF (SEC_MEP_VLIW, "VLIW");
507     }
508
509   if ((section->flags & SEC_LINK_ONCE) != 0)
510     {
511       const char *ls;
512       struct coff_comdat_info *comdat;
513
514       switch (section->flags & SEC_LINK_DUPLICATES)
515         {
516         default:
517           abort ();
518         case SEC_LINK_DUPLICATES_DISCARD:
519           ls = "LINK_ONCE_DISCARD";
520           break;
521         case SEC_LINK_DUPLICATES_ONE_ONLY:
522           ls = "LINK_ONCE_ONE_ONLY";
523           break;
524         case SEC_LINK_DUPLICATES_SAME_SIZE:
525           ls = "LINK_ONCE_SAME_SIZE";
526           break;
527         case SEC_LINK_DUPLICATES_SAME_CONTENTS:
528           ls = "LINK_ONCE_SAME_CONTENTS";
529           break;
530         }
531       printf ("%s%s", comma, ls);
532
533       comdat = bfd_coff_get_comdat_section (abfd, section);
534       if (comdat != NULL)
535         printf (" (COMDAT %s %ld)", comdat->name, comdat->symbol);
536
537       comma = ", ";
538     }
539
540   printf ("\n");
541 #undef PF
542 }
543
544 static void
545 dump_headers (bfd *abfd)
546 {
547   printf (_("Sections:\n"));
548
549 #ifndef BFD64
550   printf (_("Idx Name          Size      VMA       LMA       File off  Algn"));
551 #else
552   /* With BFD64, non-ELF returns -1 and wants always 64 bit addresses.  */
553   if (bfd_get_arch_size (abfd) == 32)
554     printf (_("Idx Name          Size      VMA       LMA       File off  Algn"));
555   else
556     printf (_("Idx Name          Size      VMA               LMA               File off  Algn"));
557 #endif
558
559   if (wide_output)
560     printf (_("  Flags"));
561   printf ("\n");
562
563   bfd_map_over_sections (abfd, dump_section_header, NULL);
564 }
565 \f
566 static asymbol **
567 slurp_symtab (bfd *abfd)
568 {
569   asymbol **sy = NULL;
570   long storage;
571
572   if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
573     {
574       symcount = 0;
575       return NULL;
576     }
577
578   storage = bfd_get_symtab_upper_bound (abfd);
579   if (storage < 0)
580     {
581       non_fatal (_("failed to read symbol table from: %s"), bfd_get_filename (abfd));
582       bfd_fatal (_("error message was"));
583     }
584   if (storage)
585     sy = (asymbol **) xmalloc (storage);
586
587   symcount = bfd_canonicalize_symtab (abfd, sy);
588   if (symcount < 0)
589     bfd_fatal (bfd_get_filename (abfd));
590   return sy;
591 }
592
593 /* Read in the dynamic symbols.  */
594
595 static asymbol **
596 slurp_dynamic_symtab (bfd *abfd)
597 {
598   asymbol **sy = NULL;
599   long storage;
600
601   storage = bfd_get_dynamic_symtab_upper_bound (abfd);
602   if (storage < 0)
603     {
604       if (!(bfd_get_file_flags (abfd) & DYNAMIC))
605         {
606           non_fatal (_("%s: not a dynamic object"), bfd_get_filename (abfd));
607           exit_status = 1;
608           dynsymcount = 0;
609           return NULL;
610         }
611
612       bfd_fatal (bfd_get_filename (abfd));
613     }
614   if (storage)
615     sy = (asymbol **) xmalloc (storage);
616
617   dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy);
618   if (dynsymcount < 0)
619     bfd_fatal (bfd_get_filename (abfd));
620   return sy;
621 }
622
623 /* Filter out (in place) symbols that are useless for disassembly.
624    COUNT is the number of elements in SYMBOLS.
625    Return the number of useful symbols.  */
626
627 static long
628 remove_useless_symbols (asymbol **symbols, long count)
629 {
630   asymbol **in_ptr = symbols, **out_ptr = symbols;
631
632   while (--count >= 0)
633     {
634       asymbol *sym = *in_ptr++;
635
636       if (sym->name == NULL || sym->name[0] == '\0')
637         continue;
638       if (sym->flags & (BSF_DEBUGGING | BSF_SECTION_SYM))
639         continue;
640       if (bfd_is_und_section (sym->section)
641           || bfd_is_com_section (sym->section))
642         continue;
643
644       *out_ptr++ = sym;
645     }
646   return out_ptr - symbols;
647 }
648
649 /* Sort symbols into value order.  */
650
651 static int
652 compare_symbols (const void *ap, const void *bp)
653 {
654   const asymbol *a = * (const asymbol **) ap;
655   const asymbol *b = * (const asymbol **) bp;
656   const char *an;
657   const char *bn;
658   size_t anl;
659   size_t bnl;
660   bfd_boolean af;
661   bfd_boolean bf;
662   flagword aflags;
663   flagword bflags;
664
665   if (bfd_asymbol_value (a) > bfd_asymbol_value (b))
666     return 1;
667   else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
668     return -1;
669
670   if (a->section > b->section)
671     return 1;
672   else if (a->section < b->section)
673     return -1;
674
675   an = bfd_asymbol_name (a);
676   bn = bfd_asymbol_name (b);
677   anl = strlen (an);
678   bnl = strlen (bn);
679
680   /* The symbols gnu_compiled and gcc2_compiled convey no real
681      information, so put them after other symbols with the same value.  */
682   af = (strstr (an, "gnu_compiled") != NULL
683         || strstr (an, "gcc2_compiled") != NULL);
684   bf = (strstr (bn, "gnu_compiled") != NULL
685         || strstr (bn, "gcc2_compiled") != NULL);
686
687   if (af && ! bf)
688     return 1;
689   if (! af && bf)
690     return -1;
691
692   /* We use a heuristic for the file name, to try to sort it after
693      more useful symbols.  It may not work on non Unix systems, but it
694      doesn't really matter; the only difference is precisely which
695      symbol names get printed.  */
696
697 #define file_symbol(s, sn, snl)                 \
698   (((s)->flags & BSF_FILE) != 0                 \
699    || ((sn)[(snl) - 2] == '.'                   \
700        && ((sn)[(snl) - 1] == 'o'               \
701            || (sn)[(snl) - 1] == 'a')))
702
703   af = file_symbol (a, an, anl);
704   bf = file_symbol (b, bn, bnl);
705
706   if (af && ! bf)
707     return 1;
708   if (! af && bf)
709     return -1;
710
711   /* Try to sort global symbols before local symbols before function
712      symbols before debugging symbols.  */
713
714   aflags = a->flags;
715   bflags = b->flags;
716
717   if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))
718     {
719       if ((aflags & BSF_DEBUGGING) != 0)
720         return 1;
721       else
722         return -1;
723     }
724   if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
725     {
726       if ((aflags & BSF_FUNCTION) != 0)
727         return -1;
728       else
729         return 1;
730     }
731   if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
732     {
733       if ((aflags & BSF_LOCAL) != 0)
734         return 1;
735       else
736         return -1;
737     }
738   if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL))
739     {
740       if ((aflags & BSF_GLOBAL) != 0)
741         return -1;
742       else
743         return 1;
744     }
745
746   /* Symbols that start with '.' might be section names, so sort them
747      after symbols that don't start with '.'.  */
748   if (an[0] == '.' && bn[0] != '.')
749     return 1;
750   if (an[0] != '.' && bn[0] == '.')
751     return -1;
752
753   /* Finally, if we can't distinguish them in any other way, try to
754      get consistent results by sorting the symbols by name.  */
755   return strcmp (an, bn);
756 }
757
758 /* Sort relocs into address order.  */
759
760 static int
761 compare_relocs (const void *ap, const void *bp)
762 {
763   const arelent *a = * (const arelent **) ap;
764   const arelent *b = * (const arelent **) bp;
765
766   if (a->address > b->address)
767     return 1;
768   else if (a->address < b->address)
769     return -1;
770
771   /* So that associated relocations tied to the same address show up
772      in the correct order, we don't do any further sorting.  */
773   if (a > b)
774     return 1;
775   else if (a < b)
776     return -1;
777   else
778     return 0;
779 }
780
781 /* Print an address (VMA) to the output stream in INFO.
782    If SKIP_ZEROES is TRUE, omit leading zeroes.  */
783
784 static void
785 objdump_print_value (bfd_vma vma, struct disassemble_info *inf,
786                      bfd_boolean skip_zeroes)
787 {
788   char buf[30];
789   char *p;
790   struct objdump_disasm_info *aux;
791
792   aux = (struct objdump_disasm_info *) inf->application_data;
793   bfd_sprintf_vma (aux->abfd, buf, vma);
794   if (! skip_zeroes)
795     p = buf;
796   else
797     {
798       for (p = buf; *p == '0'; ++p)
799         ;
800       if (*p == '\0')
801         --p;
802     }
803   (*inf->fprintf_func) (inf->stream, "%s", p);
804 }
805
806 /* Print the name of a symbol.  */
807
808 static void
809 objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
810                        asymbol *sym)
811 {
812   char *alloc;
813   const char *name, *version_string = NULL;
814   bfd_boolean hidden = FALSE;
815
816   alloc = NULL;
817   name = bfd_asymbol_name (sym);
818   if (do_demangle && name[0] != '\0')
819     {
820       /* Demangle the name.  */
821       alloc = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);
822       if (alloc != NULL)
823         name = alloc;
824     }
825
826   version_string = bfd_get_symbol_version_string (abfd, sym, &hidden);
827
828   if (bfd_is_und_section (bfd_get_section (sym)))
829     hidden = TRUE;
830
831   if (inf != NULL)
832     {
833       (*inf->fprintf_func) (inf->stream, "%s", name);
834       if (version_string && *version_string != '\0')
835         (*inf->fprintf_func) (inf->stream, hidden ? "@%s" : "@@%s",
836                               version_string);
837     }
838   else
839     {
840       printf ("%s", name);
841       if (version_string && *version_string != '\0')
842         printf (hidden ? "@%s" : "@@%s", version_string);
843     }
844
845   if (alloc != NULL)
846     free (alloc);
847 }
848
849 /* Locate a symbol given a bfd and a section (from INFO->application_data),
850    and a VMA.  If INFO->application_data->require_sec is TRUE, then always
851    require the symbol to be in the section.  Returns NULL if there is no
852    suitable symbol.  If PLACE is not NULL, then *PLACE is set to the index
853    of the symbol in sorted_syms.  */
854
855 static asymbol *
856 find_symbol_for_address (bfd_vma vma,
857                          struct disassemble_info *inf,
858                          long *place)
859 {
860   /* @@ Would it speed things up to cache the last two symbols returned,
861      and maybe their address ranges?  For many processors, only one memory
862      operand can be present at a time, so the 2-entry cache wouldn't be
863      constantly churned by code doing heavy memory accesses.  */
864
865   /* Indices in `sorted_syms'.  */
866   long min = 0;
867   long max_count = sorted_symcount;
868   long thisplace;
869   struct objdump_disasm_info *aux;
870   bfd *abfd;
871   asection *sec;
872   unsigned int opb;
873   bfd_boolean want_section;
874
875   if (sorted_symcount < 1)
876     return NULL;
877
878   aux = (struct objdump_disasm_info *) inf->application_data;
879   abfd = aux->abfd;
880   sec = aux->sec;
881   opb = inf->octets_per_byte;
882
883   /* Perform a binary search looking for the closest symbol to the
884      required value.  We are searching the range (min, max_count].  */
885   while (min + 1 < max_count)
886     {
887       asymbol *sym;
888
889       thisplace = (max_count + min) / 2;
890       sym = sorted_syms[thisplace];
891
892       if (bfd_asymbol_value (sym) > vma)
893         max_count = thisplace;
894       else if (bfd_asymbol_value (sym) < vma)
895         min = thisplace;
896       else
897         {
898           min = thisplace;
899           break;
900         }
901     }
902
903   /* The symbol we want is now in min, the low end of the range we
904      were searching.  If there are several symbols with the same
905      value, we want the first one.  */
906   thisplace = min;
907   while (thisplace > 0
908          && (bfd_asymbol_value (sorted_syms[thisplace])
909              == bfd_asymbol_value (sorted_syms[thisplace - 1])))
910     --thisplace;
911
912   /* Prefer a symbol in the current section if we have multple symbols
913      with the same value, as can occur with overlays or zero size
914      sections.  */
915   min = thisplace;
916   while (min < max_count
917          && (bfd_asymbol_value (sorted_syms[min])
918              == bfd_asymbol_value (sorted_syms[thisplace])))
919     {
920       if (sorted_syms[min]->section == sec
921           && inf->symbol_is_valid (sorted_syms[min], inf))
922         {
923           thisplace = min;
924
925           if (place != NULL)
926             *place = thisplace;
927
928           return sorted_syms[thisplace];
929         }
930       ++min;
931     }
932
933   /* If the file is relocatable, and the symbol could be from this
934      section, prefer a symbol from this section over symbols from
935      others, even if the other symbol's value might be closer.
936
937      Note that this may be wrong for some symbol references if the
938      sections have overlapping memory ranges, but in that case there's
939      no way to tell what's desired without looking at the relocation
940      table.
941
942      Also give the target a chance to reject symbols.  */
943   want_section = (aux->require_sec
944                   || ((abfd->flags & HAS_RELOC) != 0
945                       && vma >= bfd_get_section_vma (abfd, sec)
946                       && vma < (bfd_get_section_vma (abfd, sec)
947                                 + bfd_section_size (abfd, sec) / opb)));
948   if ((sorted_syms[thisplace]->section != sec && want_section)
949       || ! inf->symbol_is_valid (sorted_syms[thisplace], inf))
950     {
951       long i;
952       long newplace = sorted_symcount;
953
954       for (i = min - 1; i >= 0; i--)
955         {
956           if ((sorted_syms[i]->section == sec || !want_section)
957               && inf->symbol_is_valid (sorted_syms[i], inf))
958             {
959               if (newplace == sorted_symcount)
960                 newplace = i;
961
962               if (bfd_asymbol_value (sorted_syms[i])
963                   != bfd_asymbol_value (sorted_syms[newplace]))
964                 break;
965
966               /* Remember this symbol and keep searching until we reach
967                  an earlier address.  */
968               newplace = i;
969             }
970         }
971
972       if (newplace != sorted_symcount)
973         thisplace = newplace;
974       else
975         {
976           /* We didn't find a good symbol with a smaller value.
977              Look for one with a larger value.  */
978           for (i = thisplace + 1; i < sorted_symcount; i++)
979             {
980               if ((sorted_syms[i]->section == sec || !want_section)
981                   && inf->symbol_is_valid (sorted_syms[i], inf))
982                 {
983                   thisplace = i;
984                   break;
985                 }
986             }
987         }
988
989       if ((sorted_syms[thisplace]->section != sec && want_section)
990           || ! inf->symbol_is_valid (sorted_syms[thisplace], inf))
991         /* There is no suitable symbol.  */
992         return NULL;
993     }
994
995   if (place != NULL)
996     *place = thisplace;
997
998   return sorted_syms[thisplace];
999 }
1000
1001 /* Print an address and the offset to the nearest symbol.  */
1002
1003 static void
1004 objdump_print_addr_with_sym (bfd *abfd, asection *sec, asymbol *sym,
1005                              bfd_vma vma, struct disassemble_info *inf,
1006                              bfd_boolean skip_zeroes)
1007 {
1008   objdump_print_value (vma, inf, skip_zeroes);
1009
1010   if (sym == NULL)
1011     {
1012       bfd_vma secaddr;
1013
1014       (*inf->fprintf_func) (inf->stream, " <%s",
1015                             bfd_get_section_name (abfd, sec));
1016       secaddr = bfd_get_section_vma (abfd, sec);
1017       if (vma < secaddr)
1018         {
1019           (*inf->fprintf_func) (inf->stream, "-0x");
1020           objdump_print_value (secaddr - vma, inf, TRUE);
1021         }
1022       else if (vma > secaddr)
1023         {
1024           (*inf->fprintf_func) (inf->stream, "+0x");
1025           objdump_print_value (vma - secaddr, inf, TRUE);
1026         }
1027       (*inf->fprintf_func) (inf->stream, ">");
1028     }
1029   else
1030     {
1031       (*inf->fprintf_func) (inf->stream, " <");
1032       objdump_print_symname (abfd, inf, sym);
1033       if (bfd_asymbol_value (sym) > vma)
1034         {
1035           (*inf->fprintf_func) (inf->stream, "-0x");
1036           objdump_print_value (bfd_asymbol_value (sym) - vma, inf, TRUE);
1037         }
1038       else if (vma > bfd_asymbol_value (sym))
1039         {
1040           (*inf->fprintf_func) (inf->stream, "+0x");
1041           objdump_print_value (vma - bfd_asymbol_value (sym), inf, TRUE);
1042         }
1043       (*inf->fprintf_func) (inf->stream, ">");
1044     }
1045
1046   if (display_file_offsets)
1047     inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
1048                         (long int)(sec->filepos + (vma - sec->vma)));
1049 }
1050
1051 /* Print an address (VMA), symbolically if possible.
1052    If SKIP_ZEROES is TRUE, don't output leading zeroes.  */
1053
1054 static void
1055 objdump_print_addr (bfd_vma vma,
1056                     struct disassemble_info *inf,
1057                     bfd_boolean skip_zeroes)
1058 {
1059   struct objdump_disasm_info *aux;
1060   asymbol *sym = NULL;
1061   bfd_boolean skip_find = FALSE;
1062
1063   aux = (struct objdump_disasm_info *) inf->application_data;
1064
1065   if (sorted_symcount < 1)
1066     {
1067       (*inf->fprintf_func) (inf->stream, "0x");
1068       objdump_print_value (vma, inf, skip_zeroes);
1069
1070       if (display_file_offsets)
1071         inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
1072                            (long int)(aux->sec->filepos + (vma - aux->sec->vma)));
1073       return;
1074     }
1075
1076   if (aux->reloc != NULL
1077       && aux->reloc->sym_ptr_ptr != NULL
1078       && * aux->reloc->sym_ptr_ptr != NULL)
1079     {
1080       sym = * aux->reloc->sym_ptr_ptr;
1081
1082       /* Adjust the vma to the reloc.  */
1083       vma += bfd_asymbol_value (sym);
1084
1085       if (bfd_is_und_section (bfd_get_section (sym)))
1086         skip_find = TRUE;
1087     }
1088
1089   if (!skip_find)
1090     sym = find_symbol_for_address (vma, inf, NULL);
1091
1092   objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, inf,
1093                                skip_zeroes);
1094 }
1095
1096 /* Print VMA to INFO.  This function is passed to the disassembler
1097    routine.  */
1098
1099 static void
1100 objdump_print_address (bfd_vma vma, struct disassemble_info *inf)
1101 {
1102   objdump_print_addr (vma, inf, ! prefix_addresses);
1103 }
1104
1105 /* Determine if the given address has a symbol associated with it.  */
1106
1107 static int
1108 objdump_symbol_at_address (bfd_vma vma, struct disassemble_info * inf)
1109 {
1110   asymbol * sym;
1111
1112   sym = find_symbol_for_address (vma, inf, NULL);
1113
1114   return (sym != NULL && (bfd_asymbol_value (sym) == vma));
1115 }
1116
1117 /* Hold the last function name and the last line number we displayed
1118    in a disassembly.  */
1119
1120 static char *prev_functionname;
1121 static unsigned int prev_line;
1122 static unsigned int prev_discriminator;
1123
1124 /* We keep a list of all files that we have seen when doing a
1125    disassembly with source, so that we know how much of the file to
1126    display.  This can be important for inlined functions.  */
1127
1128 struct print_file_list
1129 {
1130   struct print_file_list *next;
1131   const char *filename;
1132   const char *modname;
1133   const char *map;
1134   size_t mapsize;
1135   const char **linemap;
1136   unsigned maxline;
1137   unsigned last_line;
1138   unsigned max_printed;
1139   int first;
1140 };
1141
1142 static struct print_file_list *print_files;
1143
1144 /* The number of preceding context lines to show when we start
1145    displaying a file for the first time.  */
1146
1147 #define SHOW_PRECEDING_CONTEXT_LINES (5)
1148
1149 /* Read a complete file into memory.  */
1150
1151 static const char *
1152 slurp_file (const char *fn, size_t *size)
1153 {
1154 #ifdef HAVE_MMAP
1155   int ps = getpagesize ();
1156   size_t msize;
1157 #endif
1158   const char *map;
1159   struct stat st;
1160   int fd = open (fn, O_RDONLY | O_BINARY);
1161
1162   if (fd < 0)
1163     return NULL;
1164   if (fstat (fd, &st) < 0)
1165     {
1166       close (fd);
1167       return NULL;
1168     }
1169   *size = st.st_size;
1170 #ifdef HAVE_MMAP
1171   msize = (*size + ps - 1) & ~(ps - 1);
1172   map = mmap (NULL, msize, PROT_READ, MAP_SHARED, fd, 0);
1173   if (map != (char *) -1L)
1174     {
1175       close (fd);
1176       return map;
1177     }
1178 #endif
1179   map = (const char *) malloc (*size);
1180   if (!map || (size_t) read (fd, (char *) map, *size) != *size)
1181     {
1182       free ((void *) map);
1183       map = NULL;
1184     }
1185   close (fd);
1186   return map;
1187 }
1188
1189 #define line_map_decrease 5
1190
1191 /* Precompute array of lines for a mapped file. */
1192
1193 static const char **
1194 index_file (const char *map, size_t size, unsigned int *maxline)
1195 {
1196   const char *p, *lstart, *end;
1197   int chars_per_line = 45; /* First iteration will use 40.  */
1198   unsigned int lineno;
1199   const char **linemap = NULL;
1200   unsigned long line_map_size = 0;
1201
1202   lineno = 0;
1203   lstart = map;
1204   end = map + size;
1205
1206   for (p = map; p < end; p++)
1207     {
1208       if (*p == '\n')
1209         {
1210           if (p + 1 < end && p[1] == '\r')
1211             p++;
1212         }
1213       else if (*p == '\r')
1214         {
1215           if (p + 1 < end && p[1] == '\n')
1216             p++;
1217         }
1218       else
1219         continue;
1220
1221       /* End of line found.  */
1222
1223       if (linemap == NULL || line_map_size < lineno + 1)
1224         {
1225           unsigned long newsize;
1226
1227           chars_per_line -= line_map_decrease;
1228           if (chars_per_line <= 1)
1229             chars_per_line = 1;
1230           line_map_size = size / chars_per_line + 1;
1231           if (line_map_size < lineno + 1)
1232             line_map_size = lineno + 1;
1233           newsize = line_map_size * sizeof (char *);
1234           linemap = (const char **) xrealloc (linemap, newsize);
1235         }
1236
1237       linemap[lineno++] = lstart;
1238       lstart = p + 1;
1239     }
1240
1241   *maxline = lineno;
1242   return linemap;
1243 }
1244
1245 /* Tries to open MODNAME, and if successful adds a node to print_files
1246    linked list and returns that node.  Returns NULL on failure.  */
1247
1248 static struct print_file_list *
1249 try_print_file_open (const char *origname, const char *modname)
1250 {
1251   struct print_file_list *p;
1252
1253   p = (struct print_file_list *) xmalloc (sizeof (struct print_file_list));
1254
1255   p->map = slurp_file (modname, &p->mapsize);
1256   if (p->map == NULL)
1257     {
1258       free (p);
1259       return NULL;
1260     }
1261
1262   p->linemap = index_file (p->map, p->mapsize, &p->maxline);
1263   p->last_line = 0;
1264   p->max_printed = 0;
1265   p->filename = origname;
1266   p->modname = modname;
1267   p->next = print_files;
1268   p->first = 1;
1269   print_files = p;
1270   return p;
1271 }
1272
1273 /* If the source file, as described in the symtab, is not found
1274    try to locate it in one of the paths specified with -I
1275    If found, add location to print_files linked list.  */
1276
1277 static struct print_file_list *
1278 update_source_path (const char *filename)
1279 {
1280   struct print_file_list *p;
1281   const char *fname;
1282   int i;
1283
1284   p = try_print_file_open (filename, filename);
1285   if (p != NULL)
1286     return p;
1287
1288   if (include_path_count == 0)
1289     return NULL;
1290
1291   /* Get the name of the file.  */
1292   fname = lbasename (filename);
1293
1294   /* If file exists under a new path, we need to add it to the list
1295      so that show_line knows about it.  */
1296   for (i = 0; i < include_path_count; i++)
1297     {
1298       char *modname = concat (include_paths[i], "/", fname, (const char *) 0);
1299
1300       p = try_print_file_open (filename, modname);
1301       if (p)
1302         return p;
1303
1304       free (modname);
1305     }
1306
1307   return NULL;
1308 }
1309
1310 /* Print a source file line.  */
1311
1312 static void
1313 print_line (struct print_file_list *p, unsigned int linenum)
1314 {
1315   const char *l;
1316   size_t len;
1317
1318   --linenum;
1319   if (linenum >= p->maxline)
1320     return;
1321   l = p->linemap [linenum];
1322   /* Test fwrite return value to quiet glibc warning.  */
1323   len = strcspn (l, "\n\r");
1324   if (len == 0 || fwrite (l, len, 1, stdout) == 1)
1325     putchar ('\n');
1326 }
1327
1328 /* Print a range of source code lines. */
1329
1330 static void
1331 dump_lines (struct print_file_list *p, unsigned int start, unsigned int end)
1332 {
1333   if (p->map == NULL)
1334     return;
1335   while (start <= end)
1336     {
1337       print_line (p, start);
1338       start++;
1339     }
1340 }
1341
1342 /* Show the line number, or the source line, in a disassembly
1343    listing.  */
1344
1345 static void
1346 show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
1347 {
1348   const char *filename;
1349   const char *functionname;
1350   unsigned int linenumber;
1351   unsigned int discriminator;
1352   bfd_boolean reloc;
1353   char *path = NULL;
1354
1355   if (! with_line_numbers && ! with_source_code)
1356     return;
1357
1358   if (! bfd_find_nearest_line_discriminator (abfd, section, syms, addr_offset,
1359                                              &filename, &functionname,
1360                                              &linenumber, &discriminator))
1361     return;
1362
1363   if (filename != NULL && *filename == '\0')
1364     filename = NULL;
1365   if (functionname != NULL && *functionname == '\0')
1366     functionname = NULL;
1367
1368   if (filename
1369       && IS_ABSOLUTE_PATH (filename)
1370       && prefix)
1371     {
1372       char *path_up;
1373       const char *fname = filename;
1374
1375       path = xmalloc (prefix_length + PATH_MAX + 1);
1376
1377       if (prefix_length)
1378         memcpy (path, prefix, prefix_length);
1379       path_up = path + prefix_length;
1380
1381       /* Build relocated filename, stripping off leading directories
1382          from the initial filename if requested.  */
1383       if (prefix_strip > 0)
1384         {
1385           int level = 0;
1386           const char *s;
1387
1388           /* Skip selected directory levels.  */
1389           for (s = fname + 1; *s != '\0' && level < prefix_strip; s++)
1390             if (IS_DIR_SEPARATOR(*s))
1391               {
1392                 fname = s;
1393                 level++;
1394               }
1395         }
1396
1397       /* Update complete filename.  */
1398       strncpy (path_up, fname, PATH_MAX);
1399       path_up[PATH_MAX] = '\0';
1400
1401       filename = path;
1402       reloc = TRUE;
1403     }
1404   else
1405     reloc = FALSE;
1406
1407   if (with_line_numbers)
1408     {
1409       if (functionname != NULL
1410           && (prev_functionname == NULL
1411               || strcmp (functionname, prev_functionname) != 0))
1412         printf ("%s():\n", functionname);
1413       if (linenumber > 0 && (linenumber != prev_line ||
1414                              (discriminator != prev_discriminator)))
1415         {
1416           if (discriminator > 0)
1417             printf ("%s:%u (discriminator %u)\n", filename == NULL ? "???" : filename,
1418                     linenumber, discriminator);
1419           else
1420             printf ("%s:%u\n", filename == NULL ? "???" : filename, linenumber);
1421         }
1422     }
1423
1424   if (with_source_code
1425       && filename != NULL
1426       && linenumber > 0)
1427     {
1428       struct print_file_list **pp, *p;
1429       unsigned l;
1430
1431       for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
1432         if (filename_cmp ((*pp)->filename, filename) == 0)
1433           break;
1434       p = *pp;
1435
1436       if (p == NULL)
1437         {
1438           if (reloc)
1439             filename = xstrdup (filename);
1440           p = update_source_path (filename);
1441         }
1442
1443       if (p != NULL && linenumber != p->last_line)
1444         {
1445           if (file_start_context && p->first)
1446             l = 1;
1447           else
1448             {
1449               l = linenumber - SHOW_PRECEDING_CONTEXT_LINES;
1450               if (l >= linenumber)
1451                 l = 1;
1452               if (p->max_printed >= l)
1453                 {
1454                   if (p->max_printed < linenumber)
1455                     l = p->max_printed + 1;
1456                   else
1457                     l = linenumber;
1458                 }
1459             }
1460           dump_lines (p, l, linenumber);
1461           if (p->max_printed < linenumber)
1462             p->max_printed = linenumber;
1463           p->last_line = linenumber;
1464           p->first = 0;
1465         }
1466     }
1467
1468   if (functionname != NULL
1469       && (prev_functionname == NULL
1470           || strcmp (functionname, prev_functionname) != 0))
1471     {
1472       if (prev_functionname != NULL)
1473         free (prev_functionname);
1474       prev_functionname = (char *) xmalloc (strlen (functionname) + 1);
1475       strcpy (prev_functionname, functionname);
1476     }
1477
1478   if (linenumber > 0 && linenumber != prev_line)
1479     prev_line = linenumber;
1480
1481   if (discriminator != prev_discriminator)
1482     prev_discriminator = discriminator;
1483
1484   if (path)
1485     free (path);
1486 }
1487
1488 /* Pseudo FILE object for strings.  */
1489 typedef struct
1490 {
1491   char *buffer;
1492   size_t pos;
1493   size_t alloc;
1494 } SFILE;
1495
1496 /* sprintf to a "stream".  */
1497
1498 static int ATTRIBUTE_PRINTF_2
1499 objdump_sprintf (SFILE *f, const char *format, ...)
1500 {
1501   size_t n;
1502   va_list args;
1503
1504   while (1)
1505     {
1506       size_t space = f->alloc - f->pos;
1507
1508       va_start (args, format);
1509       n = vsnprintf (f->buffer + f->pos, space, format, args);
1510       va_end (args);
1511
1512       if (space > n)
1513         break;
1514
1515       f->alloc = (f->alloc + n) * 2;
1516       f->buffer = (char *) xrealloc (f->buffer, f->alloc);
1517     }
1518   f->pos += n;
1519
1520   return n;
1521 }
1522
1523 /* The number of zeroes we want to see before we start skipping them.
1524    The number is arbitrarily chosen.  */
1525
1526 #define DEFAULT_SKIP_ZEROES 8
1527
1528 /* The number of zeroes to skip at the end of a section.  If the
1529    number of zeroes at the end is between SKIP_ZEROES_AT_END and
1530    SKIP_ZEROES, they will be disassembled.  If there are fewer than
1531    SKIP_ZEROES_AT_END, they will be skipped.  This is a heuristic
1532    attempt to avoid disassembling zeroes inserted by section
1533    alignment.  */
1534
1535 #define DEFAULT_SKIP_ZEROES_AT_END 3
1536
1537 /* Disassemble some data in memory between given values.  */
1538
1539 static void
1540 disassemble_bytes (struct disassemble_info * inf,
1541                    disassembler_ftype        disassemble_fn,
1542                    bfd_boolean               insns,
1543                    bfd_byte *                data,
1544                    bfd_vma                   start_offset,
1545                    bfd_vma                   stop_offset,
1546                    bfd_vma                   rel_offset,
1547                    arelent ***               relppp,
1548                    arelent **                relppend)
1549 {
1550   struct objdump_disasm_info *aux;
1551   asection *section;
1552   int octets_per_line;
1553   int skip_addr_chars;
1554   bfd_vma addr_offset;
1555   unsigned int opb = inf->octets_per_byte;
1556   unsigned int skip_zeroes = inf->skip_zeroes;
1557   unsigned int skip_zeroes_at_end = inf->skip_zeroes_at_end;
1558   int octets = opb;
1559   SFILE sfile;
1560
1561   aux = (struct objdump_disasm_info *) inf->application_data;
1562   section = aux->sec;
1563
1564   sfile.alloc = 120;
1565   sfile.buffer = (char *) xmalloc (sfile.alloc);
1566   sfile.pos = 0;
1567
1568   if (insn_width)
1569     octets_per_line = insn_width;
1570   else if (insns)
1571     octets_per_line = 4;
1572   else
1573     octets_per_line = 16;
1574
1575   /* Figure out how many characters to skip at the start of an
1576      address, to make the disassembly look nicer.  We discard leading
1577      zeroes in chunks of 4, ensuring that there is always a leading
1578      zero remaining.  */
1579   skip_addr_chars = 0;
1580   if (! prefix_addresses)
1581     {
1582       char buf[30];
1583
1584       bfd_sprintf_vma (aux->abfd, buf, section->vma + section->size / opb);
1585
1586       while (buf[skip_addr_chars] == '0')
1587         ++skip_addr_chars;
1588
1589       /* Don't discard zeros on overflow.  */
1590       if (buf[skip_addr_chars] == '\0' && section->vma != 0)
1591         skip_addr_chars = 0;
1592
1593       if (skip_addr_chars != 0)
1594         skip_addr_chars = (skip_addr_chars - 1) & -4;
1595     }
1596
1597   inf->insn_info_valid = 0;
1598
1599   addr_offset = start_offset;
1600   while (addr_offset < stop_offset)
1601     {
1602       bfd_vma z;
1603       bfd_boolean need_nl = FALSE;
1604       int previous_octets;
1605
1606       /* Remember the length of the previous instruction.  */
1607       previous_octets = octets;
1608       octets = 0;
1609
1610       /* Make sure we don't use relocs from previous instructions.  */
1611       aux->reloc = NULL;
1612
1613       /* If we see more than SKIP_ZEROES octets of zeroes, we just
1614          print `...'.  */
1615       for (z = addr_offset * opb; z < stop_offset * opb; z++)
1616         if (data[z] != 0)
1617           break;
1618       if (! disassemble_zeroes
1619           && (inf->insn_info_valid == 0
1620               || inf->branch_delay_insns == 0)
1621           && (z - addr_offset * opb >= skip_zeroes
1622               || (z == stop_offset * opb &&
1623                   z - addr_offset * opb < skip_zeroes_at_end)))
1624         {
1625           /* If there are more nonzero octets to follow, we only skip
1626              zeroes in multiples of 4, to try to avoid running over
1627              the start of an instruction which happens to start with
1628              zero.  */
1629           if (z != stop_offset * opb)
1630             z = addr_offset * opb + ((z - addr_offset * opb) &~ 3);
1631
1632           octets = z - addr_offset * opb;
1633
1634           /* If we are going to display more data, and we are displaying
1635              file offsets, then tell the user how many zeroes we skip
1636              and the file offset from where we resume dumping.  */
1637           if (display_file_offsets && ((addr_offset + (octets / opb)) < stop_offset))
1638             printf ("\t... (skipping %d zeroes, resuming at file offset: 0x%lx)\n",
1639                     octets / opb,
1640                     (unsigned long) (section->filepos
1641                                      + (addr_offset + (octets / opb))));
1642           else
1643             printf ("\t...\n");
1644         }
1645       else
1646         {
1647           char buf[50];
1648           int bpc = 0;
1649           int pb = 0;
1650
1651           if (with_line_numbers || with_source_code)
1652             show_line (aux->abfd, section, addr_offset);
1653
1654           if (! prefix_addresses)
1655             {
1656               char *s;
1657
1658               bfd_sprintf_vma (aux->abfd, buf, section->vma + addr_offset);
1659               for (s = buf + skip_addr_chars; *s == '0'; s++)
1660                 *s = ' ';
1661               if (*s == '\0')
1662                 *--s = '0';
1663               printf ("%s:\t", buf + skip_addr_chars);
1664             }
1665           else
1666             {
1667               aux->require_sec = TRUE;
1668               objdump_print_address (section->vma + addr_offset, inf);
1669               aux->require_sec = FALSE;
1670               putchar (' ');
1671             }
1672
1673           if (insns)
1674             {
1675               sfile.pos = 0;
1676               inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
1677               inf->stream = &sfile;
1678               inf->bytes_per_line = 0;
1679               inf->bytes_per_chunk = 0;
1680               inf->flags = disassemble_all ? DISASSEMBLE_DATA : 0;
1681               if (machine)
1682                 inf->flags |= USER_SPECIFIED_MACHINE_TYPE;
1683
1684               if (inf->disassembler_needs_relocs
1685                   && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
1686                   && (bfd_get_file_flags (aux->abfd) & DYNAMIC) == 0
1687                   && *relppp < relppend)
1688                 {
1689                   bfd_signed_vma distance_to_rel;
1690
1691                   distance_to_rel = (**relppp)->address
1692                     - (rel_offset + addr_offset);
1693
1694                   /* Check to see if the current reloc is associated with
1695                      the instruction that we are about to disassemble.  */
1696                   if (distance_to_rel == 0
1697                       /* FIXME: This is wrong.  We are trying to catch
1698                          relocs that are addressed part way through the
1699                          current instruction, as might happen with a packed
1700                          VLIW instruction.  Unfortunately we do not know the
1701                          length of the current instruction since we have not
1702                          disassembled it yet.  Instead we take a guess based
1703                          upon the length of the previous instruction.  The
1704                          proper solution is to have a new target-specific
1705                          disassembler function which just returns the length
1706                          of an instruction at a given address without trying
1707                          to display its disassembly. */
1708                       || (distance_to_rel > 0
1709                           && distance_to_rel < (bfd_signed_vma) (previous_octets/ opb)))
1710                     {
1711                       inf->flags |= INSN_HAS_RELOC;
1712                       aux->reloc = **relppp;
1713                     }
1714                 }
1715
1716               if (! disassemble_all
1717                   && (section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
1718                   == (SEC_CODE | SEC_HAS_CONTENTS))
1719                 /* Set a stop_vma so that the disassembler will not read
1720                    beyond the next symbol.  We assume that symbols appear on
1721                    the boundaries between instructions.  We only do this when
1722                    disassembling code of course, and when -D is in effect.  */
1723                 inf->stop_vma = section->vma + stop_offset;
1724
1725               octets = (*disassemble_fn) (section->vma + addr_offset, inf);
1726
1727               inf->stop_vma = 0;
1728               inf->fprintf_func = (fprintf_ftype) fprintf;
1729               inf->stream = stdout;
1730               if (insn_width == 0 && inf->bytes_per_line != 0)
1731                 octets_per_line = inf->bytes_per_line;
1732               if (octets < (int) opb)
1733                 {
1734                   if (sfile.pos)
1735                     printf ("%s\n", sfile.buffer);
1736                   if (octets >= 0)
1737                     {
1738                       non_fatal (_("disassemble_fn returned length %d"),
1739                                  octets);
1740                       exit_status = 1;
1741                     }
1742                   break;
1743                 }
1744             }
1745           else
1746             {
1747               bfd_vma j;
1748
1749               octets = octets_per_line;
1750               if (addr_offset + octets / opb > stop_offset)
1751                 octets = (stop_offset - addr_offset) * opb;
1752
1753               for (j = addr_offset * opb; j < addr_offset * opb + octets; ++j)
1754                 {
1755                   if (ISPRINT (data[j]))
1756                     buf[j - addr_offset * opb] = data[j];
1757                   else
1758                     buf[j - addr_offset * opb] = '.';
1759                 }
1760               buf[j - addr_offset * opb] = '\0';
1761             }
1762
1763           if (prefix_addresses
1764               ? show_raw_insn > 0
1765               : show_raw_insn >= 0)
1766             {
1767               bfd_vma j;
1768
1769               /* If ! prefix_addresses and ! wide_output, we print
1770                  octets_per_line octets per line.  */
1771               pb = octets;
1772               if (pb > octets_per_line && ! prefix_addresses && ! wide_output)
1773                 pb = octets_per_line;
1774
1775               if (inf->bytes_per_chunk)
1776                 bpc = inf->bytes_per_chunk;
1777               else
1778                 bpc = 1;
1779
1780               for (j = addr_offset * opb; j < addr_offset * opb + pb; j += bpc)
1781                 {
1782                   int k;
1783
1784                   if (bpc > 1 && inf->display_endian == BFD_ENDIAN_LITTLE)
1785                     {
1786                       for (k = bpc - 1; k >= 0; k--)
1787                         printf ("%02x", (unsigned) data[j + k]);
1788                       putchar (' ');
1789                     }
1790                   else
1791                     {
1792                       for (k = 0; k < bpc; k++)
1793                         printf ("%02x", (unsigned) data[j + k]);
1794                       putchar (' ');
1795                     }
1796                 }
1797
1798               for (; pb < octets_per_line; pb += bpc)
1799                 {
1800                   int k;
1801
1802                   for (k = 0; k < bpc; k++)
1803                     printf ("  ");
1804                   putchar (' ');
1805                 }
1806
1807               /* Separate raw data from instruction by extra space.  */
1808               if (insns)
1809                 putchar ('\t');
1810               else
1811                 printf ("    ");
1812             }
1813
1814           if (! insns)
1815             printf ("%s", buf);
1816           else if (sfile.pos)
1817             printf ("%s", sfile.buffer);
1818
1819           if (prefix_addresses
1820               ? show_raw_insn > 0
1821               : show_raw_insn >= 0)
1822             {
1823               while (pb < octets)
1824                 {
1825                   bfd_vma j;
1826                   char *s;
1827
1828                   putchar ('\n');
1829                   j = addr_offset * opb + pb;
1830
1831                   bfd_sprintf_vma (aux->abfd, buf, section->vma + j / opb);
1832                   for (s = buf + skip_addr_chars; *s == '0'; s++)
1833                     *s = ' ';
1834                   if (*s == '\0')
1835                     *--s = '0';
1836                   printf ("%s:\t", buf + skip_addr_chars);
1837
1838                   pb += octets_per_line;
1839                   if (pb > octets)
1840                     pb = octets;
1841                   for (; j < addr_offset * opb + pb; j += bpc)
1842                     {
1843                       int k;
1844
1845                       if (bpc > 1 && inf->display_endian == BFD_ENDIAN_LITTLE)
1846                         {
1847                           for (k = bpc - 1; k >= 0; k--)
1848                             printf ("%02x", (unsigned) data[j + k]);
1849                           putchar (' ');
1850                         }
1851                       else
1852                         {
1853                           for (k = 0; k < bpc; k++)
1854                             printf ("%02x", (unsigned) data[j + k]);
1855                           putchar (' ');
1856                         }
1857                     }
1858                 }
1859             }
1860
1861           if (!wide_output)
1862             putchar ('\n');
1863           else
1864             need_nl = TRUE;
1865         }
1866
1867       while ((*relppp) < relppend
1868              && (**relppp)->address < rel_offset + addr_offset + octets / opb)
1869         {
1870           if (dump_reloc_info || dump_dynamic_reloc_info)
1871             {
1872               arelent *q;
1873
1874               q = **relppp;
1875
1876               if (wide_output)
1877                 putchar ('\t');
1878               else
1879                 printf ("\t\t\t");
1880
1881               objdump_print_value (section->vma - rel_offset + q->address,
1882                                    inf, TRUE);
1883
1884               if (q->howto == NULL)
1885                 printf (": *unknown*\t");
1886               else if (q->howto->name)
1887                 printf (": %s\t", q->howto->name);
1888               else
1889                 printf (": %d\t", q->howto->type);
1890
1891               if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
1892                 printf ("*unknown*");
1893               else
1894                 {
1895                   const char *sym_name;
1896
1897                   sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
1898                   if (sym_name != NULL && *sym_name != '\0')
1899                     objdump_print_symname (aux->abfd, inf, *q->sym_ptr_ptr);
1900                   else
1901                     {
1902                       asection *sym_sec;
1903
1904                       sym_sec = bfd_get_section (*q->sym_ptr_ptr);
1905                       sym_name = bfd_get_section_name (aux->abfd, sym_sec);
1906                       if (sym_name == NULL || *sym_name == '\0')
1907                         sym_name = "*unknown*";
1908                       printf ("%s", sym_name);
1909                     }
1910                 }
1911
1912               if (q->addend)
1913                 {
1914                   bfd_signed_vma addend = q->addend;
1915                   if (addend < 0)
1916                     {
1917                       printf ("-0x");
1918                       addend = -addend;
1919                     }
1920                   else
1921                     printf ("+0x");
1922                   objdump_print_value (addend, inf, TRUE);
1923                 }
1924
1925               printf ("\n");
1926               need_nl = FALSE;
1927             }
1928           ++(*relppp);
1929         }
1930
1931       if (need_nl)
1932         printf ("\n");
1933
1934       addr_offset += octets / opb;
1935     }
1936
1937   free (sfile.buffer);
1938 }
1939
1940 static void
1941 disassemble_section (bfd *abfd, asection *section, void *inf)
1942 {
1943   const struct elf_backend_data * bed;
1944   bfd_vma                      sign_adjust = 0;
1945   struct disassemble_info *    pinfo = (struct disassemble_info *) inf;
1946   struct objdump_disasm_info * paux;
1947   unsigned int                 opb = pinfo->octets_per_byte;
1948   bfd_byte *                   data = NULL;
1949   bfd_size_type                datasize = 0;
1950   arelent **                   rel_pp = NULL;
1951   arelent **                   rel_ppstart = NULL;
1952   arelent **                   rel_ppend;
1953   bfd_vma                      stop_offset;
1954   asymbol *                    sym = NULL;
1955   long                         place = 0;
1956   long                         rel_count;
1957   bfd_vma                      rel_offset;
1958   unsigned long                addr_offset;
1959
1960   /* Sections that do not contain machine
1961      code are not normally disassembled.  */
1962   if (! disassemble_all
1963       && only_list == NULL
1964       && ((section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
1965           != (SEC_CODE | SEC_HAS_CONTENTS)))
1966     return;
1967
1968   if (! process_section_p (section))
1969     return;
1970
1971   datasize = bfd_get_section_size (section);
1972   if (datasize == 0)
1973     return;
1974
1975   if (start_address == (bfd_vma) -1
1976       || start_address < section->vma)
1977     addr_offset = 0;
1978   else
1979     addr_offset = start_address - section->vma;
1980
1981   if (stop_address == (bfd_vma) -1)
1982     stop_offset = datasize / opb;
1983   else
1984     {
1985       if (stop_address < section->vma)
1986         stop_offset = 0;
1987       else
1988         stop_offset = stop_address - section->vma;
1989       if (stop_offset > datasize / opb)
1990         stop_offset = datasize / opb;
1991     }
1992
1993   if (addr_offset >= stop_offset)
1994     return;
1995
1996   /* Decide which set of relocs to use.  Load them if necessary.  */
1997   paux = (struct objdump_disasm_info *) pinfo->application_data;
1998   if (paux->dynrelbuf)
1999     {
2000       rel_pp = paux->dynrelbuf;
2001       rel_count = paux->dynrelcount;
2002       /* Dynamic reloc addresses are absolute, non-dynamic are section
2003          relative.  REL_OFFSET specifies the reloc address corresponding
2004          to the start of this section.  */
2005       rel_offset = section->vma;
2006     }
2007   else
2008     {
2009       rel_count = 0;
2010       rel_pp = NULL;
2011       rel_offset = 0;
2012
2013       if ((section->flags & SEC_RELOC) != 0
2014           && (dump_reloc_info || pinfo->disassembler_needs_relocs))
2015         {
2016           long relsize;
2017
2018           relsize = bfd_get_reloc_upper_bound (abfd, section);
2019           if (relsize < 0)
2020             bfd_fatal (bfd_get_filename (abfd));
2021
2022           if (relsize > 0)
2023             {
2024               rel_ppstart = rel_pp = (arelent **) xmalloc (relsize);
2025               rel_count = bfd_canonicalize_reloc (abfd, section, rel_pp, syms);
2026               if (rel_count < 0)
2027                 bfd_fatal (bfd_get_filename (abfd));
2028
2029               /* Sort the relocs by address.  */
2030               qsort (rel_pp, rel_count, sizeof (arelent *), compare_relocs);
2031             }
2032         }
2033     }
2034   rel_ppend = rel_pp + rel_count;
2035
2036   data = (bfd_byte *) xmalloc (datasize);
2037
2038   bfd_get_section_contents (abfd, section, data, 0, datasize);
2039
2040   paux->sec = section;
2041   pinfo->buffer = data;
2042   pinfo->buffer_vma = section->vma;
2043   pinfo->buffer_length = datasize;
2044   pinfo->section = section;
2045
2046   /* Skip over the relocs belonging to addresses below the
2047      start address.  */
2048   while (rel_pp < rel_ppend
2049          && (*rel_pp)->address < rel_offset + addr_offset)
2050     ++rel_pp;
2051
2052   printf (_("\nDisassembly of section %s:\n"), section->name);
2053
2054   /* Find the nearest symbol forwards from our current position.  */
2055   paux->require_sec = TRUE;
2056   sym = (asymbol *) find_symbol_for_address (section->vma + addr_offset,
2057                                              (struct disassemble_info *) inf,
2058                                              &place);
2059   paux->require_sec = FALSE;
2060
2061   /* PR 9774: If the target used signed addresses then we must make
2062      sure that we sign extend the value that we calculate for 'addr'
2063      in the loop below.  */
2064   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2065       && (bed = get_elf_backend_data (abfd)) != NULL
2066       && bed->sign_extend_vma)
2067     sign_adjust = (bfd_vma) 1 << (bed->s->arch_size - 1);
2068
2069   /* Disassemble a block of instructions up to the address associated with
2070      the symbol we have just found.  Then print the symbol and find the
2071      next symbol on.  Repeat until we have disassembled the entire section
2072      or we have reached the end of the address range we are interested in.  */
2073   while (addr_offset < stop_offset)
2074     {
2075       bfd_vma addr;
2076       asymbol *nextsym;
2077       bfd_vma nextstop_offset;
2078       bfd_boolean insns;
2079
2080       addr = section->vma + addr_offset;
2081       addr = ((addr & ((sign_adjust << 1) - 1)) ^ sign_adjust) - sign_adjust;
2082
2083       if (sym != NULL && bfd_asymbol_value (sym) <= addr)
2084         {
2085           int x;
2086
2087           for (x = place;
2088                (x < sorted_symcount
2089                 && (bfd_asymbol_value (sorted_syms[x]) <= addr));
2090                ++x)
2091             continue;
2092
2093           pinfo->symbols = sorted_syms + place;
2094           pinfo->num_symbols = x - place;
2095           pinfo->symtab_pos = place;
2096         }
2097       else
2098         {
2099           pinfo->symbols = NULL;
2100           pinfo->num_symbols = 0;
2101           pinfo->symtab_pos = -1;
2102         }
2103
2104       if (! prefix_addresses)
2105         {
2106           pinfo->fprintf_func (pinfo->stream, "\n");
2107           objdump_print_addr_with_sym (abfd, section, sym, addr,
2108                                        pinfo, FALSE);
2109           pinfo->fprintf_func (pinfo->stream, ":\n");
2110         }
2111
2112       if (sym != NULL && bfd_asymbol_value (sym) > addr)
2113         nextsym = sym;
2114       else if (sym == NULL)
2115         nextsym = NULL;
2116       else
2117         {
2118 #define is_valid_next_sym(SYM) \
2119   ((SYM)->section == section \
2120    && (bfd_asymbol_value (SYM) > bfd_asymbol_value (sym)) \
2121    && pinfo->symbol_is_valid (SYM, pinfo))
2122
2123           /* Search forward for the next appropriate symbol in
2124              SECTION.  Note that all the symbols are sorted
2125              together into one big array, and that some sections
2126              may have overlapping addresses.  */
2127           while (place < sorted_symcount
2128                  && ! is_valid_next_sym (sorted_syms [place]))
2129             ++place;
2130
2131           if (place >= sorted_symcount)
2132             nextsym = NULL;
2133           else
2134             nextsym = sorted_syms[place];
2135         }
2136
2137       if (sym != NULL && bfd_asymbol_value (sym) > addr)
2138         nextstop_offset = bfd_asymbol_value (sym) - section->vma;
2139       else if (nextsym == NULL)
2140         nextstop_offset = stop_offset;
2141       else
2142         nextstop_offset = bfd_asymbol_value (nextsym) - section->vma;
2143
2144       if (nextstop_offset > stop_offset
2145           || nextstop_offset <= addr_offset)
2146         nextstop_offset = stop_offset;
2147
2148       /* If a symbol is explicitly marked as being an object
2149          rather than a function, just dump the bytes without
2150          disassembling them.  */
2151       if (disassemble_all
2152           || sym == NULL
2153           || sym->section != section
2154           || bfd_asymbol_value (sym) > addr
2155           || ((sym->flags & BSF_OBJECT) == 0
2156               && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
2157                   == NULL)
2158               && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
2159                   == NULL))
2160           || (sym->flags & BSF_FUNCTION) != 0)
2161         insns = TRUE;
2162       else
2163         insns = FALSE;
2164
2165       disassemble_bytes (pinfo, paux->disassemble_fn, insns, data,
2166                          addr_offset, nextstop_offset,
2167                          rel_offset, &rel_pp, rel_ppend);
2168
2169       addr_offset = nextstop_offset;
2170       sym = nextsym;
2171     }
2172
2173   free (data);
2174
2175   if (rel_ppstart != NULL)
2176     free (rel_ppstart);
2177 }
2178
2179 /* Disassemble the contents of an object file.  */
2180
2181 static void
2182 disassemble_data (bfd *abfd)
2183 {
2184   struct disassemble_info disasm_info;
2185   struct objdump_disasm_info aux;
2186   long i;
2187
2188   print_files = NULL;
2189   prev_functionname = NULL;
2190   prev_line = -1;
2191   prev_discriminator = 0;
2192
2193   /* We make a copy of syms to sort.  We don't want to sort syms
2194      because that will screw up the relocs.  */
2195   sorted_symcount = symcount ? symcount : dynsymcount;
2196   sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount)
2197                                       * sizeof (asymbol *));
2198   memcpy (sorted_syms, symcount ? syms : dynsyms,
2199           sorted_symcount * sizeof (asymbol *));
2200
2201   sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount);
2202
2203   for (i = 0; i < synthcount; ++i)
2204     {
2205       sorted_syms[sorted_symcount] = synthsyms + i;
2206       ++sorted_symcount;
2207     }
2208
2209   /* Sort the symbols into section and symbol order.  */
2210   qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
2211
2212   init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
2213
2214   disasm_info.application_data = (void *) &aux;
2215   aux.abfd = abfd;
2216   aux.require_sec = FALSE;
2217   aux.dynrelbuf = NULL;
2218   aux.dynrelcount = 0;
2219   aux.reloc = NULL;
2220
2221   disasm_info.print_address_func = objdump_print_address;
2222   disasm_info.symbol_at_address_func = objdump_symbol_at_address;
2223
2224   if (machine != NULL)
2225     {
2226       const bfd_arch_info_type *inf = bfd_scan_arch (machine);
2227
2228       if (inf == NULL)
2229         fatal (_("can't use supplied machine %s"), machine);
2230
2231       abfd->arch_info = inf;
2232     }
2233
2234   if (endian != BFD_ENDIAN_UNKNOWN)
2235     {
2236       struct bfd_target *xvec;
2237
2238       xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
2239       memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
2240       xvec->byteorder = endian;
2241       abfd->xvec = xvec;
2242     }
2243
2244   /* Use libopcodes to locate a suitable disassembler.  */
2245   aux.disassemble_fn = disassembler (abfd);
2246   if (!aux.disassemble_fn)
2247     {
2248       non_fatal (_("can't disassemble for architecture %s\n"),
2249                  bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
2250       exit_status = 1;
2251       return;
2252     }
2253
2254   disasm_info.flavour = bfd_get_flavour (abfd);
2255   disasm_info.arch = bfd_get_arch (abfd);
2256   disasm_info.mach = bfd_get_mach (abfd);
2257   disasm_info.disassembler_options = disassembler_options;
2258   disasm_info.octets_per_byte = bfd_octets_per_byte (abfd);
2259   disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES;
2260   disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END;
2261   disasm_info.disassembler_needs_relocs = FALSE;
2262
2263   if (bfd_big_endian (abfd))
2264     disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG;
2265   else if (bfd_little_endian (abfd))
2266     disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_LITTLE;
2267   else
2268     /* ??? Aborting here seems too drastic.  We could default to big or little
2269        instead.  */
2270     disasm_info.endian = BFD_ENDIAN_UNKNOWN;
2271
2272   /* Allow the target to customize the info structure.  */
2273   disassemble_init_for_target (& disasm_info);
2274
2275   /* Pre-load the dynamic relocs if we are going
2276      to be dumping them along with the disassembly.  */
2277   if (dump_dynamic_reloc_info)
2278     {
2279       long relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2280
2281       if (relsize < 0)
2282         bfd_fatal (bfd_get_filename (abfd));
2283
2284       if (relsize > 0)
2285         {
2286           aux.dynrelbuf = (arelent **) xmalloc (relsize);
2287           aux.dynrelcount = bfd_canonicalize_dynamic_reloc (abfd,
2288                                                             aux.dynrelbuf,
2289                                                             dynsyms);
2290           if (aux.dynrelcount < 0)
2291             bfd_fatal (bfd_get_filename (abfd));
2292
2293           /* Sort the relocs by address.  */
2294           qsort (aux.dynrelbuf, aux.dynrelcount, sizeof (arelent *),
2295                  compare_relocs);
2296         }
2297     }
2298   disasm_info.symtab = sorted_syms;
2299   disasm_info.symtab_size = sorted_symcount;
2300
2301   bfd_map_over_sections (abfd, disassemble_section, & disasm_info);
2302
2303   if (aux.dynrelbuf != NULL)
2304     free (aux.dynrelbuf);
2305   free (sorted_syms);
2306 }
2307 \f
2308 static int
2309 load_specific_debug_section (enum dwarf_section_display_enum debug,
2310                              asection *sec, void *file)
2311 {
2312   struct dwarf_section *section = &debug_displays [debug].section;
2313   bfd *abfd = (bfd *) file;
2314   bfd_boolean ret;
2315
2316   /* If it is already loaded, do nothing.  */
2317   if (section->start != NULL)
2318     return 1;
2319
2320   section->reloc_info = NULL;
2321   section->num_relocs = 0;
2322   section->address = bfd_get_section_vma (abfd, sec);
2323   section->size = bfd_get_section_size (sec);
2324   section->start = NULL;
2325   section->user_data = sec;
2326   ret = bfd_get_full_section_contents (abfd, sec, &section->start);
2327
2328   if (! ret)
2329     {
2330       free_debug_section (debug);
2331       printf (_("\nCan't get contents for section '%s'.\n"),
2332               section->name);
2333       return 0;
2334     }
2335
2336   if (is_relocatable && debug_displays [debug].relocate)
2337     {
2338       bfd_cache_section_contents (sec, section->start);
2339
2340       ret = bfd_simple_get_relocated_section_contents (abfd,
2341                                                        sec,
2342                                                        section->start,
2343                                                        syms) != NULL;
2344
2345       if (! ret)
2346         {
2347           free_debug_section (debug);
2348           printf (_("\nCan't get contents for section '%s'.\n"),
2349                   section->name);
2350           return 0;
2351         }
2352
2353       long reloc_size;
2354
2355       reloc_size = bfd_get_reloc_upper_bound (abfd, sec);
2356       if (reloc_size > 0)
2357         {
2358           unsigned long reloc_count;
2359           arelent **relocs;
2360
2361           relocs = (arelent **) xmalloc (reloc_size);
2362
2363           reloc_count = bfd_canonicalize_reloc (abfd, sec, relocs, NULL);
2364           if (reloc_count == 0)
2365             free (relocs);
2366           else
2367             {
2368               section->reloc_info = relocs;
2369               section->num_relocs = reloc_count;
2370             }
2371         }
2372     }
2373
2374   return 1;
2375 }
2376
2377 bfd_boolean
2378 reloc_at (struct dwarf_section * dsec, dwarf_vma offset)
2379 {
2380   arelent ** relocs;
2381   arelent * rp;
2382
2383   if (dsec == NULL || dsec->reloc_info == NULL)
2384     return FALSE;
2385
2386   relocs = (arelent **) dsec->reloc_info;
2387
2388   for (; (rp = * relocs) != NULL; ++ relocs)
2389     if (rp->address == offset)
2390       return TRUE;
2391
2392   return FALSE;
2393 }
2394
2395 int
2396 load_debug_section (enum dwarf_section_display_enum debug, void *file)
2397 {
2398   struct dwarf_section *section = &debug_displays [debug].section;
2399   bfd *abfd = (bfd *) file;
2400   asection *sec;
2401
2402   /* If it is already loaded, do nothing.  */
2403   if (section->start != NULL)
2404     return 1;
2405
2406   /* Locate the debug section.  */
2407   sec = bfd_get_section_by_name (abfd, section->uncompressed_name);
2408   if (sec != NULL)
2409     section->name = section->uncompressed_name;
2410   else
2411     {
2412       sec = bfd_get_section_by_name (abfd, section->compressed_name);
2413       if (sec != NULL)
2414         section->name = section->compressed_name;
2415     }
2416   if (sec == NULL)
2417     return 0;
2418
2419   return load_specific_debug_section (debug, sec, file);
2420 }
2421
2422 void
2423 free_debug_section (enum dwarf_section_display_enum debug)
2424 {
2425   struct dwarf_section *section = &debug_displays [debug].section;
2426
2427   if (section->start == NULL)
2428     return;
2429
2430   /* PR 17512: file: 0f67f69d.  */
2431   if (section->user_data != NULL)
2432     {
2433       asection * sec = (asection *) section->user_data;
2434
2435       /* If we are freeing contents that are also pointed to by the BFD
2436          library's section structure then make sure to update those pointers
2437          too.  Otherwise, the next time we try to load data for this section
2438          we can end up using a stale pointer.  */
2439       if (section->start == sec->contents)
2440         {
2441           sec->contents = NULL;
2442           sec->flags &= ~ SEC_IN_MEMORY;
2443           sec->compress_status = COMPRESS_SECTION_NONE;
2444         }
2445     }
2446
2447   free ((char *) section->start);
2448   section->start = NULL;
2449   section->address = 0;
2450   section->size = 0;
2451 }
2452
2453 static void
2454 dump_dwarf_section (bfd *abfd, asection *section,
2455                     void *arg ATTRIBUTE_UNUSED)
2456 {
2457   const char *name = bfd_get_section_name (abfd, section);
2458   const char *match;
2459   int i;
2460
2461   if (CONST_STRNEQ (name, ".gnu.linkonce.wi."))
2462     match = ".debug_info";
2463   else
2464     match = name;
2465
2466   for (i = 0; i < max; i++)
2467     if ((strcmp (debug_displays [i].section.uncompressed_name, match) == 0
2468          || strcmp (debug_displays [i].section.compressed_name, match) == 0)
2469         && debug_displays [i].enabled != NULL
2470         && *debug_displays [i].enabled)
2471       {
2472         struct dwarf_section *sec = &debug_displays [i].section;
2473
2474         if (strcmp (sec->uncompressed_name, match) == 0)
2475           sec->name = sec->uncompressed_name;
2476         else
2477           sec->name = sec->compressed_name;
2478         if (load_specific_debug_section ((enum dwarf_section_display_enum) i,
2479                                          section, abfd))
2480           {
2481             debug_displays [i].display (sec, abfd);
2482
2483             if (i != info && i != abbrev)
2484               free_debug_section ((enum dwarf_section_display_enum) i);
2485           }
2486         break;
2487       }
2488 }
2489
2490 /* Dump the dwarf debugging information.  */
2491
2492 static void
2493 dump_dwarf (bfd *abfd)
2494 {
2495   is_relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2496
2497   eh_addr_size = bfd_arch_bits_per_address (abfd) / 8;
2498
2499   if (bfd_big_endian (abfd))
2500     byte_get = byte_get_big_endian;
2501   else if (bfd_little_endian (abfd))
2502     byte_get = byte_get_little_endian;
2503   else
2504     /* PR 17512: file: objdump-s-endless-loop.tekhex.  */
2505     {
2506       warn (_("File %s does not contain any dwarf debug information\n"),
2507             bfd_get_filename (abfd));
2508       return;
2509     }
2510
2511   switch (bfd_get_arch (abfd))
2512     {
2513     case bfd_arch_i386:
2514       switch (bfd_get_mach (abfd))
2515         {
2516         case bfd_mach_x86_64:
2517         case bfd_mach_x86_64_intel_syntax:
2518         case bfd_mach_x86_64_nacl:
2519         case bfd_mach_x64_32:
2520         case bfd_mach_x64_32_intel_syntax:
2521         case bfd_mach_x64_32_nacl:
2522           init_dwarf_regnames_x86_64 ();
2523           break;
2524
2525         default:
2526           init_dwarf_regnames_i386 ();
2527           break;
2528         }
2529       break;
2530
2531     case bfd_arch_iamcu:
2532       init_dwarf_regnames_iamcu ();
2533       break;
2534
2535     case bfd_arch_aarch64:
2536       init_dwarf_regnames_aarch64();
2537       break;
2538
2539     case bfd_arch_s390:
2540       init_dwarf_regnames_s390 ();
2541       break;
2542
2543     default:
2544       break;
2545     }
2546
2547   bfd_map_over_sections (abfd, dump_dwarf_section, NULL);
2548
2549   free_debug_memory ();
2550 }
2551 \f
2552 /* Read ABFD's stabs section STABSECT_NAME, and return a pointer to
2553    it.  Return NULL on failure.   */
2554
2555 static char *
2556 read_section_stabs (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr)
2557 {
2558   asection *stabsect;
2559   bfd_size_type size;
2560   char *contents;
2561
2562   stabsect = bfd_get_section_by_name (abfd, sect_name);
2563   if (stabsect == NULL)
2564     {
2565       printf (_("No %s section present\n\n"), sect_name);
2566       return FALSE;
2567     }
2568
2569   size = bfd_section_size (abfd, stabsect);
2570   contents  = (char *) xmalloc (size);
2571
2572   if (! bfd_get_section_contents (abfd, stabsect, contents, 0, size))
2573     {
2574       non_fatal (_("reading %s section of %s failed: %s"),
2575                  sect_name, bfd_get_filename (abfd),
2576                  bfd_errmsg (bfd_get_error ()));
2577       exit_status = 1;
2578       free (contents);
2579       return NULL;
2580     }
2581
2582   *size_ptr = size;
2583
2584   return contents;
2585 }
2586
2587 /* Stabs entries use a 12 byte format:
2588      4 byte string table index
2589      1 byte stab type
2590      1 byte stab other field
2591      2 byte stab desc field
2592      4 byte stab value
2593    FIXME: This will have to change for a 64 bit object format.  */
2594
2595 #define STRDXOFF  (0)
2596 #define TYPEOFF   (4)
2597 #define OTHEROFF  (5)
2598 #define DESCOFF   (6)
2599 #define VALOFF    (8)
2600 #define STABSIZE (12)
2601
2602 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
2603    using string table section STRSECT_NAME (in `strtab').  */
2604
2605 static void
2606 print_section_stabs (bfd *abfd,
2607                      const char *stabsect_name,
2608                      unsigned *string_offset_ptr)
2609 {
2610   int i;
2611   unsigned file_string_table_offset = 0;
2612   unsigned next_file_string_table_offset = *string_offset_ptr;
2613   bfd_byte *stabp, *stabs_end;
2614
2615   stabp = stabs;
2616   stabs_end = stabp + stab_size;
2617
2618   printf (_("Contents of %s section:\n\n"), stabsect_name);
2619   printf ("Symnum n_type n_othr n_desc n_value  n_strx String\n");
2620
2621   /* Loop through all symbols and print them.
2622
2623      We start the index at -1 because there is a dummy symbol on
2624      the front of stabs-in-{coff,elf} sections that supplies sizes.  */
2625   for (i = -1; stabp <= stabs_end - STABSIZE; stabp += STABSIZE, i++)
2626     {
2627       const char *name;
2628       unsigned long strx;
2629       unsigned char type, other;
2630       unsigned short desc;
2631       bfd_vma value;
2632
2633       strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
2634       type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
2635       other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
2636       desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
2637       value = bfd_h_get_32 (abfd, stabp + VALOFF);
2638
2639       printf ("\n%-6d ", i);
2640       /* Either print the stab name, or, if unnamed, print its number
2641          again (makes consistent formatting for tools like awk).  */
2642       name = bfd_get_stab_name (type);
2643       if (name != NULL)
2644         printf ("%-6s", name);
2645       else if (type == N_UNDF)
2646         printf ("HdrSym");
2647       else
2648         printf ("%-6d", type);
2649       printf (" %-6d %-6d ", other, desc);
2650       bfd_printf_vma (abfd, value);
2651       printf (" %-6lu", strx);
2652
2653       /* Symbols with type == 0 (N_UNDF) specify the length of the
2654          string table associated with this file.  We use that info
2655          to know how to relocate the *next* file's string table indices.  */
2656       if (type == N_UNDF)
2657         {
2658           file_string_table_offset = next_file_string_table_offset;
2659           next_file_string_table_offset += value;
2660         }
2661       else
2662         {
2663           bfd_size_type amt = strx + file_string_table_offset;
2664
2665           /* Using the (possibly updated) string table offset, print the
2666              string (if any) associated with this symbol.  */
2667           if (amt < stabstr_size)
2668             /* PR 17512: file: 079-79389-0.001:0.1.  */
2669             printf (" %.*s", (int)(stabstr_size - amt), strtab + amt);
2670           else
2671             printf (" *");
2672         }
2673     }
2674   printf ("\n\n");
2675   *string_offset_ptr = next_file_string_table_offset;
2676 }
2677
2678 typedef struct
2679 {
2680   const char * section_name;
2681   const char * string_section_name;
2682   unsigned string_offset;
2683 }
2684 stab_section_names;
2685
2686 static void
2687 find_stabs_section (bfd *abfd, asection *section, void *names)
2688 {
2689   int len;
2690   stab_section_names * sought = (stab_section_names *) names;
2691
2692   /* Check for section names for which stabsect_name is a prefix, to
2693      handle .stab.N, etc.  */
2694   len = strlen (sought->section_name);
2695
2696   /* If the prefix matches, and the files section name ends with a
2697      nul or a digit, then we match.  I.e., we want either an exact
2698      match or a section followed by a number.  */
2699   if (strncmp (sought->section_name, section->name, len) == 0
2700       && (section->name[len] == 0
2701           || (section->name[len] == '.' && ISDIGIT (section->name[len + 1]))))
2702     {
2703       if (strtab == NULL)
2704         strtab = read_section_stabs (abfd, sought->string_section_name,
2705                                      &stabstr_size);
2706
2707       if (strtab)
2708         {
2709           stabs = (bfd_byte *) read_section_stabs (abfd, section->name,
2710                                                    &stab_size);
2711           if (stabs)
2712             print_section_stabs (abfd, section->name, &sought->string_offset);
2713         }
2714     }
2715 }
2716
2717 static void
2718 dump_stabs_section (bfd *abfd, char *stabsect_name, char *strsect_name)
2719 {
2720   stab_section_names s;
2721
2722   s.section_name = stabsect_name;
2723   s.string_section_name = strsect_name;
2724   s.string_offset = 0;
2725
2726   bfd_map_over_sections (abfd, find_stabs_section, & s);
2727
2728   free (strtab);
2729   strtab = NULL;
2730 }
2731
2732 /* Dump the any sections containing stabs debugging information.  */
2733
2734 static void
2735 dump_stabs (bfd *abfd)
2736 {
2737   dump_stabs_section (abfd, ".stab", ".stabstr");
2738   dump_stabs_section (abfd, ".stab.excl", ".stab.exclstr");
2739   dump_stabs_section (abfd, ".stab.index", ".stab.indexstr");
2740
2741   /* For Darwin.  */
2742   dump_stabs_section (abfd, "LC_SYMTAB.stabs", "LC_SYMTAB.stabstr");
2743
2744   dump_stabs_section (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
2745 }
2746 \f
2747 static void
2748 dump_bfd_header (bfd *abfd)
2749 {
2750   char *comma = "";
2751
2752   printf (_("architecture: %s, "),
2753           bfd_printable_arch_mach (bfd_get_arch (abfd),
2754                                    bfd_get_mach (abfd)));
2755   printf (_("flags 0x%08x:\n"), abfd->flags & ~BFD_FLAGS_FOR_BFD_USE_MASK);
2756
2757 #define PF(x, y)    if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2758   PF (HAS_RELOC, "HAS_RELOC");
2759   PF (EXEC_P, "EXEC_P");
2760   PF (HAS_LINENO, "HAS_LINENO");
2761   PF (HAS_DEBUG, "HAS_DEBUG");
2762   PF (HAS_SYMS, "HAS_SYMS");
2763   PF (HAS_LOCALS, "HAS_LOCALS");
2764   PF (DYNAMIC, "DYNAMIC");
2765   PF (WP_TEXT, "WP_TEXT");
2766   PF (D_PAGED, "D_PAGED");
2767   PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
2768   printf (_("\nstart address 0x"));
2769   bfd_printf_vma (abfd, abfd->start_address);
2770   printf ("\n");
2771 }
2772
2773 \f
2774 static void
2775 dump_bfd_private_header (bfd *abfd)
2776 {
2777   bfd_print_private_bfd_data (abfd, stdout);
2778 }
2779
2780 static void
2781 dump_target_specific (bfd *abfd)
2782 {
2783   const struct objdump_private_desc * const *desc;
2784   struct objdump_private_option *opt;
2785   char *e, *b;
2786
2787   /* Find the desc.  */
2788   for (desc = objdump_private_vectors; *desc != NULL; desc++)
2789     if ((*desc)->filter (abfd))
2790       break;
2791
2792   if (*desc == NULL)
2793     {
2794       non_fatal (_("option -P/--private not supported by this file"));
2795       return;
2796     }
2797
2798   /* Clear all options.  */
2799   for (opt = (*desc)->options; opt->name; opt++)
2800     opt->selected = FALSE;
2801
2802   /* Decode options.  */
2803   b = dump_private_options;
2804   do
2805     {
2806       e = strchr (b, ',');
2807
2808       if (e)
2809         *e = 0;
2810
2811       for (opt = (*desc)->options; opt->name; opt++)
2812         if (strcmp (opt->name, b) == 0)
2813           {
2814             opt->selected = TRUE;
2815             break;
2816           }
2817       if (opt->name == NULL)
2818         non_fatal (_("target specific dump '%s' not supported"), b);
2819
2820       if (e)
2821         {
2822           *e = ',';
2823           b = e + 1;
2824         }
2825     }
2826   while (e != NULL);
2827
2828   /* Dump.  */
2829   (*desc)->dump (abfd);
2830 }
2831 \f
2832 /* Display a section in hexadecimal format with associated characters.
2833    Each line prefixed by the zero padded address.  */
2834
2835 static void
2836 dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED)
2837 {
2838   bfd_byte *data = 0;
2839   bfd_size_type datasize;
2840   bfd_vma addr_offset;
2841   bfd_vma start_offset;
2842   bfd_vma stop_offset;
2843   unsigned int opb = bfd_octets_per_byte (abfd);
2844   /* Bytes per line.  */
2845   const int onaline = 16;
2846   char buf[64];
2847   int count;
2848   int width;
2849
2850   if ((section->flags & SEC_HAS_CONTENTS) == 0)
2851     return;
2852
2853   if (! process_section_p (section))
2854     return;
2855
2856   if ((datasize = bfd_section_size (abfd, section)) == 0)
2857     return;
2858
2859   /* Compute the address range to display.  */
2860   if (start_address == (bfd_vma) -1
2861       || start_address < section->vma)
2862     start_offset = 0;
2863   else
2864     start_offset = start_address - section->vma;
2865
2866   if (stop_address == (bfd_vma) -1)
2867     stop_offset = datasize / opb;
2868   else
2869     {
2870       if (stop_address < section->vma)
2871         stop_offset = 0;
2872       else
2873         stop_offset = stop_address - section->vma;
2874
2875       if (stop_offset > datasize / opb)
2876         stop_offset = datasize / opb;
2877     }
2878
2879   if (start_offset >= stop_offset)
2880     return;
2881
2882   printf (_("Contents of section %s:"), section->name);
2883   if (display_file_offsets)
2884     printf (_("  (Starting at file offset: 0x%lx)"),
2885             (unsigned long) (section->filepos + start_offset));
2886   printf ("\n");
2887
2888   if (!bfd_get_full_section_contents (abfd, section, &data))
2889     {
2890       non_fatal (_("Reading section %s failed because: %s"),
2891                  section->name, bfd_errmsg (bfd_get_error ()));
2892       return;
2893     }
2894
2895   width = 4;
2896
2897   bfd_sprintf_vma (abfd, buf, start_offset + section->vma);
2898   if (strlen (buf) >= sizeof (buf))
2899     abort ();
2900
2901   count = 0;
2902   while (buf[count] == '0' && buf[count+1] != '\0')
2903     count++;
2904   count = strlen (buf) - count;
2905   if (count > width)
2906     width = count;
2907
2908   bfd_sprintf_vma (abfd, buf, stop_offset + section->vma - 1);
2909   if (strlen (buf) >= sizeof (buf))
2910     abort ();
2911
2912   count = 0;
2913   while (buf[count] == '0' && buf[count+1] != '\0')
2914     count++;
2915   count = strlen (buf) - count;
2916   if (count > width)
2917     width = count;
2918
2919   for (addr_offset = start_offset;
2920        addr_offset < stop_offset; addr_offset += onaline / opb)
2921     {
2922       bfd_size_type j;
2923
2924       bfd_sprintf_vma (abfd, buf, (addr_offset + section->vma));
2925       count = strlen (buf);
2926       if ((size_t) count >= sizeof (buf))
2927         abort ();
2928
2929       putchar (' ');
2930       while (count < width)
2931         {
2932           putchar ('0');
2933           count++;
2934         }
2935       fputs (buf + count - width, stdout);
2936       putchar (' ');
2937
2938       for (j = addr_offset * opb;
2939            j < addr_offset * opb + onaline; j++)
2940         {
2941           if (j < stop_offset * opb)
2942             printf ("%02x", (unsigned) (data[j]));
2943           else
2944             printf ("  ");
2945           if ((j & 3) == 3)
2946             printf (" ");
2947         }
2948
2949       printf (" ");
2950       for (j = addr_offset * opb;
2951            j < addr_offset * opb + onaline; j++)
2952         {
2953           if (j >= stop_offset * opb)
2954             printf (" ");
2955           else
2956             printf ("%c", ISPRINT (data[j]) ? data[j] : '.');
2957         }
2958       putchar ('\n');
2959     }
2960   free (data);
2961 }
2962
2963 /* Actually display the various requested regions.  */
2964
2965 static void
2966 dump_data (bfd *abfd)
2967 {
2968   bfd_map_over_sections (abfd, dump_section, NULL);
2969 }
2970
2971 /* Should perhaps share code and display with nm?  */
2972
2973 static void
2974 dump_symbols (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean dynamic)
2975 {
2976   asymbol **current;
2977   long max_count;
2978   long count;
2979
2980   if (dynamic)
2981     {
2982       current = dynsyms;
2983       max_count = dynsymcount;
2984       printf ("DYNAMIC SYMBOL TABLE:\n");
2985     }
2986   else
2987     {
2988       current = syms;
2989       max_count = symcount;
2990       printf ("SYMBOL TABLE:\n");
2991     }
2992
2993   if (max_count == 0)
2994     printf (_("no symbols\n"));
2995
2996   for (count = 0; count < max_count; count++)
2997     {
2998       bfd *cur_bfd;
2999
3000       if (*current == NULL)
3001         printf (_("no information for symbol number %ld\n"), count);
3002
3003       else if ((cur_bfd = bfd_asymbol_bfd (*current)) == NULL)
3004         printf (_("could not determine the type of symbol number %ld\n"),
3005                 count);
3006
3007       else if (process_section_p ((* current)->section)
3008                && (dump_special_syms
3009                    || !bfd_is_target_special_symbol (cur_bfd, *current)))
3010         {
3011           const char *name = (*current)->name;
3012
3013           if (do_demangle && name != NULL && *name != '\0')
3014             {
3015               char *alloc;
3016
3017               /* If we want to demangle the name, we demangle it
3018                  here, and temporarily clobber it while calling
3019                  bfd_print_symbol.  FIXME: This is a gross hack.  */
3020               alloc = bfd_demangle (cur_bfd, name, DMGL_ANSI | DMGL_PARAMS);
3021               if (alloc != NULL)
3022                 (*current)->name = alloc;
3023               bfd_print_symbol (cur_bfd, stdout, *current,
3024                                 bfd_print_symbol_all);
3025               if (alloc != NULL)
3026                 {
3027                   (*current)->name = name;
3028                   free (alloc);
3029                 }
3030             }
3031           else
3032             bfd_print_symbol (cur_bfd, stdout, *current,
3033                               bfd_print_symbol_all);
3034           printf ("\n");
3035         }
3036
3037       current++;
3038     }
3039   printf ("\n\n");
3040 }
3041 \f
3042 static void
3043 dump_reloc_set (bfd *abfd, asection *sec, arelent **relpp, long relcount)
3044 {
3045   arelent **p;
3046   char *last_filename, *last_functionname;
3047   unsigned int last_line;
3048   unsigned int last_discriminator;
3049
3050   /* Get column headers lined up reasonably.  */
3051   {
3052     static int width;
3053
3054     if (width == 0)
3055       {
3056         char buf[30];
3057
3058         bfd_sprintf_vma (abfd, buf, (bfd_vma) -1);
3059         width = strlen (buf) - 7;
3060       }
3061     printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
3062   }
3063
3064   last_filename = NULL;
3065   last_functionname = NULL;
3066   last_line = 0;
3067   last_discriminator = 0;
3068
3069   for (p = relpp; relcount && *p != NULL; p++, relcount--)
3070     {
3071       arelent *q = *p;
3072       const char *filename, *functionname;
3073       unsigned int linenumber;
3074       unsigned int discriminator;
3075       const char *sym_name;
3076       const char *section_name;
3077       bfd_vma addend2 = 0;
3078
3079       if (start_address != (bfd_vma) -1
3080           && q->address < start_address)
3081         continue;
3082       if (stop_address != (bfd_vma) -1
3083           && q->address > stop_address)
3084         continue;
3085
3086       if (with_line_numbers
3087           && sec != NULL
3088           && bfd_find_nearest_line_discriminator (abfd, sec, syms, q->address,
3089                                                   &filename, &functionname,
3090                                                   &linenumber, &discriminator))
3091         {
3092           if (functionname != NULL
3093               && (last_functionname == NULL
3094                   || strcmp (functionname, last_functionname) != 0))
3095             {
3096               printf ("%s():\n", functionname);
3097               if (last_functionname != NULL)
3098                 free (last_functionname);
3099               last_functionname = xstrdup (functionname);
3100             }
3101
3102           if (linenumber > 0
3103               && (linenumber != last_line
3104                   || (filename != NULL
3105                       && last_filename != NULL
3106                       && filename_cmp (filename, last_filename) != 0)
3107                   || (discriminator != last_discriminator)))
3108             {
3109               if (discriminator > 0)
3110                 printf ("%s:%u\n", filename == NULL ? "???" : filename, linenumber);
3111               else
3112                 printf ("%s:%u (discriminator %u)\n", filename == NULL ? "???" : filename,
3113                         linenumber, discriminator);
3114               last_line = linenumber;
3115               last_discriminator = discriminator;
3116               if (last_filename != NULL)
3117                 free (last_filename);
3118               if (filename == NULL)
3119                 last_filename = NULL;
3120               else
3121                 last_filename = xstrdup (filename);
3122             }
3123         }
3124
3125       if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
3126         {
3127           sym_name = (*(q->sym_ptr_ptr))->name;
3128           section_name = (*(q->sym_ptr_ptr))->section->name;
3129         }
3130       else
3131         {
3132           sym_name = NULL;
3133           section_name = NULL;
3134         }
3135
3136       bfd_printf_vma (abfd, q->address);
3137       if (q->howto == NULL)
3138         printf (" *unknown*         ");
3139       else if (q->howto->name)
3140         {
3141           const char *name = q->howto->name;
3142
3143           /* R_SPARC_OLO10 relocations contain two addends.
3144              But because 'arelent' lacks enough storage to
3145              store them both, the 64-bit ELF Sparc backend
3146              records this as two relocations.  One R_SPARC_LO10
3147              and one R_SPARC_13, both pointing to the same
3148              address.  This is merely so that we have some
3149              place to store both addend fields.
3150
3151              Undo this transformation, otherwise the output
3152              will be confusing.  */
3153           if (abfd->xvec->flavour == bfd_target_elf_flavour
3154               && elf_tdata(abfd)->elf_header->e_machine == EM_SPARCV9
3155               && relcount > 1
3156               && !strcmp (q->howto->name, "R_SPARC_LO10"))
3157             {
3158               arelent *q2 = *(p + 1);
3159               if (q2 != NULL
3160                   && q2->howto
3161                   && q->address == q2->address
3162                   && !strcmp (q2->howto->name, "R_SPARC_13"))
3163                 {
3164                   name = "R_SPARC_OLO10";
3165                   addend2 = q2->addend;
3166                   p++;
3167                 }
3168             }
3169           printf (" %-16s  ", name);
3170         }
3171       else
3172         printf (" %-16d  ", q->howto->type);
3173
3174       if (sym_name)
3175         {
3176           objdump_print_symname (abfd, NULL, *q->sym_ptr_ptr);
3177         }
3178       else
3179         {
3180           if (section_name == NULL)
3181             section_name = "*unknown*";
3182           printf ("[%s]", section_name);
3183         }
3184
3185       if (q->addend)
3186         {
3187           bfd_signed_vma addend = q->addend;
3188           if (addend < 0)
3189             {
3190               printf ("-0x");
3191               addend = -addend;
3192             }
3193           else
3194             printf ("+0x");
3195           bfd_printf_vma (abfd, addend);
3196         }
3197       if (addend2)
3198         {
3199           printf ("+0x");
3200           bfd_printf_vma (abfd, addend2);
3201         }
3202
3203       printf ("\n");
3204     }
3205
3206   if (last_filename != NULL)
3207     free (last_filename);
3208   if (last_functionname != NULL)
3209     free (last_functionname);
3210 }
3211
3212 static void
3213 dump_relocs_in_section (bfd *abfd,
3214                         asection *section,
3215                         void *dummy ATTRIBUTE_UNUSED)
3216 {
3217   arelent **relpp;
3218   long relcount;
3219   long relsize;
3220
3221   if (   bfd_is_abs_section (section)
3222       || bfd_is_und_section (section)
3223       || bfd_is_com_section (section)
3224       || (! process_section_p (section))
3225       || ((section->flags & SEC_RELOC) == 0))
3226     return;
3227
3228   relsize = bfd_get_reloc_upper_bound (abfd, section);
3229   if (relsize < 0)
3230     bfd_fatal (bfd_get_filename (abfd));
3231
3232   printf ("RELOCATION RECORDS FOR [%s]:", section->name);
3233
3234   if (relsize == 0)
3235     {
3236       printf (" (none)\n\n");
3237       return;
3238     }
3239
3240   relpp = (arelent **) xmalloc (relsize);
3241   relcount = bfd_canonicalize_reloc (abfd, section, relpp, syms);
3242
3243   if (relcount < 0)
3244     {
3245       printf ("\n");
3246       non_fatal (_("failed to read relocs in: %s"), bfd_get_filename (abfd));
3247       bfd_fatal (_("error message was"));
3248     }
3249   else if (relcount == 0)
3250     printf (" (none)\n\n");
3251   else
3252     {
3253       printf ("\n");
3254       dump_reloc_set (abfd, section, relpp, relcount);
3255       printf ("\n\n");
3256     }
3257   free (relpp);
3258 }
3259
3260 static void
3261 dump_relocs (bfd *abfd)
3262 {
3263   bfd_map_over_sections (abfd, dump_relocs_in_section, NULL);
3264 }
3265
3266 static void
3267 dump_dynamic_relocs (bfd *abfd)
3268 {
3269   long relsize;
3270   arelent **relpp;
3271   long relcount;
3272
3273   relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
3274   if (relsize < 0)
3275     bfd_fatal (bfd_get_filename (abfd));
3276
3277   printf ("DYNAMIC RELOCATION RECORDS");
3278
3279   if (relsize == 0)
3280     printf (" (none)\n\n");
3281   else
3282     {
3283       relpp = (arelent **) xmalloc (relsize);
3284       relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
3285
3286       if (relcount < 0)
3287         bfd_fatal (bfd_get_filename (abfd));
3288       else if (relcount == 0)
3289         printf (" (none)\n\n");
3290       else
3291         {
3292           printf ("\n");
3293           dump_reloc_set (abfd, NULL, relpp, relcount);
3294           printf ("\n\n");
3295         }
3296       free (relpp);
3297     }
3298 }
3299
3300 /* Creates a table of paths, to search for source files.  */
3301
3302 static void
3303 add_include_path (const char *path)
3304 {
3305   if (path[0] == 0)
3306     return;
3307   include_path_count++;
3308   include_paths = (const char **)
3309       xrealloc (include_paths, include_path_count * sizeof (*include_paths));
3310 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3311   if (path[1] == ':' && path[2] == 0)
3312     path = concat (path, ".", (const char *) 0);
3313 #endif
3314   include_paths[include_path_count - 1] = path;
3315 }
3316
3317 static void
3318 adjust_addresses (bfd *abfd ATTRIBUTE_UNUSED,
3319                   asection *section,
3320                   void *arg)
3321 {
3322   if ((section->flags & SEC_DEBUGGING) == 0)
3323     {
3324       bfd_boolean *has_reloc_p = (bfd_boolean *) arg;
3325       section->vma += adjust_section_vma;
3326       if (*has_reloc_p)
3327         section->lma += adjust_section_vma;
3328     }
3329 }
3330
3331 /* Dump selected contents of ABFD.  */
3332
3333 static void
3334 dump_bfd (bfd *abfd)
3335 {
3336   /* If we are adjusting section VMA's, change them all now.  Changing
3337      the BFD information is a hack.  However, we must do it, or
3338      bfd_find_nearest_line will not do the right thing.  */
3339   if (adjust_section_vma != 0)
3340     {
3341       bfd_boolean has_reloc = (abfd->flags & HAS_RELOC);
3342       bfd_map_over_sections (abfd, adjust_addresses, &has_reloc);
3343     }
3344
3345   if (! dump_debugging_tags && ! suppress_bfd_header)
3346     printf (_("\n%s:     file format %s\n"), bfd_get_filename (abfd),
3347             abfd->xvec->name);
3348   if (dump_ar_hdrs)
3349     print_arelt_descr (stdout, abfd, TRUE);
3350   if (dump_file_header)
3351     dump_bfd_header (abfd);
3352   if (dump_private_headers)
3353     dump_bfd_private_header (abfd);
3354   if (dump_private_options != NULL)
3355     dump_target_specific (abfd);
3356   if (! dump_debugging_tags && ! suppress_bfd_header)
3357     putchar ('\n');
3358
3359   if (dump_symtab
3360       || dump_reloc_info
3361       || disassemble
3362       || dump_debugging
3363       || dump_dwarf_section_info)
3364     syms = slurp_symtab (abfd);
3365
3366   if (dump_section_headers)
3367     dump_headers (abfd);
3368
3369   if (dump_dynamic_symtab || dump_dynamic_reloc_info
3370       || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
3371     dynsyms = slurp_dynamic_symtab (abfd);
3372   if (disassemble)
3373     {
3374       synthcount = bfd_get_synthetic_symtab (abfd, symcount, syms,
3375                                              dynsymcount, dynsyms, &synthsyms);
3376       if (synthcount < 0)
3377         synthcount = 0;
3378     }
3379
3380   if (dump_symtab)
3381     dump_symbols (abfd, FALSE);
3382   if (dump_dynamic_symtab)
3383     dump_symbols (abfd, TRUE);
3384   if (dump_dwarf_section_info)
3385     dump_dwarf (abfd);
3386   if (dump_stab_section_info)
3387     dump_stabs (abfd);
3388   if (dump_reloc_info && ! disassemble)
3389     dump_relocs (abfd);
3390   if (dump_dynamic_reloc_info && ! disassemble)
3391     dump_dynamic_relocs (abfd);
3392   if (dump_section_contents)
3393     dump_data (abfd);
3394   if (disassemble)
3395     disassemble_data (abfd);
3396
3397   if (dump_debugging)
3398     {
3399       void *dhandle;
3400
3401       dhandle = read_debugging_info (abfd, syms, symcount, TRUE);
3402       if (dhandle != NULL)
3403         {
3404           if (!print_debugging_info (stdout, dhandle, abfd, syms,
3405                                      bfd_demangle,
3406                                      dump_debugging_tags ? TRUE : FALSE))
3407             {
3408               non_fatal (_("%s: printing debugging information failed"),
3409                          bfd_get_filename (abfd));
3410               exit_status = 1;
3411             }
3412         }
3413       /* PR 6483: If there was no STABS or IEEE debug
3414          info in the file, try DWARF instead.  */
3415       else if (! dump_dwarf_section_info)
3416         {
3417           dwarf_select_sections_all ();
3418           dump_dwarf (abfd);
3419         }
3420     }
3421
3422   if (syms)
3423     {
3424       free (syms);
3425       syms = NULL;
3426     }
3427
3428   if (dynsyms)
3429     {
3430       free (dynsyms);
3431       dynsyms = NULL;
3432     }
3433
3434   if (synthsyms)
3435     {
3436       free (synthsyms);
3437       synthsyms = NULL;
3438     }
3439
3440   symcount = 0;
3441   dynsymcount = 0;
3442   synthcount = 0;
3443 }
3444
3445 static void
3446 display_object_bfd (bfd *abfd)
3447 {
3448   char **matching;
3449
3450   if (bfd_check_format_matches (abfd, bfd_object, &matching))
3451     {
3452       dump_bfd (abfd);
3453       return;
3454     }
3455
3456   if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3457     {
3458       nonfatal (bfd_get_filename (abfd));
3459       list_matching_formats (matching);
3460       free (matching);
3461       return;
3462     }
3463
3464   if (bfd_get_error () != bfd_error_file_not_recognized)
3465     {
3466       nonfatal (bfd_get_filename (abfd));
3467       return;
3468     }
3469
3470   if (bfd_check_format_matches (abfd, bfd_core, &matching))
3471     {
3472       dump_bfd (abfd);
3473       return;
3474     }
3475
3476   nonfatal (bfd_get_filename (abfd));
3477
3478   if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3479     {
3480       list_matching_formats (matching);
3481       free (matching);
3482     }
3483 }
3484
3485 static void
3486 display_any_bfd (bfd *file, int level)
3487 {
3488   /* Decompress sections unless dumping the section contents.  */
3489   if (!dump_section_contents)
3490     file->flags |= BFD_DECOMPRESS;
3491
3492   /* If the file is an archive, process all of its elements.  */
3493   if (bfd_check_format (file, bfd_archive))
3494     {
3495       bfd *arfile = NULL;
3496       bfd *last_arfile = NULL;
3497
3498       if (level == 0)
3499         printf (_("In archive %s:\n"), bfd_get_filename (file));
3500       else if (level > 100)
3501         {
3502           /* Prevent corrupted files from spinning us into an
3503              infinite loop.  100 is an arbitrary heuristic.  */
3504           fatal (_("Archive nesting is too deep"));
3505           return;
3506         }
3507       else
3508         printf (_("In nested archive %s:\n"), bfd_get_filename (file));
3509
3510       for (;;)
3511         {
3512           bfd_set_error (bfd_error_no_error);
3513
3514           arfile = bfd_openr_next_archived_file (file, arfile);
3515           if (arfile == NULL)
3516             {
3517               if (bfd_get_error () != bfd_error_no_more_archived_files)
3518                 nonfatal (bfd_get_filename (file));
3519               break;
3520             }
3521
3522           display_any_bfd (arfile, level + 1);
3523
3524           if (last_arfile != NULL)
3525             {
3526               bfd_close (last_arfile);
3527               /* PR 17512: file: ac585d01.  */
3528               if (arfile == last_arfile)
3529                 {
3530                   last_arfile = NULL;
3531                   break;
3532                 }
3533             }
3534           last_arfile = arfile;
3535         }
3536
3537       if (last_arfile != NULL)
3538         bfd_close (last_arfile);
3539     }
3540   else
3541     display_object_bfd (file);
3542 }
3543
3544 static void
3545 display_file (char *filename, char *target)
3546 {
3547   bfd *file;
3548
3549   if (get_file_size (filename) < 1)
3550     {
3551       exit_status = 1;
3552       return;
3553     }
3554
3555   file = bfd_openr (filename, target);
3556   if (file == NULL)
3557     {
3558       nonfatal (filename);
3559       return;
3560     }
3561
3562   display_any_bfd (file, 0);
3563
3564   bfd_close (file);
3565 }
3566 \f
3567 int
3568 main (int argc, char **argv)
3569 {
3570   int c;
3571   char *target = default_target;
3572   bfd_boolean seenflag = FALSE;
3573
3574 #if defined (HAVE_SETLOCALE)
3575 #if defined (HAVE_LC_MESSAGES)
3576   setlocale (LC_MESSAGES, "");
3577 #endif
3578   setlocale (LC_CTYPE, "");
3579 #endif
3580
3581   bindtextdomain (PACKAGE, LOCALEDIR);
3582   textdomain (PACKAGE);
3583
3584   program_name = *argv;
3585   xmalloc_set_program_name (program_name);
3586   bfd_set_error_program_name (program_name);
3587
3588   START_PROGRESS (program_name, 0);
3589
3590   expandargv (&argc, &argv);
3591
3592   bfd_init ();
3593   set_default_bfd_target ();
3594
3595   while ((c = getopt_long (argc, argv,
3596                            "pP:ib:m:M:VvCdDlfFaHhrRtTxsSI:j:wE:zgeGW::",
3597                            long_options, (int *) 0))
3598          != EOF)
3599     {
3600       switch (c)
3601         {
3602         case 0:
3603           break;                /* We've been given a long option.  */
3604         case 'm':
3605           machine = optarg;
3606           break;
3607         case 'M':
3608           if (disassembler_options)
3609             /* Ignore potential memory leak for now.  */
3610             disassembler_options = concat (disassembler_options, ",",
3611                                            optarg, (const char *) NULL);
3612           else
3613             disassembler_options = optarg;
3614           break;
3615         case 'j':
3616           add_only (optarg);
3617           break;
3618         case 'F':
3619           display_file_offsets = TRUE;
3620           break;
3621         case 'l':
3622           with_line_numbers = TRUE;
3623           break;
3624         case 'b':
3625           target = optarg;
3626           break;
3627         case 'C':
3628           do_demangle = TRUE;
3629           if (optarg != NULL)
3630             {
3631               enum demangling_styles style;
3632
3633               style = cplus_demangle_name_to_style (optarg);
3634               if (style == unknown_demangling)
3635                 fatal (_("unknown demangling style `%s'"),
3636                        optarg);
3637
3638               cplus_demangle_set_style (style);
3639             }
3640           break;
3641         case 'w':
3642           wide_output = TRUE;
3643           break;
3644         case OPTION_ADJUST_VMA:
3645           adjust_section_vma = parse_vma (optarg, "--adjust-vma");
3646           break;
3647         case OPTION_START_ADDRESS:
3648           start_address = parse_vma (optarg, "--start-address");
3649           if ((stop_address != (bfd_vma) -1) && stop_address <= start_address)
3650             fatal (_("error: the start address should be before the end address"));
3651           break;
3652         case OPTION_STOP_ADDRESS:
3653           stop_address = parse_vma (optarg, "--stop-address");
3654           if ((start_address != (bfd_vma) -1) && stop_address <= start_address)
3655             fatal (_("error: the stop address should be after the start address"));
3656           break;
3657         case OPTION_PREFIX:
3658           prefix = optarg;
3659           prefix_length = strlen (prefix);
3660           /* Remove an unnecessary trailing '/' */
3661           while (IS_DIR_SEPARATOR (prefix[prefix_length - 1]))
3662             prefix_length--;
3663           break;
3664         case OPTION_PREFIX_STRIP:
3665           prefix_strip = atoi (optarg);
3666           if (prefix_strip < 0)
3667             fatal (_("error: prefix strip must be non-negative"));
3668           break;
3669         case OPTION_INSN_WIDTH:
3670           insn_width = strtoul (optarg, NULL, 0);
3671           if (insn_width <= 0)
3672             fatal (_("error: instruction width must be positive"));
3673           break;
3674         case 'E':
3675           if (strcmp (optarg, "B") == 0)
3676             endian = BFD_ENDIAN_BIG;
3677           else if (strcmp (optarg, "L") == 0)
3678             endian = BFD_ENDIAN_LITTLE;
3679           else
3680             {
3681               nonfatal (_("unrecognized -E option"));
3682               usage (stderr, 1);
3683             }
3684           break;
3685         case OPTION_ENDIAN:
3686           if (strncmp (optarg, "big", strlen (optarg)) == 0)
3687             endian = BFD_ENDIAN_BIG;
3688           else if (strncmp (optarg, "little", strlen (optarg)) == 0)
3689             endian = BFD_ENDIAN_LITTLE;
3690           else
3691             {
3692               non_fatal (_("unrecognized --endian type `%s'"), optarg);
3693               exit_status = 1;
3694               usage (stderr, 1);
3695             }
3696           break;
3697
3698         case 'f':
3699           dump_file_header = TRUE;
3700           seenflag = TRUE;
3701           break;
3702         case 'i':
3703           formats_info = TRUE;
3704           seenflag = TRUE;
3705           break;
3706         case 'I':
3707           add_include_path (optarg);
3708           break;
3709         case 'p':
3710           dump_private_headers = TRUE;
3711           seenflag = TRUE;
3712           break;
3713         case 'P':
3714           dump_private_options = optarg;
3715           seenflag = TRUE;
3716           break;
3717         case 'x':
3718           dump_private_headers = TRUE;
3719           dump_symtab = TRUE;
3720           dump_reloc_info = TRUE;
3721           dump_file_header = TRUE;
3722           dump_ar_hdrs = TRUE;
3723           dump_section_headers = TRUE;
3724           seenflag = TRUE;
3725           break;
3726         case 't':
3727           dump_symtab = TRUE;
3728           seenflag = TRUE;
3729           break;
3730         case 'T':
3731           dump_dynamic_symtab = TRUE;
3732           seenflag = TRUE;
3733           break;
3734         case 'd':
3735           disassemble = TRUE;
3736           seenflag = TRUE;
3737           break;
3738         case 'z':
3739           disassemble_zeroes = TRUE;
3740           break;
3741         case 'D':
3742           disassemble = TRUE;
3743           disassemble_all = TRUE;
3744           seenflag = TRUE;
3745           break;
3746         case 'S':
3747           disassemble = TRUE;
3748           with_source_code = TRUE;
3749           seenflag = TRUE;
3750           break;
3751         case 'g':
3752           dump_debugging = 1;
3753           seenflag = TRUE;
3754           break;
3755         case 'e':
3756           dump_debugging = 1;
3757           dump_debugging_tags = 1;
3758           do_demangle = TRUE;
3759           seenflag = TRUE;
3760           break;
3761         case 'W':
3762           dump_dwarf_section_info = TRUE;
3763           seenflag = TRUE;
3764           if (optarg)
3765             dwarf_select_sections_by_letters (optarg);
3766           else
3767             dwarf_select_sections_all ();
3768           break;
3769         case OPTION_DWARF:
3770           dump_dwarf_section_info = TRUE;
3771           seenflag = TRUE;
3772           if (optarg)
3773             dwarf_select_sections_by_names (optarg);
3774           else
3775             dwarf_select_sections_all ();
3776           break;
3777         case OPTION_DWARF_DEPTH:
3778           {
3779             char *cp;
3780             dwarf_cutoff_level = strtoul (optarg, & cp, 0);
3781           }
3782           break;
3783         case OPTION_DWARF_START:
3784           {
3785             char *cp;
3786             dwarf_start_die = strtoul (optarg, & cp, 0);
3787             suppress_bfd_header = 1;
3788           }
3789           break;
3790         case OPTION_DWARF_CHECK:
3791           dwarf_check = TRUE;
3792           break;
3793         case 'G':
3794           dump_stab_section_info = TRUE;
3795           seenflag = TRUE;
3796           break;
3797         case 's':
3798           dump_section_contents = TRUE;
3799           seenflag = TRUE;
3800           break;
3801         case 'r':
3802           dump_reloc_info = TRUE;
3803           seenflag = TRUE;
3804           break;
3805         case 'R':
3806           dump_dynamic_reloc_info = TRUE;
3807           seenflag = TRUE;
3808           break;
3809         case 'a':
3810           dump_ar_hdrs = TRUE;
3811           seenflag = TRUE;
3812           break;
3813         case 'h':
3814           dump_section_headers = TRUE;
3815           seenflag = TRUE;
3816           break;
3817         case 'v':
3818         case 'V':
3819           show_version = TRUE;
3820           seenflag = TRUE;
3821           break;
3822
3823         case 'H':
3824           usage (stdout, 0);
3825           /* No need to set seenflag or to break - usage() does not return.  */
3826         default:
3827           usage (stderr, 1);
3828         }
3829     }
3830
3831   if (show_version)
3832     print_version ("objdump");
3833
3834   if (!seenflag)
3835     usage (stderr, 2);
3836
3837   if (formats_info)
3838     exit_status = display_info ();
3839   else
3840     {
3841       if (optind == argc)
3842         display_file ("a.out", target);
3843       else
3844         for (; optind < argc;)
3845           display_file (argv[optind++], target);
3846     }
3847
3848   free_only_list ();
3849
3850   END_PROGRESS (program_name);
3851
3852   return exit_status;
3853 }