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