objdump: Better objdump section headers in wide mode
[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)
1267 {
1268 #ifdef HAVE_MMAP
1269   int ps = getpagesize ();
1270   size_t msize;
1271 #endif
1272   const char *map;
1273   struct stat st;
1274   int fd = open (fn, O_RDONLY | O_BINARY);
1275
1276   if (fd < 0)
1277     return NULL;
1278   if (fstat (fd, &st) < 0)
1279     {
1280       close (fd);
1281       return NULL;
1282     }
1283   *size = st.st_size;
1284 #ifdef HAVE_MMAP
1285   msize = (*size + ps - 1) & ~(ps - 1);
1286   map = mmap (NULL, msize, PROT_READ, MAP_SHARED, fd, 0);
1287   if (map != (char *) -1L)
1288     {
1289       close (fd);
1290       return map;
1291     }
1292 #endif
1293   map = (const char *) malloc (*size);
1294   if (!map || (size_t) read (fd, (char *) map, *size) != *size)
1295     {
1296       free ((void *) map);
1297       map = NULL;
1298     }
1299   close (fd);
1300   return map;
1301 }
1302
1303 #define line_map_decrease 5
1304
1305 /* Precompute array of lines for a mapped file. */
1306
1307 static const char **
1308 index_file (const char *map, size_t size, unsigned int *maxline)
1309 {
1310   const char *p, *lstart, *end;
1311   int chars_per_line = 45; /* First iteration will use 40.  */
1312   unsigned int lineno;
1313   const char **linemap = NULL;
1314   unsigned long line_map_size = 0;
1315
1316   lineno = 0;
1317   lstart = map;
1318   end = map + size;
1319
1320   for (p = map; p < end; p++)
1321     {
1322       if (*p == '\n')
1323         {
1324           if (p + 1 < end && p[1] == '\r')
1325             p++;
1326         }
1327       else if (*p == '\r')
1328         {
1329           if (p + 1 < end && p[1] == '\n')
1330             p++;
1331         }
1332       else
1333         continue;
1334
1335       /* End of line found.  */
1336
1337       if (linemap == NULL || line_map_size < lineno + 1)
1338         {
1339           unsigned long newsize;
1340
1341           chars_per_line -= line_map_decrease;
1342           if (chars_per_line <= 1)
1343             chars_per_line = 1;
1344           line_map_size = size / chars_per_line + 1;
1345           if (line_map_size < lineno + 1)
1346             line_map_size = lineno + 1;
1347           newsize = line_map_size * sizeof (char *);
1348           linemap = (const char **) xrealloc (linemap, newsize);
1349         }
1350
1351       linemap[lineno++] = lstart;
1352       lstart = p + 1;
1353     }
1354
1355   *maxline = lineno;
1356   return linemap;
1357 }
1358
1359 /* Tries to open MODNAME, and if successful adds a node to print_files
1360    linked list and returns that node.  Returns NULL on failure.  */
1361
1362 static struct print_file_list *
1363 try_print_file_open (const char *origname, const char *modname)
1364 {
1365   struct print_file_list *p;
1366
1367   p = (struct print_file_list *) xmalloc (sizeof (struct print_file_list));
1368
1369   p->map = slurp_file (modname, &p->mapsize);
1370   if (p->map == NULL)
1371     {
1372       free (p);
1373       return NULL;
1374     }
1375
1376   p->linemap = index_file (p->map, p->mapsize, &p->maxline);
1377   p->last_line = 0;
1378   p->max_printed = 0;
1379   p->filename = origname;
1380   p->modname = modname;
1381   p->next = print_files;
1382   p->first = 1;
1383   print_files = p;
1384   return p;
1385 }
1386
1387 /* If the source file, as described in the symtab, is not found
1388    try to locate it in one of the paths specified with -I
1389    If found, add location to print_files linked list.  */
1390
1391 static struct print_file_list *
1392 update_source_path (const char *filename)
1393 {
1394   struct print_file_list *p;
1395   const char *fname;
1396   int i;
1397
1398   p = try_print_file_open (filename, filename);
1399   if (p != NULL)
1400     return p;
1401
1402   if (include_path_count == 0)
1403     return NULL;
1404
1405   /* Get the name of the file.  */
1406   fname = lbasename (filename);
1407
1408   /* If file exists under a new path, we need to add it to the list
1409      so that show_line knows about it.  */
1410   for (i = 0; i < include_path_count; i++)
1411     {
1412       char *modname = concat (include_paths[i], "/", fname, (const char *) 0);
1413
1414       p = try_print_file_open (filename, modname);
1415       if (p)
1416         return p;
1417
1418       free (modname);
1419     }
1420
1421   return NULL;
1422 }
1423
1424 /* Print a source file line.  */
1425
1426 static void
1427 print_line (struct print_file_list *p, unsigned int linenum)
1428 {
1429   const char *l;
1430   size_t len;
1431
1432   --linenum;
1433   if (linenum >= p->maxline)
1434     return;
1435   l = p->linemap [linenum];
1436   /* Test fwrite return value to quiet glibc warning.  */
1437   len = strcspn (l, "\n\r");
1438   if (len == 0 || fwrite (l, len, 1, stdout) == 1)
1439     putchar ('\n');
1440 }
1441
1442 /* Print a range of source code lines. */
1443
1444 static void
1445 dump_lines (struct print_file_list *p, unsigned int start, unsigned int end)
1446 {
1447   if (p->map == NULL)
1448     return;
1449   while (start <= end)
1450     {
1451       print_line (p, start);
1452       start++;
1453     }
1454 }
1455
1456 /* Show the line number, or the source line, in a disassembly
1457    listing.  */
1458
1459 static void
1460 show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
1461 {
1462   const char *filename;
1463   const char *functionname;
1464   unsigned int linenumber;
1465   unsigned int discriminator;
1466   bfd_boolean reloc;
1467   char *path = NULL;
1468
1469   if (! with_line_numbers && ! with_source_code)
1470     return;
1471
1472   if (! bfd_find_nearest_line_discriminator (abfd, section, syms, addr_offset,
1473                                              &filename, &functionname,
1474                                              &linenumber, &discriminator))
1475     return;
1476
1477   if (filename != NULL && *filename == '\0')
1478     filename = NULL;
1479   if (functionname != NULL && *functionname == '\0')
1480     functionname = NULL;
1481
1482   if (filename
1483       && IS_ABSOLUTE_PATH (filename)
1484       && prefix)
1485     {
1486       char *path_up;
1487       const char *fname = filename;
1488
1489       path = xmalloc (prefix_length + PATH_MAX + 1);
1490
1491       if (prefix_length)
1492         memcpy (path, prefix, prefix_length);
1493       path_up = path + prefix_length;
1494
1495       /* Build relocated filename, stripping off leading directories
1496          from the initial filename if requested.  */
1497       if (prefix_strip > 0)
1498         {
1499           int level = 0;
1500           const char *s;
1501
1502           /* Skip selected directory levels.  */
1503           for (s = fname + 1; *s != '\0' && level < prefix_strip; s++)
1504             if (IS_DIR_SEPARATOR(*s))
1505               {
1506                 fname = s;
1507                 level++;
1508               }
1509         }
1510
1511       /* Update complete filename.  */
1512       strncpy (path_up, fname, PATH_MAX);
1513       path_up[PATH_MAX] = '\0';
1514
1515       filename = path;
1516       reloc = TRUE;
1517     }
1518   else
1519     reloc = FALSE;
1520
1521   if (with_line_numbers)
1522     {
1523       if (functionname != NULL
1524           && (prev_functionname == NULL
1525               || strcmp (functionname, prev_functionname) != 0))
1526         printf ("%s():\n", functionname);
1527       if (linenumber > 0 && (linenumber != prev_line ||
1528                              (discriminator != prev_discriminator)))
1529         {
1530           if (discriminator > 0)
1531             printf ("%s:%u (discriminator %u)\n", filename == NULL ? "???" : filename,
1532                     linenumber, discriminator);
1533           else
1534             printf ("%s:%u\n", filename == NULL ? "???" : filename, linenumber);
1535         }
1536     }
1537
1538   if (with_source_code
1539       && filename != NULL
1540       && linenumber > 0)
1541     {
1542       struct print_file_list **pp, *p;
1543       unsigned l;
1544
1545       for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
1546         if (filename_cmp ((*pp)->filename, filename) == 0)
1547           break;
1548       p = *pp;
1549
1550       if (p == NULL)
1551         {
1552           if (reloc)
1553             filename = xstrdup (filename);
1554           p = update_source_path (filename);
1555         }
1556
1557       if (p != NULL && linenumber != p->last_line)
1558         {
1559           if (file_start_context && p->first)
1560             l = 1;
1561           else
1562             {
1563               l = linenumber - SHOW_PRECEDING_CONTEXT_LINES;
1564               if (l >= linenumber)
1565                 l = 1;
1566               if (p->max_printed >= l)
1567                 {
1568                   if (p->max_printed < linenumber)
1569                     l = p->max_printed + 1;
1570                   else
1571                     l = linenumber;
1572                 }
1573             }
1574           dump_lines (p, l, linenumber);
1575           if (p->max_printed < linenumber)
1576             p->max_printed = linenumber;
1577           p->last_line = linenumber;
1578           p->first = 0;
1579         }
1580     }
1581
1582   if (functionname != NULL
1583       && (prev_functionname == NULL
1584           || strcmp (functionname, prev_functionname) != 0))
1585     {
1586       if (prev_functionname != NULL)
1587         free (prev_functionname);
1588       prev_functionname = (char *) xmalloc (strlen (functionname) + 1);
1589       strcpy (prev_functionname, functionname);
1590     }
1591
1592   if (linenumber > 0 && linenumber != prev_line)
1593     prev_line = linenumber;
1594
1595   if (discriminator != prev_discriminator)
1596     prev_discriminator = discriminator;
1597
1598   if (path)
1599     free (path);
1600 }
1601
1602 /* Pseudo FILE object for strings.  */
1603 typedef struct
1604 {
1605   char *buffer;
1606   size_t pos;
1607   size_t alloc;
1608 } SFILE;
1609
1610 /* sprintf to a "stream".  */
1611
1612 static int ATTRIBUTE_PRINTF_2
1613 objdump_sprintf (SFILE *f, const char *format, ...)
1614 {
1615   size_t n;
1616   va_list args;
1617
1618   while (1)
1619     {
1620       size_t space = f->alloc - f->pos;
1621
1622       va_start (args, format);
1623       n = vsnprintf (f->buffer + f->pos, space, format, args);
1624       va_end (args);
1625
1626       if (space > n)
1627         break;
1628
1629       f->alloc = (f->alloc + n) * 2;
1630       f->buffer = (char *) xrealloc (f->buffer, f->alloc);
1631     }
1632   f->pos += n;
1633
1634   return n;
1635 }
1636
1637 /* The number of zeroes we want to see before we start skipping them.
1638    The number is arbitrarily chosen.  */
1639
1640 #define DEFAULT_SKIP_ZEROES 8
1641
1642 /* The number of zeroes to skip at the end of a section.  If the
1643    number of zeroes at the end is between SKIP_ZEROES_AT_END and
1644    SKIP_ZEROES, they will be disassembled.  If there are fewer than
1645    SKIP_ZEROES_AT_END, they will be skipped.  This is a heuristic
1646    attempt to avoid disassembling zeroes inserted by section
1647    alignment.  */
1648
1649 #define DEFAULT_SKIP_ZEROES_AT_END 3
1650
1651 /* Disassemble some data in memory between given values.  */
1652
1653 static void
1654 disassemble_bytes (struct disassemble_info * inf,
1655                    disassembler_ftype        disassemble_fn,
1656                    bfd_boolean               insns,
1657                    bfd_byte *                data,
1658                    bfd_vma                   start_offset,
1659                    bfd_vma                   stop_offset,
1660                    bfd_vma                   rel_offset,
1661                    arelent ***               relppp,
1662                    arelent **                relppend)
1663 {
1664   struct objdump_disasm_info *aux;
1665   asection *section;
1666   int octets_per_line;
1667   int skip_addr_chars;
1668   bfd_vma addr_offset;
1669   unsigned int opb = inf->octets_per_byte;
1670   unsigned int skip_zeroes = inf->skip_zeroes;
1671   unsigned int skip_zeroes_at_end = inf->skip_zeroes_at_end;
1672   int octets = opb;
1673   SFILE sfile;
1674
1675   aux = (struct objdump_disasm_info *) inf->application_data;
1676   section = aux->sec;
1677
1678   sfile.alloc = 120;
1679   sfile.buffer = (char *) xmalloc (sfile.alloc);
1680   sfile.pos = 0;
1681
1682   if (insn_width)
1683     octets_per_line = insn_width;
1684   else if (insns)
1685     octets_per_line = 4;
1686   else
1687     octets_per_line = 16;
1688
1689   /* Figure out how many characters to skip at the start of an
1690      address, to make the disassembly look nicer.  We discard leading
1691      zeroes in chunks of 4, ensuring that there is always a leading
1692      zero remaining.  */
1693   skip_addr_chars = 0;
1694   if (! prefix_addresses)
1695     {
1696       char buf[30];
1697
1698       bfd_sprintf_vma (aux->abfd, buf, section->vma + section->size / opb);
1699
1700       while (buf[skip_addr_chars] == '0')
1701         ++skip_addr_chars;
1702
1703       /* Don't discard zeros on overflow.  */
1704       if (buf[skip_addr_chars] == '\0' && section->vma != 0)
1705         skip_addr_chars = 0;
1706
1707       if (skip_addr_chars != 0)
1708         skip_addr_chars = (skip_addr_chars - 1) & -4;
1709     }
1710
1711   inf->insn_info_valid = 0;
1712
1713   addr_offset = start_offset;
1714   while (addr_offset < stop_offset)
1715     {
1716       bfd_vma z;
1717       bfd_boolean need_nl = FALSE;
1718       int previous_octets;
1719
1720       /* Remember the length of the previous instruction.  */
1721       previous_octets = octets;
1722       octets = 0;
1723
1724       /* Make sure we don't use relocs from previous instructions.  */
1725       aux->reloc = NULL;
1726
1727       /* If we see more than SKIP_ZEROES octets of zeroes, we just
1728          print `...'.  */
1729       for (z = addr_offset * opb; z < stop_offset * opb; z++)
1730         if (data[z] != 0)
1731           break;
1732       if (! disassemble_zeroes
1733           && (inf->insn_info_valid == 0
1734               || inf->branch_delay_insns == 0)
1735           && (z - addr_offset * opb >= skip_zeroes
1736               || (z == stop_offset * opb &&
1737                   z - addr_offset * opb < skip_zeroes_at_end)))
1738         {
1739           /* If there are more nonzero octets to follow, we only skip
1740              zeroes in multiples of 4, to try to avoid running over
1741              the start of an instruction which happens to start with
1742              zero.  */
1743           if (z != stop_offset * opb)
1744             z = addr_offset * opb + ((z - addr_offset * opb) &~ 3);
1745
1746           octets = z - addr_offset * opb;
1747
1748           /* If we are going to display more data, and we are displaying
1749              file offsets, then tell the user how many zeroes we skip
1750              and the file offset from where we resume dumping.  */
1751           if (display_file_offsets && ((addr_offset + (octets / opb)) < stop_offset))
1752             printf ("\t... (skipping %d zeroes, resuming at file offset: 0x%lx)\n",
1753                     octets / opb,
1754                     (unsigned long) (section->filepos
1755                                      + (addr_offset + (octets / opb))));
1756           else
1757             printf ("\t...\n");
1758         }
1759       else
1760         {
1761           char buf[50];
1762           int bpc = 0;
1763           int pb = 0;
1764
1765           if (with_line_numbers || with_source_code)
1766             show_line (aux->abfd, section, addr_offset);
1767
1768           if (! prefix_addresses)
1769             {
1770               char *s;
1771
1772               bfd_sprintf_vma (aux->abfd, buf, section->vma + addr_offset);
1773               for (s = buf + skip_addr_chars; *s == '0'; s++)
1774                 *s = ' ';
1775               if (*s == '\0')
1776                 *--s = '0';
1777               printf ("%s:\t", buf + skip_addr_chars);
1778             }
1779           else
1780             {
1781               aux->require_sec = TRUE;
1782               objdump_print_address (section->vma + addr_offset, inf);
1783               aux->require_sec = FALSE;
1784               putchar (' ');
1785             }
1786
1787           if (insns)
1788             {
1789               sfile.pos = 0;
1790               inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
1791               inf->stream = &sfile;
1792               inf->bytes_per_line = 0;
1793               inf->bytes_per_chunk = 0;
1794               inf->flags = disassemble_all ? DISASSEMBLE_DATA : 0;
1795               if (machine)
1796                 inf->flags |= USER_SPECIFIED_MACHINE_TYPE;
1797
1798               if (inf->disassembler_needs_relocs
1799                   && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
1800                   && (bfd_get_file_flags (aux->abfd) & DYNAMIC) == 0
1801                   && *relppp < relppend)
1802                 {
1803                   bfd_signed_vma distance_to_rel;
1804
1805                   distance_to_rel = (**relppp)->address
1806                     - (rel_offset + addr_offset);
1807
1808                   /* Check to see if the current reloc is associated with
1809                      the instruction that we are about to disassemble.  */
1810                   if (distance_to_rel == 0
1811                       /* FIXME: This is wrong.  We are trying to catch
1812                          relocs that are addressed part way through the
1813                          current instruction, as might happen with a packed
1814                          VLIW instruction.  Unfortunately we do not know the
1815                          length of the current instruction since we have not
1816                          disassembled it yet.  Instead we take a guess based
1817                          upon the length of the previous instruction.  The
1818                          proper solution is to have a new target-specific
1819                          disassembler function which just returns the length
1820                          of an instruction at a given address without trying
1821                          to display its disassembly. */
1822                       || (distance_to_rel > 0
1823                           && distance_to_rel < (bfd_signed_vma) (previous_octets/ opb)))
1824                     {
1825                       inf->flags |= INSN_HAS_RELOC;
1826                       aux->reloc = **relppp;
1827                     }
1828                 }
1829
1830               if (! disassemble_all
1831                   && (section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
1832                   == (SEC_CODE | SEC_HAS_CONTENTS))
1833                 /* Set a stop_vma so that the disassembler will not read
1834                    beyond the next symbol.  We assume that symbols appear on
1835                    the boundaries between instructions.  We only do this when
1836                    disassembling code of course, and when -D is in effect.  */
1837                 inf->stop_vma = section->vma + stop_offset;
1838
1839               octets = (*disassemble_fn) (section->vma + addr_offset, inf);
1840
1841               inf->stop_vma = 0;
1842               inf->fprintf_func = (fprintf_ftype) fprintf;
1843               inf->stream = stdout;
1844               if (insn_width == 0 && inf->bytes_per_line != 0)
1845                 octets_per_line = inf->bytes_per_line;
1846               if (octets < (int) opb)
1847                 {
1848                   if (sfile.pos)
1849                     printf ("%s\n", sfile.buffer);
1850                   if (octets >= 0)
1851                     {
1852                       non_fatal (_("disassemble_fn returned length %d"),
1853                                  octets);
1854                       exit_status = 1;
1855                     }
1856                   break;
1857                 }
1858             }
1859           else
1860             {
1861               bfd_vma j;
1862
1863               octets = octets_per_line;
1864               if (addr_offset + octets / opb > stop_offset)
1865                 octets = (stop_offset - addr_offset) * opb;
1866
1867               for (j = addr_offset * opb; j < addr_offset * opb + octets; ++j)
1868                 {
1869                   if (ISPRINT (data[j]))
1870                     buf[j - addr_offset * opb] = data[j];
1871                   else
1872                     buf[j - addr_offset * opb] = '.';
1873                 }
1874               buf[j - addr_offset * opb] = '\0';
1875             }
1876
1877           if (prefix_addresses
1878               ? show_raw_insn > 0
1879               : show_raw_insn >= 0)
1880             {
1881               bfd_vma j;
1882
1883               /* If ! prefix_addresses and ! wide_output, we print
1884                  octets_per_line octets per line.  */
1885               pb = octets;
1886               if (pb > octets_per_line && ! prefix_addresses && ! wide_output)
1887                 pb = octets_per_line;
1888
1889               if (inf->bytes_per_chunk)
1890                 bpc = inf->bytes_per_chunk;
1891               else
1892                 bpc = 1;
1893
1894               for (j = addr_offset * opb; j < addr_offset * opb + pb; j += bpc)
1895                 {
1896                   int k;
1897
1898                   if (bpc > 1 && inf->display_endian == BFD_ENDIAN_LITTLE)
1899                     {
1900                       for (k = bpc - 1; k >= 0; k--)
1901                         printf ("%02x", (unsigned) data[j + k]);
1902                       putchar (' ');
1903                     }
1904                   else
1905                     {
1906                       for (k = 0; k < bpc; k++)
1907                         printf ("%02x", (unsigned) data[j + k]);
1908                       putchar (' ');
1909                     }
1910                 }
1911
1912               for (; pb < octets_per_line; pb += bpc)
1913                 {
1914                   int k;
1915
1916                   for (k = 0; k < bpc; k++)
1917                     printf ("  ");
1918                   putchar (' ');
1919                 }
1920
1921               /* Separate raw data from instruction by extra space.  */
1922               if (insns)
1923                 putchar ('\t');
1924               else
1925                 printf ("    ");
1926             }
1927
1928           if (! insns)
1929             printf ("%s", buf);
1930           else if (sfile.pos)
1931             printf ("%s", sfile.buffer);
1932
1933           if (prefix_addresses
1934               ? show_raw_insn > 0
1935               : show_raw_insn >= 0)
1936             {
1937               while (pb < octets)
1938                 {
1939                   bfd_vma j;
1940                   char *s;
1941
1942                   putchar ('\n');
1943                   j = addr_offset * opb + pb;
1944
1945                   bfd_sprintf_vma (aux->abfd, buf, section->vma + j / opb);
1946                   for (s = buf + skip_addr_chars; *s == '0'; s++)
1947                     *s = ' ';
1948                   if (*s == '\0')
1949                     *--s = '0';
1950                   printf ("%s:\t", buf + skip_addr_chars);
1951
1952                   pb += octets_per_line;
1953                   if (pb > octets)
1954                     pb = octets;
1955                   for (; j < addr_offset * opb + pb; j += bpc)
1956                     {
1957                       int k;
1958
1959                       if (bpc > 1 && inf->display_endian == BFD_ENDIAN_LITTLE)
1960                         {
1961                           for (k = bpc - 1; k >= 0; k--)
1962                             printf ("%02x", (unsigned) data[j + k]);
1963                           putchar (' ');
1964                         }
1965                       else
1966                         {
1967                           for (k = 0; k < bpc; k++)
1968                             printf ("%02x", (unsigned) data[j + k]);
1969                           putchar (' ');
1970                         }
1971                     }
1972                 }
1973             }
1974
1975           if (!wide_output)
1976             putchar ('\n');
1977           else
1978             need_nl = TRUE;
1979         }
1980
1981       while ((*relppp) < relppend
1982              && (**relppp)->address < rel_offset + addr_offset + octets / opb)
1983         {
1984           if (dump_reloc_info || dump_dynamic_reloc_info)
1985             {
1986               arelent *q;
1987
1988               q = **relppp;
1989
1990               if (wide_output)
1991                 putchar ('\t');
1992               else
1993                 printf ("\t\t\t");
1994
1995               objdump_print_value (section->vma - rel_offset + q->address,
1996                                    inf, TRUE);
1997
1998               if (q->howto == NULL)
1999                 printf (": *unknown*\t");
2000               else if (q->howto->name)
2001                 printf (": %s\t", q->howto->name);
2002               else
2003                 printf (": %d\t", q->howto->type);
2004
2005               if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
2006                 printf ("*unknown*");
2007               else
2008                 {
2009                   const char *sym_name;
2010
2011                   sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
2012                   if (sym_name != NULL && *sym_name != '\0')
2013                     objdump_print_symname (aux->abfd, inf, *q->sym_ptr_ptr);
2014                   else
2015                     {
2016                       asection *sym_sec;
2017
2018                       sym_sec = bfd_get_section (*q->sym_ptr_ptr);
2019                       sym_name = bfd_get_section_name (aux->abfd, sym_sec);
2020                       if (sym_name == NULL || *sym_name == '\0')
2021                         sym_name = "*unknown*";
2022                       printf ("%s", sym_name);
2023                     }
2024                 }
2025
2026               if (q->addend)
2027                 {
2028                   bfd_signed_vma addend = q->addend;
2029                   if (addend < 0)
2030                     {
2031                       printf ("-0x");
2032                       addend = -addend;
2033                     }
2034                   else
2035                     printf ("+0x");
2036                   objdump_print_value (addend, inf, TRUE);
2037                 }
2038
2039               printf ("\n");
2040               need_nl = FALSE;
2041             }
2042           ++(*relppp);
2043         }
2044
2045       if (need_nl)
2046         printf ("\n");
2047
2048       addr_offset += octets / opb;
2049     }
2050
2051   free (sfile.buffer);
2052 }
2053
2054 static void
2055 disassemble_section (bfd *abfd, asection *section, void *inf)
2056 {
2057   const struct elf_backend_data * bed;
2058   bfd_vma                      sign_adjust = 0;
2059   struct disassemble_info *    pinfo = (struct disassemble_info *) inf;
2060   struct objdump_disasm_info * paux;
2061   unsigned int                 opb = pinfo->octets_per_byte;
2062   bfd_byte *                   data = NULL;
2063   bfd_size_type                datasize = 0;
2064   arelent **                   rel_pp = NULL;
2065   arelent **                   rel_ppstart = NULL;
2066   arelent **                   rel_ppend;
2067   bfd_vma                      stop_offset;
2068   asymbol *                    sym = NULL;
2069   long                         place = 0;
2070   long                         rel_count;
2071   bfd_vma                      rel_offset;
2072   unsigned long                addr_offset;
2073
2074   /* Sections that do not contain machine
2075      code are not normally disassembled.  */
2076   if (! disassemble_all
2077       && only_list == NULL
2078       && ((section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
2079           != (SEC_CODE | SEC_HAS_CONTENTS)))
2080     return;
2081
2082   if (! process_section_p (section))
2083     return;
2084
2085   datasize = bfd_get_section_size (section);
2086   if (datasize == 0)
2087     return;
2088
2089   if (start_address == (bfd_vma) -1
2090       || start_address < section->vma)
2091     addr_offset = 0;
2092   else
2093     addr_offset = start_address - section->vma;
2094
2095   if (stop_address == (bfd_vma) -1)
2096     stop_offset = datasize / opb;
2097   else
2098     {
2099       if (stop_address < section->vma)
2100         stop_offset = 0;
2101       else
2102         stop_offset = stop_address - section->vma;
2103       if (stop_offset > datasize / opb)
2104         stop_offset = datasize / opb;
2105     }
2106
2107   if (addr_offset >= stop_offset)
2108     return;
2109
2110   /* Decide which set of relocs to use.  Load them if necessary.  */
2111   paux = (struct objdump_disasm_info *) pinfo->application_data;
2112   if (paux->dynrelbuf && dump_dynamic_reloc_info)
2113     {
2114       rel_pp = paux->dynrelbuf;
2115       rel_count = paux->dynrelcount;
2116       /* Dynamic reloc addresses are absolute, non-dynamic are section
2117          relative.  REL_OFFSET specifies the reloc address corresponding
2118          to the start of this section.  */
2119       rel_offset = section->vma;
2120     }
2121   else
2122     {
2123       rel_count = 0;
2124       rel_pp = NULL;
2125       rel_offset = 0;
2126
2127       if ((section->flags & SEC_RELOC) != 0
2128           && (dump_reloc_info || pinfo->disassembler_needs_relocs))
2129         {
2130           long relsize;
2131
2132           relsize = bfd_get_reloc_upper_bound (abfd, section);
2133           if (relsize < 0)
2134             bfd_fatal (bfd_get_filename (abfd));
2135
2136           if (relsize > 0)
2137             {
2138               rel_ppstart = rel_pp = (arelent **) xmalloc (relsize);
2139               rel_count = bfd_canonicalize_reloc (abfd, section, rel_pp, syms);
2140               if (rel_count < 0)
2141                 bfd_fatal (bfd_get_filename (abfd));
2142
2143               /* Sort the relocs by address.  */
2144               qsort (rel_pp, rel_count, sizeof (arelent *), compare_relocs);
2145             }
2146         }
2147     }
2148   rel_ppend = rel_pp + rel_count;
2149
2150   data = (bfd_byte *) xmalloc (datasize);
2151
2152   bfd_get_section_contents (abfd, section, data, 0, datasize);
2153
2154   paux->sec = section;
2155   pinfo->buffer = data;
2156   pinfo->buffer_vma = section->vma;
2157   pinfo->buffer_length = datasize;
2158   pinfo->section = section;
2159
2160   /* Skip over the relocs belonging to addresses below the
2161      start address.  */
2162   while (rel_pp < rel_ppend
2163          && (*rel_pp)->address < rel_offset + addr_offset)
2164     ++rel_pp;
2165
2166   printf (_("\nDisassembly of section %s:\n"), section->name);
2167
2168   /* Find the nearest symbol forwards from our current position.  */
2169   paux->require_sec = TRUE;
2170   sym = (asymbol *) find_symbol_for_address (section->vma + addr_offset,
2171                                              (struct disassemble_info *) inf,
2172                                              &place);
2173   paux->require_sec = FALSE;
2174
2175   /* PR 9774: If the target used signed addresses then we must make
2176      sure that we sign extend the value that we calculate for 'addr'
2177      in the loop below.  */
2178   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2179       && (bed = get_elf_backend_data (abfd)) != NULL
2180       && bed->sign_extend_vma)
2181     sign_adjust = (bfd_vma) 1 << (bed->s->arch_size - 1);
2182
2183   /* Disassemble a block of instructions up to the address associated with
2184      the symbol we have just found.  Then print the symbol and find the
2185      next symbol on.  Repeat until we have disassembled the entire section
2186      or we have reached the end of the address range we are interested in.  */
2187   while (addr_offset < stop_offset)
2188     {
2189       bfd_vma addr;
2190       asymbol *nextsym;
2191       bfd_vma nextstop_offset;
2192       bfd_boolean insns;
2193
2194       addr = section->vma + addr_offset;
2195       addr = ((addr & ((sign_adjust << 1) - 1)) ^ sign_adjust) - sign_adjust;
2196
2197       if (sym != NULL && bfd_asymbol_value (sym) <= addr)
2198         {
2199           int x;
2200
2201           for (x = place;
2202                (x < sorted_symcount
2203                 && (bfd_asymbol_value (sorted_syms[x]) <= addr));
2204                ++x)
2205             continue;
2206
2207           pinfo->symbols = sorted_syms + place;
2208           pinfo->num_symbols = x - place;
2209           pinfo->symtab_pos = place;
2210         }
2211       else
2212         {
2213           pinfo->symbols = NULL;
2214           pinfo->num_symbols = 0;
2215           pinfo->symtab_pos = -1;
2216         }
2217
2218       if (! prefix_addresses)
2219         {
2220           pinfo->fprintf_func (pinfo->stream, "\n");
2221           objdump_print_addr_with_sym (abfd, section, sym, addr,
2222                                        pinfo, FALSE);
2223           pinfo->fprintf_func (pinfo->stream, ":\n");
2224         }
2225
2226       if (sym != NULL && bfd_asymbol_value (sym) > addr)
2227         nextsym = sym;
2228       else if (sym == NULL)
2229         nextsym = NULL;
2230       else
2231         {
2232 #define is_valid_next_sym(SYM) \
2233   ((SYM)->section == section \
2234    && (bfd_asymbol_value (SYM) > bfd_asymbol_value (sym)) \
2235    && pinfo->symbol_is_valid (SYM, pinfo))
2236
2237           /* Search forward for the next appropriate symbol in
2238              SECTION.  Note that all the symbols are sorted
2239              together into one big array, and that some sections
2240              may have overlapping addresses.  */
2241           while (place < sorted_symcount
2242                  && ! is_valid_next_sym (sorted_syms [place]))
2243             ++place;
2244
2245           if (place >= sorted_symcount)
2246             nextsym = NULL;
2247           else
2248             nextsym = sorted_syms[place];
2249         }
2250
2251       if (sym != NULL && bfd_asymbol_value (sym) > addr)
2252         nextstop_offset = bfd_asymbol_value (sym) - section->vma;
2253       else if (nextsym == NULL)
2254         nextstop_offset = stop_offset;
2255       else
2256         nextstop_offset = bfd_asymbol_value (nextsym) - section->vma;
2257
2258       if (nextstop_offset > stop_offset
2259           || nextstop_offset <= addr_offset)
2260         nextstop_offset = stop_offset;
2261
2262       /* If a symbol is explicitly marked as being an object
2263          rather than a function, just dump the bytes without
2264          disassembling them.  */
2265       if (disassemble_all
2266           || sym == NULL
2267           || sym->section != section
2268           || bfd_asymbol_value (sym) > addr
2269           || ((sym->flags & BSF_OBJECT) == 0
2270               && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
2271                   == NULL)
2272               && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
2273                   == NULL))
2274           || (sym->flags & BSF_FUNCTION) != 0)
2275         insns = TRUE;
2276       else
2277         insns = FALSE;
2278
2279       disassemble_bytes (pinfo, paux->disassemble_fn, insns, data,
2280                          addr_offset, nextstop_offset,
2281                          rel_offset, &rel_pp, rel_ppend);
2282
2283       addr_offset = nextstop_offset;
2284       sym = nextsym;
2285     }
2286
2287   free (data);
2288
2289   if (rel_ppstart != NULL)
2290     free (rel_ppstart);
2291 }
2292
2293 /* Disassemble the contents of an object file.  */
2294
2295 static void
2296 disassemble_data (bfd *abfd)
2297 {
2298   struct disassemble_info disasm_info;
2299   struct objdump_disasm_info aux;
2300   long i;
2301
2302   print_files = NULL;
2303   prev_functionname = NULL;
2304   prev_line = -1;
2305   prev_discriminator = 0;
2306
2307   /* We make a copy of syms to sort.  We don't want to sort syms
2308      because that will screw up the relocs.  */
2309   sorted_symcount = symcount ? symcount : dynsymcount;
2310   sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount)
2311                                       * sizeof (asymbol *));
2312   memcpy (sorted_syms, symcount ? syms : dynsyms,
2313           sorted_symcount * sizeof (asymbol *));
2314
2315   sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount);
2316
2317   for (i = 0; i < synthcount; ++i)
2318     {
2319       sorted_syms[sorted_symcount] = synthsyms + i;
2320       ++sorted_symcount;
2321     }
2322
2323   /* Sort the symbols into section and symbol order.  */
2324   qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
2325
2326   init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
2327
2328   disasm_info.application_data = (void *) &aux;
2329   aux.abfd = abfd;
2330   aux.require_sec = FALSE;
2331   aux.dynrelbuf = NULL;
2332   aux.dynrelcount = 0;
2333   aux.reloc = NULL;
2334
2335   disasm_info.print_address_func = objdump_print_address;
2336   disasm_info.symbol_at_address_func = objdump_symbol_at_address;
2337
2338   if (machine != NULL)
2339     {
2340       const bfd_arch_info_type *inf = bfd_scan_arch (machine);
2341
2342       if (inf == NULL)
2343         fatal (_("can't use supplied machine %s"), machine);
2344
2345       abfd->arch_info = inf;
2346     }
2347
2348   if (endian != BFD_ENDIAN_UNKNOWN)
2349     {
2350       struct bfd_target *xvec;
2351
2352       xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
2353       memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
2354       xvec->byteorder = endian;
2355       abfd->xvec = xvec;
2356     }
2357
2358   /* Use libopcodes to locate a suitable disassembler.  */
2359   aux.disassemble_fn = disassembler (abfd);
2360   if (!aux.disassemble_fn)
2361     {
2362       non_fatal (_("can't disassemble for architecture %s\n"),
2363                  bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
2364       exit_status = 1;
2365       return;
2366     }
2367
2368   disasm_info.flavour = bfd_get_flavour (abfd);
2369   disasm_info.arch = bfd_get_arch (abfd);
2370   disasm_info.mach = bfd_get_mach (abfd);
2371   disasm_info.disassembler_options = disassembler_options;
2372   disasm_info.octets_per_byte = bfd_octets_per_byte (abfd);
2373   disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES;
2374   disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END;
2375   disasm_info.disassembler_needs_relocs = FALSE;
2376
2377   if (bfd_big_endian (abfd))
2378     disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG;
2379   else if (bfd_little_endian (abfd))
2380     disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_LITTLE;
2381   else
2382     /* ??? Aborting here seems too drastic.  We could default to big or little
2383        instead.  */
2384     disasm_info.endian = BFD_ENDIAN_UNKNOWN;
2385
2386   /* Allow the target to customize the info structure.  */
2387   disassemble_init_for_target (& disasm_info);
2388
2389   /* Pre-load the dynamic relocs as we may need them during the disassembly.  */
2390     {
2391       long relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2392
2393       if (relsize < 0 && dump_dynamic_reloc_info)
2394         bfd_fatal (bfd_get_filename (abfd));
2395
2396       if (relsize > 0)
2397         {
2398           aux.dynrelbuf = (arelent **) xmalloc (relsize);
2399           aux.dynrelcount = bfd_canonicalize_dynamic_reloc (abfd,
2400                                                             aux.dynrelbuf,
2401                                                             dynsyms);
2402           if (aux.dynrelcount < 0)
2403             bfd_fatal (bfd_get_filename (abfd));
2404
2405           /* Sort the relocs by address.  */
2406           qsort (aux.dynrelbuf, aux.dynrelcount, sizeof (arelent *),
2407                  compare_relocs);
2408         }
2409     }
2410   disasm_info.symtab = sorted_syms;
2411   disasm_info.symtab_size = sorted_symcount;
2412
2413   bfd_map_over_sections (abfd, disassemble_section, & disasm_info);
2414
2415   if (aux.dynrelbuf != NULL)
2416     free (aux.dynrelbuf);
2417   free (sorted_syms);
2418 }
2419 \f
2420 static int
2421 load_specific_debug_section (enum dwarf_section_display_enum debug,
2422                              asection *sec, void *file)
2423 {
2424   struct dwarf_section *section = &debug_displays [debug].section;
2425   bfd *abfd = (bfd *) file;
2426   bfd_boolean ret;
2427
2428   /* If it is already loaded, do nothing.  */
2429   if (section->start != NULL)
2430     return 1;
2431
2432   section->reloc_info = NULL;
2433   section->num_relocs = 0;
2434   section->address = bfd_get_section_vma (abfd, sec);
2435   section->size = bfd_get_section_size (sec);
2436   section->start = NULL;
2437   section->user_data = sec;
2438   ret = bfd_get_full_section_contents (abfd, sec, &section->start);
2439
2440   if (! ret)
2441     {
2442       free_debug_section (debug);
2443       printf (_("\nCan't get contents for section '%s'.\n"),
2444               section->name);
2445       return 0;
2446     }
2447
2448   if (is_relocatable && debug_displays [debug].relocate)
2449     {
2450       bfd_cache_section_contents (sec, section->start);
2451
2452       ret = bfd_simple_get_relocated_section_contents (abfd,
2453                                                        sec,
2454                                                        section->start,
2455                                                        syms) != NULL;
2456
2457       if (! ret)
2458         {
2459           free_debug_section (debug);
2460           printf (_("\nCan't get contents for section '%s'.\n"),
2461                   section->name);
2462           return 0;
2463         }
2464
2465       long reloc_size;
2466
2467       reloc_size = bfd_get_reloc_upper_bound (abfd, sec);
2468       if (reloc_size > 0)
2469         {
2470           unsigned long reloc_count;
2471           arelent **relocs;
2472
2473           relocs = (arelent **) xmalloc (reloc_size);
2474
2475           reloc_count = bfd_canonicalize_reloc (abfd, sec, relocs, NULL);
2476           if (reloc_count == 0)
2477             free (relocs);
2478           else
2479             {
2480               section->reloc_info = relocs;
2481               section->num_relocs = reloc_count;
2482             }
2483         }
2484     }
2485
2486   return 1;
2487 }
2488
2489 bfd_boolean
2490 reloc_at (struct dwarf_section * dsec, dwarf_vma offset)
2491 {
2492   arelent ** relocs;
2493   arelent * rp;
2494
2495   if (dsec == NULL || dsec->reloc_info == NULL)
2496     return FALSE;
2497
2498   relocs = (arelent **) dsec->reloc_info;
2499
2500   for (; (rp = * relocs) != NULL; ++ relocs)
2501     if (rp->address == offset)
2502       return TRUE;
2503
2504   return FALSE;
2505 }
2506
2507 int
2508 load_debug_section (enum dwarf_section_display_enum debug, void *file)
2509 {
2510   struct dwarf_section *section = &debug_displays [debug].section;
2511   bfd *abfd = (bfd *) file;
2512   asection *sec;
2513
2514   /* If it is already loaded, do nothing.  */
2515   if (section->start != NULL)
2516     return 1;
2517
2518   /* Locate the debug section.  */
2519   sec = bfd_get_section_by_name (abfd, section->uncompressed_name);
2520   if (sec != NULL)
2521     section->name = section->uncompressed_name;
2522   else
2523     {
2524       sec = bfd_get_section_by_name (abfd, section->compressed_name);
2525       if (sec != NULL)
2526         section->name = section->compressed_name;
2527     }
2528   if (sec == NULL)
2529     return 0;
2530
2531   return load_specific_debug_section (debug, sec, file);
2532 }
2533
2534 void
2535 free_debug_section (enum dwarf_section_display_enum debug)
2536 {
2537   struct dwarf_section *section = &debug_displays [debug].section;
2538
2539   if (section->start == NULL)
2540     return;
2541
2542   /* PR 17512: file: 0f67f69d.  */
2543   if (section->user_data != NULL)
2544     {
2545       asection * sec = (asection *) section->user_data;
2546
2547       /* If we are freeing contents that are also pointed to by the BFD
2548          library's section structure then make sure to update those pointers
2549          too.  Otherwise, the next time we try to load data for this section
2550          we can end up using a stale pointer.  */
2551       if (section->start == sec->contents)
2552         {
2553           sec->contents = NULL;
2554           sec->flags &= ~ SEC_IN_MEMORY;
2555           sec->compress_status = COMPRESS_SECTION_NONE;
2556         }
2557     }
2558
2559   free ((char *) section->start);
2560   section->start = NULL;
2561   section->address = 0;
2562   section->size = 0;
2563 }
2564
2565 static void
2566 dump_dwarf_section (bfd *abfd, asection *section,
2567                     void *arg ATTRIBUTE_UNUSED)
2568 {
2569   const char *name = bfd_get_section_name (abfd, section);
2570   const char *match;
2571   int i;
2572
2573   if (CONST_STRNEQ (name, ".gnu.linkonce.wi."))
2574     match = ".debug_info";
2575   else
2576     match = name;
2577
2578   for (i = 0; i < max; i++)
2579     if ((strcmp (debug_displays [i].section.uncompressed_name, match) == 0
2580          || strcmp (debug_displays [i].section.compressed_name, match) == 0)
2581         && debug_displays [i].enabled != NULL
2582         && *debug_displays [i].enabled)
2583       {
2584         struct dwarf_section *sec = &debug_displays [i].section;
2585
2586         if (strcmp (sec->uncompressed_name, match) == 0)
2587           sec->name = sec->uncompressed_name;
2588         else
2589           sec->name = sec->compressed_name;
2590         if (load_specific_debug_section ((enum dwarf_section_display_enum) i,
2591                                          section, abfd))
2592           {
2593             debug_displays [i].display (sec, abfd);
2594
2595             if (i != info && i != abbrev)
2596               free_debug_section ((enum dwarf_section_display_enum) i);
2597           }
2598         break;
2599       }
2600 }
2601
2602 /* Dump the dwarf debugging information.  */
2603
2604 static void
2605 dump_dwarf (bfd *abfd)
2606 {
2607   is_relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2608
2609   eh_addr_size = bfd_arch_bits_per_address (abfd) / 8;
2610
2611   if (bfd_big_endian (abfd))
2612     byte_get = byte_get_big_endian;
2613   else if (bfd_little_endian (abfd))
2614     byte_get = byte_get_little_endian;
2615   else
2616     /* PR 17512: file: objdump-s-endless-loop.tekhex.  */
2617     {
2618       warn (_("File %s does not contain any dwarf debug information\n"),
2619             bfd_get_filename (abfd));
2620       return;
2621     }
2622
2623   switch (bfd_get_arch (abfd))
2624     {
2625     case bfd_arch_i386:
2626       switch (bfd_get_mach (abfd))
2627         {
2628         case bfd_mach_x86_64:
2629         case bfd_mach_x86_64_intel_syntax:
2630         case bfd_mach_x86_64_nacl:
2631         case bfd_mach_x64_32:
2632         case bfd_mach_x64_32_intel_syntax:
2633         case bfd_mach_x64_32_nacl:
2634           init_dwarf_regnames_x86_64 ();
2635           break;
2636
2637         default:
2638           init_dwarf_regnames_i386 ();
2639           break;
2640         }
2641       break;
2642
2643     case bfd_arch_iamcu:
2644       init_dwarf_regnames_iamcu ();
2645       break;
2646
2647     case bfd_arch_aarch64:
2648       init_dwarf_regnames_aarch64();
2649       break;
2650
2651     case bfd_arch_s390:
2652       init_dwarf_regnames_s390 ();
2653       break;
2654
2655     default:
2656       break;
2657     }
2658
2659   bfd_map_over_sections (abfd, dump_dwarf_section, NULL);
2660
2661   free_debug_memory ();
2662 }
2663 \f
2664 /* Read ABFD's stabs section STABSECT_NAME, and return a pointer to
2665    it.  Return NULL on failure.   */
2666
2667 static char *
2668 read_section_stabs (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr)
2669 {
2670   asection *stabsect;
2671   bfd_size_type size;
2672   char *contents;
2673
2674   stabsect = bfd_get_section_by_name (abfd, sect_name);
2675   if (stabsect == NULL)
2676     {
2677       printf (_("No %s section present\n\n"), sect_name);
2678       return FALSE;
2679     }
2680
2681   size = bfd_section_size (abfd, stabsect);
2682   contents  = (char *) xmalloc (size);
2683
2684   if (! bfd_get_section_contents (abfd, stabsect, contents, 0, size))
2685     {
2686       non_fatal (_("reading %s section of %s failed: %s"),
2687                  sect_name, bfd_get_filename (abfd),
2688                  bfd_errmsg (bfd_get_error ()));
2689       exit_status = 1;
2690       free (contents);
2691       return NULL;
2692     }
2693
2694   *size_ptr = size;
2695
2696   return contents;
2697 }
2698
2699 /* Stabs entries use a 12 byte format:
2700      4 byte string table index
2701      1 byte stab type
2702      1 byte stab other field
2703      2 byte stab desc field
2704      4 byte stab value
2705    FIXME: This will have to change for a 64 bit object format.  */
2706
2707 #define STRDXOFF  (0)
2708 #define TYPEOFF   (4)
2709 #define OTHEROFF  (5)
2710 #define DESCOFF   (6)
2711 #define VALOFF    (8)
2712 #define STABSIZE (12)
2713
2714 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
2715    using string table section STRSECT_NAME (in `strtab').  */
2716
2717 static void
2718 print_section_stabs (bfd *abfd,
2719                      const char *stabsect_name,
2720                      unsigned *string_offset_ptr)
2721 {
2722   int i;
2723   unsigned file_string_table_offset = 0;
2724   unsigned next_file_string_table_offset = *string_offset_ptr;
2725   bfd_byte *stabp, *stabs_end;
2726
2727   stabp = stabs;
2728   stabs_end = stabp + stab_size;
2729
2730   printf (_("Contents of %s section:\n\n"), stabsect_name);
2731   printf ("Symnum n_type n_othr n_desc n_value  n_strx String\n");
2732
2733   /* Loop through all symbols and print them.
2734
2735      We start the index at -1 because there is a dummy symbol on
2736      the front of stabs-in-{coff,elf} sections that supplies sizes.  */
2737   for (i = -1; stabp <= stabs_end - STABSIZE; stabp += STABSIZE, i++)
2738     {
2739       const char *name;
2740       unsigned long strx;
2741       unsigned char type, other;
2742       unsigned short desc;
2743       bfd_vma value;
2744
2745       strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
2746       type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
2747       other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
2748       desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
2749       value = bfd_h_get_32 (abfd, stabp + VALOFF);
2750
2751       printf ("\n%-6d ", i);
2752       /* Either print the stab name, or, if unnamed, print its number
2753          again (makes consistent formatting for tools like awk).  */
2754       name = bfd_get_stab_name (type);
2755       if (name != NULL)
2756         printf ("%-6s", name);
2757       else if (type == N_UNDF)
2758         printf ("HdrSym");
2759       else
2760         printf ("%-6d", type);
2761       printf (" %-6d %-6d ", other, desc);
2762       bfd_printf_vma (abfd, value);
2763       printf (" %-6lu", strx);
2764
2765       /* Symbols with type == 0 (N_UNDF) specify the length of the
2766          string table associated with this file.  We use that info
2767          to know how to relocate the *next* file's string table indices.  */
2768       if (type == N_UNDF)
2769         {
2770           file_string_table_offset = next_file_string_table_offset;
2771           next_file_string_table_offset += value;
2772         }
2773       else
2774         {
2775           bfd_size_type amt = strx + file_string_table_offset;
2776
2777           /* Using the (possibly updated) string table offset, print the
2778              string (if any) associated with this symbol.  */
2779           if (amt < stabstr_size)
2780             /* PR 17512: file: 079-79389-0.001:0.1.  */
2781             printf (" %.*s", (int)(stabstr_size - amt), strtab + amt);
2782           else
2783             printf (" *");
2784         }
2785     }
2786   printf ("\n\n");
2787   *string_offset_ptr = next_file_string_table_offset;
2788 }
2789
2790 typedef struct
2791 {
2792   const char * section_name;
2793   const char * string_section_name;
2794   unsigned string_offset;
2795 }
2796 stab_section_names;
2797
2798 static void
2799 find_stabs_section (bfd *abfd, asection *section, void *names)
2800 {
2801   int len;
2802   stab_section_names * sought = (stab_section_names *) names;
2803
2804   /* Check for section names for which stabsect_name is a prefix, to
2805      handle .stab.N, etc.  */
2806   len = strlen (sought->section_name);
2807
2808   /* If the prefix matches, and the files section name ends with a
2809      nul or a digit, then we match.  I.e., we want either an exact
2810      match or a section followed by a number.  */
2811   if (strncmp (sought->section_name, section->name, len) == 0
2812       && (section->name[len] == 0
2813           || (section->name[len] == '.' && ISDIGIT (section->name[len + 1]))))
2814     {
2815       if (strtab == NULL)
2816         strtab = read_section_stabs (abfd, sought->string_section_name,
2817                                      &stabstr_size);
2818
2819       if (strtab)
2820         {
2821           stabs = (bfd_byte *) read_section_stabs (abfd, section->name,
2822                                                    &stab_size);
2823           if (stabs)
2824             print_section_stabs (abfd, section->name, &sought->string_offset);
2825         }
2826     }
2827 }
2828
2829 static void
2830 dump_stabs_section (bfd *abfd, char *stabsect_name, char *strsect_name)
2831 {
2832   stab_section_names s;
2833
2834   s.section_name = stabsect_name;
2835   s.string_section_name = strsect_name;
2836   s.string_offset = 0;
2837
2838   bfd_map_over_sections (abfd, find_stabs_section, & s);
2839
2840   free (strtab);
2841   strtab = NULL;
2842 }
2843
2844 /* Dump the any sections containing stabs debugging information.  */
2845
2846 static void
2847 dump_stabs (bfd *abfd)
2848 {
2849   dump_stabs_section (abfd, ".stab", ".stabstr");
2850   dump_stabs_section (abfd, ".stab.excl", ".stab.exclstr");
2851   dump_stabs_section (abfd, ".stab.index", ".stab.indexstr");
2852
2853   /* For Darwin.  */
2854   dump_stabs_section (abfd, "LC_SYMTAB.stabs", "LC_SYMTAB.stabstr");
2855
2856   dump_stabs_section (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
2857 }
2858 \f
2859 static void
2860 dump_bfd_header (bfd *abfd)
2861 {
2862   char *comma = "";
2863
2864   printf (_("architecture: %s, "),
2865           bfd_printable_arch_mach (bfd_get_arch (abfd),
2866                                    bfd_get_mach (abfd)));
2867   printf (_("flags 0x%08x:\n"), abfd->flags & ~BFD_FLAGS_FOR_BFD_USE_MASK);
2868
2869 #define PF(x, y)    if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2870   PF (HAS_RELOC, "HAS_RELOC");
2871   PF (EXEC_P, "EXEC_P");
2872   PF (HAS_LINENO, "HAS_LINENO");
2873   PF (HAS_DEBUG, "HAS_DEBUG");
2874   PF (HAS_SYMS, "HAS_SYMS");
2875   PF (HAS_LOCALS, "HAS_LOCALS");
2876   PF (DYNAMIC, "DYNAMIC");
2877   PF (WP_TEXT, "WP_TEXT");
2878   PF (D_PAGED, "D_PAGED");
2879   PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
2880   printf (_("\nstart address 0x"));
2881   bfd_printf_vma (abfd, abfd->start_address);
2882   printf ("\n");
2883 }
2884
2885 \f
2886 static void
2887 dump_bfd_private_header (bfd *abfd)
2888 {
2889   bfd_print_private_bfd_data (abfd, stdout);
2890 }
2891
2892 static void
2893 dump_target_specific (bfd *abfd)
2894 {
2895   const struct objdump_private_desc * const *desc;
2896   struct objdump_private_option *opt;
2897   char *e, *b;
2898
2899   /* Find the desc.  */
2900   for (desc = objdump_private_vectors; *desc != NULL; desc++)
2901     if ((*desc)->filter (abfd))
2902       break;
2903
2904   if (*desc == NULL)
2905     {
2906       non_fatal (_("option -P/--private not supported by this file"));
2907       return;
2908     }
2909
2910   /* Clear all options.  */
2911   for (opt = (*desc)->options; opt->name; opt++)
2912     opt->selected = FALSE;
2913
2914   /* Decode options.  */
2915   b = dump_private_options;
2916   do
2917     {
2918       e = strchr (b, ',');
2919
2920       if (e)
2921         *e = 0;
2922
2923       for (opt = (*desc)->options; opt->name; opt++)
2924         if (strcmp (opt->name, b) == 0)
2925           {
2926             opt->selected = TRUE;
2927             break;
2928           }
2929       if (opt->name == NULL)
2930         non_fatal (_("target specific dump '%s' not supported"), b);
2931
2932       if (e)
2933         {
2934           *e = ',';
2935           b = e + 1;
2936         }
2937     }
2938   while (e != NULL);
2939
2940   /* Dump.  */
2941   (*desc)->dump (abfd);
2942 }
2943 \f
2944 /* Display a section in hexadecimal format with associated characters.
2945    Each line prefixed by the zero padded address.  */
2946
2947 static void
2948 dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED)
2949 {
2950   bfd_byte *data = 0;
2951   bfd_size_type datasize;
2952   bfd_vma addr_offset;
2953   bfd_vma start_offset;
2954   bfd_vma stop_offset;
2955   unsigned int opb = bfd_octets_per_byte (abfd);
2956   /* Bytes per line.  */
2957   const int onaline = 16;
2958   char buf[64];
2959   int count;
2960   int width;
2961
2962   if ((section->flags & SEC_HAS_CONTENTS) == 0)
2963     return;
2964
2965   if (! process_section_p (section))
2966     return;
2967
2968   if ((datasize = bfd_section_size (abfd, section)) == 0)
2969     return;
2970
2971   /* Compute the address range to display.  */
2972   if (start_address == (bfd_vma) -1
2973       || start_address < section->vma)
2974     start_offset = 0;
2975   else
2976     start_offset = start_address - section->vma;
2977
2978   if (stop_address == (bfd_vma) -1)
2979     stop_offset = datasize / opb;
2980   else
2981     {
2982       if (stop_address < section->vma)
2983         stop_offset = 0;
2984       else
2985         stop_offset = stop_address - section->vma;
2986
2987       if (stop_offset > datasize / opb)
2988         stop_offset = datasize / opb;
2989     }
2990
2991   if (start_offset >= stop_offset)
2992     return;
2993
2994   printf (_("Contents of section %s:"), section->name);
2995   if (display_file_offsets)
2996     printf (_("  (Starting at file offset: 0x%lx)"),
2997             (unsigned long) (section->filepos + start_offset));
2998   printf ("\n");
2999
3000   if (!bfd_get_full_section_contents (abfd, section, &data))
3001     {
3002       non_fatal (_("Reading section %s failed because: %s"),
3003                  section->name, bfd_errmsg (bfd_get_error ()));
3004       return;
3005     }
3006
3007   width = 4;
3008
3009   bfd_sprintf_vma (abfd, buf, start_offset + section->vma);
3010   if (strlen (buf) >= sizeof (buf))
3011     abort ();
3012
3013   count = 0;
3014   while (buf[count] == '0' && buf[count+1] != '\0')
3015     count++;
3016   count = strlen (buf) - count;
3017   if (count > width)
3018     width = count;
3019
3020   bfd_sprintf_vma (abfd, buf, stop_offset + section->vma - 1);
3021   if (strlen (buf) >= sizeof (buf))
3022     abort ();
3023
3024   count = 0;
3025   while (buf[count] == '0' && buf[count+1] != '\0')
3026     count++;
3027   count = strlen (buf) - count;
3028   if (count > width)
3029     width = count;
3030
3031   for (addr_offset = start_offset;
3032        addr_offset < stop_offset; addr_offset += onaline / opb)
3033     {
3034       bfd_size_type j;
3035
3036       bfd_sprintf_vma (abfd, buf, (addr_offset + section->vma));
3037       count = strlen (buf);
3038       if ((size_t) count >= sizeof (buf))
3039         abort ();
3040
3041       putchar (' ');
3042       while (count < width)
3043         {
3044           putchar ('0');
3045           count++;
3046         }
3047       fputs (buf + count - width, stdout);
3048       putchar (' ');
3049
3050       for (j = addr_offset * opb;
3051            j < addr_offset * opb + onaline; j++)
3052         {
3053           if (j < stop_offset * opb)
3054             printf ("%02x", (unsigned) (data[j]));
3055           else
3056             printf ("  ");
3057           if ((j & 3) == 3)
3058             printf (" ");
3059         }
3060
3061       printf (" ");
3062       for (j = addr_offset * opb;
3063            j < addr_offset * opb + onaline; j++)
3064         {
3065           if (j >= stop_offset * opb)
3066             printf (" ");
3067           else
3068             printf ("%c", ISPRINT (data[j]) ? data[j] : '.');
3069         }
3070       putchar ('\n');
3071     }
3072   free (data);
3073 }
3074
3075 /* Actually display the various requested regions.  */
3076
3077 static void
3078 dump_data (bfd *abfd)
3079 {
3080   bfd_map_over_sections (abfd, dump_section, NULL);
3081 }
3082
3083 /* Should perhaps share code and display with nm?  */
3084
3085 static void
3086 dump_symbols (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean dynamic)
3087 {
3088   asymbol **current;
3089   long max_count;
3090   long count;
3091
3092   if (dynamic)
3093     {
3094       current = dynsyms;
3095       max_count = dynsymcount;
3096       printf ("DYNAMIC SYMBOL TABLE:\n");
3097     }
3098   else
3099     {
3100       current = syms;
3101       max_count = symcount;
3102       printf ("SYMBOL TABLE:\n");
3103     }
3104
3105   if (max_count == 0)
3106     printf (_("no symbols\n"));
3107
3108   for (count = 0; count < max_count; count++)
3109     {
3110       bfd *cur_bfd;
3111
3112       if (*current == NULL)
3113         printf (_("no information for symbol number %ld\n"), count);
3114
3115       else if ((cur_bfd = bfd_asymbol_bfd (*current)) == NULL)
3116         printf (_("could not determine the type of symbol number %ld\n"),
3117                 count);
3118
3119       else if (process_section_p ((* current)->section)
3120                && (dump_special_syms
3121                    || !bfd_is_target_special_symbol (cur_bfd, *current)))
3122         {
3123           const char *name = (*current)->name;
3124
3125           if (do_demangle && name != NULL && *name != '\0')
3126             {
3127               char *alloc;
3128
3129               /* If we want to demangle the name, we demangle it
3130                  here, and temporarily clobber it while calling
3131                  bfd_print_symbol.  FIXME: This is a gross hack.  */
3132               alloc = bfd_demangle (cur_bfd, name, DMGL_ANSI | DMGL_PARAMS);
3133               if (alloc != NULL)
3134                 (*current)->name = alloc;
3135               bfd_print_symbol (cur_bfd, stdout, *current,
3136                                 bfd_print_symbol_all);
3137               if (alloc != NULL)
3138                 {
3139                   (*current)->name = name;
3140                   free (alloc);
3141                 }
3142             }
3143           else
3144             bfd_print_symbol (cur_bfd, stdout, *current,
3145                               bfd_print_symbol_all);
3146           printf ("\n");
3147         }
3148
3149       current++;
3150     }
3151   printf ("\n\n");
3152 }
3153 \f
3154 static void
3155 dump_reloc_set (bfd *abfd, asection *sec, arelent **relpp, long relcount)
3156 {
3157   arelent **p;
3158   char *last_filename, *last_functionname;
3159   unsigned int last_line;
3160   unsigned int last_discriminator;
3161
3162   /* Get column headers lined up reasonably.  */
3163   {
3164     static int width;
3165
3166     if (width == 0)
3167       {
3168         char buf[30];
3169
3170         bfd_sprintf_vma (abfd, buf, (bfd_vma) -1);
3171         width = strlen (buf) - 7;
3172       }
3173     printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
3174   }
3175
3176   last_filename = NULL;
3177   last_functionname = NULL;
3178   last_line = 0;
3179   last_discriminator = 0;
3180
3181   for (p = relpp; relcount && *p != NULL; p++, relcount--)
3182     {
3183       arelent *q = *p;
3184       const char *filename, *functionname;
3185       unsigned int linenumber;
3186       unsigned int discriminator;
3187       const char *sym_name;
3188       const char *section_name;
3189       bfd_vma addend2 = 0;
3190
3191       if (start_address != (bfd_vma) -1
3192           && q->address < start_address)
3193         continue;
3194       if (stop_address != (bfd_vma) -1
3195           && q->address > stop_address)
3196         continue;
3197
3198       if (with_line_numbers
3199           && sec != NULL
3200           && bfd_find_nearest_line_discriminator (abfd, sec, syms, q->address,
3201                                                   &filename, &functionname,
3202                                                   &linenumber, &discriminator))
3203         {
3204           if (functionname != NULL
3205               && (last_functionname == NULL
3206                   || strcmp (functionname, last_functionname) != 0))
3207             {
3208               printf ("%s():\n", functionname);
3209               if (last_functionname != NULL)
3210                 free (last_functionname);
3211               last_functionname = xstrdup (functionname);
3212             }
3213
3214           if (linenumber > 0
3215               && (linenumber != last_line
3216                   || (filename != NULL
3217                       && last_filename != NULL
3218                       && filename_cmp (filename, last_filename) != 0)
3219                   || (discriminator != last_discriminator)))
3220             {
3221               if (discriminator > 0)
3222                 printf ("%s:%u\n", filename == NULL ? "???" : filename, linenumber);
3223               else
3224                 printf ("%s:%u (discriminator %u)\n", filename == NULL ? "???" : filename,
3225                         linenumber, discriminator);
3226               last_line = linenumber;
3227               last_discriminator = discriminator;
3228               if (last_filename != NULL)
3229                 free (last_filename);
3230               if (filename == NULL)
3231                 last_filename = NULL;
3232               else
3233                 last_filename = xstrdup (filename);
3234             }
3235         }
3236
3237       if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
3238         {
3239           sym_name = (*(q->sym_ptr_ptr))->name;
3240           section_name = (*(q->sym_ptr_ptr))->section->name;
3241         }
3242       else
3243         {
3244           sym_name = NULL;
3245           section_name = NULL;
3246         }
3247
3248       bfd_printf_vma (abfd, q->address);
3249       if (q->howto == NULL)
3250         printf (" *unknown*         ");
3251       else if (q->howto->name)
3252         {
3253           const char *name = q->howto->name;
3254
3255           /* R_SPARC_OLO10 relocations contain two addends.
3256              But because 'arelent' lacks enough storage to
3257              store them both, the 64-bit ELF Sparc backend
3258              records this as two relocations.  One R_SPARC_LO10
3259              and one R_SPARC_13, both pointing to the same
3260              address.  This is merely so that we have some
3261              place to store both addend fields.
3262
3263              Undo this transformation, otherwise the output
3264              will be confusing.  */
3265           if (abfd->xvec->flavour == bfd_target_elf_flavour
3266               && elf_tdata(abfd)->elf_header->e_machine == EM_SPARCV9
3267               && relcount > 1
3268               && !strcmp (q->howto->name, "R_SPARC_LO10"))
3269             {
3270               arelent *q2 = *(p + 1);
3271               if (q2 != NULL
3272                   && q2->howto
3273                   && q->address == q2->address
3274                   && !strcmp (q2->howto->name, "R_SPARC_13"))
3275                 {
3276                   name = "R_SPARC_OLO10";
3277                   addend2 = q2->addend;
3278                   p++;
3279                 }
3280             }
3281           printf (" %-16s  ", name);
3282         }
3283       else
3284         printf (" %-16d  ", q->howto->type);
3285
3286       if (sym_name)
3287         {
3288           objdump_print_symname (abfd, NULL, *q->sym_ptr_ptr);
3289         }
3290       else
3291         {
3292           if (section_name == NULL)
3293             section_name = "*unknown*";
3294           printf ("[%s]", section_name);
3295         }
3296
3297       if (q->addend)
3298         {
3299           bfd_signed_vma addend = q->addend;
3300           if (addend < 0)
3301             {
3302               printf ("-0x");
3303               addend = -addend;
3304             }
3305           else
3306             printf ("+0x");
3307           bfd_printf_vma (abfd, addend);
3308         }
3309       if (addend2)
3310         {
3311           printf ("+0x");
3312           bfd_printf_vma (abfd, addend2);
3313         }
3314
3315       printf ("\n");
3316     }
3317
3318   if (last_filename != NULL)
3319     free (last_filename);
3320   if (last_functionname != NULL)
3321     free (last_functionname);
3322 }
3323
3324 static void
3325 dump_relocs_in_section (bfd *abfd,
3326                         asection *section,
3327                         void *dummy ATTRIBUTE_UNUSED)
3328 {
3329   arelent **relpp;
3330   long relcount;
3331   long relsize;
3332
3333   if (   bfd_is_abs_section (section)
3334       || bfd_is_und_section (section)
3335       || bfd_is_com_section (section)
3336       || (! process_section_p (section))
3337       || ((section->flags & SEC_RELOC) == 0))
3338     return;
3339
3340   relsize = bfd_get_reloc_upper_bound (abfd, section);
3341   if (relsize < 0)
3342     bfd_fatal (bfd_get_filename (abfd));
3343
3344   printf ("RELOCATION RECORDS FOR [%s]:", section->name);
3345
3346   if (relsize == 0)
3347     {
3348       printf (" (none)\n\n");
3349       return;
3350     }
3351
3352   relpp = (arelent **) xmalloc (relsize);
3353   relcount = bfd_canonicalize_reloc (abfd, section, relpp, syms);
3354
3355   if (relcount < 0)
3356     {
3357       printf ("\n");
3358       non_fatal (_("failed to read relocs in: %s"), bfd_get_filename (abfd));
3359       bfd_fatal (_("error message was"));
3360     }
3361   else if (relcount == 0)
3362     printf (" (none)\n\n");
3363   else
3364     {
3365       printf ("\n");
3366       dump_reloc_set (abfd, section, relpp, relcount);
3367       printf ("\n\n");
3368     }
3369   free (relpp);
3370 }
3371
3372 static void
3373 dump_relocs (bfd *abfd)
3374 {
3375   bfd_map_over_sections (abfd, dump_relocs_in_section, NULL);
3376 }
3377
3378 static void
3379 dump_dynamic_relocs (bfd *abfd)
3380 {
3381   long relsize;
3382   arelent **relpp;
3383   long relcount;
3384
3385   relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
3386   if (relsize < 0)
3387     bfd_fatal (bfd_get_filename (abfd));
3388
3389   printf ("DYNAMIC RELOCATION RECORDS");
3390
3391   if (relsize == 0)
3392     printf (" (none)\n\n");
3393   else
3394     {
3395       relpp = (arelent **) xmalloc (relsize);
3396       relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
3397
3398       if (relcount < 0)
3399         bfd_fatal (bfd_get_filename (abfd));
3400       else if (relcount == 0)
3401         printf (" (none)\n\n");
3402       else
3403         {
3404           printf ("\n");
3405           dump_reloc_set (abfd, NULL, relpp, relcount);
3406           printf ("\n\n");
3407         }
3408       free (relpp);
3409     }
3410 }
3411
3412 /* Creates a table of paths, to search for source files.  */
3413
3414 static void
3415 add_include_path (const char *path)
3416 {
3417   if (path[0] == 0)
3418     return;
3419   include_path_count++;
3420   include_paths = (const char **)
3421       xrealloc (include_paths, include_path_count * sizeof (*include_paths));
3422 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3423   if (path[1] == ':' && path[2] == 0)
3424     path = concat (path, ".", (const char *) 0);
3425 #endif
3426   include_paths[include_path_count - 1] = path;
3427 }
3428
3429 static void
3430 adjust_addresses (bfd *abfd ATTRIBUTE_UNUSED,
3431                   asection *section,
3432                   void *arg)
3433 {
3434   if ((section->flags & SEC_DEBUGGING) == 0)
3435     {
3436       bfd_boolean *has_reloc_p = (bfd_boolean *) arg;
3437       section->vma += adjust_section_vma;
3438       if (*has_reloc_p)
3439         section->lma += adjust_section_vma;
3440     }
3441 }
3442
3443 /* Dump selected contents of ABFD.  */
3444
3445 static void
3446 dump_bfd (bfd *abfd)
3447 {
3448   /* If we are adjusting section VMA's, change them all now.  Changing
3449      the BFD information is a hack.  However, we must do it, or
3450      bfd_find_nearest_line will not do the right thing.  */
3451   if (adjust_section_vma != 0)
3452     {
3453       bfd_boolean has_reloc = (abfd->flags & HAS_RELOC);
3454       bfd_map_over_sections (abfd, adjust_addresses, &has_reloc);
3455     }
3456
3457   if (! dump_debugging_tags && ! suppress_bfd_header)
3458     printf (_("\n%s:     file format %s\n"), bfd_get_filename (abfd),
3459             abfd->xvec->name);
3460   if (dump_ar_hdrs)
3461     print_arelt_descr (stdout, abfd, TRUE);
3462   if (dump_file_header)
3463     dump_bfd_header (abfd);
3464   if (dump_private_headers)
3465     dump_bfd_private_header (abfd);
3466   if (dump_private_options != NULL)
3467     dump_target_specific (abfd);
3468   if (! dump_debugging_tags && ! suppress_bfd_header)
3469     putchar ('\n');
3470
3471   if (dump_symtab
3472       || dump_reloc_info
3473       || disassemble
3474       || dump_debugging
3475       || dump_dwarf_section_info)
3476     syms = slurp_symtab (abfd);
3477
3478   if (dump_section_headers)
3479     dump_headers (abfd);
3480
3481   if (dump_dynamic_symtab || dump_dynamic_reloc_info
3482       || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
3483     dynsyms = slurp_dynamic_symtab (abfd);
3484   if (disassemble)
3485     {
3486       synthcount = bfd_get_synthetic_symtab (abfd, symcount, syms,
3487                                              dynsymcount, dynsyms, &synthsyms);
3488       if (synthcount < 0)
3489         synthcount = 0;
3490     }
3491
3492   if (dump_symtab)
3493     dump_symbols (abfd, FALSE);
3494   if (dump_dynamic_symtab)
3495     dump_symbols (abfd, TRUE);
3496   if (dump_dwarf_section_info)
3497     dump_dwarf (abfd);
3498   if (dump_stab_section_info)
3499     dump_stabs (abfd);
3500   if (dump_reloc_info && ! disassemble)
3501     dump_relocs (abfd);
3502   if (dump_dynamic_reloc_info && ! disassemble)
3503     dump_dynamic_relocs (abfd);
3504   if (dump_section_contents)
3505     dump_data (abfd);
3506   if (disassemble)
3507     disassemble_data (abfd);
3508
3509   if (dump_debugging)
3510     {
3511       void *dhandle;
3512
3513       dhandle = read_debugging_info (abfd, syms, symcount, TRUE);
3514       if (dhandle != NULL)
3515         {
3516           if (!print_debugging_info (stdout, dhandle, abfd, syms,
3517                                      bfd_demangle,
3518                                      dump_debugging_tags ? TRUE : FALSE))
3519             {
3520               non_fatal (_("%s: printing debugging information failed"),
3521                          bfd_get_filename (abfd));
3522               exit_status = 1;
3523             }
3524         }
3525       /* PR 6483: If there was no STABS or IEEE debug
3526          info in the file, try DWARF instead.  */
3527       else if (! dump_dwarf_section_info)
3528         {
3529           dwarf_select_sections_all ();
3530           dump_dwarf (abfd);
3531         }
3532     }
3533
3534   if (syms)
3535     {
3536       free (syms);
3537       syms = NULL;
3538     }
3539
3540   if (dynsyms)
3541     {
3542       free (dynsyms);
3543       dynsyms = NULL;
3544     }
3545
3546   if (synthsyms)
3547     {
3548       free (synthsyms);
3549       synthsyms = NULL;
3550     }
3551
3552   symcount = 0;
3553   dynsymcount = 0;
3554   synthcount = 0;
3555 }
3556
3557 static void
3558 display_object_bfd (bfd *abfd)
3559 {
3560   char **matching;
3561
3562   if (bfd_check_format_matches (abfd, bfd_object, &matching))
3563     {
3564       dump_bfd (abfd);
3565       return;
3566     }
3567
3568   if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3569     {
3570       nonfatal (bfd_get_filename (abfd));
3571       list_matching_formats (matching);
3572       free (matching);
3573       return;
3574     }
3575
3576   if (bfd_get_error () != bfd_error_file_not_recognized)
3577     {
3578       nonfatal (bfd_get_filename (abfd));
3579       return;
3580     }
3581
3582   if (bfd_check_format_matches (abfd, bfd_core, &matching))
3583     {
3584       dump_bfd (abfd);
3585       return;
3586     }
3587
3588   nonfatal (bfd_get_filename (abfd));
3589
3590   if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3591     {
3592       list_matching_formats (matching);
3593       free (matching);
3594     }
3595 }
3596
3597 static void
3598 display_any_bfd (bfd *file, int level)
3599 {
3600   /* Decompress sections unless dumping the section contents.  */
3601   if (!dump_section_contents)
3602     file->flags |= BFD_DECOMPRESS;
3603
3604   /* If the file is an archive, process all of its elements.  */
3605   if (bfd_check_format (file, bfd_archive))
3606     {
3607       bfd *arfile = NULL;
3608       bfd *last_arfile = NULL;
3609
3610       if (level == 0)
3611         printf (_("In archive %s:\n"), bfd_get_filename (file));
3612       else if (level > 100)
3613         {
3614           /* Prevent corrupted files from spinning us into an
3615              infinite loop.  100 is an arbitrary heuristic.  */
3616           fatal (_("Archive nesting is too deep"));
3617           return;
3618         }
3619       else
3620         printf (_("In nested archive %s:\n"), bfd_get_filename (file));
3621
3622       for (;;)
3623         {
3624           bfd_set_error (bfd_error_no_error);
3625
3626           arfile = bfd_openr_next_archived_file (file, arfile);
3627           if (arfile == NULL)
3628             {
3629               if (bfd_get_error () != bfd_error_no_more_archived_files)
3630                 nonfatal (bfd_get_filename (file));
3631               break;
3632             }
3633
3634           display_any_bfd (arfile, level + 1);
3635
3636           if (last_arfile != NULL)
3637             {
3638               bfd_close (last_arfile);
3639               /* PR 17512: file: ac585d01.  */
3640               if (arfile == last_arfile)
3641                 {
3642                   last_arfile = NULL;
3643                   break;
3644                 }
3645             }
3646           last_arfile = arfile;
3647         }
3648
3649       if (last_arfile != NULL)
3650         bfd_close (last_arfile);
3651     }
3652   else
3653     display_object_bfd (file);
3654 }
3655
3656 static void
3657 display_file (char *filename, char *target, bfd_boolean last_file)
3658 {
3659   bfd *file;
3660
3661   if (get_file_size (filename) < 1)
3662     {
3663       exit_status = 1;
3664       return;
3665     }
3666
3667   file = bfd_openr (filename, target);
3668   if (file == NULL)
3669     {
3670       nonfatal (filename);
3671       return;
3672     }
3673
3674   display_any_bfd (file, 0);
3675
3676   /* This is an optimization to improve the speed of objdump, especially when
3677      dumping a file with lots of associated debug informatiom.  Calling
3678      bfd_close on such a file can take a non-trivial amount of time as there
3679      are lots of lists to walk and buffers to free.  This is only really
3680      necessary however if we are about to load another file and we need the
3681      memory back.  Otherwise, if we are about to exit, then we can save (a lot
3682      of) time by only doing a quick close, and allowing the OS to reclaim the
3683      memory for us.  */
3684   if (! last_file)
3685     bfd_close (file);
3686   else
3687     bfd_close_all_done (file);
3688 }
3689 \f
3690 int
3691 main (int argc, char **argv)
3692 {
3693   int c;
3694   char *target = default_target;
3695   bfd_boolean seenflag = FALSE;
3696
3697 #if defined (HAVE_SETLOCALE)
3698 #if defined (HAVE_LC_MESSAGES)
3699   setlocale (LC_MESSAGES, "");
3700 #endif
3701   setlocale (LC_CTYPE, "");
3702 #endif
3703
3704   bindtextdomain (PACKAGE, LOCALEDIR);
3705   textdomain (PACKAGE);
3706
3707   program_name = *argv;
3708   xmalloc_set_program_name (program_name);
3709   bfd_set_error_program_name (program_name);
3710
3711   START_PROGRESS (program_name, 0);
3712
3713   expandargv (&argc, &argv);
3714
3715   bfd_init ();
3716   set_default_bfd_target ();
3717
3718   while ((c = getopt_long (argc, argv,
3719                            "pP:ib:m:M:VvCdDlfFaHhrRtTxsSI:j:wE:zgeGW::",
3720                            long_options, (int *) 0))
3721          != EOF)
3722     {
3723       switch (c)
3724         {
3725         case 0:
3726           break;                /* We've been given a long option.  */
3727         case 'm':
3728           machine = optarg;
3729           break;
3730         case 'M':
3731           if (disassembler_options)
3732             /* Ignore potential memory leak for now.  */
3733             disassembler_options = concat (disassembler_options, ",",
3734                                            optarg, (const char *) NULL);
3735           else
3736             disassembler_options = optarg;
3737           break;
3738         case 'j':
3739           add_only (optarg);
3740           break;
3741         case 'F':
3742           display_file_offsets = TRUE;
3743           break;
3744         case 'l':
3745           with_line_numbers = TRUE;
3746           break;
3747         case 'b':
3748           target = optarg;
3749           break;
3750         case 'C':
3751           do_demangle = TRUE;
3752           if (optarg != NULL)
3753             {
3754               enum demangling_styles style;
3755
3756               style = cplus_demangle_name_to_style (optarg);
3757               if (style == unknown_demangling)
3758                 fatal (_("unknown demangling style `%s'"),
3759                        optarg);
3760
3761               cplus_demangle_set_style (style);
3762             }
3763           break;
3764         case 'w':
3765           wide_output = TRUE;
3766           break;
3767         case OPTION_ADJUST_VMA:
3768           adjust_section_vma = parse_vma (optarg, "--adjust-vma");
3769           break;
3770         case OPTION_START_ADDRESS:
3771           start_address = parse_vma (optarg, "--start-address");
3772           if ((stop_address != (bfd_vma) -1) && stop_address <= start_address)
3773             fatal (_("error: the start address should be before the end address"));
3774           break;
3775         case OPTION_STOP_ADDRESS:
3776           stop_address = parse_vma (optarg, "--stop-address");
3777           if ((start_address != (bfd_vma) -1) && stop_address <= start_address)
3778             fatal (_("error: the stop address should be after the start address"));
3779           break;
3780         case OPTION_PREFIX:
3781           prefix = optarg;
3782           prefix_length = strlen (prefix);
3783           /* Remove an unnecessary trailing '/' */
3784           while (IS_DIR_SEPARATOR (prefix[prefix_length - 1]))
3785             prefix_length--;
3786           break;
3787         case OPTION_PREFIX_STRIP:
3788           prefix_strip = atoi (optarg);
3789           if (prefix_strip < 0)
3790             fatal (_("error: prefix strip must be non-negative"));
3791           break;
3792         case OPTION_INSN_WIDTH:
3793           insn_width = strtoul (optarg, NULL, 0);
3794           if (insn_width <= 0)
3795             fatal (_("error: instruction width must be positive"));
3796           break;
3797         case 'E':
3798           if (strcmp (optarg, "B") == 0)
3799             endian = BFD_ENDIAN_BIG;
3800           else if (strcmp (optarg, "L") == 0)
3801             endian = BFD_ENDIAN_LITTLE;
3802           else
3803             {
3804               nonfatal (_("unrecognized -E option"));
3805               usage (stderr, 1);
3806             }
3807           break;
3808         case OPTION_ENDIAN:
3809           if (strncmp (optarg, "big", strlen (optarg)) == 0)
3810             endian = BFD_ENDIAN_BIG;
3811           else if (strncmp (optarg, "little", strlen (optarg)) == 0)
3812             endian = BFD_ENDIAN_LITTLE;
3813           else
3814             {
3815               non_fatal (_("unrecognized --endian type `%s'"), optarg);
3816               exit_status = 1;
3817               usage (stderr, 1);
3818             }
3819           break;
3820
3821         case 'f':
3822           dump_file_header = TRUE;
3823           seenflag = TRUE;
3824           break;
3825         case 'i':
3826           formats_info = TRUE;
3827           seenflag = TRUE;
3828           break;
3829         case 'I':
3830           add_include_path (optarg);
3831           break;
3832         case 'p':
3833           dump_private_headers = TRUE;
3834           seenflag = TRUE;
3835           break;
3836         case 'P':
3837           dump_private_options = optarg;
3838           seenflag = TRUE;
3839           break;
3840         case 'x':
3841           dump_private_headers = TRUE;
3842           dump_symtab = TRUE;
3843           dump_reloc_info = TRUE;
3844           dump_file_header = TRUE;
3845           dump_ar_hdrs = TRUE;
3846           dump_section_headers = TRUE;
3847           seenflag = TRUE;
3848           break;
3849         case 't':
3850           dump_symtab = TRUE;
3851           seenflag = TRUE;
3852           break;
3853         case 'T':
3854           dump_dynamic_symtab = TRUE;
3855           seenflag = TRUE;
3856           break;
3857         case 'd':
3858           disassemble = TRUE;
3859           seenflag = TRUE;
3860           break;
3861         case 'z':
3862           disassemble_zeroes = TRUE;
3863           break;
3864         case 'D':
3865           disassemble = TRUE;
3866           disassemble_all = TRUE;
3867           seenflag = TRUE;
3868           break;
3869         case 'S':
3870           disassemble = TRUE;
3871           with_source_code = TRUE;
3872           seenflag = TRUE;
3873           break;
3874         case 'g':
3875           dump_debugging = 1;
3876           seenflag = TRUE;
3877           break;
3878         case 'e':
3879           dump_debugging = 1;
3880           dump_debugging_tags = 1;
3881           do_demangle = TRUE;
3882           seenflag = TRUE;
3883           break;
3884         case 'W':
3885           dump_dwarf_section_info = TRUE;
3886           seenflag = TRUE;
3887           if (optarg)
3888             dwarf_select_sections_by_letters (optarg);
3889           else
3890             dwarf_select_sections_all ();
3891           break;
3892         case OPTION_DWARF:
3893           dump_dwarf_section_info = TRUE;
3894           seenflag = TRUE;
3895           if (optarg)
3896             dwarf_select_sections_by_names (optarg);
3897           else
3898             dwarf_select_sections_all ();
3899           break;
3900         case OPTION_DWARF_DEPTH:
3901           {
3902             char *cp;
3903             dwarf_cutoff_level = strtoul (optarg, & cp, 0);
3904           }
3905           break;
3906         case OPTION_DWARF_START:
3907           {
3908             char *cp;
3909             dwarf_start_die = strtoul (optarg, & cp, 0);
3910             suppress_bfd_header = 1;
3911           }
3912           break;
3913         case OPTION_DWARF_CHECK:
3914           dwarf_check = TRUE;
3915           break;
3916         case 'G':
3917           dump_stab_section_info = TRUE;
3918           seenflag = TRUE;
3919           break;
3920         case 's':
3921           dump_section_contents = TRUE;
3922           seenflag = TRUE;
3923           break;
3924         case 'r':
3925           dump_reloc_info = TRUE;
3926           seenflag = TRUE;
3927           break;
3928         case 'R':
3929           dump_dynamic_reloc_info = TRUE;
3930           seenflag = TRUE;
3931           break;
3932         case 'a':
3933           dump_ar_hdrs = TRUE;
3934           seenflag = TRUE;
3935           break;
3936         case 'h':
3937           dump_section_headers = TRUE;
3938           seenflag = TRUE;
3939           break;
3940         case 'v':
3941         case 'V':
3942           show_version = TRUE;
3943           seenflag = TRUE;
3944           break;
3945
3946         case 'H':
3947           usage (stdout, 0);
3948           /* No need to set seenflag or to break - usage() does not return.  */
3949         default:
3950           usage (stderr, 1);
3951         }
3952     }
3953
3954   if (show_version)
3955     print_version ("objdump");
3956
3957   if (!seenflag)
3958     usage (stderr, 2);
3959
3960   if (formats_info)
3961     exit_status = display_info ();
3962   else
3963     {
3964       if (optind == argc)
3965         display_file ("a.out", target, TRUE);
3966       else
3967         for (; optind < argc;)
3968           {
3969             display_file (argv[optind], target, optind == argc - 1);
3970             optind++;
3971           }
3972     }
3973
3974   free_only_list ();
3975
3976   END_PROGRESS (program_name);
3977
3978   return exit_status;
3979 }