1 /* objdump.c -- dump information about an object file.
2 Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
3 Free Software Foundation, Inc.
5 This file is part of GNU Binutils.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
27 #include "libiberty.h"
32 #ifdef ANSI_PROTOTYPES
38 /* Internal headers for the ELF .stab-dump code - sorry. */
39 #define BYTES_IN_WORD 32
40 #include "aout/aout64.h"
42 #ifdef NEED_DECLARATION_FPRINTF
43 /* This is needed by INIT_DISASSEMBLE_INFO. */
44 extern int fprintf PARAMS ((FILE *, const char *, ...));
48 static int exit_status = 0;
50 static char *default_target = NULL; /* default at runtime */
52 static int show_version = 0; /* show the version number */
53 static int dump_section_contents; /* -s */
54 static int dump_section_headers; /* -h */
55 static boolean dump_file_header; /* -f */
56 static int dump_symtab; /* -t */
57 static int dump_dynamic_symtab; /* -T */
58 static int dump_reloc_info; /* -r */
59 static int dump_dynamic_reloc_info; /* -R */
60 static int dump_ar_hdrs; /* -a */
61 static int dump_private_headers; /* -p */
62 static int prefix_addresses; /* --prefix-addresses */
63 static int with_line_numbers; /* -l */
64 static boolean with_source_code; /* -S */
65 static int show_raw_insn; /* --show-raw-insn */
66 static int dump_stab_section_info; /* --stabs */
67 static int do_demangle; /* -C, --demangle */
68 static boolean disassemble; /* -d */
69 static boolean disassemble_all; /* -D */
70 static int disassemble_zeroes; /* --disassemble-zeroes */
71 static boolean formats_info; /* -i */
72 static char *only; /* -j secname */
73 static int wide_output; /* -w */
74 static bfd_vma start_address = (bfd_vma) -1; /* --start-address */
75 static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */
76 static int dump_debugging; /* --debugging */
77 static bfd_vma adjust_section_vma = 0; /* --adjust-vma */
79 /* Extra info to pass to the disassembler address printing function. */
80 struct objdump_disasm_info {
86 /* Architecture to disassemble for, or default if NULL. */
87 static char *machine = (char *) NULL;
89 /* Target specific options to the disassembler. */
90 static char *disassembler_options = (char *) NULL;
92 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN. */
93 static enum bfd_endian endian = BFD_ENDIAN_UNKNOWN;
95 /* The symbol table. */
96 static asymbol **syms;
98 /* Number of symbols in `syms'. */
99 static long symcount = 0;
101 /* The sorted symbol table. */
102 static asymbol **sorted_syms;
104 /* Number of symbols in `sorted_syms'. */
105 static long sorted_symcount = 0;
107 /* The dynamic symbol table. */
108 static asymbol **dynsyms;
110 /* Number of symbols in `dynsyms'. */
111 static long dynsymcount = 0;
113 /* Static declarations. */
116 usage PARAMS ((FILE *, int));
119 nonfatal PARAMS ((const char *));
122 display_file PARAMS ((char *filename, char *target));
125 dump_section_header PARAMS ((bfd *, asection *, PTR));
128 dump_headers PARAMS ((bfd *));
131 dump_data PARAMS ((bfd *abfd));
134 dump_relocs PARAMS ((bfd *abfd));
137 dump_dynamic_relocs PARAMS ((bfd * abfd));
140 dump_reloc_set PARAMS ((bfd *, asection *, arelent **, long));
143 dump_symbols PARAMS ((bfd *abfd, boolean dynamic));
146 dump_bfd_header PARAMS ((bfd *));
149 dump_bfd_private_header PARAMS ((bfd *));
152 display_bfd PARAMS ((bfd *abfd));
155 display_target_list PARAMS ((void));
158 display_info_table PARAMS ((int, int));
161 display_target_tables PARAMS ((void));
164 display_info PARAMS ((void));
167 objdump_print_value PARAMS ((bfd_vma, struct disassemble_info *, boolean));
170 objdump_print_symname PARAMS ((bfd *, struct disassemble_info *, asymbol *));
173 find_symbol_for_address PARAMS ((bfd *, asection *, bfd_vma, boolean, long *));
176 objdump_print_addr_with_sym PARAMS ((bfd *, asection *, asymbol *, bfd_vma,
177 struct disassemble_info *, boolean));
180 objdump_print_addr PARAMS ((bfd_vma, struct disassemble_info *, boolean));
183 objdump_print_address PARAMS ((bfd_vma, struct disassemble_info *));
186 show_line PARAMS ((bfd *, asection *, bfd_vma));
189 disassemble_bytes PARAMS ((struct disassemble_info *, disassembler_ftype,
190 boolean, bfd_byte *, bfd_vma, bfd_vma,
191 arelent ***, arelent **));
194 disassemble_data PARAMS ((bfd *));
197 endian_string PARAMS ((enum bfd_endian));
200 slurp_symtab PARAMS ((bfd *));
203 slurp_dynamic_symtab PARAMS ((bfd *));
206 remove_useless_symbols PARAMS ((asymbol **, long));
209 compare_symbols PARAMS ((const PTR, const PTR));
212 compare_relocs PARAMS ((const PTR, const PTR));
215 dump_stabs PARAMS ((bfd *));
218 read_section_stabs PARAMS ((bfd *, const char *, const char *));
221 print_section_stabs PARAMS ((bfd *, const char *, const char *));
224 usage (stream, status)
228 fprintf (stream, _("Usage: %s <switches> file(s)\n"), program_name);
229 fprintf (stream, _(" At least one of the following switches must be given:\n"));
230 fprintf (stream, _("\
231 -a --archive-headers Display archive header information\n\
232 -f --file-headers Display the contents of the overall file header\n\
233 -p --private-headers Display object format specific file header contents\n\
234 -h --[section-]headers Display the contents of the section headers\n\
235 -x --all-headers Display the contents of all headers\n\
236 -d --disassemble Display assembler contents of executable sections\n\
237 -D --disassemble-all Display assembler contents of all sections\n\
238 -S --source Intermix source code with disassembly\n\
239 -s --full-contents Display the full contents of all sections requested\n\
240 -g --debugging Display debug information in object file\n\
241 -G --stabs Display the STABS contents of an ELF format file\n\
242 -t --syms Display the contents of the symbol table(s)\n\
243 -T --dynamic-syms Display the contents of the dynamic symbol table\n\
244 -r --reloc Display the relocation entries in the file\n\
245 -R --dynamic-reloc Display the dynamic relocation entries in the file\n\
246 -V --version Display this program's version number\n\
247 -i --info List object formats and architectures supported\n\
248 -H --help Display this information\n\
252 fprintf (stream, _("\n The following switches are optional:\n"));
253 fprintf (stream, _("\
254 -b --target <bfdname> Specify the target object format as <bfdname>\n\
255 -m --architecture <machine> Specify the target architecture as <machine>\n\
256 -j --section <name> Only display information for section <name>\n\
257 -M --disassembler-options <o> Pass text <o> on to the disassembler\n\
258 -EB --endian=big Assume big endian format when disassembling\n\
259 -EL --endian=little Assume little endian format when disassembling\n\
260 -l --line-numbers Include line numbers and filenames in output\n\
261 -C --demangle Decode mangled/processed symbol names\n\
262 -w --wide Format output for more than 80 columns\n\
263 -z --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n\
264 --start-address <addr> Only process data whoes address is >= <addr>\n\
265 --stop-address <addr> Only process data whoes address is <= <addr>\n\
266 --prefix-addresses Print complete address alongside disassembly\n\
267 --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\
268 --adjust-vma <offset> Add <offset> to all displayed section addresses\n\
270 list_supported_targets (program_name, stream);
273 fprintf (stream, _("Report bugs to bug-gnu-utils@gnu.org\n"));
277 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
279 #define OPTION_ENDIAN (150)
280 #define OPTION_START_ADDRESS (OPTION_ENDIAN + 1)
281 #define OPTION_STOP_ADDRESS (OPTION_START_ADDRESS + 1)
282 #define OPTION_ADJUST_VMA (OPTION_STOP_ADDRESS + 1)
284 static struct option long_options[]=
286 {"adjust-vma", required_argument, NULL, OPTION_ADJUST_VMA},
287 {"all-headers", no_argument, NULL, 'x'},
288 {"private-headers", no_argument, NULL, 'p'},
289 {"architecture", required_argument, NULL, 'm'},
290 {"archive-headers", no_argument, NULL, 'a'},
291 {"debugging", no_argument, NULL, 'g'},
292 {"demangle", no_argument, NULL, 'C'},
293 {"disassemble", no_argument, NULL, 'd'},
294 {"disassemble-all", no_argument, NULL, 'D'},
295 {"disassembler-options", required_argument, NULL, 'M'},
296 {"disassemble-zeroes", no_argument, NULL, 'z'},
297 {"dynamic-reloc", no_argument, NULL, 'R'},
298 {"dynamic-syms", no_argument, NULL, 'T'},
299 {"endian", required_argument, NULL, OPTION_ENDIAN},
300 {"file-headers", no_argument, NULL, 'f'},
301 {"full-contents", no_argument, NULL, 's'},
302 {"headers", no_argument, NULL, 'h'},
303 {"help", no_argument, NULL, 'H'},
304 {"info", no_argument, NULL, 'i'},
305 {"line-numbers", no_argument, NULL, 'l'},
306 {"no-show-raw-insn", no_argument, &show_raw_insn, -1},
307 {"prefix-addresses", no_argument, &prefix_addresses, 1},
308 {"reloc", no_argument, NULL, 'r'},
309 {"section", required_argument, NULL, 'j'},
310 {"section-headers", no_argument, NULL, 'h'},
311 {"show-raw-insn", no_argument, &show_raw_insn, 1},
312 {"source", no_argument, NULL, 'S'},
313 {"stabs", no_argument, NULL, 'G'},
314 {"start-address", required_argument, NULL, OPTION_START_ADDRESS},
315 {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
316 {"syms", no_argument, NULL, 't'},
317 {"target", required_argument, NULL, 'b'},
318 {"version", no_argument, NULL, 'V'},
319 {"wide", no_argument, NULL, 'w'},
320 {0, no_argument, 0, 0}
332 dump_section_header (abfd, section, ignored)
333 bfd *abfd ATTRIBUTE_UNUSED;
335 PTR ignored ATTRIBUTE_UNUSED;
339 printf ("%3d %-13s %08lx ", section->index,
340 bfd_get_section_name (abfd, section),
341 (unsigned long) bfd_section_size (abfd, section));
342 printf_vma (bfd_get_section_vma (abfd, section));
344 printf_vma (section->lma);
345 printf (" %08lx 2**%u", section->filepos,
346 bfd_get_section_alignment (abfd, section));
352 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
354 PF (SEC_HAS_CONTENTS, "CONTENTS");
355 PF (SEC_ALLOC, "ALLOC");
356 PF (SEC_CONSTRUCTOR, "CONSTRUCTOR");
357 PF (SEC_CONSTRUCTOR_TEXT, "CONSTRUCTOR TEXT");
358 PF (SEC_CONSTRUCTOR_DATA, "CONSTRUCTOR DATA");
359 PF (SEC_CONSTRUCTOR_BSS, "CONSTRUCTOR BSS");
360 PF (SEC_LOAD, "LOAD");
361 PF (SEC_RELOC, "RELOC");
363 PF (SEC_BALIGN, "BALIGN");
365 PF (SEC_READONLY, "READONLY");
366 PF (SEC_CODE, "CODE");
367 PF (SEC_DATA, "DATA");
369 PF (SEC_DEBUGGING, "DEBUGGING");
370 PF (SEC_NEVER_LOAD, "NEVER_LOAD");
371 PF (SEC_EXCLUDE, "EXCLUDE");
372 PF (SEC_SORT_ENTRIES, "SORT_ENTRIES");
373 PF (SEC_SMALL_DATA, "SMALL_DATA");
374 PF (SEC_SHARED, "SHARED");
376 if ((section->flags & SEC_LINK_ONCE) != 0)
380 switch (section->flags & SEC_LINK_DUPLICATES)
384 case SEC_LINK_DUPLICATES_DISCARD:
385 ls = "LINK_ONCE_DISCARD";
387 case SEC_LINK_DUPLICATES_ONE_ONLY:
388 ls = "LINK_ONCE_ONE_ONLY";
390 case SEC_LINK_DUPLICATES_SAME_SIZE:
391 ls = "LINK_ONCE_SAME_SIZE";
393 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
394 ls = "LINK_ONCE_SAME_CONTENTS";
397 printf ("%s%s", comma, ls);
399 if (section->comdat != NULL)
400 printf (" (COMDAT %s %ld)", section->comdat->name,
401 section->comdat->symbol);
414 printf (_("Sections:\n"));
417 printf (_("Idx Name Size VMA LMA File off Algn"));
419 printf (_("Idx Name Size VMA LMA File off Algn"));
423 printf (_(" Flags"));
426 bfd_map_over_sections (abfd, dump_section_header, (PTR) NULL);
433 asymbol **sy = (asymbol **) NULL;
436 if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
438 fprintf (stderr, _("%s: no symbols\n"), bfd_get_filename (abfd));
443 storage = bfd_get_symtab_upper_bound (abfd);
445 bfd_fatal (bfd_get_filename (abfd));
449 sy = (asymbol **) xmalloc (storage);
451 symcount = bfd_canonicalize_symtab (abfd, sy);
453 bfd_fatal (bfd_get_filename (abfd));
455 fprintf (stderr, _("%s: no symbols\n"), bfd_get_filename (abfd));
459 /* Read in the dynamic symbols. */
462 slurp_dynamic_symtab (abfd)
465 asymbol **sy = (asymbol **) NULL;
468 storage = bfd_get_dynamic_symtab_upper_bound (abfd);
471 if (!(bfd_get_file_flags (abfd) & DYNAMIC))
473 fprintf (stderr, _("%s: %s: not a dynamic object\n"),
474 program_name, bfd_get_filename (abfd));
479 bfd_fatal (bfd_get_filename (abfd));
484 sy = (asymbol **) xmalloc (storage);
486 dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy);
488 bfd_fatal (bfd_get_filename (abfd));
489 if (dynsymcount == 0)
490 fprintf (stderr, _("%s: %s: No dynamic symbols\n"),
491 program_name, bfd_get_filename (abfd));
495 /* Filter out (in place) symbols that are useless for disassembly.
496 COUNT is the number of elements in SYMBOLS.
497 Return the number of useful symbols. */
500 remove_useless_symbols (symbols, count)
504 register asymbol **in_ptr = symbols, **out_ptr = symbols;
508 asymbol *sym = *in_ptr++;
510 if (sym->name == NULL || sym->name[0] == '\0')
512 if (sym->flags & (BSF_DEBUGGING))
514 if (bfd_is_und_section (sym->section)
515 || bfd_is_com_section (sym->section))
520 return out_ptr - symbols;
523 /* Sort symbols into value order. */
526 compare_symbols (ap, bp)
530 const asymbol *a = *(const asymbol **)ap;
531 const asymbol *b = *(const asymbol **)bp;
535 flagword aflags, bflags;
537 if (bfd_asymbol_value (a) > bfd_asymbol_value (b))
539 else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
542 if (a->section > b->section)
544 else if (a->section < b->section)
547 an = bfd_asymbol_name (a);
548 bn = bfd_asymbol_name (b);
552 /* The symbols gnu_compiled and gcc2_compiled convey no real
553 information, so put them after other symbols with the same value. */
555 af = (strstr (an, "gnu_compiled") != NULL
556 || strstr (an, "gcc2_compiled") != NULL);
557 bf = (strstr (bn, "gnu_compiled") != NULL
558 || strstr (bn, "gcc2_compiled") != NULL);
565 /* We use a heuristic for the file name, to try to sort it after
566 more useful symbols. It may not work on non Unix systems, but it
567 doesn't really matter; the only difference is precisely which
568 symbol names get printed. */
570 #define file_symbol(s, sn, snl) \
571 (((s)->flags & BSF_FILE) != 0 \
572 || ((sn)[(snl) - 2] == '.' \
573 && ((sn)[(snl) - 1] == 'o' \
574 || (sn)[(snl) - 1] == 'a')))
576 af = file_symbol (a, an, anl);
577 bf = file_symbol (b, bn, bnl);
584 /* Try to sort global symbols before local symbols before function
585 symbols before debugging symbols. */
590 if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))
592 if ((aflags & BSF_DEBUGGING) != 0)
597 if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
599 if ((aflags & BSF_FUNCTION) != 0)
604 if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
606 if ((aflags & BSF_LOCAL) != 0)
611 if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL))
613 if ((aflags & BSF_GLOBAL) != 0)
619 /* Symbols that start with '.' might be section names, so sort them
620 after symbols that don't start with '.'. */
621 if (an[0] == '.' && bn[0] != '.')
623 if (an[0] != '.' && bn[0] == '.')
626 /* Finally, if we can't distinguish them in any other way, try to
627 get consistent results by sorting the symbols by name. */
628 return strcmp (an, bn);
631 /* Sort relocs into address order. */
634 compare_relocs (ap, bp)
638 const arelent *a = *(const arelent **)ap;
639 const arelent *b = *(const arelent **)bp;
641 if (a->address > b->address)
643 else if (a->address < b->address)
646 /* So that associated relocations tied to the same address show up
647 in the correct order, we don't do any further sorting. */
656 /* Print VMA to STREAM. If SKIP_ZEROES is true, omit leading zeroes. */
659 objdump_print_value (vma, info, skip_zeroes)
661 struct disassemble_info *info;
667 sprintf_vma (buf, vma);
672 for (p = buf; *p == '0'; ++p)
677 (*info->fprintf_func) (info->stream, "%s", p);
680 /* Print the name of a symbol. */
683 objdump_print_symname (abfd, info, sym)
685 struct disassemble_info *info;
693 name = bfd_asymbol_name (sym);
694 if (! do_demangle || name[0] == '\0')
698 /* Demangle the name. */
699 if (bfd_get_symbol_leading_char (abfd) == name[0])
702 alloc = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
710 (*info->fprintf_func) (info->stream, "%s", print);
712 printf ("%s", print);
718 /* Locate a symbol given a bfd, a section, and a VMA. If REQUIRE_SEC
719 is true, then always require the symbol to be in the section. This
720 returns NULL if there is no suitable symbol. If PLACE is not NULL,
721 then *PLACE is set to the index of the symbol in sorted_syms. */
724 find_symbol_for_address (abfd, sec, vma, require_sec, place)
731 /* @@ Would it speed things up to cache the last two symbols returned,
732 and maybe their address ranges? For many processors, only one memory
733 operand can be present at a time, so the 2-entry cache wouldn't be
734 constantly churned by code doing heavy memory accesses. */
736 /* Indices in `sorted_syms'. */
738 long max = sorted_symcount;
741 if (sorted_symcount < 1)
744 /* Perform a binary search looking for the closest symbol to the
745 required value. We are searching the range (min, max]. */
746 while (min + 1 < max)
750 thisplace = (max + min) / 2;
751 sym = sorted_syms[thisplace];
753 if (bfd_asymbol_value (sym) > vma)
755 else if (bfd_asymbol_value (sym) < vma)
764 /* The symbol we want is now in min, the low end of the range we
765 were searching. If there are several symbols with the same
766 value, we want the first one. */
769 && (bfd_asymbol_value (sorted_syms[thisplace])
770 == bfd_asymbol_value (sorted_syms[thisplace - 1])))
773 /* If the file is relocateable, and the symbol could be from this
774 section, prefer a symbol from this section over symbols from
775 others, even if the other symbol's value might be closer.
777 Note that this may be wrong for some symbol references if the
778 sections have overlapping memory ranges, but in that case there's
779 no way to tell what's desired without looking at the relocation
782 if (sorted_syms[thisplace]->section != sec
784 || ((abfd->flags & HAS_RELOC) != 0
785 && vma >= bfd_get_section_vma (abfd, sec)
786 && vma < (bfd_get_section_vma (abfd, sec)
787 + bfd_section_size (abfd, sec)))))
791 for (i = thisplace + 1; i < sorted_symcount; i++)
793 if (bfd_asymbol_value (sorted_syms[i])
794 != bfd_asymbol_value (sorted_syms[thisplace]))
800 if (sorted_syms[i]->section == sec
802 || sorted_syms[i - 1]->section != sec
803 || (bfd_asymbol_value (sorted_syms[i])
804 != bfd_asymbol_value (sorted_syms[i - 1]))))
811 if (sorted_syms[thisplace]->section != sec)
813 /* We didn't find a good symbol with a smaller value.
814 Look for one with a larger value. */
815 for (i = thisplace + 1; i < sorted_symcount; i++)
817 if (sorted_syms[i]->section == sec)
825 if (sorted_syms[thisplace]->section != sec
827 || ((abfd->flags & HAS_RELOC) != 0
828 && vma >= bfd_get_section_vma (abfd, sec)
829 && vma < (bfd_get_section_vma (abfd, sec)
830 + bfd_section_size (abfd, sec)))))
832 /* There is no suitable symbol. */
840 return sorted_syms[thisplace];
843 /* Print an address to INFO symbolically. */
846 objdump_print_addr_with_sym (abfd, sec, sym, vma, info, skip_zeroes)
851 struct disassemble_info *info;
854 objdump_print_value (vma, info, skip_zeroes);
860 (*info->fprintf_func) (info->stream, " <%s",
861 bfd_get_section_name (abfd, sec));
862 secaddr = bfd_get_section_vma (abfd, sec);
865 (*info->fprintf_func) (info->stream, "-0x");
866 objdump_print_value (secaddr - vma, info, true);
868 else if (vma > secaddr)
870 (*info->fprintf_func) (info->stream, "+0x");
871 objdump_print_value (vma - secaddr, info, true);
873 (*info->fprintf_func) (info->stream, ">");
877 (*info->fprintf_func) (info->stream, " <");
878 objdump_print_symname (abfd, info, sym);
879 if (bfd_asymbol_value (sym) > vma)
881 (*info->fprintf_func) (info->stream, "-0x");
882 objdump_print_value (bfd_asymbol_value (sym) - vma, info, true);
884 else if (vma > bfd_asymbol_value (sym))
886 (*info->fprintf_func) (info->stream, "+0x");
887 objdump_print_value (vma - bfd_asymbol_value (sym), info, true);
889 (*info->fprintf_func) (info->stream, ">");
893 /* Print VMA to INFO, symbolically if possible. If SKIP_ZEROES is
894 true, don't output leading zeroes. */
897 objdump_print_addr (vma, info, skip_zeroes)
899 struct disassemble_info *info;
902 struct objdump_disasm_info *aux;
905 if (sorted_symcount < 1)
907 (*info->fprintf_func) (info->stream, "0x");
908 objdump_print_value (vma, info, skip_zeroes);
912 aux = (struct objdump_disasm_info *) info->application_data;
913 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
915 objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, info,
919 /* Print VMA to INFO. This function is passed to the disassembler
923 objdump_print_address (vma, info)
925 struct disassemble_info *info;
927 objdump_print_addr (vma, info, ! prefix_addresses);
930 /* Determine of the given address has a symbol associated with it. */
933 objdump_symbol_at_address (vma, info)
935 struct disassemble_info * info;
937 struct objdump_disasm_info * aux;
940 /* No symbols - do not bother checking. */
941 if (sorted_symcount < 1)
944 aux = (struct objdump_disasm_info *) info->application_data;
945 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
948 return (sym != NULL && (bfd_asymbol_value (sym) == vma));
951 /* Hold the last function name and the last line number we displayed
954 static char *prev_functionname;
955 static unsigned int prev_line;
957 /* We keep a list of all files that we have seen when doing a
958 dissassembly with source, so that we know how much of the file to
959 display. This can be important for inlined functions. */
961 struct print_file_list
963 struct print_file_list *next;
969 static struct print_file_list *print_files;
971 /* The number of preceding context lines to show when we start
972 displaying a file for the first time. */
974 #define SHOW_PRECEDING_CONTEXT_LINES (5)
976 /* Skip ahead to a given line in a file, optionally printing each
980 skip_to_line PARAMS ((struct print_file_list *, unsigned int, boolean));
983 skip_to_line (p, line, show)
984 struct print_file_list *p;
988 while (p->line < line)
992 if (fgets (buf, sizeof buf, p->f) == NULL)
1002 if (strchr (buf, '\n') != NULL)
1007 /* Show the line number, or the source line, in a dissassembly
1011 show_line (abfd, section, off)
1016 CONST char *filename;
1017 CONST char *functionname;
1020 if (! with_line_numbers && ! with_source_code)
1023 if (! bfd_find_nearest_line (abfd, section, syms, off, &filename,
1024 &functionname, &line))
1027 if (filename != NULL && *filename == '\0')
1029 if (functionname != NULL && *functionname == '\0')
1030 functionname = NULL;
1032 if (with_line_numbers)
1034 if (functionname != NULL
1035 && (prev_functionname == NULL
1036 || strcmp (functionname, prev_functionname) != 0))
1037 printf ("%s():\n", functionname);
1038 if (line > 0 && line != prev_line)
1039 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
1042 if (with_source_code
1046 struct print_file_list **pp, *p;
1048 for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
1049 if (strcmp ((*pp)->filename, filename) == 0)
1055 if (p != print_files)
1059 /* We have reencountered a file name which we saw
1060 earlier. This implies that either we are dumping out
1061 code from an included file, or the same file was
1062 linked in more than once. There are two common cases
1063 of an included file: inline functions in a header
1064 file, and a bison or flex skeleton file. In the
1065 former case we want to just start printing (but we
1066 back up a few lines to give context); in the latter
1067 case we want to continue from where we left off. I
1068 can't think of a good way to distinguish the cases,
1069 so I used a heuristic based on the file name. */
1070 if (strcmp (p->filename + strlen (p->filename) - 2, ".h") != 0)
1074 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1081 p->f = fopen (p->filename, "r");
1085 skip_to_line (p, l, false);
1087 if (print_files->f != NULL)
1089 fclose (print_files->f);
1090 print_files->f = NULL;
1096 skip_to_line (p, line, true);
1098 p->next = print_files;
1106 f = fopen (filename, "r");
1111 p = ((struct print_file_list *)
1112 xmalloc (sizeof (struct print_file_list)));
1113 p->filename = xmalloc (strlen (filename) + 1);
1114 strcpy (p->filename, filename);
1118 if (print_files != NULL && print_files->f != NULL)
1120 fclose (print_files->f);
1121 print_files->f = NULL;
1123 p->next = print_files;
1126 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1129 skip_to_line (p, l, false);
1131 skip_to_line (p, line, true);
1136 if (functionname != NULL
1137 && (prev_functionname == NULL
1138 || strcmp (functionname, prev_functionname) != 0))
1140 if (prev_functionname != NULL)
1141 free (prev_functionname);
1142 prev_functionname = xmalloc (strlen (functionname) + 1);
1143 strcpy (prev_functionname, functionname);
1146 if (line > 0 && line != prev_line)
1150 /* Pseudo FILE object for strings. */
1158 /* sprintf to a "stream" */
1161 #ifdef ANSI_PROTOTYPES
1162 objdump_sprintf (SFILE *f, const char *format, ...)
1164 objdump_sprintf (va_alist)
1168 #ifndef ANSI_PROTOTYPES
1176 #ifdef ANSI_PROTOTYPES
1177 va_start (args, format);
1180 f = va_arg (args, SFILE *);
1181 format = va_arg (args, const char *);
1184 vasprintf (&buf, format, args);
1190 fprintf (stderr, _("Out of virtual memory\n"));
1196 while ((size_t) ((f->buffer + f->size) - f->current) < n + 1)
1200 curroff = f->current - f->buffer;
1202 f->buffer = xrealloc (f->buffer, f->size);
1203 f->current = f->buffer + curroff;
1206 memcpy (f->current, buf, n);
1208 f->current[0] = '\0';
1215 /* The number of zeroes we want to see before we start skipping them.
1216 The number is arbitrarily chosen. */
1218 #define SKIP_ZEROES (8)
1220 /* The number of zeroes to skip at the end of a section. If the
1221 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1222 SKIP_ZEROES, they will be disassembled. If there are fewer than
1223 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1224 attempt to avoid disassembling zeroes inserted by section
1227 #define SKIP_ZEROES_AT_END (3)
1229 /* Disassemble some data in memory between given values. */
1232 disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
1234 struct disassemble_info *info;
1235 disassembler_ftype disassemble_fn;
1243 struct objdump_disasm_info *aux;
1247 int skip_addr_chars;
1250 aux = (struct objdump_disasm_info *) info->application_data;
1256 bytes_per_line = 16;
1258 /* Figure out how many characters to skip at the start of an
1259 address, to make the disassembly look nicer. We discard leading
1260 zeroes in chunks of 4, ensuring that there is always a leading
1262 skip_addr_chars = 0;
1263 if (! prefix_addresses)
1269 section->vma + bfd_section_size (section->owner, section));
1271 while (s[0] == '0' && s[1] == '0' && s[2] == '0' && s[3] == '0'
1274 skip_addr_chars += 4;
1279 info->insn_info_valid = 0;
1287 boolean need_nl = false;
1289 /* If we see more than SKIP_ZEROES bytes of zeroes, we just
1291 for (z = i; z < stop; z++)
1294 if (! disassemble_zeroes
1295 && (info->insn_info_valid == 0
1296 || info->branch_delay_insns == 0)
1297 && (z - i >= SKIP_ZEROES
1298 || (z == stop && z - i < SKIP_ZEROES_AT_END)))
1302 /* If there are more nonzero bytes to follow, we only skip
1303 zeroes in multiples of 4, to try to avoid running over
1304 the start of an instruction which happens to start with
1307 z = i + ((z - i) &~ 3);
1320 if (with_line_numbers || with_source_code)
1321 show_line (aux->abfd, section, i);
1323 if (! prefix_addresses)
1327 sprintf_vma (buf, section->vma + i);
1328 for (s = buf + skip_addr_chars; *s == '0'; s++)
1332 printf ("%s:\t", buf + skip_addr_chars);
1336 aux->require_sec = true;
1337 objdump_print_address (section->vma + i, info);
1338 aux->require_sec = false;
1345 sfile.buffer = xmalloc (sfile.size);
1346 sfile.current = sfile.buffer;
1347 info->fprintf_func = (fprintf_ftype) objdump_sprintf;
1348 info->stream = (FILE *) &sfile;
1349 info->bytes_per_line = 0;
1350 info->bytes_per_chunk = 0;
1352 /* FIXME: This is wrong. It tests the number of bytes
1353 in the last instruction, not the current one. */
1354 if (*relppp < relppend
1355 && (**relppp)->address >= i
1356 && (**relppp)->address < i + bytes)
1357 info->flags = INSN_HAS_RELOC;
1361 bytes = (*disassemble_fn) (section->vma + i, info);
1362 info->fprintf_func = (fprintf_ftype) fprintf;
1363 info->stream = stdout;
1364 if (info->bytes_per_line != 0)
1365 bytes_per_line = info->bytes_per_line;
1368 if (sfile.current != sfile.buffer)
1369 printf ("%s\n", sfile.buffer);
1370 free (sfile.buffer);
1378 bytes = bytes_per_line;
1379 if (i + bytes > stop)
1382 for (j = i; j < i + bytes; ++j)
1384 if (isprint (data[j]))
1385 buf[j - i] = data[j];
1392 if (prefix_addresses
1394 : show_raw_insn >= 0)
1398 /* If ! prefix_addresses and ! wide_output, we print
1399 bytes_per_line bytes per line. */
1401 if (pb > bytes_per_line && ! prefix_addresses && ! wide_output)
1402 pb = bytes_per_line;
1404 if (info->bytes_per_chunk)
1405 bpc = info->bytes_per_chunk;
1409 for (j = i; j < i + pb; j += bpc)
1412 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1414 for (k = bpc - 1; k >= 0; k--)
1415 printf ("%02x", (unsigned) data[j + k]);
1420 for (k = 0; k < bpc; k++)
1421 printf ("%02x", (unsigned) data[j + k]);
1426 for (; pb < bytes_per_line; pb += bpc)
1430 for (k = 0; k < bpc; k++)
1435 /* Separate raw data from instruction by extra space. */
1446 printf ("%s", sfile.buffer);
1447 free (sfile.buffer);
1450 if (prefix_addresses
1452 : show_raw_insn >= 0)
1462 sprintf_vma (buf, section->vma + j);
1463 for (s = buf + skip_addr_chars; *s == '0'; s++)
1467 printf ("%s:\t", buf + skip_addr_chars);
1469 pb += bytes_per_line;
1472 for (; j < i + pb; j += bpc)
1476 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1478 for (k = bpc - 1; k >= 0; k--)
1479 printf ("%02x", (unsigned) data[j + k]);
1484 for (k = 0; k < bpc; k++)
1485 printf ("%02x", (unsigned) data[j + k]);
1499 && (section->flags & SEC_RELOC) != 0)
1501 while ((*relppp) < relppend
1502 && ((**relppp)->address >= (bfd_vma) i
1503 && (**relppp)->address < (bfd_vma) i + bytes))
1514 objdump_print_value (section->vma + q->address, info, true);
1516 printf (": %s\t", q->howto->name);
1518 if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
1519 printf ("*unknown*");
1522 const char *sym_name;
1524 sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
1525 if (sym_name != NULL && *sym_name != '\0')
1526 objdump_print_symname (aux->abfd, info, *q->sym_ptr_ptr);
1531 sym_sec = bfd_get_section (*q->sym_ptr_ptr);
1532 sym_name = bfd_get_section_name (aux->abfd, sym_sec);
1533 if (sym_name == NULL || *sym_name == '\0')
1534 sym_name = "*unknown*";
1535 printf ("%s", sym_name);
1542 objdump_print_value (q->addend, info, true);
1558 /* Disassemble the contents of an object file. */
1561 disassemble_data (abfd)
1565 disassembler_ftype disassemble_fn;
1566 struct disassemble_info disasm_info;
1567 struct objdump_disasm_info aux;
1571 prev_functionname = NULL;
1574 /* We make a copy of syms to sort. We don't want to sort syms
1575 because that will screw up the relocs. */
1576 sorted_syms = (asymbol **) xmalloc (symcount * sizeof (asymbol *));
1577 memcpy (sorted_syms, syms, symcount * sizeof (asymbol *));
1579 sorted_symcount = remove_useless_symbols (sorted_syms, symcount);
1581 /* Sort the symbols into section and symbol order */
1582 qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
1584 INIT_DISASSEMBLE_INFO(disasm_info, stdout, fprintf);
1585 disasm_info.application_data = (PTR) &aux;
1587 aux.require_sec = false;
1588 disasm_info.print_address_func = objdump_print_address;
1589 disasm_info.symbol_at_address_func = objdump_symbol_at_address;
1591 if (machine != (char *) NULL)
1593 const bfd_arch_info_type *info = bfd_scan_arch (machine);
1596 fprintf (stderr, _("%s: Can't use supplied machine %s\n"),
1601 abfd->arch_info = info;
1604 if (endian != BFD_ENDIAN_UNKNOWN)
1606 struct bfd_target *xvec;
1608 xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
1609 memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
1610 xvec->byteorder = endian;
1614 disassemble_fn = disassembler (abfd);
1615 if (!disassemble_fn)
1617 fprintf (stderr, _("%s: Can't disassemble for architecture %s\n"),
1619 bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
1624 disasm_info.flavour = bfd_get_flavour (abfd);
1625 disasm_info.arch = bfd_get_arch (abfd);
1626 disasm_info.mach = bfd_get_mach (abfd);
1627 disasm_info.disassembler_options = disassembler_options;
1629 if (bfd_big_endian (abfd))
1630 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG;
1631 else if (bfd_little_endian (abfd))
1632 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_LITTLE;
1634 /* ??? Aborting here seems too drastic. We could default to big or little
1636 disasm_info.endian = BFD_ENDIAN_UNKNOWN;
1638 for (section = abfd->sections;
1639 section != (asection *) NULL;
1640 section = section->next)
1642 bfd_byte *data = NULL;
1643 bfd_size_type datasize = 0;
1644 arelent **relbuf = NULL;
1645 arelent **relpp = NULL;
1646 arelent **relppend = NULL;
1648 asymbol *sym = NULL;
1651 if ((section->flags & SEC_LOAD) == 0
1652 || (! disassemble_all
1654 && (section->flags & SEC_CODE) == 0))
1656 if (only != (char *) NULL && strcmp (only, section->name) != 0)
1660 && (section->flags & SEC_RELOC) != 0)
1664 relsize = bfd_get_reloc_upper_bound (abfd, section);
1666 bfd_fatal (bfd_get_filename (abfd));
1672 relbuf = (arelent **) xmalloc (relsize);
1673 relcount = bfd_canonicalize_reloc (abfd, section, relbuf, syms);
1675 bfd_fatal (bfd_get_filename (abfd));
1677 /* Sort the relocs by address. */
1678 qsort (relbuf, relcount, sizeof (arelent *), compare_relocs);
1681 relppend = relpp + relcount;
1683 /* Skip over the relocs belonging to addresses below the
1685 if (start_address != (bfd_vma) -1)
1687 while (relpp < relppend
1688 && (*relpp)->address < start_address)
1694 printf (_("Disassembly of section %s:\n"), section->name);
1696 datasize = bfd_get_section_size_before_reloc (section);
1700 data = (bfd_byte *) xmalloc ((size_t) datasize);
1702 bfd_get_section_contents (abfd, section, data, 0, datasize);
1705 disasm_info.buffer = data;
1706 disasm_info.buffer_vma = section->vma;
1707 disasm_info.buffer_length = datasize;
1708 if (start_address == (bfd_vma) -1
1709 || start_address < disasm_info.buffer_vma)
1712 i = start_address - disasm_info.buffer_vma;
1713 if (stop_address == (bfd_vma) -1)
1717 if (stop_address < disasm_info.buffer_vma)
1720 stop = stop_address - disasm_info.buffer_vma;
1721 if (stop > disasm_info.buffer_length)
1722 stop = disasm_info.buffer_length;
1725 sym = find_symbol_for_address (abfd, section, section->vma + i,
1734 if (sym != NULL && bfd_asymbol_value (sym) <= section->vma + i)
1739 (x < sorted_symcount
1740 && bfd_asymbol_value (sorted_syms[x]) <= section->vma + i);
1743 disasm_info.symbols = & sorted_syms[place];
1744 disasm_info.num_symbols = x - place;
1747 disasm_info.symbols = NULL;
1749 if (! prefix_addresses)
1752 objdump_print_addr_with_sym (abfd, section, sym,
1759 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1761 else if (sym == NULL)
1765 /* Search forward for the next appropriate symbol in
1766 SECTION. Note that all the symbols are sorted
1767 together into one big array, and that some sections
1768 may have overlapping addresses. */
1769 while (place < sorted_symcount
1770 && (sorted_syms[place]->section != section
1771 || (bfd_asymbol_value (sorted_syms[place])
1772 <= bfd_asymbol_value (sym))))
1774 if (place >= sorted_symcount)
1777 nextsym = sorted_syms[place];
1780 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1782 nextstop = bfd_asymbol_value (sym) - section->vma;
1783 if (nextstop > stop)
1786 else if (nextsym == NULL)
1790 nextstop = bfd_asymbol_value (nextsym) - section->vma;
1791 if (nextstop > stop)
1795 /* If a symbol is explicitly marked as being an object
1796 rather than a function, just dump the bytes without
1797 disassembling them. */
1800 || bfd_asymbol_value (sym) > section->vma + i
1801 || ((sym->flags & BSF_OBJECT) == 0
1802 && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
1804 && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
1806 || (sym->flags & BSF_FUNCTION) != 0)
1811 disassemble_bytes (&disasm_info, disassemble_fn, insns, data, i,
1812 nextstop, &relpp, relppend);
1826 /* Define a table of stab values and print-strings. We wish the initializer
1827 could be a direct-mapped table, but instead we build one the first
1830 static void dump_section_stabs PARAMS ((bfd *abfd, char *stabsect_name,
1831 char *strsect_name));
1833 /* Dump the stabs sections from an object file that has a section that
1834 uses Sun stabs encoding. */
1840 dump_section_stabs (abfd, ".stab", ".stabstr");
1841 dump_section_stabs (abfd, ".stab.excl", ".stab.exclstr");
1842 dump_section_stabs (abfd, ".stab.index", ".stab.indexstr");
1843 dump_section_stabs (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
1846 static bfd_byte *stabs;
1847 static bfd_size_type stab_size;
1849 static char *strtab;
1850 static bfd_size_type stabstr_size;
1852 /* Read ABFD's stabs section STABSECT_NAME into `stabs'
1853 and string table section STRSECT_NAME into `strtab'.
1854 If the section exists and was read, allocate the space and return true.
1855 Otherwise return false. */
1858 read_section_stabs (abfd, stabsect_name, strsect_name)
1860 const char *stabsect_name;
1861 const char *strsect_name;
1863 asection *stabsect, *stabstrsect;
1865 stabsect = bfd_get_section_by_name (abfd, stabsect_name);
1868 printf (_("No %s section present\n\n"), stabsect_name);
1872 stabstrsect = bfd_get_section_by_name (abfd, strsect_name);
1873 if (0 == stabstrsect)
1875 fprintf (stderr, _("%s: %s has no %s section\n"), program_name,
1876 bfd_get_filename (abfd), strsect_name);
1881 stab_size = bfd_section_size (abfd, stabsect);
1882 stabstr_size = bfd_section_size (abfd, stabstrsect);
1884 stabs = (bfd_byte *) xmalloc (stab_size);
1885 strtab = (char *) xmalloc (stabstr_size);
1887 if (! bfd_get_section_contents (abfd, stabsect, (PTR) stabs, 0, stab_size))
1889 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1890 program_name, stabsect_name, bfd_get_filename (abfd),
1891 bfd_errmsg (bfd_get_error ()));
1898 if (! bfd_get_section_contents (abfd, stabstrsect, (PTR) strtab, 0,
1901 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1902 program_name, strsect_name, bfd_get_filename (abfd),
1903 bfd_errmsg (bfd_get_error ()));
1913 /* Stabs entries use a 12 byte format:
1914 4 byte string table index
1916 1 byte stab other field
1917 2 byte stab desc field
1919 FIXME: This will have to change for a 64 bit object format. */
1921 #define STRDXOFF (0)
1923 #define OTHEROFF (5)
1926 #define STABSIZE (12)
1928 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
1929 using string table section STRSECT_NAME (in `strtab'). */
1932 print_section_stabs (abfd, stabsect_name, strsect_name)
1934 const char *stabsect_name;
1935 const char *strsect_name ATTRIBUTE_UNUSED;
1938 unsigned file_string_table_offset = 0, next_file_string_table_offset = 0;
1939 bfd_byte *stabp, *stabs_end;
1942 stabs_end = stabp + stab_size;
1944 printf (_("Contents of %s section:\n\n"), stabsect_name);
1945 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
1947 /* Loop through all symbols and print them.
1949 We start the index at -1 because there is a dummy symbol on
1950 the front of stabs-in-{coff,elf} sections that supplies sizes. */
1952 for (i = -1; stabp < stabs_end; stabp += STABSIZE, i++)
1956 unsigned char type, other;
1957 unsigned short desc;
1960 strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
1961 type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
1962 other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
1963 desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
1964 value = bfd_h_get_32 (abfd, stabp + VALOFF);
1966 printf ("\n%-6d ", i);
1967 /* Either print the stab name, or, if unnamed, print its number
1968 again (makes consistent formatting for tools like awk). */
1969 name = bfd_get_stab_name (type);
1971 printf ("%-6s", name);
1972 else if (type == N_UNDF)
1975 printf ("%-6d", type);
1976 printf (" %-6d %-6d ", other, desc);
1978 printf (" %-6lu", strx);
1980 /* Symbols with type == 0 (N_UNDF) specify the length of the
1981 string table associated with this file. We use that info
1982 to know how to relocate the *next* file's string table indices. */
1986 file_string_table_offset = next_file_string_table_offset;
1987 next_file_string_table_offset += value;
1991 /* Using the (possibly updated) string table offset, print the
1992 string (if any) associated with this symbol. */
1994 if ((strx + file_string_table_offset) < stabstr_size)
1995 printf (" %s", &strtab[strx + file_string_table_offset]);
2004 dump_section_stabs (abfd, stabsect_name, strsect_name)
2006 char *stabsect_name;
2011 /* Check for section names for which stabsect_name is a prefix, to
2012 handle .stab0, etc. */
2013 for (s = abfd->sections;
2019 len = strlen (stabsect_name);
2021 /* If the prefix matches, and the files section name ends with a
2022 nul or a digit, then we match. I.e., we want either an exact
2023 match or a section followed by a number. */
2024 if (strncmp (stabsect_name, s->name, len) == 0
2025 && (s->name[len] == '\000'
2026 || isdigit ((unsigned char) s->name[len])))
2028 if (read_section_stabs (abfd, s->name, strsect_name))
2030 print_section_stabs (abfd, s->name, strsect_name);
2039 dump_bfd_header (abfd)
2044 printf (_("architecture: %s, "),
2045 bfd_printable_arch_mach (bfd_get_arch (abfd),
2046 bfd_get_mach (abfd)));
2047 printf (_("flags 0x%08x:\n"), abfd->flags);
2049 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2050 PF (HAS_RELOC, "HAS_RELOC");
2051 PF (EXEC_P, "EXEC_P");
2052 PF (HAS_LINENO, "HAS_LINENO");
2053 PF (HAS_DEBUG, "HAS_DEBUG");
2054 PF (HAS_SYMS, "HAS_SYMS");
2055 PF (HAS_LOCALS, "HAS_LOCALS");
2056 PF (DYNAMIC, "DYNAMIC");
2057 PF (WP_TEXT, "WP_TEXT");
2058 PF (D_PAGED, "D_PAGED");
2059 PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
2060 printf (_("\nstart address 0x"));
2061 printf_vma (abfd->start_address);
2066 dump_bfd_private_header (abfd)
2069 bfd_print_private_bfd_data (abfd, stdout);
2072 /* Dump selected contents of ABFD */
2078 /* If we are adjusting section VMA's, change them all now. Changing
2079 the BFD information is a hack. However, we must do it, or
2080 bfd_find_nearest_line will not do the right thing. */
2081 if (adjust_section_vma != 0)
2085 for (s = abfd->sections; s != NULL; s = s->next)
2087 s->vma += adjust_section_vma;
2088 s->lma += adjust_section_vma;
2092 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd),
2095 print_arelt_descr (stdout, abfd, true);
2096 if (dump_file_header)
2097 dump_bfd_header (abfd);
2098 if (dump_private_headers)
2099 dump_bfd_private_header (abfd);
2101 if (dump_section_headers)
2102 dump_headers (abfd);
2103 if (dump_symtab || dump_reloc_info || disassemble || dump_debugging)
2105 syms = slurp_symtab (abfd);
2107 if (dump_dynamic_symtab || dump_dynamic_reloc_info)
2109 dynsyms = slurp_dynamic_symtab (abfd);
2112 dump_symbols (abfd, false);
2113 if (dump_dynamic_symtab)
2114 dump_symbols (abfd, true);
2115 if (dump_stab_section_info)
2117 if (dump_reloc_info && ! disassemble)
2119 if (dump_dynamic_reloc_info)
2120 dump_dynamic_relocs (abfd);
2121 if (dump_section_contents)
2124 disassemble_data (abfd);
2129 dhandle = read_debugging_info (abfd, syms, symcount);
2130 if (dhandle != NULL)
2132 if (! print_debugging_info (stdout, dhandle))
2135 _("%s: printing debugging information failed\n"),
2136 bfd_get_filename (abfd));
2159 if (bfd_check_format_matches (abfd, bfd_object, &matching))
2165 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
2167 nonfatal (bfd_get_filename (abfd));
2168 list_matching_formats (matching);
2173 if (bfd_get_error () != bfd_error_file_not_recognized)
2175 nonfatal (bfd_get_filename (abfd));
2179 if (bfd_check_format_matches (abfd, bfd_core, &matching))
2185 nonfatal (bfd_get_filename (abfd));
2187 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
2189 list_matching_formats (matching);
2195 display_file (filename, target)
2199 bfd *file, *arfile = (bfd *) NULL;
2201 file = bfd_openr (filename, target);
2204 nonfatal (filename);
2208 if (bfd_check_format (file, bfd_archive) == true)
2210 bfd *last_arfile = NULL;
2212 printf (_("In archive %s:\n"), bfd_get_filename (file));
2215 bfd_set_error (bfd_error_no_error);
2217 arfile = bfd_openr_next_archived_file (file, arfile);
2220 if (bfd_get_error () != bfd_error_no_more_archived_files)
2221 nonfatal (bfd_get_filename (file));
2225 display_bfd (arfile);
2227 if (last_arfile != NULL)
2228 bfd_close (last_arfile);
2229 last_arfile = arfile;
2232 if (last_arfile != NULL)
2233 bfd_close (last_arfile);
2241 /* Actually display the various requested regions */
2249 bfd_size_type datasize = 0;
2251 bfd_size_type start, stop;
2253 for (section = abfd->sections; section != NULL; section =
2258 if (only == (char *) NULL ||
2259 strcmp (only, section->name) == 0)
2261 if (section->flags & SEC_HAS_CONTENTS)
2263 printf (_("Contents of section %s:\n"), section->name);
2265 if (bfd_section_size (abfd, section) == 0)
2267 data = (bfd_byte *) xmalloc ((size_t) bfd_section_size (abfd, section));
2268 datasize = bfd_section_size (abfd, section);
2271 bfd_get_section_contents (abfd, section, (PTR) data, 0, bfd_section_size (abfd, section));
2273 if (start_address == (bfd_vma) -1
2274 || start_address < section->vma)
2277 start = start_address - section->vma;
2278 if (stop_address == (bfd_vma) -1)
2279 stop = bfd_section_size (abfd, section);
2282 if (stop_address < section->vma)
2285 stop = stop_address - section->vma;
2286 if (stop > bfd_section_size (abfd, section))
2287 stop = bfd_section_size (abfd, section);
2289 for (i = start; i < stop; i += onaline)
2293 printf (" %04lx ", (unsigned long int) (i + section->vma));
2294 for (j = i; j < i + onaline; j++)
2297 printf ("%02x", (unsigned) (data[j]));
2305 for (j = i; j < i + onaline; j++)
2310 printf ("%c", isprint (data[j]) ? data[j] : '.');
2320 /* Should perhaps share code and display with nm? */
2322 dump_symbols (abfd, dynamic)
2323 bfd *abfd ATTRIBUTE_UNUSED;
2336 printf ("DYNAMIC SYMBOL TABLE:\n");
2344 printf ("SYMBOL TABLE:\n");
2347 for (count = 0; count < max; count++)
2351 bfd *cur_bfd = bfd_asymbol_bfd (*current);
2353 if (cur_bfd != NULL)
2358 name = bfd_asymbol_name (*current);
2360 if (do_demangle && name != NULL && *name != '\0')
2364 /* If we want to demangle the name, we demangle it
2365 here, and temporarily clobber it while calling
2366 bfd_print_symbol. FIXME: This is a gross hack. */
2369 if (bfd_get_symbol_leading_char (cur_bfd) == *n)
2371 alloc = cplus_demangle (n, DMGL_ANSI | DMGL_PARAMS);
2373 (*current)->name = alloc;
2375 (*current)->name = n;
2378 bfd_print_symbol (cur_bfd, stdout, *current,
2379 bfd_print_symbol_all);
2381 (*current)->name = name;
2402 for (a = abfd->sections; a != (asection *) NULL; a = a->next)
2406 if (bfd_is_abs_section (a))
2408 if (bfd_is_und_section (a))
2410 if (bfd_is_com_section (a))
2415 if (strcmp (only, a->name))
2418 else if ((a->flags & SEC_RELOC) == 0)
2421 relsize = bfd_get_reloc_upper_bound (abfd, a);
2423 bfd_fatal (bfd_get_filename (abfd));
2425 printf ("RELOCATION RECORDS FOR [%s]:", a->name);
2429 printf (" (none)\n\n");
2433 relpp = (arelent **) xmalloc (relsize);
2434 relcount = bfd_canonicalize_reloc (abfd, a, relpp, syms);
2436 bfd_fatal (bfd_get_filename (abfd));
2437 else if (relcount == 0)
2439 printf (" (none)\n\n");
2444 dump_reloc_set (abfd, a, relpp, relcount);
2453 dump_dynamic_relocs (abfd)
2460 relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2462 bfd_fatal (bfd_get_filename (abfd));
2464 printf ("DYNAMIC RELOCATION RECORDS");
2468 printf (" (none)\n\n");
2472 relpp = (arelent **) xmalloc (relsize);
2473 relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
2475 bfd_fatal (bfd_get_filename (abfd));
2476 else if (relcount == 0)
2478 printf (" (none)\n\n");
2483 dump_reloc_set (abfd, (asection *) NULL, relpp, relcount);
2491 dump_reloc_set (abfd, sec, relpp, relcount)
2498 char *last_filename, *last_functionname;
2499 unsigned int last_line;
2501 /* Get column headers lined up reasonably. */
2507 sprintf_vma (buf, (bfd_vma) -1);
2508 width = strlen (buf) - 7;
2510 printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
2513 last_filename = NULL;
2514 last_functionname = NULL;
2517 for (p = relpp; relcount && *p != (arelent *) NULL; p++, relcount--)
2520 const char *filename, *functionname;
2522 const char *sym_name;
2523 const char *section_name;
2525 if (start_address != (bfd_vma) -1
2526 && q->address < start_address)
2528 if (stop_address != (bfd_vma) -1
2529 && q->address > stop_address)
2532 if (with_line_numbers
2534 && bfd_find_nearest_line (abfd, sec, syms, q->address,
2535 &filename, &functionname, &line))
2537 if (functionname != NULL
2538 && (last_functionname == NULL
2539 || strcmp (functionname, last_functionname) != 0))
2541 printf ("%s():\n", functionname);
2542 if (last_functionname != NULL)
2543 free (last_functionname);
2544 last_functionname = xstrdup (functionname);
2547 && (line != last_line
2548 || (filename != NULL
2549 && last_filename != NULL
2550 && strcmp (filename, last_filename) != 0)))
2552 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
2554 if (last_filename != NULL)
2555 free (last_filename);
2556 if (filename == NULL)
2557 last_filename = NULL;
2559 last_filename = xstrdup (filename);
2563 if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
2565 sym_name = (*(q->sym_ptr_ptr))->name;
2566 section_name = (*(q->sym_ptr_ptr))->section->name;
2571 section_name = NULL;
2575 printf_vma (q->address);
2577 printf (" %-16s ", q->howto->name);
2579 printf (" %-16d ", q->howto->type);
2580 objdump_print_symname (abfd, (struct disassemble_info *) NULL,
2585 if (section_name == (CONST char *) NULL)
2586 section_name = "*unknown*";
2587 printf_vma (q->address);
2588 printf (" %-16s [%s]",
2595 printf_vma (q->addend);
2601 /* The length of the longest architecture name + 1. */
2602 #define LONGEST_ARCH sizeof("rs6000:6000")
2605 endian_string (endian)
2606 enum bfd_endian endian;
2608 if (endian == BFD_ENDIAN_BIG)
2609 return "big endian";
2610 else if (endian == BFD_ENDIAN_LITTLE)
2611 return "little endian";
2613 return "endianness unknown";
2616 /* List the targets that BFD is configured to support, each followed
2617 by its endianness and the architectures it supports. */
2620 display_target_list ()
2622 extern bfd_target *bfd_target_vector[];
2626 dummy_name = choose_temp_base ();
2627 for (t = 0; bfd_target_vector[t]; t++)
2629 bfd_target *p = bfd_target_vector[t];
2630 bfd *abfd = bfd_openw (dummy_name, p->name);
2633 printf ("%s\n (header %s, data %s)\n", p->name,
2634 endian_string (p->header_byteorder),
2635 endian_string (p->byteorder));
2639 nonfatal (dummy_name);
2643 if (! bfd_set_format (abfd, bfd_object))
2645 if (bfd_get_error () != bfd_error_invalid_operation)
2650 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2651 if (bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0))
2653 bfd_printable_arch_mach ((enum bfd_architecture) a, 0));
2655 unlink (dummy_name);
2659 /* Print a table showing which architectures are supported for entries
2660 FIRST through LAST-1 of bfd_target_vector (targets across,
2661 architectures down). */
2664 display_info_table (first, last)
2668 extern bfd_target *bfd_target_vector[];
2672 /* Print heading of target names. */
2673 printf ("\n%*s", (int) LONGEST_ARCH, " ");
2674 for (t = first; t < last && bfd_target_vector[t]; t++)
2675 printf ("%s ", bfd_target_vector[t]->name);
2678 dummy_name = choose_temp_base ();
2679 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2680 if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0)
2682 printf ("%*s ", (int) LONGEST_ARCH - 1,
2683 bfd_printable_arch_mach (a, 0));
2684 for (t = first; t < last && bfd_target_vector[t]; t++)
2686 bfd_target *p = bfd_target_vector[t];
2688 bfd *abfd = bfd_openw (dummy_name, p->name);
2698 if (! bfd_set_format (abfd, bfd_object))
2700 if (bfd_get_error () != bfd_error_invalid_operation)
2708 if (! bfd_set_arch_mach (abfd, a, 0))
2713 printf ("%s ", p->name);
2716 int l = strlen (p->name);
2724 unlink (dummy_name);
2728 /* Print tables of all the target-architecture combinations that
2729 BFD has been configured to support. */
2732 display_target_tables ()
2735 extern bfd_target *bfd_target_vector[];
2739 colum = getenv ("COLUMNS");
2741 columns = atoi (colum);
2746 while (bfd_target_vector[t] != NULL)
2750 wid = LONGEST_ARCH + strlen (bfd_target_vector[t]->name) + 1;
2752 while (wid < columns && bfd_target_vector[t] != NULL)
2756 newwid = wid + strlen (bfd_target_vector[t]->name) + 1;
2757 if (newwid >= columns)
2762 display_info_table (oldt, t);
2769 printf (_("BFD header file version %s\n"), BFD_VERSION);
2770 display_target_list ();
2771 display_target_tables ();
2780 char *target = default_target;
2781 boolean seenflag = false;
2783 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
2784 setlocale (LC_MESSAGES, "");
2786 bindtextdomain (PACKAGE, LOCALEDIR);
2787 textdomain (PACKAGE);
2789 program_name = *argv;
2790 xmalloc_set_program_name (program_name);
2792 START_PROGRESS (program_name, 0);
2795 set_default_bfd_target ();
2797 while ((c = getopt_long (argc, argv, "pib:m:M:VCdDlfahHrRtTxsSj:wE:zgG",
2798 long_options, (int *) 0))
2804 break; /* we've been given a long option */
2809 disassembler_options = optarg;
2815 with_line_numbers = true;
2826 case OPTION_ADJUST_VMA:
2827 adjust_section_vma = parse_vma (optarg, "--adjust-vma");
2829 case OPTION_START_ADDRESS:
2830 start_address = parse_vma (optarg, "--start-address");
2832 case OPTION_STOP_ADDRESS:
2833 stop_address = parse_vma (optarg, "--stop-address");
2836 if (strcmp (optarg, "B") == 0)
2837 endian = BFD_ENDIAN_BIG;
2838 else if (strcmp (optarg, "L") == 0)
2839 endian = BFD_ENDIAN_LITTLE;
2842 fprintf (stderr, _("%s: unrecognized -E option\n"),
2848 if (strncmp (optarg, "big", strlen (optarg)) == 0)
2849 endian = BFD_ENDIAN_BIG;
2850 else if (strncmp (optarg, "little", strlen (optarg)) == 0)
2851 endian = BFD_ENDIAN_LITTLE;
2854 fprintf (stderr, _("%s: unrecognized --endian type `%s'\n"),
2855 program_name, optarg);
2861 dump_file_header = true;
2865 formats_info = true;
2869 dump_private_headers = true;
2873 dump_private_headers = true;
2875 dump_reloc_info = true;
2876 dump_file_header = true;
2877 dump_ar_hdrs = true;
2878 dump_section_headers = true;
2886 dump_dynamic_symtab = true;
2894 disassemble_zeroes = true;
2898 disassemble_all = true;
2903 with_source_code = true;
2911 dump_stab_section_info = true;
2915 dump_section_contents = true;
2919 dump_reloc_info = true;
2923 dump_dynamic_reloc_info = true;
2927 dump_ar_hdrs = true;
2931 dump_section_headers = true;
2938 show_version = true;
2948 print_version ("objdump");
2950 if (seenflag == false)
2958 display_file ("a.out", target);
2960 for (; optind < argc;)
2961 display_file (argv[optind++], target);
2964 END_PROGRESS (program_name);