1 /* objdump.c -- dump information about an object file.
2 Copyright (C) 1990-2019 Free Software Foundation, Inc.
4 This file is part of GNU Binutils.
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)
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.
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. */
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.
29 The flow of execution is as follows:
31 1. Command line arguments are checked for control switches and the
32 information to be displayed is selected.
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.
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
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.
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. */
60 #include "safe-ctype.h"
62 #include "libiberty.h"
64 #include "filenames.h"
73 /* Internal headers for the ELF .stab-dump code - sorry. */
74 #define BYTES_IN_WORD 32
75 #include "aout/aout64.h"
78 static int exit_status = 0;
80 static char *default_target = NULL; /* Default at runtime. */
82 /* The following variables are set based on arguments passed on the
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 static bfd_boolean unwind_inlines; /* --inlines. */
121 static const char * disasm_sym; /* Disassembly start symbol. */
123 static int demangle_flags = DMGL_ANSI | DMGL_PARAMS;
125 /* A structure to record the sections mentioned in -j switches. */
128 const char * name; /* The name of the section. */
129 bfd_boolean seen; /* A flag to indicate that the section has been found in one or more input files. */
130 struct only * next; /* Pointer to the next structure in the list. */
132 /* Pointer to an array of 'only' structures.
133 This pointer is NULL if the -j switch has not been used. */
134 static struct only * only_list = NULL;
136 /* Variables for handling include file path table. */
137 static const char **include_paths;
138 static int include_path_count;
140 /* Extra info to pass to the section disassembler and address printing
142 struct objdump_disasm_info
146 bfd_boolean require_sec;
147 arelent ** dynrelbuf;
149 disassembler_ftype disassemble_fn;
154 /* Architecture to disassemble for, or default if NULL. */
155 static char *machine = NULL;
157 /* Target specific options to the disassembler. */
158 static char *disassembler_options = NULL;
160 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN. */
161 static enum bfd_endian endian = BFD_ENDIAN_UNKNOWN;
163 /* The symbol table. */
164 static asymbol **syms;
166 /* Number of symbols in `syms'. */
167 static long symcount = 0;
169 /* The sorted symbol table. */
170 static asymbol **sorted_syms;
172 /* Number of symbols in `sorted_syms'. */
173 static long sorted_symcount = 0;
175 /* The dynamic symbol table. */
176 static asymbol **dynsyms;
178 /* The synthetic symbol table. */
179 static asymbol *synthsyms;
180 static long synthcount = 0;
182 /* Number of symbols in `dynsyms'. */
183 static long dynsymcount = 0;
185 static bfd_byte *stabs;
186 static bfd_size_type stab_size;
188 static bfd_byte *strtab;
189 static bfd_size_type stabstr_size;
191 static bfd_boolean is_relocatable = FALSE;
193 /* Handlers for -P/--private. */
194 static const struct objdump_private_desc * const objdump_private_vectors[] =
196 OBJDUMP_PRIVATE_VECTORS
200 static void usage (FILE *, int) ATTRIBUTE_NORETURN;
202 usage (FILE *stream, int status)
204 fprintf (stream, _("Usage: %s <option(s)> <file(s)>\n"), program_name);
205 fprintf (stream, _(" Display information from object <file(s)>.\n"));
206 fprintf (stream, _(" At least one of the following switches must be given:\n"));
207 fprintf (stream, _("\
208 -a, --archive-headers Display archive header information\n\
209 -f, --file-headers Display the contents of the overall file header\n\
210 -p, --private-headers Display object format specific file header contents\n\
211 -P, --private=OPT,OPT... Display object format specific contents\n\
212 -h, --[section-]headers Display the contents of the section headers\n\
213 -x, --all-headers Display the contents of all headers\n\
214 -d, --disassemble Display assembler contents of executable sections\n\
215 -D, --disassemble-all Display assembler contents of all sections\n\
216 --disassemble=<sym> Display assembler contents from <sym>\n\
217 -S, --source Intermix source code with disassembly\n\
218 -s, --full-contents Display the full contents of all sections requested\n\
219 -g, --debugging Display debug information in object file\n\
220 -e, --debugging-tags Display debug information using ctags style\n\
221 -G, --stabs Display (in raw form) any STABS info in the file\n\
222 -W[lLiaprmfFsoRtUuTgAckK] or\n\
223 --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n\
224 =frames-interp,=str,=loc,=Ranges,=pubtypes,\n\
225 =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n\
226 =addr,=cu_index,=links,=follow-links]\n\
227 Display DWARF info in the file\n\
228 -t, --syms Display the contents of the symbol table(s)\n\
229 -T, --dynamic-syms Display the contents of the dynamic symbol table\n\
230 -r, --reloc Display the relocation entries in the file\n\
231 -R, --dynamic-reloc Display the dynamic relocation entries in the file\n\
232 @<file> Read options from <file>\n\
233 -v, --version Display this program's version number\n\
234 -i, --info List object formats and architectures supported\n\
235 -H, --help Display this information\n\
239 const struct objdump_private_desc * const *desc;
241 fprintf (stream, _("\n The following switches are optional:\n"));
242 fprintf (stream, _("\
243 -b, --target=BFDNAME Specify the target object format as BFDNAME\n\
244 -m, --architecture=MACHINE Specify the target architecture as MACHINE\n\
245 -j, --section=NAME Only display information for section NAME\n\
246 -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n\
247 -EB --endian=big Assume big endian format when disassembling\n\
248 -EL --endian=little Assume little endian format when disassembling\n\
249 --file-start-context Include context from start of file (with -S)\n\
250 -I, --include=DIR Add DIR to search list for source files\n\
251 -l, --line-numbers Include line numbers and filenames in output\n\
252 -F, --file-offsets Include file offsets when displaying information\n\
253 -C, --demangle[=STYLE] Decode mangled/processed symbol names\n\
254 The STYLE, if specified, can be `auto', `gnu',\n\
255 `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\
257 --recurse-limit Enable a limit on recursion whilst demangling. [Default]\n\
258 --no-recurse-limit Disable a limit on recursion whilst demangling\n\
259 -w, --wide Format output for more than 80 columns\n\
260 -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n\
261 --start-address=ADDR Only process data whose address is >= ADDR\n\
262 --stop-address=ADDR Only process data whose address is <= ADDR\n\
263 --prefix-addresses Print complete address alongside disassembly\n\
264 --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\
265 --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n\
266 --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\
267 --special-syms Include special symbols in symbol dumps\n\
268 --inlines Print all inlines for source line (with -l)\n\
269 --prefix=PREFIX Add PREFIX to absolute paths for -S\n\
270 --prefix-strip=LEVEL Strip initial directory names for -S\n"));
271 fprintf (stream, _("\
272 --dwarf-depth=N Do not display DIEs at depth N or greater\n\
273 --dwarf-start=N Display DIEs starting with N, at the same depth\n\
275 --dwarf-check Make additional dwarf internal consistency checks.\
277 list_supported_targets (program_name, stream);
278 list_supported_architectures (program_name, stream);
280 disassembler_usage (stream);
282 if (objdump_private_vectors[0] != NULL)
285 _("\nOptions supported for -P/--private switch:\n"));
286 for (desc = objdump_private_vectors; *desc != NULL; desc++)
287 (*desc)->help (stream);
290 if (REPORT_BUGS_TO[0] && status == 0)
291 fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
295 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
299 OPTION_START_ADDRESS,
309 OPTION_RECURSE_LIMIT,
310 OPTION_NO_RECURSE_LIMIT,
314 static struct option long_options[]=
316 {"adjust-vma", required_argument, NULL, OPTION_ADJUST_VMA},
317 {"all-headers", no_argument, NULL, 'x'},
318 {"private-headers", no_argument, NULL, 'p'},
319 {"private", required_argument, NULL, 'P'},
320 {"architecture", required_argument, NULL, 'm'},
321 {"archive-headers", no_argument, NULL, 'a'},
322 {"debugging", no_argument, NULL, 'g'},
323 {"debugging-tags", no_argument, NULL, 'e'},
324 {"demangle", optional_argument, NULL, 'C'},
325 {"disassemble", optional_argument, NULL, 'd'},
326 {"disassemble-all", no_argument, NULL, 'D'},
327 {"disassembler-options", required_argument, NULL, 'M'},
328 {"disassemble-zeroes", no_argument, NULL, 'z'},
329 {"dynamic-reloc", no_argument, NULL, 'R'},
330 {"dynamic-syms", no_argument, NULL, 'T'},
331 {"endian", required_argument, NULL, OPTION_ENDIAN},
332 {"file-headers", no_argument, NULL, 'f'},
333 {"file-offsets", no_argument, NULL, 'F'},
334 {"file-start-context", no_argument, &file_start_context, 1},
335 {"full-contents", no_argument, NULL, 's'},
336 {"headers", no_argument, NULL, 'h'},
337 {"help", no_argument, NULL, 'H'},
338 {"info", no_argument, NULL, 'i'},
339 {"line-numbers", no_argument, NULL, 'l'},
340 {"no-show-raw-insn", no_argument, &show_raw_insn, -1},
341 {"prefix-addresses", no_argument, &prefix_addresses, 1},
342 {"recurse-limit", no_argument, NULL, OPTION_RECURSE_LIMIT},
343 {"recursion-limit", no_argument, NULL, OPTION_RECURSE_LIMIT},
344 {"no-recurse-limit", no_argument, NULL, OPTION_NO_RECURSE_LIMIT},
345 {"no-recursion-limit", no_argument, NULL, OPTION_NO_RECURSE_LIMIT},
346 {"reloc", no_argument, NULL, 'r'},
347 {"section", required_argument, NULL, 'j'},
348 {"section-headers", no_argument, NULL, 'h'},
349 {"show-raw-insn", no_argument, &show_raw_insn, 1},
350 {"source", no_argument, NULL, 'S'},
351 {"special-syms", no_argument, &dump_special_syms, 1},
352 {"include", required_argument, NULL, 'I'},
353 {"dwarf", optional_argument, NULL, OPTION_DWARF},
354 {"stabs", no_argument, NULL, 'G'},
355 {"start-address", required_argument, NULL, OPTION_START_ADDRESS},
356 {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
357 {"syms", no_argument, NULL, 't'},
358 {"target", required_argument, NULL, 'b'},
359 {"version", no_argument, NULL, 'V'},
360 {"wide", no_argument, NULL, 'w'},
361 {"prefix", required_argument, NULL, OPTION_PREFIX},
362 {"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP},
363 {"insn-width", required_argument, NULL, OPTION_INSN_WIDTH},
364 {"dwarf-depth", required_argument, 0, OPTION_DWARF_DEPTH},
365 {"dwarf-start", required_argument, 0, OPTION_DWARF_START},
366 {"dwarf-check", no_argument, 0, OPTION_DWARF_CHECK},
367 {"inlines", no_argument, 0, OPTION_INLINES},
368 {0, no_argument, 0, 0}
372 nonfatal (const char *msg)
378 /* Returns TRUE if the specified section should be dumped. */
381 process_section_p (asection * section)
385 if (only_list == NULL)
388 for (only = only_list; only; only = only->next)
389 if (strcmp (only->name, section->name) == 0)
398 /* Add an entry to the 'only' list. */
401 add_only (char * name)
405 /* First check to make sure that we do not
406 already have an entry for this name. */
407 for (only = only_list; only; only = only->next)
408 if (strcmp (only->name, name) == 0)
411 only = xmalloc (sizeof * only);
414 only->next = only_list;
418 /* Release the memory used by the 'only' list.
419 PR 11225: Issue a warning message for unseen sections.
420 Only do this if none of the sections were seen. This is mainly to support
421 tools like the GAS testsuite where an object file is dumped with a list of
422 generic section names known to be present in a range of different file
426 free_only_list (void)
428 bfd_boolean at_least_one_seen = FALSE;
432 if (only_list == NULL)
435 for (only = only_list; only; only = only->next)
438 at_least_one_seen = TRUE;
442 for (only = only_list; only; only = next)
444 if (! at_least_one_seen)
446 non_fatal (_("section '%s' mentioned in a -j option, "
447 "but not found in any input file"),
458 dump_section_header (bfd *abfd, asection *section, void *data)
461 unsigned int opb = bfd_octets_per_byte (abfd);
462 int longest_section_name = *((int *) data);
464 /* Ignore linker created section. See elfNN_ia64_object_p in
466 if (section->flags & SEC_LINKER_CREATED)
469 /* PR 10413: Skip sections that we are ignoring. */
470 if (! process_section_p (section))
473 printf ("%3d %-*s %08lx ", section->index, longest_section_name,
474 bfd_get_section_name (abfd, section),
475 (unsigned long) bfd_section_size (abfd, section) / opb);
476 bfd_printf_vma (abfd, bfd_get_section_vma (abfd, section));
478 bfd_printf_vma (abfd, section->lma);
479 printf (" %08lx 2**%u", (unsigned long) section->filepos,
480 bfd_get_section_alignment (abfd, section));
486 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
488 PF (SEC_HAS_CONTENTS, "CONTENTS");
489 PF (SEC_ALLOC, "ALLOC");
490 PF (SEC_CONSTRUCTOR, "CONSTRUCTOR");
491 PF (SEC_LOAD, "LOAD");
492 PF (SEC_RELOC, "RELOC");
493 PF (SEC_READONLY, "READONLY");
494 PF (SEC_CODE, "CODE");
495 PF (SEC_DATA, "DATA");
497 PF (SEC_DEBUGGING, "DEBUGGING");
498 PF (SEC_NEVER_LOAD, "NEVER_LOAD");
499 PF (SEC_EXCLUDE, "EXCLUDE");
500 PF (SEC_SORT_ENTRIES, "SORT_ENTRIES");
501 if (bfd_get_arch (abfd) == bfd_arch_tic54x)
503 PF (SEC_TIC54X_BLOCK, "BLOCK");
504 PF (SEC_TIC54X_CLINK, "CLINK");
506 PF (SEC_SMALL_DATA, "SMALL_DATA");
507 if (bfd_get_flavour (abfd) == bfd_target_coff_flavour)
509 PF (SEC_COFF_SHARED, "SHARED");
510 PF (SEC_COFF_NOREAD, "NOREAD");
512 else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
513 PF (SEC_ELF_PURECODE, "PURECODE");
514 PF (SEC_THREAD_LOCAL, "THREAD_LOCAL");
515 PF (SEC_GROUP, "GROUP");
516 if (bfd_get_arch (abfd) == bfd_arch_mep)
518 PF (SEC_MEP_VLIW, "VLIW");
521 if ((section->flags & SEC_LINK_ONCE) != 0)
524 struct coff_comdat_info *comdat;
526 switch (section->flags & SEC_LINK_DUPLICATES)
530 case SEC_LINK_DUPLICATES_DISCARD:
531 ls = "LINK_ONCE_DISCARD";
533 case SEC_LINK_DUPLICATES_ONE_ONLY:
534 ls = "LINK_ONCE_ONE_ONLY";
536 case SEC_LINK_DUPLICATES_SAME_SIZE:
537 ls = "LINK_ONCE_SAME_SIZE";
539 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
540 ls = "LINK_ONCE_SAME_CONTENTS";
543 printf ("%s%s", comma, ls);
545 comdat = bfd_coff_get_comdat_section (abfd, section);
547 printf (" (COMDAT %s %ld)", comdat->name, comdat->symbol);
556 /* Called on each SECTION in ABFD, update the int variable pointed to by
557 DATA which contains the string length of the longest section name. */
560 find_longest_section_name (bfd *abfd, asection *section, void *data)
562 int *longest_so_far = (int *) data;
566 /* Ignore linker created section. */
567 if (section->flags & SEC_LINKER_CREATED)
570 /* Skip sections that we are ignoring. */
571 if (! process_section_p (section))
574 name = bfd_get_section_name (abfd, section);
575 len = (int) strlen (name);
576 if (len > *longest_so_far)
577 *longest_so_far = len;
581 dump_headers (bfd *abfd)
583 /* The default width of 13 is just an arbitrary choice. */
584 int max_section_name_length = 13;
590 /* With BFD64, non-ELF returns -1 and wants always 64 bit addresses. */
591 if (bfd_get_arch_size (abfd) == 32)
597 printf (_("Sections:\n"));
600 bfd_map_over_sections (abfd, find_longest_section_name,
601 &max_section_name_length);
603 printf (_("Idx %-*s Size %-*s%-*sFile off Algn"),
604 max_section_name_length, "Name",
605 bfd_vma_width, "VMA",
606 bfd_vma_width, "LMA");
609 printf (_(" Flags"));
612 bfd_map_over_sections (abfd, dump_section_header,
613 &max_section_name_length);
617 slurp_symtab (bfd *abfd)
622 if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
628 storage = bfd_get_symtab_upper_bound (abfd);
631 non_fatal (_("failed to read symbol table from: %s"), bfd_get_filename (abfd));
632 bfd_fatal (_("error message was"));
635 sy = (asymbol **) xmalloc (storage);
637 symcount = bfd_canonicalize_symtab (abfd, sy);
639 bfd_fatal (bfd_get_filename (abfd));
643 /* Read in the dynamic symbols. */
646 slurp_dynamic_symtab (bfd *abfd)
651 storage = bfd_get_dynamic_symtab_upper_bound (abfd);
654 if (!(bfd_get_file_flags (abfd) & DYNAMIC))
656 non_fatal (_("%s: not a dynamic object"), bfd_get_filename (abfd));
662 bfd_fatal (bfd_get_filename (abfd));
665 sy = (asymbol **) xmalloc (storage);
667 dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy);
669 bfd_fatal (bfd_get_filename (abfd));
673 /* Some symbol names are significant and should be kept in the
674 table of sorted symbol names, even if they are marked as
675 debugging/section symbols. */
678 is_significant_symbol_name (const char * name)
680 return strncmp (name, ".plt", 4) == 0 || strcmp (name, ".got") == 0;
683 /* Filter out (in place) symbols that are useless for disassembly.
684 COUNT is the number of elements in SYMBOLS.
685 Return the number of useful symbols. */
688 remove_useless_symbols (asymbol **symbols, long count)
690 asymbol **in_ptr = symbols, **out_ptr = symbols;
694 asymbol *sym = *in_ptr++;
696 if (sym->name == NULL || sym->name[0] == '\0')
698 if ((sym->flags & (BSF_DEBUGGING | BSF_SECTION_SYM))
699 && ! is_significant_symbol_name (sym->name))
701 if (bfd_is_und_section (sym->section)
702 || bfd_is_com_section (sym->section))
707 return out_ptr - symbols;
710 /* Sort symbols into value order. */
713 compare_symbols (const void *ap, const void *bp)
715 const asymbol *a = * (const asymbol **) ap;
716 const asymbol *b = * (const asymbol **) bp;
726 if (bfd_asymbol_value (a) > bfd_asymbol_value (b))
728 else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
731 if (a->section > b->section)
733 else if (a->section < b->section)
736 an = bfd_asymbol_name (a);
737 bn = bfd_asymbol_name (b);
741 /* The symbols gnu_compiled and gcc2_compiled convey no real
742 information, so put them after other symbols with the same value. */
743 af = (strstr (an, "gnu_compiled") != NULL
744 || strstr (an, "gcc2_compiled") != NULL);
745 bf = (strstr (bn, "gnu_compiled") != NULL
746 || strstr (bn, "gcc2_compiled") != NULL);
753 /* We use a heuristic for the file name, to try to sort it after
754 more useful symbols. It may not work on non Unix systems, but it
755 doesn't really matter; the only difference is precisely which
756 symbol names get printed. */
758 #define file_symbol(s, sn, snl) \
759 (((s)->flags & BSF_FILE) != 0 \
760 || ((sn)[(snl) - 2] == '.' \
761 && ((sn)[(snl) - 1] == 'o' \
762 || (sn)[(snl) - 1] == 'a')))
764 af = file_symbol (a, an, anl);
765 bf = file_symbol (b, bn, bnl);
772 /* Try to sort global symbols before local symbols before function
773 symbols before debugging symbols. */
778 if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))
780 if ((aflags & BSF_DEBUGGING) != 0)
785 if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
787 if ((aflags & BSF_FUNCTION) != 0)
792 if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
794 if ((aflags & BSF_LOCAL) != 0)
799 if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL))
801 if ((aflags & BSF_GLOBAL) != 0)
807 if (bfd_get_flavour (bfd_asymbol_bfd (a)) == bfd_target_elf_flavour
808 && bfd_get_flavour (bfd_asymbol_bfd (b)) == bfd_target_elf_flavour)
813 if ((a->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0)
814 asz = ((elf_symbol_type *) a)->internal_elf_sym.st_size;
816 if ((b->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0)
817 bsz = ((elf_symbol_type *) b)->internal_elf_sym.st_size;
819 return asz > bsz ? -1 : 1;
822 /* Symbols that start with '.' might be section names, so sort them
823 after symbols that don't start with '.'. */
824 if (an[0] == '.' && bn[0] != '.')
826 if (an[0] != '.' && bn[0] == '.')
829 /* Finally, if we can't distinguish them in any other way, try to
830 get consistent results by sorting the symbols by name. */
831 return strcmp (an, bn);
834 /* Sort relocs into address order. */
837 compare_relocs (const void *ap, const void *bp)
839 const arelent *a = * (const arelent **) ap;
840 const arelent *b = * (const arelent **) bp;
842 if (a->address > b->address)
844 else if (a->address < b->address)
847 /* So that associated relocations tied to the same address show up
848 in the correct order, we don't do any further sorting. */
857 /* Print an address (VMA) to the output stream in INFO.
858 If SKIP_ZEROES is TRUE, omit leading zeroes. */
861 objdump_print_value (bfd_vma vma, struct disassemble_info *inf,
862 bfd_boolean skip_zeroes)
866 struct objdump_disasm_info *aux;
868 aux = (struct objdump_disasm_info *) inf->application_data;
869 bfd_sprintf_vma (aux->abfd, buf, vma);
874 for (p = buf; *p == '0'; ++p)
879 (*inf->fprintf_func) (inf->stream, "%s", p);
882 /* Print the name of a symbol. */
885 objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
889 const char *name, *version_string = NULL;
890 bfd_boolean hidden = FALSE;
893 name = bfd_asymbol_name (sym);
894 if (do_demangle && name[0] != '\0')
896 /* Demangle the name. */
897 alloc = bfd_demangle (abfd, name, demangle_flags);
902 if ((sym->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0)
903 version_string = bfd_get_symbol_version_string (abfd, sym, &hidden);
905 if (bfd_is_und_section (bfd_get_section (sym)))
910 (*inf->fprintf_func) (inf->stream, "%s", name);
911 if (version_string && *version_string != '\0')
912 (*inf->fprintf_func) (inf->stream, hidden ? "@%s" : "@@%s",
918 if (version_string && *version_string != '\0')
919 printf (hidden ? "@%s" : "@@%s", version_string);
926 /* Locate a symbol given a bfd and a section (from INFO->application_data),
927 and a VMA. If INFO->application_data->require_sec is TRUE, then always
928 require the symbol to be in the section. Returns NULL if there is no
929 suitable symbol. If PLACE is not NULL, then *PLACE is set to the index
930 of the symbol in sorted_syms. */
933 find_symbol_for_address (bfd_vma vma,
934 struct disassemble_info *inf,
937 /* @@ Would it speed things up to cache the last two symbols returned,
938 and maybe their address ranges? For many processors, only one memory
939 operand can be present at a time, so the 2-entry cache wouldn't be
940 constantly churned by code doing heavy memory accesses. */
942 /* Indices in `sorted_syms'. */
944 long max_count = sorted_symcount;
946 struct objdump_disasm_info *aux;
950 bfd_boolean want_section;
953 if (sorted_symcount < 1)
956 aux = (struct objdump_disasm_info *) inf->application_data;
959 opb = inf->octets_per_byte;
961 /* Perform a binary search looking for the closest symbol to the
962 required value. We are searching the range (min, max_count]. */
963 while (min + 1 < max_count)
967 thisplace = (max_count + min) / 2;
968 sym = sorted_syms[thisplace];
970 if (bfd_asymbol_value (sym) > vma)
971 max_count = thisplace;
972 else if (bfd_asymbol_value (sym) < vma)
981 /* The symbol we want is now in min, the low end of the range we
982 were searching. If there are several symbols with the same
983 value, we want the first (non-section/non-debugging) one. */
986 && (bfd_asymbol_value (sorted_syms[thisplace])
987 == bfd_asymbol_value (sorted_syms[thisplace - 1]))
988 && ((sorted_syms[thisplace - 1]->flags
989 & (BSF_SECTION_SYM | BSF_DEBUGGING)) == 0)
993 /* Prefer a symbol in the current section if we have multple symbols
994 with the same value, as can occur with overlays or zero size
997 while (min < max_count
998 && (bfd_asymbol_value (sorted_syms[min])
999 == bfd_asymbol_value (sorted_syms[thisplace])))
1001 if (sorted_syms[min]->section == sec
1002 && inf->symbol_is_valid (sorted_syms[min], inf))
1009 return sorted_syms[thisplace];
1014 /* If the file is relocatable, and the symbol could be from this
1015 section, prefer a symbol from this section over symbols from
1016 others, even if the other symbol's value might be closer.
1018 Note that this may be wrong for some symbol references if the
1019 sections have overlapping memory ranges, but in that case there's
1020 no way to tell what's desired without looking at the relocation
1023 Also give the target a chance to reject symbols. */
1024 want_section = (aux->require_sec
1025 || ((abfd->flags & HAS_RELOC) != 0
1026 && vma >= bfd_get_section_vma (abfd, sec)
1027 && vma < (bfd_get_section_vma (abfd, sec)
1028 + bfd_section_size (abfd, sec) / opb)));
1029 if ((sorted_syms[thisplace]->section != sec && want_section)
1030 || ! inf->symbol_is_valid (sorted_syms[thisplace], inf))
1033 long newplace = sorted_symcount;
1035 for (i = min - 1; i >= 0; i--)
1037 if ((sorted_syms[i]->section == sec || !want_section)
1038 && inf->symbol_is_valid (sorted_syms[i], inf))
1040 if (newplace == sorted_symcount)
1043 if (bfd_asymbol_value (sorted_syms[i])
1044 != bfd_asymbol_value (sorted_syms[newplace]))
1047 /* Remember this symbol and keep searching until we reach
1048 an earlier address. */
1053 if (newplace != sorted_symcount)
1054 thisplace = newplace;
1057 /* We didn't find a good symbol with a smaller value.
1058 Look for one with a larger value. */
1059 for (i = thisplace + 1; i < sorted_symcount; i++)
1061 if ((sorted_syms[i]->section == sec || !want_section)
1062 && inf->symbol_is_valid (sorted_syms[i], inf))
1070 if ((sorted_syms[thisplace]->section != sec && want_section)
1071 || ! inf->symbol_is_valid (sorted_syms[thisplace], inf))
1072 /* There is no suitable symbol. */
1076 /* If we have not found an exact match for the specified address
1077 and we have dynamic relocations available, then we can produce
1078 a better result by matching a relocation to the address and
1079 using the symbol associated with that relocation. */
1080 rel_count = aux->dynrelcount;
1082 && sorted_syms[thisplace]->value != vma
1084 && aux->dynrelbuf != NULL
1085 && aux->dynrelbuf[0]->address <= vma
1086 && aux->dynrelbuf[rel_count - 1]->address >= vma
1087 /* If we have matched a synthetic symbol, then stick with that. */
1088 && (sorted_syms[thisplace]->flags & BSF_SYNTHETIC) == 0)
1091 arelent ** rel_high;
1093 rel_low = aux->dynrelbuf;
1094 rel_high = rel_low + rel_count - 1;
1095 while (rel_low <= rel_high)
1097 arelent **rel_mid = &rel_low[(rel_high - rel_low) / 2];
1098 arelent * rel = *rel_mid;
1100 if (rel->address == vma)
1102 /* Absolute relocations do not provide a more helpful
1103 symbolic address. Find a non-absolute relocation
1104 with the same address. */
1105 arelent **rel_vma = rel_mid;
1107 rel_mid >= rel_low && rel_mid[0]->address == vma;
1111 for (; rel_vma <= rel_high && rel_vma[0]->address == vma;
1115 if (rel->sym_ptr_ptr != NULL
1116 && ! bfd_is_abs_section ((* rel->sym_ptr_ptr)->section))
1119 * place = thisplace;
1120 return * rel->sym_ptr_ptr;
1126 if (vma < rel->address)
1128 else if (vma >= rel_mid[1]->address)
1129 rel_low = rel_mid + 1;
1138 return sorted_syms[thisplace];
1141 /* Print an address and the offset to the nearest symbol. */
1144 objdump_print_addr_with_sym (bfd *abfd, asection *sec, asymbol *sym,
1145 bfd_vma vma, struct disassemble_info *inf,
1146 bfd_boolean skip_zeroes)
1148 objdump_print_value (vma, inf, skip_zeroes);
1154 (*inf->fprintf_func) (inf->stream, " <%s",
1155 bfd_get_section_name (abfd, sec));
1156 secaddr = bfd_get_section_vma (abfd, sec);
1159 (*inf->fprintf_func) (inf->stream, "-0x");
1160 objdump_print_value (secaddr - vma, inf, TRUE);
1162 else if (vma > secaddr)
1164 (*inf->fprintf_func) (inf->stream, "+0x");
1165 objdump_print_value (vma - secaddr, inf, TRUE);
1167 (*inf->fprintf_func) (inf->stream, ">");
1171 (*inf->fprintf_func) (inf->stream, " <");
1173 objdump_print_symname (abfd, inf, sym);
1175 if (bfd_asymbol_value (sym) == vma)
1177 /* Undefined symbols in an executables and dynamic objects do not have
1178 a value associated with them, so it does not make sense to display
1179 an offset relative to them. Normally we would not be provided with
1180 this kind of symbol, but the target backend might choose to do so,
1181 and the code in find_symbol_for_address might return an as yet
1182 unresolved symbol associated with a dynamic reloc. */
1183 else if ((bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC))
1184 && bfd_is_und_section (sym->section))
1186 else if (bfd_asymbol_value (sym) > vma)
1188 (*inf->fprintf_func) (inf->stream, "-0x");
1189 objdump_print_value (bfd_asymbol_value (sym) - vma, inf, TRUE);
1191 else if (vma > bfd_asymbol_value (sym))
1193 (*inf->fprintf_func) (inf->stream, "+0x");
1194 objdump_print_value (vma - bfd_asymbol_value (sym), inf, TRUE);
1197 (*inf->fprintf_func) (inf->stream, ">");
1200 if (display_file_offsets)
1201 inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
1202 (long int)(sec->filepos + (vma - sec->vma)));
1205 /* Print an address (VMA), symbolically if possible.
1206 If SKIP_ZEROES is TRUE, don't output leading zeroes. */
1209 objdump_print_addr (bfd_vma vma,
1210 struct disassemble_info *inf,
1211 bfd_boolean skip_zeroes)
1213 struct objdump_disasm_info *aux;
1214 asymbol *sym = NULL;
1215 bfd_boolean skip_find = FALSE;
1217 aux = (struct objdump_disasm_info *) inf->application_data;
1219 if (sorted_symcount < 1)
1221 (*inf->fprintf_func) (inf->stream, "0x");
1222 objdump_print_value (vma, inf, skip_zeroes);
1224 if (display_file_offsets)
1225 inf->fprintf_func (inf->stream, _(" (File Offset: 0x%lx)"),
1226 (long int)(aux->sec->filepos + (vma - aux->sec->vma)));
1230 if (aux->reloc != NULL
1231 && aux->reloc->sym_ptr_ptr != NULL
1232 && * aux->reloc->sym_ptr_ptr != NULL)
1234 sym = * aux->reloc->sym_ptr_ptr;
1236 /* Adjust the vma to the reloc. */
1237 vma += bfd_asymbol_value (sym);
1239 if (bfd_is_und_section (bfd_get_section (sym)))
1244 sym = find_symbol_for_address (vma, inf, NULL);
1246 objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, inf,
1250 /* Print VMA to INFO. This function is passed to the disassembler
1254 objdump_print_address (bfd_vma vma, struct disassemble_info *inf)
1256 objdump_print_addr (vma, inf, ! prefix_addresses);
1259 /* Determine if the given address has a symbol associated with it. */
1262 objdump_symbol_at_address (bfd_vma vma, struct disassemble_info * inf)
1266 sym = find_symbol_for_address (vma, inf, NULL);
1268 return (sym != NULL && (bfd_asymbol_value (sym) == vma));
1271 /* Hold the last function name and the last line number we displayed
1272 in a disassembly. */
1274 static char *prev_functionname;
1275 static unsigned int prev_line;
1276 static unsigned int prev_discriminator;
1278 /* We keep a list of all files that we have seen when doing a
1279 disassembly with source, so that we know how much of the file to
1280 display. This can be important for inlined functions. */
1282 struct print_file_list
1284 struct print_file_list *next;
1285 const char *filename;
1286 const char *modname;
1289 const char **linemap;
1292 unsigned max_printed;
1296 static struct print_file_list *print_files;
1298 /* The number of preceding context lines to show when we start
1299 displaying a file for the first time. */
1301 #define SHOW_PRECEDING_CONTEXT_LINES (5)
1303 /* Read a complete file into memory. */
1306 slurp_file (const char *fn, size_t *size, struct stat *fst)
1309 int ps = getpagesize ();
1313 int fd = open (fn, O_RDONLY | O_BINARY);
1317 if (fstat (fd, fst) < 0)
1322 *size = fst->st_size;
1324 msize = (*size + ps - 1) & ~(ps - 1);
1325 map = mmap (NULL, msize, PROT_READ, MAP_SHARED, fd, 0);
1326 if (map != (char *) -1L)
1332 map = (const char *) malloc (*size);
1333 if (!map || (size_t) read (fd, (char *) map, *size) != *size)
1335 free ((void *) map);
1342 #define line_map_decrease 5
1344 /* Precompute array of lines for a mapped file. */
1346 static const char **
1347 index_file (const char *map, size_t size, unsigned int *maxline)
1349 const char *p, *lstart, *end;
1350 int chars_per_line = 45; /* First iteration will use 40. */
1351 unsigned int lineno;
1352 const char **linemap = NULL;
1353 unsigned long line_map_size = 0;
1359 for (p = map; p < end; p++)
1363 if (p + 1 < end && p[1] == '\r')
1366 else if (*p == '\r')
1368 if (p + 1 < end && p[1] == '\n')
1374 /* End of line found. */
1376 if (linemap == NULL || line_map_size < lineno + 1)
1378 unsigned long newsize;
1380 chars_per_line -= line_map_decrease;
1381 if (chars_per_line <= 1)
1383 line_map_size = size / chars_per_line + 1;
1384 if (line_map_size < lineno + 1)
1385 line_map_size = lineno + 1;
1386 newsize = line_map_size * sizeof (char *);
1387 linemap = (const char **) xrealloc (linemap, newsize);
1390 linemap[lineno++] = lstart;
1398 /* Tries to open MODNAME, and if successful adds a node to print_files
1399 linked list and returns that node. Returns NULL on failure. */
1401 static struct print_file_list *
1402 try_print_file_open (const char *origname, const char *modname, struct stat *fst)
1404 struct print_file_list *p;
1406 p = (struct print_file_list *) xmalloc (sizeof (struct print_file_list));
1408 p->map = slurp_file (modname, &p->mapsize, fst);
1415 p->linemap = index_file (p->map, p->mapsize, &p->maxline);
1418 p->filename = origname;
1419 p->modname = modname;
1420 p->next = print_files;
1426 /* If the source file, as described in the symtab, is not found
1427 try to locate it in one of the paths specified with -I
1428 If found, add location to print_files linked list. */
1430 static struct print_file_list *
1431 update_source_path (const char *filename, bfd *abfd)
1433 struct print_file_list *p;
1438 p = try_print_file_open (filename, filename, &fst);
1441 if (include_path_count == 0)
1444 /* Get the name of the file. */
1445 fname = lbasename (filename);
1447 /* If file exists under a new path, we need to add it to the list
1448 so that show_line knows about it. */
1449 for (i = 0; i < include_path_count; i++)
1451 char *modname = concat (include_paths[i], "/", fname,
1454 p = try_print_file_open (filename, modname, &fst);
1464 long mtime = bfd_get_mtime (abfd);
1466 if (fst.st_mtime > mtime)
1467 warn (_("source file %s is more recent than object file\n"),
1474 /* Print a source file line. */
1477 print_line (struct print_file_list *p, unsigned int linenum)
1483 if (linenum >= p->maxline)
1485 l = p->linemap [linenum];
1486 /* Test fwrite return value to quiet glibc warning. */
1487 len = strcspn (l, "\n\r");
1488 if (len == 0 || fwrite (l, len, 1, stdout) == 1)
1492 /* Print a range of source code lines. */
1495 dump_lines (struct print_file_list *p, unsigned int start, unsigned int end)
1499 while (start <= end)
1501 print_line (p, start);
1506 /* Show the line number, or the source line, in a disassembly
1510 show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
1512 const char *filename;
1513 const char *functionname;
1514 unsigned int linenumber;
1515 unsigned int discriminator;
1519 if (! with_line_numbers && ! with_source_code)
1522 if (! bfd_find_nearest_line_discriminator (abfd, section, syms, addr_offset,
1523 &filename, &functionname,
1524 &linenumber, &discriminator))
1527 if (filename != NULL && *filename == '\0')
1529 if (functionname != NULL && *functionname == '\0')
1530 functionname = NULL;
1533 && IS_ABSOLUTE_PATH (filename)
1537 const char *fname = filename;
1539 path = xmalloc (prefix_length + PATH_MAX + 1);
1542 memcpy (path, prefix, prefix_length);
1543 path_up = path + prefix_length;
1545 /* Build relocated filename, stripping off leading directories
1546 from the initial filename if requested. */
1547 if (prefix_strip > 0)
1552 /* Skip selected directory levels. */
1553 for (s = fname + 1; *s != '\0' && level < prefix_strip; s++)
1554 if (IS_DIR_SEPARATOR(*s))
1561 /* Update complete filename. */
1562 strncpy (path_up, fname, PATH_MAX);
1563 path_up[PATH_MAX] = '\0';
1571 if (with_line_numbers)
1573 if (functionname != NULL
1574 && (prev_functionname == NULL
1575 || strcmp (functionname, prev_functionname) != 0))
1577 printf ("%s():\n", functionname);
1581 && (linenumber != prev_line
1582 || discriminator != prev_discriminator))
1584 if (discriminator > 0)
1585 printf ("%s:%u (discriminator %u)\n",
1586 filename == NULL ? "???" : filename,
1587 linenumber, discriminator);
1589 printf ("%s:%u\n", filename == NULL ? "???" : filename,
1594 const char *filename2;
1595 const char *functionname2;
1598 while (bfd_find_inliner_info (abfd, &filename2, &functionname2,
1600 printf ("inlined by %s:%u (%s)\n", filename2, line2,
1605 if (with_source_code
1609 struct print_file_list **pp, *p;
1612 for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
1613 if (filename_cmp ((*pp)->filename, filename) == 0)
1620 filename = xstrdup (filename);
1621 p = update_source_path (filename, abfd);
1624 if (p != NULL && linenumber != p->last_line)
1626 if (file_start_context && p->first)
1630 l = linenumber - SHOW_PRECEDING_CONTEXT_LINES;
1631 if (l >= linenumber)
1633 if (p->max_printed >= l)
1635 if (p->max_printed < linenumber)
1636 l = p->max_printed + 1;
1641 dump_lines (p, l, linenumber);
1642 if (p->max_printed < linenumber)
1643 p->max_printed = linenumber;
1644 p->last_line = linenumber;
1649 if (functionname != NULL
1650 && (prev_functionname == NULL
1651 || strcmp (functionname, prev_functionname) != 0))
1653 if (prev_functionname != NULL)
1654 free (prev_functionname);
1655 prev_functionname = (char *) xmalloc (strlen (functionname) + 1);
1656 strcpy (prev_functionname, functionname);
1659 if (linenumber > 0 && linenumber != prev_line)
1660 prev_line = linenumber;
1662 if (discriminator != prev_discriminator)
1663 prev_discriminator = discriminator;
1669 /* Pseudo FILE object for strings. */
1677 /* sprintf to a "stream". */
1679 static int ATTRIBUTE_PRINTF_2
1680 objdump_sprintf (SFILE *f, const char *format, ...)
1687 size_t space = f->alloc - f->pos;
1689 va_start (args, format);
1690 n = vsnprintf (f->buffer + f->pos, space, format, args);
1696 f->alloc = (f->alloc + n) * 2;
1697 f->buffer = (char *) xrealloc (f->buffer, f->alloc);
1704 /* The number of zeroes we want to see before we start skipping them.
1705 The number is arbitrarily chosen. */
1707 #define DEFAULT_SKIP_ZEROES 8
1709 /* The number of zeroes to skip at the end of a section. If the
1710 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1711 SKIP_ZEROES, they will be disassembled. If there are fewer than
1712 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1713 attempt to avoid disassembling zeroes inserted by section
1716 #define DEFAULT_SKIP_ZEROES_AT_END 3
1718 /* Disassemble some data in memory between given values. */
1721 disassemble_bytes (struct disassemble_info * inf,
1722 disassembler_ftype disassemble_fn,
1725 bfd_vma start_offset,
1726 bfd_vma stop_offset,
1729 arelent ** relppend)
1731 struct objdump_disasm_info *aux;
1733 int octets_per_line;
1734 int skip_addr_chars;
1735 bfd_vma addr_offset;
1736 unsigned int opb = inf->octets_per_byte;
1737 unsigned int skip_zeroes = inf->skip_zeroes;
1738 unsigned int skip_zeroes_at_end = inf->skip_zeroes_at_end;
1742 aux = (struct objdump_disasm_info *) inf->application_data;
1746 sfile.buffer = (char *) xmalloc (sfile.alloc);
1750 octets_per_line = insn_width;
1752 octets_per_line = 4;
1754 octets_per_line = 16;
1756 /* Figure out how many characters to skip at the start of an
1757 address, to make the disassembly look nicer. We discard leading
1758 zeroes in chunks of 4, ensuring that there is always a leading
1760 skip_addr_chars = 0;
1761 if (! prefix_addresses)
1765 bfd_sprintf_vma (aux->abfd, buf, section->vma + section->size / opb);
1767 while (buf[skip_addr_chars] == '0')
1770 /* Don't discard zeros on overflow. */
1771 if (buf[skip_addr_chars] == '\0' && section->vma != 0)
1772 skip_addr_chars = 0;
1774 if (skip_addr_chars != 0)
1775 skip_addr_chars = (skip_addr_chars - 1) & -4;
1778 inf->insn_info_valid = 0;
1780 addr_offset = start_offset;
1781 while (addr_offset < stop_offset)
1784 bfd_boolean need_nl = FALSE;
1785 int previous_octets;
1787 /* Remember the length of the previous instruction. */
1788 previous_octets = octets;
1791 /* Make sure we don't use relocs from previous instructions. */
1794 /* If we see more than SKIP_ZEROES octets of zeroes, we just
1796 for (z = addr_offset * opb; z < stop_offset * opb; z++)
1799 if (! disassemble_zeroes
1800 && (inf->insn_info_valid == 0
1801 || inf->branch_delay_insns == 0)
1802 && (z - addr_offset * opb >= skip_zeroes
1803 || (z == stop_offset * opb &&
1804 z - addr_offset * opb < skip_zeroes_at_end)))
1806 /* If there are more nonzero octets to follow, we only skip
1807 zeroes in multiples of 4, to try to avoid running over
1808 the start of an instruction which happens to start with
1810 if (z != stop_offset * opb)
1811 z = addr_offset * opb + ((z - addr_offset * opb) &~ 3);
1813 octets = z - addr_offset * opb;
1815 /* If we are going to display more data, and we are displaying
1816 file offsets, then tell the user how many zeroes we skip
1817 and the file offset from where we resume dumping. */
1818 if (display_file_offsets && ((addr_offset + (octets / opb)) < stop_offset))
1819 printf ("\t... (skipping %d zeroes, resuming at file offset: 0x%lx)\n",
1821 (unsigned long) (section->filepos
1822 + (addr_offset + (octets / opb))));
1832 if (with_line_numbers || with_source_code)
1833 show_line (aux->abfd, section, addr_offset);
1835 if (! prefix_addresses)
1839 bfd_sprintf_vma (aux->abfd, buf, section->vma + addr_offset);
1840 for (s = buf + skip_addr_chars; *s == '0'; s++)
1844 printf ("%s:\t", buf + skip_addr_chars);
1848 aux->require_sec = TRUE;
1849 objdump_print_address (section->vma + addr_offset, inf);
1850 aux->require_sec = FALSE;
1857 inf->fprintf_func = (fprintf_ftype) objdump_sprintf;
1858 inf->stream = &sfile;
1859 inf->bytes_per_line = 0;
1860 inf->bytes_per_chunk = 0;
1861 inf->flags = disassemble_all ? DISASSEMBLE_DATA : 0;
1863 inf->flags |= USER_SPECIFIED_MACHINE_TYPE;
1865 if (inf->disassembler_needs_relocs
1866 && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
1867 && (bfd_get_file_flags (aux->abfd) & DYNAMIC) == 0
1868 && *relppp < relppend)
1870 bfd_signed_vma distance_to_rel;
1872 distance_to_rel = (**relppp)->address
1873 - (rel_offset + addr_offset);
1875 /* Check to see if the current reloc is associated with
1876 the instruction that we are about to disassemble. */
1877 if (distance_to_rel == 0
1878 /* FIXME: This is wrong. We are trying to catch
1879 relocs that are addressed part way through the
1880 current instruction, as might happen with a packed
1881 VLIW instruction. Unfortunately we do not know the
1882 length of the current instruction since we have not
1883 disassembled it yet. Instead we take a guess based
1884 upon the length of the previous instruction. The
1885 proper solution is to have a new target-specific
1886 disassembler function which just returns the length
1887 of an instruction at a given address without trying
1888 to display its disassembly. */
1889 || (distance_to_rel > 0
1890 && distance_to_rel < (bfd_signed_vma) (previous_octets/ opb)))
1892 inf->flags |= INSN_HAS_RELOC;
1893 aux->reloc = **relppp;
1897 if (! disassemble_all
1898 && (section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
1899 == (SEC_CODE | SEC_HAS_CONTENTS))
1900 /* Set a stop_vma so that the disassembler will not read
1901 beyond the next symbol. We assume that symbols appear on
1902 the boundaries between instructions. We only do this when
1903 disassembling code of course, and when -D is in effect. */
1904 inf->stop_vma = section->vma + stop_offset;
1906 octets = (*disassemble_fn) (section->vma + addr_offset, inf);
1909 inf->fprintf_func = (fprintf_ftype) fprintf;
1910 inf->stream = stdout;
1911 if (insn_width == 0 && inf->bytes_per_line != 0)
1912 octets_per_line = inf->bytes_per_line;
1913 if (octets < (int) opb)
1916 printf ("%s\n", sfile.buffer);
1919 non_fatal (_("disassemble_fn returned length %d"),
1930 octets = octets_per_line;
1931 if (addr_offset + octets / opb > stop_offset)
1932 octets = (stop_offset - addr_offset) * opb;
1934 for (j = addr_offset * opb; j < addr_offset * opb + octets; ++j)
1936 if (ISPRINT (data[j]))
1937 buf[j - addr_offset * opb] = data[j];
1939 buf[j - addr_offset * opb] = '.';
1941 buf[j - addr_offset * opb] = '\0';
1944 if (prefix_addresses
1946 : show_raw_insn >= 0)
1950 /* If ! prefix_addresses and ! wide_output, we print
1951 octets_per_line octets per line. */
1953 if (pb > octets_per_line && ! prefix_addresses && ! wide_output)
1954 pb = octets_per_line;
1956 if (inf->bytes_per_chunk)
1957 bpc = inf->bytes_per_chunk;
1961 for (j = addr_offset * opb; j < addr_offset * opb + pb; j += bpc)
1963 /* PR 21580: Check for a buffer ending early. */
1964 if (j + bpc <= stop_offset * opb)
1968 if (inf->display_endian == BFD_ENDIAN_LITTLE)
1970 for (k = bpc - 1; k >= 0; k--)
1971 printf ("%02x", (unsigned) data[j + k]);
1975 for (k = 0; k < bpc; k++)
1976 printf ("%02x", (unsigned) data[j + k]);
1982 for (; pb < octets_per_line; pb += bpc)
1986 for (k = 0; k < bpc; k++)
1991 /* Separate raw data from instruction by extra space. */
2001 printf ("%s", sfile.buffer);
2003 if (prefix_addresses
2005 : show_raw_insn >= 0)
2013 j = addr_offset * opb + pb;
2015 bfd_sprintf_vma (aux->abfd, buf, section->vma + j / opb);
2016 for (s = buf + skip_addr_chars; *s == '0'; s++)
2020 printf ("%s:\t", buf + skip_addr_chars);
2022 pb += octets_per_line;
2025 for (; j < addr_offset * opb + pb; j += bpc)
2027 /* PR 21619: Check for a buffer ending early. */
2028 if (j + bpc <= stop_offset * opb)
2032 if (inf->display_endian == BFD_ENDIAN_LITTLE)
2034 for (k = bpc - 1; k >= 0; k--)
2035 printf ("%02x", (unsigned) data[j + k]);
2039 for (k = 0; k < bpc; k++)
2040 printf ("%02x", (unsigned) data[j + k]);
2054 while ((*relppp) < relppend
2055 && (**relppp)->address < rel_offset + addr_offset + octets / opb)
2057 if (dump_reloc_info || dump_dynamic_reloc_info)
2068 objdump_print_value (section->vma - rel_offset + q->address,
2071 if (q->howto == NULL)
2072 printf (": *unknown*\t");
2073 else if (q->howto->name)
2074 printf (": %s\t", q->howto->name);
2076 printf (": %d\t", q->howto->type);
2078 if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
2079 printf ("*unknown*");
2082 const char *sym_name;
2084 sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
2085 if (sym_name != NULL && *sym_name != '\0')
2086 objdump_print_symname (aux->abfd, inf, *q->sym_ptr_ptr);
2091 sym_sec = bfd_get_section (*q->sym_ptr_ptr);
2092 sym_name = bfd_get_section_name (aux->abfd, sym_sec);
2093 if (sym_name == NULL || *sym_name == '\0')
2094 sym_name = "*unknown*";
2095 printf ("%s", sym_name);
2101 bfd_signed_vma addend = q->addend;
2109 objdump_print_value (addend, inf, TRUE);
2121 addr_offset += octets / opb;
2124 free (sfile.buffer);
2128 disassemble_section (bfd *abfd, asection *section, void *inf)
2130 const struct elf_backend_data * bed;
2131 bfd_vma sign_adjust = 0;
2132 struct disassemble_info * pinfo = (struct disassemble_info *) inf;
2133 struct objdump_disasm_info * paux;
2134 unsigned int opb = pinfo->octets_per_byte;
2135 bfd_byte * data = NULL;
2136 bfd_size_type datasize = 0;
2137 arelent ** rel_pp = NULL;
2138 arelent ** rel_ppstart = NULL;
2139 arelent ** rel_ppend;
2140 bfd_vma stop_offset;
2141 asymbol * sym = NULL;
2145 unsigned long addr_offset;
2147 /* Sections that do not contain machine
2148 code are not normally disassembled. */
2149 if (! disassemble_all
2150 && only_list == NULL
2151 && ((section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
2152 != (SEC_CODE | SEC_HAS_CONTENTS)))
2155 if (! process_section_p (section))
2158 datasize = bfd_get_section_size (section);
2162 if (start_address == (bfd_vma) -1
2163 || start_address < section->vma)
2166 addr_offset = start_address - section->vma;
2168 if (stop_address == (bfd_vma) -1)
2169 stop_offset = datasize / opb;
2172 if (stop_address < section->vma)
2175 stop_offset = stop_address - section->vma;
2176 if (stop_offset > datasize / opb)
2177 stop_offset = datasize / opb;
2180 if (addr_offset >= stop_offset)
2183 /* Decide which set of relocs to use. Load them if necessary. */
2184 paux = (struct objdump_disasm_info *) pinfo->application_data;
2185 if (paux->dynrelbuf && dump_dynamic_reloc_info)
2187 rel_pp = paux->dynrelbuf;
2188 rel_count = paux->dynrelcount;
2189 /* Dynamic reloc addresses are absolute, non-dynamic are section
2190 relative. REL_OFFSET specifies the reloc address corresponding
2191 to the start of this section. */
2192 rel_offset = section->vma;
2200 if ((section->flags & SEC_RELOC) != 0
2201 && (dump_reloc_info || pinfo->disassembler_needs_relocs))
2205 relsize = bfd_get_reloc_upper_bound (abfd, section);
2207 bfd_fatal (bfd_get_filename (abfd));
2211 rel_ppstart = rel_pp = (arelent **) xmalloc (relsize);
2212 rel_count = bfd_canonicalize_reloc (abfd, section, rel_pp, syms);
2214 bfd_fatal (bfd_get_filename (abfd));
2216 /* Sort the relocs by address. */
2217 qsort (rel_pp, rel_count, sizeof (arelent *), compare_relocs);
2221 rel_ppend = rel_pp + rel_count;
2223 if (!bfd_malloc_and_get_section (abfd, section, &data))
2225 non_fatal (_("Reading section %s failed because: %s"),
2226 section->name, bfd_errmsg (bfd_get_error ()));
2230 paux->sec = section;
2231 pinfo->buffer = data;
2232 pinfo->buffer_vma = section->vma;
2233 pinfo->buffer_length = datasize;
2234 pinfo->section = section;
2236 /* Skip over the relocs belonging to addresses below the
2238 while (rel_pp < rel_ppend
2239 && (*rel_pp)->address < rel_offset + addr_offset)
2242 printf (_("\nDisassembly of section %s:\n"), section->name);
2244 /* Find the nearest symbol forwards from our current position. */
2245 paux->require_sec = TRUE;
2246 sym = (asymbol *) find_symbol_for_address (section->vma + addr_offset,
2247 (struct disassemble_info *) inf,
2249 paux->require_sec = FALSE;
2251 /* PR 9774: If the target used signed addresses then we must make
2252 sure that we sign extend the value that we calculate for 'addr'
2253 in the loop below. */
2254 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2255 && (bed = get_elf_backend_data (abfd)) != NULL
2256 && bed->sign_extend_vma)
2257 sign_adjust = (bfd_vma) 1 << (bed->s->arch_size - 1);
2259 /* Disassemble a block of instructions up to the address associated with
2260 the symbol we have just found. Then print the symbol and find the
2261 next symbol on. Repeat until we have disassembled the entire section
2262 or we have reached the end of the address range we are interested in. */
2263 while (addr_offset < stop_offset)
2267 bfd_vma nextstop_offset;
2269 bfd_boolean do_print = TRUE;
2271 addr = section->vma + addr_offset;
2272 addr = ((addr & ((sign_adjust << 1) - 1)) ^ sign_adjust) - sign_adjust;
2274 if (sym != NULL && bfd_asymbol_value (sym) <= addr)
2279 (x < sorted_symcount
2280 && (bfd_asymbol_value (sorted_syms[x]) <= addr));
2284 pinfo->symbols = sorted_syms + place;
2285 pinfo->num_symbols = x - place;
2286 pinfo->symtab_pos = place;
2290 pinfo->symbols = NULL;
2291 pinfo->num_symbols = 0;
2292 pinfo->symtab_pos = -1;
2295 if (sym && paux->symbol)
2297 const char *name = bfd_asymbol_name (sym);
2300 if (do_demangle && name[0] != '\0')
2302 /* Demangle the name. */
2303 alloc = bfd_demangle (abfd, name, demangle_flags);
2307 do_print = streq (name, paux->symbol);
2311 if (! prefix_addresses && do_print)
2313 pinfo->fprintf_func (pinfo->stream, "\n");
2314 objdump_print_addr_with_sym (abfd, section, sym, addr,
2316 pinfo->fprintf_func (pinfo->stream, ":\n");
2319 if (sym != NULL && bfd_asymbol_value (sym) > addr)
2321 else if (sym == NULL)
2325 #define is_valid_next_sym(SYM) \
2326 ((SYM)->section == section \
2327 && (bfd_asymbol_value (SYM) > bfd_asymbol_value (sym)) \
2328 && pinfo->symbol_is_valid (SYM, pinfo))
2330 /* Search forward for the next appropriate symbol in
2331 SECTION. Note that all the symbols are sorted
2332 together into one big array, and that some sections
2333 may have overlapping addresses. */
2334 while (place < sorted_symcount
2335 && ! is_valid_next_sym (sorted_syms [place]))
2338 if (place >= sorted_symcount)
2341 nextsym = sorted_syms[place];
2344 if (sym != NULL && bfd_asymbol_value (sym) > addr)
2345 nextstop_offset = bfd_asymbol_value (sym) - section->vma;
2346 else if (nextsym == NULL)
2347 nextstop_offset = stop_offset;
2349 nextstop_offset = bfd_asymbol_value (nextsym) - section->vma;
2351 if (nextstop_offset > stop_offset
2352 || nextstop_offset <= addr_offset)
2353 nextstop_offset = stop_offset;
2355 /* If a symbol is explicitly marked as being an object
2356 rather than a function, just dump the bytes without
2357 disassembling them. */
2360 || sym->section != section
2361 || bfd_asymbol_value (sym) > addr
2362 || ((sym->flags & BSF_OBJECT) == 0
2363 && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
2365 && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
2367 || (sym->flags & BSF_FUNCTION) != 0)
2374 disassemble_bytes (pinfo, paux->disassemble_fn, insns, data,
2375 addr_offset, nextstop_offset,
2376 rel_offset, &rel_pp, rel_ppend);
2381 addr_offset = nextstop_offset;
2387 if (rel_ppstart != NULL)
2391 /* Disassemble the contents of an object file. */
2394 disassemble_data (bfd *abfd)
2396 struct disassemble_info disasm_info;
2397 struct objdump_disasm_info aux;
2401 prev_functionname = NULL;
2403 prev_discriminator = 0;
2405 /* We make a copy of syms to sort. We don't want to sort syms
2406 because that will screw up the relocs. */
2407 sorted_symcount = symcount ? symcount : dynsymcount;
2408 sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount)
2409 * sizeof (asymbol *));
2410 memcpy (sorted_syms, symcount ? syms : dynsyms,
2411 sorted_symcount * sizeof (asymbol *));
2413 sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount);
2415 for (i = 0; i < synthcount; ++i)
2417 sorted_syms[sorted_symcount] = synthsyms + i;
2421 /* Sort the symbols into section and symbol order. */
2422 qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
2424 init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
2426 disasm_info.application_data = (void *) &aux;
2428 aux.require_sec = FALSE;
2429 aux.dynrelbuf = NULL;
2430 aux.dynrelcount = 0;
2432 aux.symbol = disasm_sym;
2434 disasm_info.print_address_func = objdump_print_address;
2435 disasm_info.symbol_at_address_func = objdump_symbol_at_address;
2437 if (machine != NULL)
2439 const bfd_arch_info_type *inf = bfd_scan_arch (machine);
2442 fatal (_("can't use supplied machine %s"), machine);
2444 abfd->arch_info = inf;
2447 if (endian != BFD_ENDIAN_UNKNOWN)
2449 struct bfd_target *xvec;
2451 xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
2452 memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
2453 xvec->byteorder = endian;
2457 /* Use libopcodes to locate a suitable disassembler. */
2458 aux.disassemble_fn = disassembler (bfd_get_arch (abfd),
2459 bfd_big_endian (abfd),
2460 bfd_get_mach (abfd), abfd);
2461 if (!aux.disassemble_fn)
2463 non_fatal (_("can't disassemble for architecture %s\n"),
2464 bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
2469 disasm_info.flavour = bfd_get_flavour (abfd);
2470 disasm_info.arch = bfd_get_arch (abfd);
2471 disasm_info.mach = bfd_get_mach (abfd);
2472 disasm_info.disassembler_options = disassembler_options;
2473 disasm_info.octets_per_byte = bfd_octets_per_byte (abfd);
2474 disasm_info.skip_zeroes = DEFAULT_SKIP_ZEROES;
2475 disasm_info.skip_zeroes_at_end = DEFAULT_SKIP_ZEROES_AT_END;
2476 disasm_info.disassembler_needs_relocs = FALSE;
2478 if (bfd_big_endian (abfd))
2479 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG;
2480 else if (bfd_little_endian (abfd))
2481 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_LITTLE;
2483 /* ??? Aborting here seems too drastic. We could default to big or little
2485 disasm_info.endian = BFD_ENDIAN_UNKNOWN;
2487 /* Allow the target to customize the info structure. */
2488 disassemble_init_for_target (& disasm_info);
2490 /* Pre-load the dynamic relocs as we may need them during the disassembly. */
2492 long relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2494 if (relsize < 0 && dump_dynamic_reloc_info)
2495 bfd_fatal (bfd_get_filename (abfd));
2499 aux.dynrelbuf = (arelent **) xmalloc (relsize);
2500 aux.dynrelcount = bfd_canonicalize_dynamic_reloc (abfd,
2503 if (aux.dynrelcount < 0)
2504 bfd_fatal (bfd_get_filename (abfd));
2506 /* Sort the relocs by address. */
2507 qsort (aux.dynrelbuf, aux.dynrelcount, sizeof (arelent *),
2511 disasm_info.symtab = sorted_syms;
2512 disasm_info.symtab_size = sorted_symcount;
2514 bfd_map_over_sections (abfd, disassemble_section, & disasm_info);
2516 if (aux.dynrelbuf != NULL)
2517 free (aux.dynrelbuf);
2522 load_specific_debug_section (enum dwarf_section_display_enum debug,
2523 asection *sec, void *file)
2525 struct dwarf_section *section = &debug_displays [debug].section;
2526 bfd *abfd = (bfd *) file;
2530 if (section->start != NULL)
2532 /* If it is already loaded, do nothing. */
2533 if (streq (section->filename, bfd_get_filename (abfd)))
2535 free (section->start);
2538 section->filename = bfd_get_filename (abfd);
2539 section->reloc_info = NULL;
2540 section->num_relocs = 0;
2541 section->address = bfd_get_section_vma (abfd, sec);
2542 section->user_data = sec;
2543 section->size = bfd_get_section_size (sec);
2544 amt = section->size + 1;
2545 if (amt == 0 || amt > bfd_get_file_size (abfd))
2547 section->start = NULL;
2548 free_debug_section (debug);
2549 printf (_("\nSection '%s' has an invalid size: %#llx.\n"),
2550 section->name, (unsigned long long) section->size);
2553 section->start = contents = malloc (amt);
2554 if (section->start == NULL
2555 || !bfd_get_full_section_contents (abfd, sec, &contents))
2557 free_debug_section (debug);
2558 printf (_("\nCan't get contents for section '%s'.\n"),
2562 /* Ensure any string section has a terminating NUL. */
2563 section->start[section->size] = 0;
2565 if (is_relocatable && debug_displays [debug].relocate)
2570 bfd_cache_section_contents (sec, section->start);
2572 ret = bfd_simple_get_relocated_section_contents (abfd,
2579 free_debug_section (debug);
2580 printf (_("\nCan't get contents for section '%s'.\n"),
2585 reloc_size = bfd_get_reloc_upper_bound (abfd, sec);
2588 unsigned long reloc_count;
2591 relocs = (arelent **) xmalloc (reloc_size);
2593 reloc_count = bfd_canonicalize_reloc (abfd, sec, relocs, NULL);
2594 if (reloc_count == 0)
2598 section->reloc_info = relocs;
2599 section->num_relocs = reloc_count;
2608 reloc_at (struct dwarf_section * dsec, dwarf_vma offset)
2613 if (dsec == NULL || dsec->reloc_info == NULL)
2616 relocs = (arelent **) dsec->reloc_info;
2618 for (; (rp = * relocs) != NULL; ++ relocs)
2619 if (rp->address == offset)
2626 load_debug_section (enum dwarf_section_display_enum debug, void *file)
2628 struct dwarf_section *section = &debug_displays [debug].section;
2629 bfd *abfd = (bfd *) file;
2632 /* If it is already loaded, do nothing. */
2633 if (section->start != NULL)
2635 if (streq (section->filename, bfd_get_filename (abfd)))
2639 /* Locate the debug section. */
2640 sec = bfd_get_section_by_name (abfd, section->uncompressed_name);
2642 section->name = section->uncompressed_name;
2645 sec = bfd_get_section_by_name (abfd, section->compressed_name);
2647 section->name = section->compressed_name;
2652 return load_specific_debug_section (debug, sec, file);
2656 free_debug_section (enum dwarf_section_display_enum debug)
2658 struct dwarf_section *section = &debug_displays [debug].section;
2660 if (section->start == NULL)
2663 /* PR 17512: file: 0f67f69d. */
2664 if (section->user_data != NULL)
2666 asection * sec = (asection *) section->user_data;
2668 /* If we are freeing contents that are also pointed to by the BFD
2669 library's section structure then make sure to update those pointers
2670 too. Otherwise, the next time we try to load data for this section
2671 we can end up using a stale pointer. */
2672 if (section->start == sec->contents)
2674 sec->contents = NULL;
2675 sec->flags &= ~ SEC_IN_MEMORY;
2676 sec->compress_status = COMPRESS_SECTION_NONE;
2680 free ((char *) section->start);
2681 section->start = NULL;
2682 section->address = 0;
2687 close_debug_file (void * file)
2689 bfd * abfd = (bfd *) file;
2695 open_debug_file (const char * pathname)
2699 data = bfd_openr (pathname, NULL);
2703 if (! bfd_check_format (data, bfd_object))
2710 dump_dwarf_section (bfd *abfd, asection *section,
2711 void *arg ATTRIBUTE_UNUSED)
2713 const char *name = bfd_get_section_name (abfd, section);
2717 if (CONST_STRNEQ (name, ".gnu.linkonce.wi."))
2718 match = ".debug_info";
2722 for (i = 0; i < max; i++)
2723 if ((strcmp (debug_displays [i].section.uncompressed_name, match) == 0
2724 || strcmp (debug_displays [i].section.compressed_name, match) == 0)
2725 && debug_displays [i].enabled != NULL
2726 && *debug_displays [i].enabled)
2728 struct dwarf_section *sec = &debug_displays [i].section;
2730 if (strcmp (sec->uncompressed_name, match) == 0)
2731 sec->name = sec->uncompressed_name;
2733 sec->name = sec->compressed_name;
2734 if (load_specific_debug_section ((enum dwarf_section_display_enum) i,
2737 debug_displays [i].display (sec, abfd);
2739 if (i != info && i != abbrev)
2740 free_debug_section ((enum dwarf_section_display_enum) i);
2746 /* Dump the dwarf debugging information. */
2749 dump_dwarf (bfd *abfd)
2753 is_relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
2755 eh_addr_size = bfd_arch_bits_per_address (abfd) / 8;
2757 if (bfd_big_endian (abfd))
2758 byte_get = byte_get_big_endian;
2759 else if (bfd_little_endian (abfd))
2760 byte_get = byte_get_little_endian;
2762 /* PR 17512: file: objdump-s-endless-loop.tekhex. */
2764 warn (_("File %s does not contain any dwarf debug information\n"),
2765 bfd_get_filename (abfd));
2769 switch (bfd_get_arch (abfd))
2772 switch (bfd_get_mach (abfd))
2774 case bfd_mach_x86_64:
2775 case bfd_mach_x86_64_intel_syntax:
2776 case bfd_mach_x86_64_nacl:
2777 case bfd_mach_x64_32:
2778 case bfd_mach_x64_32_intel_syntax:
2779 case bfd_mach_x64_32_nacl:
2780 init_dwarf_regnames_x86_64 ();
2784 init_dwarf_regnames_i386 ();
2789 case bfd_arch_iamcu:
2790 init_dwarf_regnames_iamcu ();
2793 case bfd_arch_aarch64:
2794 init_dwarf_regnames_aarch64();
2798 init_dwarf_regnames_s390 ();
2801 case bfd_arch_riscv:
2802 init_dwarf_regnames_riscv ();
2806 /* S12Z has a 24 bit address space. But the only known
2807 producer of dwarf_info encodes addresses into 32 bits. */
2815 separates = load_separate_debug_file (abfd, bfd_get_filename (abfd));
2817 bfd_map_over_sections (abfd, dump_dwarf_section, NULL);
2820 bfd_map_over_sections (separates, dump_dwarf_section, NULL);
2822 free_debug_memory ();
2825 /* Read ABFD's stabs section STABSECT_NAME, and return a pointer to
2826 it. Return NULL on failure. */
2829 read_section_stabs (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr)
2834 stabsect = bfd_get_section_by_name (abfd, sect_name);
2835 if (stabsect == NULL)
2837 printf (_("No %s section present\n\n"), sect_name);
2841 if (!bfd_malloc_and_get_section (abfd, stabsect, &contents))
2843 non_fatal (_("reading %s section of %s failed: %s"),
2844 sect_name, bfd_get_filename (abfd),
2845 bfd_errmsg (bfd_get_error ()));
2851 *size_ptr = bfd_section_size (abfd, stabsect);
2856 /* Stabs entries use a 12 byte format:
2857 4 byte string table index
2859 1 byte stab other field
2860 2 byte stab desc field
2862 FIXME: This will have to change for a 64 bit object format. */
2864 #define STRDXOFF (0)
2866 #define OTHEROFF (5)
2869 #define STABSIZE (12)
2871 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
2872 using string table section STRSECT_NAME (in `strtab'). */
2875 print_section_stabs (bfd *abfd,
2876 const char *stabsect_name,
2877 unsigned *string_offset_ptr)
2880 unsigned file_string_table_offset = 0;
2881 unsigned next_file_string_table_offset = *string_offset_ptr;
2882 bfd_byte *stabp, *stabs_end;
2885 stabs_end = stabp + stab_size;
2887 printf (_("Contents of %s section:\n\n"), stabsect_name);
2888 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
2890 /* Loop through all symbols and print them.
2892 We start the index at -1 because there is a dummy symbol on
2893 the front of stabs-in-{coff,elf} sections that supplies sizes. */
2894 for (i = -1; stabp <= stabs_end - STABSIZE; stabp += STABSIZE, i++)
2898 unsigned char type, other;
2899 unsigned short desc;
2902 strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
2903 type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
2904 other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
2905 desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
2906 value = bfd_h_get_32 (abfd, stabp + VALOFF);
2908 printf ("\n%-6d ", i);
2909 /* Either print the stab name, or, if unnamed, print its number
2910 again (makes consistent formatting for tools like awk). */
2911 name = bfd_get_stab_name (type);
2913 printf ("%-6s", name);
2914 else if (type == N_UNDF)
2917 printf ("%-6d", type);
2918 printf (" %-6d %-6d ", other, desc);
2919 bfd_printf_vma (abfd, value);
2920 printf (" %-6lu", strx);
2922 /* Symbols with type == 0 (N_UNDF) specify the length of the
2923 string table associated with this file. We use that info
2924 to know how to relocate the *next* file's string table indices. */
2927 file_string_table_offset = next_file_string_table_offset;
2928 next_file_string_table_offset += value;
2932 bfd_size_type amt = strx + file_string_table_offset;
2934 /* Using the (possibly updated) string table offset, print the
2935 string (if any) associated with this symbol. */
2936 if (amt < stabstr_size)
2937 /* PR 17512: file: 079-79389-0.001:0.1. */
2938 printf (" %.*s", (int)(stabstr_size - amt), strtab + amt);
2944 *string_offset_ptr = next_file_string_table_offset;
2949 const char * section_name;
2950 const char * string_section_name;
2951 unsigned string_offset;
2956 find_stabs_section (bfd *abfd, asection *section, void *names)
2959 stab_section_names * sought = (stab_section_names *) names;
2961 /* Check for section names for which stabsect_name is a prefix, to
2962 handle .stab.N, etc. */
2963 len = strlen (sought->section_name);
2965 /* If the prefix matches, and the files section name ends with a
2966 nul or a digit, then we match. I.e., we want either an exact
2967 match or a section followed by a number. */
2968 if (strncmp (sought->section_name, section->name, len) == 0
2969 && (section->name[len] == 0
2970 || (section->name[len] == '.' && ISDIGIT (section->name[len + 1]))))
2973 strtab = read_section_stabs (abfd, sought->string_section_name,
2978 stabs = read_section_stabs (abfd, section->name, &stab_size);
2980 print_section_stabs (abfd, section->name, &sought->string_offset);
2986 dump_stabs_section (bfd *abfd, char *stabsect_name, char *strsect_name)
2988 stab_section_names s;
2990 s.section_name = stabsect_name;
2991 s.string_section_name = strsect_name;
2992 s.string_offset = 0;
2994 bfd_map_over_sections (abfd, find_stabs_section, & s);
3000 /* Dump the any sections containing stabs debugging information. */
3003 dump_stabs (bfd *abfd)
3005 dump_stabs_section (abfd, ".stab", ".stabstr");
3006 dump_stabs_section (abfd, ".stab.excl", ".stab.exclstr");
3007 dump_stabs_section (abfd, ".stab.index", ".stab.indexstr");
3010 dump_stabs_section (abfd, "LC_SYMTAB.stabs", "LC_SYMTAB.stabstr");
3012 dump_stabs_section (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
3016 dump_bfd_header (bfd *abfd)
3020 printf (_("architecture: %s, "),
3021 bfd_printable_arch_mach (bfd_get_arch (abfd),
3022 bfd_get_mach (abfd)));
3023 printf (_("flags 0x%08x:\n"), abfd->flags & ~BFD_FLAGS_FOR_BFD_USE_MASK);
3025 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
3026 PF (HAS_RELOC, "HAS_RELOC");
3027 PF (EXEC_P, "EXEC_P");
3028 PF (HAS_LINENO, "HAS_LINENO");
3029 PF (HAS_DEBUG, "HAS_DEBUG");
3030 PF (HAS_SYMS, "HAS_SYMS");
3031 PF (HAS_LOCALS, "HAS_LOCALS");
3032 PF (DYNAMIC, "DYNAMIC");
3033 PF (WP_TEXT, "WP_TEXT");
3034 PF (D_PAGED, "D_PAGED");
3035 PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
3036 printf (_("\nstart address 0x"));
3037 bfd_printf_vma (abfd, abfd->start_address);
3043 dump_bfd_private_header (bfd *abfd)
3045 bfd_print_private_bfd_data (abfd, stdout);
3049 dump_target_specific (bfd *abfd)
3051 const struct objdump_private_desc * const *desc;
3052 struct objdump_private_option *opt;
3055 /* Find the desc. */
3056 for (desc = objdump_private_vectors; *desc != NULL; desc++)
3057 if ((*desc)->filter (abfd))
3062 non_fatal (_("option -P/--private not supported by this file"));
3066 /* Clear all options. */
3067 for (opt = (*desc)->options; opt->name; opt++)
3068 opt->selected = FALSE;
3070 /* Decode options. */
3071 b = dump_private_options;
3074 e = strchr (b, ',');
3079 for (opt = (*desc)->options; opt->name; opt++)
3080 if (strcmp (opt->name, b) == 0)
3082 opt->selected = TRUE;
3085 if (opt->name == NULL)
3086 non_fatal (_("target specific dump '%s' not supported"), b);
3097 (*desc)->dump (abfd);
3100 /* Display a section in hexadecimal format with associated characters.
3101 Each line prefixed by the zero padded address. */
3104 dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED)
3106 bfd_byte *data = NULL;
3107 bfd_size_type datasize;
3108 bfd_vma addr_offset;
3109 bfd_vma start_offset;
3110 bfd_vma stop_offset;
3111 unsigned int opb = bfd_octets_per_byte (abfd);
3112 /* Bytes per line. */
3113 const int onaline = 16;
3118 if ((section->flags & SEC_HAS_CONTENTS) == 0)
3121 if (! process_section_p (section))
3124 if ((datasize = bfd_section_size (abfd, section)) == 0)
3127 /* Compute the address range to display. */
3128 if (start_address == (bfd_vma) -1
3129 || start_address < section->vma)
3132 start_offset = start_address - section->vma;
3134 if (stop_address == (bfd_vma) -1)
3135 stop_offset = datasize / opb;
3138 if (stop_address < section->vma)
3141 stop_offset = stop_address - section->vma;
3143 if (stop_offset > datasize / opb)
3144 stop_offset = datasize / opb;
3147 if (start_offset >= stop_offset)
3150 printf (_("Contents of section %s:"), section->name);
3151 if (display_file_offsets)
3152 printf (_(" (Starting at file offset: 0x%lx)"),
3153 (unsigned long) (section->filepos + start_offset));
3156 if (!bfd_get_full_section_contents (abfd, section, &data))
3158 non_fatal (_("Reading section %s failed because: %s"),
3159 section->name, bfd_errmsg (bfd_get_error ()));
3165 bfd_sprintf_vma (abfd, buf, start_offset + section->vma);
3166 if (strlen (buf) >= sizeof (buf))
3170 while (buf[count] == '0' && buf[count+1] != '\0')
3172 count = strlen (buf) - count;
3176 bfd_sprintf_vma (abfd, buf, stop_offset + section->vma - 1);
3177 if (strlen (buf) >= sizeof (buf))
3181 while (buf[count] == '0' && buf[count+1] != '\0')
3183 count = strlen (buf) - count;
3187 for (addr_offset = start_offset;
3188 addr_offset < stop_offset; addr_offset += onaline / opb)
3192 bfd_sprintf_vma (abfd, buf, (addr_offset + section->vma));
3193 count = strlen (buf);
3194 if ((size_t) count >= sizeof (buf))
3198 while (count < width)
3203 fputs (buf + count - width, stdout);
3206 for (j = addr_offset * opb;
3207 j < addr_offset * opb + onaline; j++)
3209 if (j < stop_offset * opb)
3210 printf ("%02x", (unsigned) (data[j]));
3218 for (j = addr_offset * opb;
3219 j < addr_offset * opb + onaline; j++)
3221 if (j >= stop_offset * opb)
3224 printf ("%c", ISPRINT (data[j]) ? data[j] : '.');
3231 /* Actually display the various requested regions. */
3234 dump_data (bfd *abfd)
3236 bfd_map_over_sections (abfd, dump_section, NULL);
3239 /* Should perhaps share code and display with nm? */
3242 dump_symbols (bfd *abfd ATTRIBUTE_UNUSED, bfd_boolean dynamic)
3251 max_count = dynsymcount;
3252 printf ("DYNAMIC SYMBOL TABLE:\n");
3257 max_count = symcount;
3258 printf ("SYMBOL TABLE:\n");
3262 printf (_("no symbols\n"));
3264 for (count = 0; count < max_count; count++)
3268 if (*current == NULL)
3269 printf (_("no information for symbol number %ld\n"), count);
3271 else if ((cur_bfd = bfd_asymbol_bfd (*current)) == NULL)
3272 printf (_("could not determine the type of symbol number %ld\n"),
3275 else if (process_section_p ((* current)->section)
3276 && (dump_special_syms
3277 || !bfd_is_target_special_symbol (cur_bfd, *current)))
3279 const char *name = (*current)->name;
3281 if (do_demangle && name != NULL && *name != '\0')
3285 /* If we want to demangle the name, we demangle it
3286 here, and temporarily clobber it while calling
3287 bfd_print_symbol. FIXME: This is a gross hack. */
3288 alloc = bfd_demangle (cur_bfd, name, demangle_flags);
3290 (*current)->name = alloc;
3291 bfd_print_symbol (cur_bfd, stdout, *current,
3292 bfd_print_symbol_all);
3295 (*current)->name = name;
3300 bfd_print_symbol (cur_bfd, stdout, *current,
3301 bfd_print_symbol_all);
3311 dump_reloc_set (bfd *abfd, asection *sec, arelent **relpp, long relcount)
3314 char *last_filename, *last_functionname;
3315 unsigned int last_line;
3316 unsigned int last_discriminator;
3318 /* Get column headers lined up reasonably. */
3326 bfd_sprintf_vma (abfd, buf, (bfd_vma) -1);
3327 width = strlen (buf) - 7;
3329 printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
3332 last_filename = NULL;
3333 last_functionname = NULL;
3335 last_discriminator = 0;
3337 for (p = relpp; relcount && *p != NULL; p++, relcount--)
3340 const char *filename, *functionname;
3341 unsigned int linenumber;
3342 unsigned int discriminator;
3343 const char *sym_name;
3344 const char *section_name;
3345 bfd_vma addend2 = 0;
3347 if (start_address != (bfd_vma) -1
3348 && q->address < start_address)
3350 if (stop_address != (bfd_vma) -1
3351 && q->address > stop_address)
3354 if (with_line_numbers
3356 && bfd_find_nearest_line_discriminator (abfd, sec, syms, q->address,
3357 &filename, &functionname,
3358 &linenumber, &discriminator))
3360 if (functionname != NULL
3361 && (last_functionname == NULL
3362 || strcmp (functionname, last_functionname) != 0))
3364 printf ("%s():\n", functionname);
3365 if (last_functionname != NULL)
3366 free (last_functionname);
3367 last_functionname = xstrdup (functionname);
3371 && (linenumber != last_line
3372 || (filename != NULL
3373 && last_filename != NULL
3374 && filename_cmp (filename, last_filename) != 0)
3375 || (discriminator != last_discriminator)))
3377 if (discriminator > 0)
3378 printf ("%s:%u\n", filename == NULL ? "???" : filename, linenumber);
3380 printf ("%s:%u (discriminator %u)\n", filename == NULL ? "???" : filename,
3381 linenumber, discriminator);
3382 last_line = linenumber;
3383 last_discriminator = discriminator;
3384 if (last_filename != NULL)
3385 free (last_filename);
3386 if (filename == NULL)
3387 last_filename = NULL;
3389 last_filename = xstrdup (filename);
3393 if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
3395 sym_name = (*(q->sym_ptr_ptr))->name;
3396 section_name = (*(q->sym_ptr_ptr))->section->name;
3401 section_name = NULL;
3404 bfd_printf_vma (abfd, q->address);
3405 if (q->howto == NULL)
3406 printf (" *unknown* ");
3407 else if (q->howto->name)
3409 const char *name = q->howto->name;
3411 /* R_SPARC_OLO10 relocations contain two addends.
3412 But because 'arelent' lacks enough storage to
3413 store them both, the 64-bit ELF Sparc backend
3414 records this as two relocations. One R_SPARC_LO10
3415 and one R_SPARC_13, both pointing to the same
3416 address. This is merely so that we have some
3417 place to store both addend fields.
3419 Undo this transformation, otherwise the output
3420 will be confusing. */
3421 if (abfd->xvec->flavour == bfd_target_elf_flavour
3422 && elf_tdata(abfd)->elf_header->e_machine == EM_SPARCV9
3424 && !strcmp (q->howto->name, "R_SPARC_LO10"))
3426 arelent *q2 = *(p + 1);
3429 && q->address == q2->address
3430 && !strcmp (q2->howto->name, "R_SPARC_13"))
3432 name = "R_SPARC_OLO10";
3433 addend2 = q2->addend;
3437 printf (" %-16s ", name);
3440 printf (" %-16d ", q->howto->type);
3444 objdump_print_symname (abfd, NULL, *q->sym_ptr_ptr);
3448 if (section_name == NULL)
3449 section_name = "*unknown*";
3450 printf ("[%s]", section_name);
3455 bfd_signed_vma addend = q->addend;
3463 bfd_printf_vma (abfd, addend);
3468 bfd_printf_vma (abfd, addend2);
3474 if (last_filename != NULL)
3475 free (last_filename);
3476 if (last_functionname != NULL)
3477 free (last_functionname);
3481 dump_relocs_in_section (bfd *abfd,
3483 void *dummy ATTRIBUTE_UNUSED)
3489 if ( bfd_is_abs_section (section)
3490 || bfd_is_und_section (section)
3491 || bfd_is_com_section (section)
3492 || (! process_section_p (section))
3493 || ((section->flags & SEC_RELOC) == 0))
3496 relsize = bfd_get_reloc_upper_bound (abfd, section);
3498 bfd_fatal (bfd_get_filename (abfd));
3500 printf ("RELOCATION RECORDS FOR [%s]:", section->name);
3504 printf (" (none)\n\n");
3508 if ((bfd_get_file_flags (abfd) & (BFD_IN_MEMORY | BFD_LINKER_CREATED)) == 0
3509 && (/* Check that the size of the relocs is reasonable. Note that some
3510 file formats, eg aout, can have relocs whose internal size is
3511 larger than their external size, thus we check the size divided
3512 by four against the file size. See PR 23931 for an example of
3514 ((ufile_ptr) (relsize / 4) > bfd_get_file_size (abfd))
3515 /* Also check the section's reloc count since if this is negative
3516 (or very large) the computation in bfd_get_reloc_upper_bound
3517 may have resulted in returning a small, positive integer.
3518 See PR 22508 for a reproducer.
3520 Note - we check against file size rather than section size as
3521 it is possible for there to be more relocs that apply to a
3522 section than there are bytes in that section. */
3523 || (section->reloc_count > bfd_get_file_size (abfd))))
3525 printf (" (too many: %#x relocs)\n", section->reloc_count);
3526 bfd_set_error (bfd_error_file_truncated);
3527 bfd_fatal (bfd_get_filename (abfd));
3530 relpp = (arelent **) xmalloc (relsize);
3531 relcount = bfd_canonicalize_reloc (abfd, section, relpp, syms);
3536 non_fatal (_("failed to read relocs in: %s"), bfd_get_filename (abfd));
3537 bfd_fatal (_("error message was"));
3539 else if (relcount == 0)
3540 printf (" (none)\n\n");
3544 dump_reloc_set (abfd, section, relpp, relcount);
3551 dump_relocs (bfd *abfd)
3553 bfd_map_over_sections (abfd, dump_relocs_in_section, NULL);
3557 dump_dynamic_relocs (bfd *abfd)
3563 relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
3565 bfd_fatal (bfd_get_filename (abfd));
3567 printf ("DYNAMIC RELOCATION RECORDS");
3570 printf (" (none)\n\n");
3573 relpp = (arelent **) xmalloc (relsize);
3574 relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
3577 bfd_fatal (bfd_get_filename (abfd));
3578 else if (relcount == 0)
3579 printf (" (none)\n\n");
3583 dump_reloc_set (abfd, NULL, relpp, relcount);
3590 /* Creates a table of paths, to search for source files. */
3593 add_include_path (const char *path)
3597 include_path_count++;
3598 include_paths = (const char **)
3599 xrealloc (include_paths, include_path_count * sizeof (*include_paths));
3600 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3601 if (path[1] == ':' && path[2] == 0)
3602 path = concat (path, ".", (const char *) 0);
3604 include_paths[include_path_count - 1] = path;
3608 adjust_addresses (bfd *abfd ATTRIBUTE_UNUSED,
3612 if ((section->flags & SEC_DEBUGGING) == 0)
3614 bfd_boolean *has_reloc_p = (bfd_boolean *) arg;
3615 section->vma += adjust_section_vma;
3617 section->lma += adjust_section_vma;
3621 /* Dump selected contents of ABFD. */
3624 dump_bfd (bfd *abfd)
3626 /* If we are adjusting section VMA's, change them all now. Changing
3627 the BFD information is a hack. However, we must do it, or
3628 bfd_find_nearest_line will not do the right thing. */
3629 if (adjust_section_vma != 0)
3631 bfd_boolean has_reloc = (abfd->flags & HAS_RELOC);
3632 bfd_map_over_sections (abfd, adjust_addresses, &has_reloc);
3635 if (! dump_debugging_tags && ! suppress_bfd_header)
3636 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd),
3639 print_arelt_descr (stdout, abfd, TRUE, FALSE);
3640 if (dump_file_header)
3641 dump_bfd_header (abfd);
3642 if (dump_private_headers)
3643 dump_bfd_private_header (abfd);
3644 if (dump_private_options != NULL)
3645 dump_target_specific (abfd);
3646 if (! dump_debugging_tags && ! suppress_bfd_header)
3653 || dump_dwarf_section_info)
3654 syms = slurp_symtab (abfd);
3656 if (dump_section_headers)
3657 dump_headers (abfd);
3659 if (dump_dynamic_symtab || dump_dynamic_reloc_info
3660 || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
3661 dynsyms = slurp_dynamic_symtab (abfd);
3664 synthcount = bfd_get_synthetic_symtab (abfd, symcount, syms,
3665 dynsymcount, dynsyms, &synthsyms);
3671 dump_symbols (abfd, FALSE);
3672 if (dump_dynamic_symtab)
3673 dump_symbols (abfd, TRUE);
3674 if (dump_dwarf_section_info)
3676 if (dump_stab_section_info)
3678 if (dump_reloc_info && ! disassemble)
3680 if (dump_dynamic_reloc_info && ! disassemble)
3681 dump_dynamic_relocs (abfd);
3682 if (dump_section_contents)
3685 disassemble_data (abfd);
3691 dhandle = read_debugging_info (abfd, syms, symcount, TRUE);
3692 if (dhandle != NULL)
3694 if (!print_debugging_info (stdout, dhandle, abfd, syms,
3696 dump_debugging_tags ? TRUE : FALSE))
3698 non_fatal (_("%s: printing debugging information failed"),
3699 bfd_get_filename (abfd));
3705 /* PR 6483: If there was no STABS debug info in the file, try
3707 else if (! dump_dwarf_section_info)
3709 dwarf_select_sections_all ();
3738 display_object_bfd (bfd *abfd)
3742 if (bfd_check_format_matches (abfd, bfd_object, &matching))
3748 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3750 nonfatal (bfd_get_filename (abfd));
3751 list_matching_formats (matching);
3756 if (bfd_get_error () != bfd_error_file_not_recognized)
3758 nonfatal (bfd_get_filename (abfd));
3762 if (bfd_check_format_matches (abfd, bfd_core, &matching))
3768 nonfatal (bfd_get_filename (abfd));
3770 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
3772 list_matching_formats (matching);
3778 display_any_bfd (bfd *file, int level)
3780 /* Decompress sections unless dumping the section contents. */
3781 if (!dump_section_contents)
3782 file->flags |= BFD_DECOMPRESS;
3784 /* If the file is an archive, process all of its elements. */
3785 if (bfd_check_format (file, bfd_archive))
3788 bfd *last_arfile = NULL;
3791 printf (_("In archive %s:\n"), bfd_get_filename (file));
3792 else if (level > 100)
3794 /* Prevent corrupted files from spinning us into an
3795 infinite loop. 100 is an arbitrary heuristic. */
3796 fatal (_("Archive nesting is too deep"));
3800 printf (_("In nested archive %s:\n"), bfd_get_filename (file));
3804 bfd_set_error (bfd_error_no_error);
3806 arfile = bfd_openr_next_archived_file (file, arfile);
3809 if (bfd_get_error () != bfd_error_no_more_archived_files)
3810 nonfatal (bfd_get_filename (file));
3814 display_any_bfd (arfile, level + 1);
3816 if (last_arfile != NULL)
3818 bfd_close (last_arfile);
3819 /* PR 17512: file: ac585d01. */
3820 if (arfile == last_arfile)
3826 last_arfile = arfile;
3829 if (last_arfile != NULL)
3830 bfd_close (last_arfile);
3833 display_object_bfd (file);
3837 display_file (char *filename, char *target, bfd_boolean last_file)
3841 if (get_file_size (filename) < 1)
3847 file = bfd_openr (filename, target);
3850 nonfatal (filename);
3854 display_any_bfd (file, 0);
3856 /* This is an optimization to improve the speed of objdump, especially when
3857 dumping a file with lots of associated debug informatiom. Calling
3858 bfd_close on such a file can take a non-trivial amount of time as there
3859 are lots of lists to walk and buffers to free. This is only really
3860 necessary however if we are about to load another file and we need the
3861 memory back. Otherwise, if we are about to exit, then we can save (a lot
3862 of) time by only doing a quick close, and allowing the OS to reclaim the
3867 bfd_close_all_done (file);
3871 main (int argc, char **argv)
3874 char *target = default_target;
3875 bfd_boolean seenflag = FALSE;
3877 #if defined (HAVE_SETLOCALE)
3878 #if defined (HAVE_LC_MESSAGES)
3879 setlocale (LC_MESSAGES, "");
3881 setlocale (LC_CTYPE, "");
3884 bindtextdomain (PACKAGE, LOCALEDIR);
3885 textdomain (PACKAGE);
3887 program_name = *argv;
3888 xmalloc_set_program_name (program_name);
3889 bfd_set_error_program_name (program_name);
3891 START_PROGRESS (program_name, 0);
3893 expandargv (&argc, &argv);
3895 if (bfd_init () != BFD_INIT_MAGIC)
3896 fatal (_("fatal error: libbfd ABI mismatch"));
3897 set_default_bfd_target ();
3899 while ((c = getopt_long (argc, argv,
3900 "pP:ib:m:M:VvCdDlfFaHhrRtTxsSI:j:wE:zgeGW::",
3901 long_options, (int *) 0))
3907 break; /* We've been given a long option. */
3914 if (disassembler_options)
3915 /* Ignore potential memory leak for now. */
3916 options = concat (disassembler_options, ",",
3917 optarg, (const char *) NULL);
3920 disassembler_options = remove_whitespace_and_extra_commas (options);
3927 display_file_offsets = TRUE;
3930 with_line_numbers = TRUE;
3939 enum demangling_styles style;
3941 style = cplus_demangle_name_to_style (optarg);
3942 if (style == unknown_demangling)
3943 fatal (_("unknown demangling style `%s'"),
3946 cplus_demangle_set_style (style);
3949 case OPTION_RECURSE_LIMIT:
3950 demangle_flags &= ~ DMGL_NO_RECURSE_LIMIT;
3952 case OPTION_NO_RECURSE_LIMIT:
3953 demangle_flags |= DMGL_NO_RECURSE_LIMIT;
3956 do_wide = wide_output = TRUE;
3958 case OPTION_ADJUST_VMA:
3959 adjust_section_vma = parse_vma (optarg, "--adjust-vma");
3961 case OPTION_START_ADDRESS:
3962 start_address = parse_vma (optarg, "--start-address");
3963 if ((stop_address != (bfd_vma) -1) && stop_address <= start_address)
3964 fatal (_("error: the start address should be before the end address"));
3966 case OPTION_STOP_ADDRESS:
3967 stop_address = parse_vma (optarg, "--stop-address");
3968 if ((start_address != (bfd_vma) -1) && stop_address <= start_address)
3969 fatal (_("error: the stop address should be after the start address"));
3973 prefix_length = strlen (prefix);
3974 /* Remove an unnecessary trailing '/' */
3975 while (IS_DIR_SEPARATOR (prefix[prefix_length - 1]))
3978 case OPTION_PREFIX_STRIP:
3979 prefix_strip = atoi (optarg);
3980 if (prefix_strip < 0)
3981 fatal (_("error: prefix strip must be non-negative"));
3983 case OPTION_INSN_WIDTH:
3984 insn_width = strtoul (optarg, NULL, 0);
3985 if (insn_width <= 0)
3986 fatal (_("error: instruction width must be positive"));
3988 case OPTION_INLINES:
3989 unwind_inlines = TRUE;
3992 if (strcmp (optarg, "B") == 0)
3993 endian = BFD_ENDIAN_BIG;
3994 else if (strcmp (optarg, "L") == 0)
3995 endian = BFD_ENDIAN_LITTLE;
3998 nonfatal (_("unrecognized -E option"));
4003 if (strncmp (optarg, "big", strlen (optarg)) == 0)
4004 endian = BFD_ENDIAN_BIG;
4005 else if (strncmp (optarg, "little", strlen (optarg)) == 0)
4006 endian = BFD_ENDIAN_LITTLE;
4009 non_fatal (_("unrecognized --endian type `%s'"), optarg);
4016 dump_file_header = TRUE;
4020 formats_info = TRUE;
4024 add_include_path (optarg);
4027 dump_private_headers = TRUE;
4031 dump_private_options = optarg;
4035 dump_private_headers = TRUE;
4037 dump_reloc_info = TRUE;
4038 dump_file_header = TRUE;
4039 dump_ar_hdrs = TRUE;
4040 dump_section_headers = TRUE;
4048 dump_dynamic_symtab = TRUE;
4054 disasm_sym = optarg;
4057 disassemble_zeroes = TRUE;
4061 disassemble_all = TRUE;
4066 with_source_code = TRUE;
4075 dump_debugging_tags = 1;
4080 dump_dwarf_section_info = TRUE;
4083 dwarf_select_sections_by_letters (optarg);
4085 dwarf_select_sections_all ();
4088 dump_dwarf_section_info = TRUE;
4091 dwarf_select_sections_by_names (optarg);
4093 dwarf_select_sections_all ();
4095 case OPTION_DWARF_DEPTH:
4098 dwarf_cutoff_level = strtoul (optarg, & cp, 0);
4101 case OPTION_DWARF_START:
4104 dwarf_start_die = strtoul (optarg, & cp, 0);
4105 suppress_bfd_header = 1;
4108 case OPTION_DWARF_CHECK:
4112 dump_stab_section_info = TRUE;
4116 dump_section_contents = TRUE;
4120 dump_reloc_info = TRUE;
4124 dump_dynamic_reloc_info = TRUE;
4128 dump_ar_hdrs = TRUE;
4132 dump_section_headers = TRUE;
4137 show_version = TRUE;
4143 /* No need to set seenflag or to break - usage() does not return. */
4150 print_version ("objdump");
4156 exit_status = display_info ();
4160 display_file ("a.out", target, TRUE);
4162 for (; optind < argc;)
4164 display_file (argv[optind], target, optind == argc - 1);
4171 END_PROGRESS (program_name);