1 /* objdump.c -- dump information about an object file.
2 Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
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 *, ...));
47 static char *default_target = NULL; /* default at runtime */
49 static int show_version = 0; /* show the version number */
50 static int dump_section_contents; /* -s */
51 static int dump_section_headers; /* -h */
52 static boolean dump_file_header; /* -f */
53 static int dump_symtab; /* -t */
54 static int dump_dynamic_symtab; /* -T */
55 static int dump_reloc_info; /* -r */
56 static int dump_dynamic_reloc_info; /* -R */
57 static int dump_ar_hdrs; /* -a */
58 static int dump_private_headers; /* -p */
59 static int prefix_addresses; /* --prefix-addresses */
60 static int with_line_numbers; /* -l */
61 static boolean with_source_code; /* -S */
62 static int show_raw_insn; /* --show-raw-insn */
63 static int dump_stab_section_info; /* --stabs */
64 static int do_demangle; /* -C, --demangle */
65 static boolean disassemble; /* -d */
66 static boolean disassemble_all; /* -D */
67 static int disassemble_zeroes; /* --disassemble-zeroes */
68 static boolean formats_info; /* -i */
69 static char *only; /* -j secname */
70 static int wide_output; /* -w */
71 static bfd_vma start_address = (bfd_vma) -1; /* --start-address */
72 static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */
73 static int dump_debugging; /* --debugging */
74 static bfd_vma adjust_section_vma = 0; /* --adjust-vma */
76 /* Extra info to pass to the disassembler address printing function. */
77 struct objdump_disasm_info {
83 /* Architecture to disassemble for, or default if NULL. */
84 static char *machine = (char *) NULL;
86 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN. */
87 static enum bfd_endian endian = BFD_ENDIAN_UNKNOWN;
89 /* The symbol table. */
90 static asymbol **syms;
92 /* Number of symbols in `syms'. */
93 static long symcount = 0;
95 /* The sorted symbol table. */
96 static asymbol **sorted_syms;
98 /* Number of symbols in `sorted_syms'. */
99 static long sorted_symcount = 0;
101 /* The dynamic symbol table. */
102 static asymbol **dynsyms;
104 /* Number of symbols in `dynsyms'. */
105 static long dynsymcount = 0;
107 /* Static declarations. */
110 usage PARAMS ((FILE *, int));
113 display_file PARAMS ((char *filename, char *target));
116 dump_section_header PARAMS ((bfd *, asection *, PTR));
119 dump_headers PARAMS ((bfd *));
122 dump_data PARAMS ((bfd *abfd));
125 dump_relocs PARAMS ((bfd *abfd));
128 dump_dynamic_relocs PARAMS ((bfd * abfd));
131 dump_reloc_set PARAMS ((bfd *, asection *, arelent **, long));
134 dump_symbols PARAMS ((bfd *abfd, boolean dynamic));
137 dump_bfd_header PARAMS ((bfd *));
140 dump_bfd_private_header PARAMS ((bfd *));
143 display_bfd PARAMS ((bfd *abfd));
146 display_target_list PARAMS ((void));
149 display_info_table PARAMS ((int, int));
152 display_target_tables PARAMS ((void));
155 display_info PARAMS ((void));
158 objdump_print_value PARAMS ((bfd_vma, struct disassemble_info *, boolean));
161 objdump_print_symname PARAMS ((bfd *, struct disassemble_info *, asymbol *));
164 find_symbol_for_address PARAMS ((bfd *, asection *, bfd_vma, boolean, long *));
167 objdump_print_addr_with_sym PARAMS ((bfd *, asection *, asymbol *, bfd_vma,
168 struct disassemble_info *, boolean));
171 objdump_print_addr PARAMS ((bfd_vma, struct disassemble_info *, boolean));
174 objdump_print_address PARAMS ((bfd_vma, struct disassemble_info *));
177 show_line PARAMS ((bfd *, asection *, bfd_vma));
180 disassemble_bytes PARAMS ((struct disassemble_info *, disassembler_ftype,
181 boolean, bfd_byte *, long, long, arelent ***,
185 disassemble_data PARAMS ((bfd *));
188 endian_string PARAMS ((enum bfd_endian));
191 slurp_symtab PARAMS ((bfd *));
194 slurp_dynamic_symtab PARAMS ((bfd *));
197 remove_useless_symbols PARAMS ((asymbol **, long));
200 compare_symbols PARAMS ((const PTR, const PTR));
203 compare_relocs PARAMS ((const PTR, const PTR));
206 dump_stabs PARAMS ((bfd *));
209 read_section_stabs PARAMS ((bfd *, const char *, const char *));
212 print_section_stabs PARAMS ((bfd *, const char *, const char *));
215 usage (stream, status)
219 fprintf (stream, _("\
220 Usage: %s [-ahifCdDprRtTxsSlw] [-b bfdname] [-m machine] [-j section-name]\n\
221 [--archive-headers] [--target=bfdname] [--debugging] [--disassemble]\n\
222 [--disassemble-all] [--disassemble-zeroes] [--file-headers]\n\
223 [--section-headers] [--headers]\n\
224 [--info] [--section=section-name] [--line-numbers] [--source]\n"),
226 fprintf (stream, _("\
227 [--architecture=machine] [--reloc] [--full-contents] [--stabs]\n\
228 [--syms] [--all-headers] [--dynamic-syms] [--dynamic-reloc]\n\
229 [--wide] [--version] [--help] [--private-headers]\n\
230 [--start-address=addr] [--stop-address=addr]\n\
231 [--prefix-addresses] [--[no-]show-raw-insn] [--demangle]\n\
232 [--adjust-vma=offset] [-EB|-EL] [--endian={big|little}] objfile...\n\
233 at least one option besides -l (--line-numbers) must be given\n"));
234 list_supported_targets (program_name, stream);
236 fprintf (stream, _("Report bugs to bug-gnu-utils@gnu.org\n"));
240 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
242 #define OPTION_ENDIAN (150)
243 #define OPTION_START_ADDRESS (OPTION_ENDIAN + 1)
244 #define OPTION_STOP_ADDRESS (OPTION_START_ADDRESS + 1)
245 #define OPTION_ADJUST_VMA (OPTION_STOP_ADDRESS + 1)
247 static struct option long_options[]=
249 {"adjust-vma", required_argument, NULL, OPTION_ADJUST_VMA},
250 {"all-headers", no_argument, NULL, 'x'},
251 {"private-headers", no_argument, NULL, 'p'},
252 {"architecture", required_argument, NULL, 'm'},
253 {"archive-headers", no_argument, NULL, 'a'},
254 {"debugging", no_argument, &dump_debugging, 1},
255 {"demangle", no_argument, &do_demangle, 1},
256 {"disassemble", no_argument, NULL, 'd'},
257 {"disassemble-all", no_argument, NULL, 'D'},
258 {"disassemble-zeroes", no_argument, &disassemble_zeroes, 1},
259 {"dynamic-reloc", no_argument, NULL, 'R'},
260 {"dynamic-syms", no_argument, NULL, 'T'},
261 {"endian", required_argument, NULL, OPTION_ENDIAN},
262 {"file-headers", no_argument, NULL, 'f'},
263 {"full-contents", no_argument, NULL, 's'},
264 {"headers", no_argument, NULL, 'h'},
265 {"help", no_argument, NULL, 'H'},
266 {"info", no_argument, NULL, 'i'},
267 {"line-numbers", no_argument, NULL, 'l'},
268 {"no-show-raw-insn", no_argument, &show_raw_insn, -1},
269 {"prefix-addresses", no_argument, &prefix_addresses, 1},
270 {"reloc", no_argument, NULL, 'r'},
271 {"section", required_argument, NULL, 'j'},
272 {"section-headers", no_argument, NULL, 'h'},
273 {"show-raw-insn", no_argument, &show_raw_insn, 1},
274 {"source", no_argument, NULL, 'S'},
275 {"stabs", no_argument, &dump_stab_section_info, 1},
276 {"start-address", required_argument, NULL, OPTION_START_ADDRESS},
277 {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
278 {"syms", no_argument, NULL, 't'},
279 {"target", required_argument, NULL, 'b'},
280 {"version", no_argument, &show_version, 1},
281 {"wide", no_argument, &wide_output, 'w'},
282 {0, no_argument, 0, 0}
286 dump_section_header (abfd, section, ignored)
293 printf ("%3d %-13s %08lx ", section->index,
294 bfd_get_section_name (abfd, section),
295 (unsigned long) bfd_section_size (abfd, section));
296 printf_vma (bfd_get_section_vma (abfd, section));
298 printf_vma (section->lma);
299 printf (" %08lx 2**%u", section->filepos,
300 bfd_get_section_alignment (abfd, section));
306 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
308 PF (SEC_HAS_CONTENTS, "CONTENTS");
309 PF (SEC_ALLOC, "ALLOC");
310 PF (SEC_CONSTRUCTOR, "CONSTRUCTOR");
311 PF (SEC_CONSTRUCTOR_TEXT, "CONSTRUCTOR TEXT");
312 PF (SEC_CONSTRUCTOR_DATA, "CONSTRUCTOR DATA");
313 PF (SEC_CONSTRUCTOR_BSS, "CONSTRUCTOR BSS");
314 PF (SEC_LOAD, "LOAD");
315 PF (SEC_RELOC, "RELOC");
317 PF (SEC_BALIGN, "BALIGN");
319 PF (SEC_READONLY, "READONLY");
320 PF (SEC_CODE, "CODE");
321 PF (SEC_DATA, "DATA");
323 PF (SEC_DEBUGGING, "DEBUGGING");
324 PF (SEC_NEVER_LOAD, "NEVER_LOAD");
325 PF (SEC_EXCLUDE, "EXCLUDE");
326 PF (SEC_SORT_ENTRIES, "SORT_ENTRIES");
328 if ((section->flags & SEC_LINK_ONCE) != 0)
332 switch (section->flags & SEC_LINK_DUPLICATES)
336 case SEC_LINK_DUPLICATES_DISCARD:
337 ls = "LINK_ONCE_DISCARD";
339 case SEC_LINK_DUPLICATES_ONE_ONLY:
340 ls = "LINK_ONCE_ONE_ONLY";
342 case SEC_LINK_DUPLICATES_SAME_SIZE:
343 ls = "LINK_ONCE_SAME_SIZE";
345 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
346 ls = "LINK_ONCE_SAME_CONTENTS";
349 printf ("%s%s", comma, ls);
361 printf (_("Sections:\n"));
363 printf (_("Idx Name Size VMA LMA File off Algn\n"));
365 printf (_("Idx Name Size VMA LMA File off Algn\n"));
367 bfd_map_over_sections (abfd, dump_section_header, (PTR) NULL);
374 asymbol **sy = (asymbol **) NULL;
377 if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
379 printf (_("No symbols in \"%s\".\n"), bfd_get_filename (abfd));
384 storage = bfd_get_symtab_upper_bound (abfd);
386 bfd_fatal (bfd_get_filename (abfd));
390 sy = (asymbol **) xmalloc (storage);
392 symcount = bfd_canonicalize_symtab (abfd, sy);
394 bfd_fatal (bfd_get_filename (abfd));
396 fprintf (stderr, _("%s: %s: No symbols\n"),
397 program_name, bfd_get_filename (abfd));
401 /* Read in the dynamic symbols. */
404 slurp_dynamic_symtab (abfd)
407 asymbol **sy = (asymbol **) NULL;
410 storage = bfd_get_dynamic_symtab_upper_bound (abfd);
413 if (!(bfd_get_file_flags (abfd) & DYNAMIC))
415 fprintf (stderr, _("%s: %s: not a dynamic object\n"),
416 program_name, bfd_get_filename (abfd));
421 bfd_fatal (bfd_get_filename (abfd));
426 sy = (asymbol **) xmalloc (storage);
428 dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy);
430 bfd_fatal (bfd_get_filename (abfd));
431 if (dynsymcount == 0)
432 fprintf (stderr, _("%s: %s: No dynamic symbols\n"),
433 program_name, bfd_get_filename (abfd));
437 /* Filter out (in place) symbols that are useless for disassembly.
438 COUNT is the number of elements in SYMBOLS.
439 Return the number of useful symbols. */
442 remove_useless_symbols (symbols, count)
446 register asymbol **in_ptr = symbols, **out_ptr = symbols;
450 asymbol *sym = *in_ptr++;
452 if (sym->name == NULL || sym->name[0] == '\0')
454 if (sym->flags & (BSF_DEBUGGING))
456 if (bfd_is_und_section (sym->section)
457 || bfd_is_com_section (sym->section))
462 return out_ptr - symbols;
465 /* Sort symbols into value order. */
468 compare_symbols (ap, bp)
472 const asymbol *a = *(const asymbol **)ap;
473 const asymbol *b = *(const asymbol **)bp;
477 flagword aflags, bflags;
479 if (bfd_asymbol_value (a) > bfd_asymbol_value (b))
481 else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
484 if (a->section > b->section)
486 else if (a->section < b->section)
489 an = bfd_asymbol_name (a);
490 bn = bfd_asymbol_name (b);
494 /* The symbols gnu_compiled and gcc2_compiled convey no real
495 information, so put them after other symbols with the same value. */
497 af = (strstr (an, "gnu_compiled") != NULL
498 || strstr (an, "gcc2_compiled") != NULL);
499 bf = (strstr (bn, "gnu_compiled") != NULL
500 || strstr (bn, "gcc2_compiled") != NULL);
507 /* We use a heuristic for the file name, to try to sort it after
508 more useful symbols. It may not work on non Unix systems, but it
509 doesn't really matter; the only difference is precisely which
510 symbol names get printed. */
512 #define file_symbol(s, sn, snl) \
513 (((s)->flags & BSF_FILE) != 0 \
514 || ((sn)[(snl) - 2] == '.' \
515 && ((sn)[(snl) - 1] == 'o' \
516 || (sn)[(snl) - 1] == 'a')))
518 af = file_symbol (a, an, anl);
519 bf = file_symbol (b, bn, bnl);
526 /* Try to sort global symbols before local symbols before function
527 symbols before debugging symbols. */
532 if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))
534 if ((aflags & BSF_DEBUGGING) != 0)
539 if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
541 if ((aflags & BSF_FUNCTION) != 0)
546 if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
548 if ((aflags & BSF_LOCAL) != 0)
553 if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL))
555 if ((aflags & BSF_GLOBAL) != 0)
561 /* Symbols that start with '.' might be section names, so sort them
562 after symbols that don't start with '.'. */
563 if (an[0] == '.' && bn[0] != '.')
565 if (an[0] != '.' && bn[0] == '.')
568 /* Finally, if we can't distinguish them in any other way, try to
569 get consistent results by sorting the symbols by name. */
570 return strcmp (an, bn);
573 /* Sort relocs into address order. */
576 compare_relocs (ap, bp)
580 const arelent *a = *(const arelent **)ap;
581 const arelent *b = *(const arelent **)bp;
583 if (a->address > b->address)
585 else if (a->address < b->address)
588 /* So that associated relocations tied to the same address show up
589 in the correct order, we don't do any further sorting. */
598 /* Print VMA to STREAM. If SKIP_ZEROES is true, omit leading zeroes. */
601 objdump_print_value (vma, info, skip_zeroes)
603 struct disassemble_info *info;
609 sprintf_vma (buf, vma);
614 for (p = buf; *p == '0'; ++p)
619 (*info->fprintf_func) (info->stream, "%s", p);
622 /* Print the name of a symbol. */
625 objdump_print_symname (abfd, info, sym)
627 struct disassemble_info *info;
635 name = bfd_asymbol_name (sym);
636 if (! do_demangle || name[0] == '\0')
640 /* Demangle the name. */
641 if (bfd_get_symbol_leading_char (abfd) == name[0])
644 alloc = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
652 (*info->fprintf_func) (info->stream, "%s", print);
654 printf ("%s", print);
660 /* Locate a symbol given a bfd, a section, and a VMA. If REQUIRE_SEC
661 is true, then always require the symbol to be in the section. This
662 returns NULL if there is no suitable symbol. If PLACE is not NULL,
663 then *PLACE is set to the index of the symbol in sorted_syms. */
666 find_symbol_for_address (abfd, sec, vma, require_sec, place)
673 /* @@ Would it speed things up to cache the last two symbols returned,
674 and maybe their address ranges? For many processors, only one memory
675 operand can be present at a time, so the 2-entry cache wouldn't be
676 constantly churned by code doing heavy memory accesses. */
678 /* Indices in `sorted_syms'. */
680 long max = sorted_symcount;
683 if (sorted_symcount < 1)
686 /* Perform a binary search looking for the closest symbol to the
687 required value. We are searching the range (min, max]. */
688 while (min + 1 < max)
692 thisplace = (max + min) / 2;
693 sym = sorted_syms[thisplace];
695 if (bfd_asymbol_value (sym) > vma)
697 else if (bfd_asymbol_value (sym) < vma)
706 /* The symbol we want is now in min, the low end of the range we
707 were searching. If there are several symbols with the same
708 value, we want the first one. */
711 && (bfd_asymbol_value (sorted_syms[thisplace])
712 == bfd_asymbol_value (sorted_syms[thisplace - 1])))
715 /* If the file is relocateable, and the symbol could be from this
716 section, prefer a symbol from this section over symbols from
717 others, even if the other symbol's value might be closer.
719 Note that this may be wrong for some symbol references if the
720 sections have overlapping memory ranges, but in that case there's
721 no way to tell what's desired without looking at the relocation
724 if (sorted_syms[thisplace]->section != sec
726 || ((abfd->flags & HAS_RELOC) != 0
727 && vma >= bfd_get_section_vma (abfd, sec)
728 && vma < (bfd_get_section_vma (abfd, sec)
729 + bfd_section_size (abfd, sec)))))
733 for (i = thisplace + 1; i < sorted_symcount; i++)
735 if (bfd_asymbol_value (sorted_syms[i])
736 != bfd_asymbol_value (sorted_syms[thisplace]))
742 if (sorted_syms[i]->section == sec
744 || sorted_syms[i - 1]->section != sec
745 || (bfd_asymbol_value (sorted_syms[i])
746 != bfd_asymbol_value (sorted_syms[i - 1]))))
753 if (sorted_syms[thisplace]->section != sec)
755 /* We didn't find a good symbol with a smaller value.
756 Look for one with a larger value. */
757 for (i = thisplace + 1; i < sorted_symcount; i++)
759 if (sorted_syms[i]->section == sec)
767 if (sorted_syms[thisplace]->section != sec
769 || ((abfd->flags & HAS_RELOC) != 0
770 && vma >= bfd_get_section_vma (abfd, sec)
771 && vma < (bfd_get_section_vma (abfd, sec)
772 + bfd_section_size (abfd, sec)))))
774 /* There is no suitable symbol. */
782 return sorted_syms[thisplace];
785 /* Print an address to INFO symbolically. */
788 objdump_print_addr_with_sym (abfd, sec, sym, vma, info, skip_zeroes)
793 struct disassemble_info *info;
796 objdump_print_value (vma, info, skip_zeroes);
802 (*info->fprintf_func) (info->stream, " <%s",
803 bfd_get_section_name (abfd, sec));
804 secaddr = bfd_get_section_vma (abfd, sec);
807 (*info->fprintf_func) (info->stream, "-0x");
808 objdump_print_value (secaddr - vma, info, true);
810 else if (vma > secaddr)
812 (*info->fprintf_func) (info->stream, "+0x");
813 objdump_print_value (vma - secaddr, info, true);
815 (*info->fprintf_func) (info->stream, ">");
819 (*info->fprintf_func) (info->stream, " <");
820 objdump_print_symname (abfd, info, sym);
821 if (bfd_asymbol_value (sym) > vma)
823 (*info->fprintf_func) (info->stream, "-0x");
824 objdump_print_value (bfd_asymbol_value (sym) - vma, info, true);
826 else if (vma > bfd_asymbol_value (sym))
828 (*info->fprintf_func) (info->stream, "+0x");
829 objdump_print_value (vma - bfd_asymbol_value (sym), info, true);
831 (*info->fprintf_func) (info->stream, ">");
835 /* Print VMA to INFO, symbolically if possible. If SKIP_ZEROES is
836 true, don't output leading zeroes. */
839 objdump_print_addr (vma, info, skip_zeroes)
841 struct disassemble_info *info;
844 struct objdump_disasm_info *aux;
847 if (sorted_symcount < 1)
849 (*info->fprintf_func) (info->stream, "0x");
850 objdump_print_value (vma, info, skip_zeroes);
854 aux = (struct objdump_disasm_info *) info->application_data;
855 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
857 objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, info,
861 /* Print VMA to INFO. This function is passed to the disassembler
865 objdump_print_address (vma, info)
867 struct disassemble_info *info;
869 objdump_print_addr (vma, info, ! prefix_addresses);
872 /* Determine of the given address has a symbol associated with it. */
875 objdump_symbol_at_address (vma, info)
877 struct disassemble_info * info;
879 struct objdump_disasm_info * aux;
882 /* No symbols - do not bother checking. */
883 if (sorted_symcount < 1)
886 aux = (struct objdump_disasm_info *) info->application_data;
887 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
890 return (sym != NULL && (bfd_asymbol_value (sym) == vma));
893 /* Hold the last function name and the last line number we displayed
896 static char *prev_functionname;
897 static unsigned int prev_line;
899 /* We keep a list of all files that we have seen when doing a
900 dissassembly with source, so that we know how much of the file to
901 display. This can be important for inlined functions. */
903 struct print_file_list
905 struct print_file_list *next;
911 static struct print_file_list *print_files;
913 /* The number of preceding context lines to show when we start
914 displaying a file for the first time. */
916 #define SHOW_PRECEDING_CONTEXT_LINES (5)
918 /* Skip ahead to a given line in a file, optionally printing each
922 skip_to_line PARAMS ((struct print_file_list *, unsigned int, boolean));
925 skip_to_line (p, line, show)
926 struct print_file_list *p;
930 while (p->line < line)
934 if (fgets (buf, sizeof buf, p->f) == NULL)
944 if (strchr (buf, '\n') != NULL)
949 /* Show the line number, or the source line, in a dissassembly
953 show_line (abfd, section, off)
958 CONST char *filename;
959 CONST char *functionname;
962 if (! with_line_numbers && ! with_source_code)
965 if (! bfd_find_nearest_line (abfd, section, syms, off, &filename,
966 &functionname, &line))
969 if (filename != NULL && *filename == '\0')
971 if (functionname != NULL && *functionname == '\0')
974 if (with_line_numbers)
976 if (functionname != NULL
977 && (prev_functionname == NULL
978 || strcmp (functionname, prev_functionname) != 0))
979 printf ("%s():\n", functionname);
980 if (line > 0 && line != prev_line)
981 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
988 struct print_file_list **pp, *p;
990 for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
991 if (strcmp ((*pp)->filename, filename) == 0)
997 if (p != print_files)
1001 /* We have reencountered a file name which we saw
1002 earlier. This implies that either we are dumping out
1003 code from an included file, or the same file was
1004 linked in more than once. There are two common cases
1005 of an included file: inline functions in a header
1006 file, and a bison or flex skeleton file. In the
1007 former case we want to just start printing (but we
1008 back up a few lines to give context); in the latter
1009 case we want to continue from where we left off. I
1010 can't think of a good way to distinguish the cases,
1011 so I used a heuristic based on the file name. */
1012 if (strcmp (p->filename + strlen (p->filename) - 2, ".h") != 0)
1016 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1023 p->f = fopen (p->filename, "r");
1027 skip_to_line (p, l, false);
1029 if (print_files->f != NULL)
1031 fclose (print_files->f);
1032 print_files->f = NULL;
1038 skip_to_line (p, line, true);
1040 p->next = print_files;
1048 f = fopen (filename, "r");
1053 p = ((struct print_file_list *)
1054 xmalloc (sizeof (struct print_file_list)));
1055 p->filename = xmalloc (strlen (filename) + 1);
1056 strcpy (p->filename, filename);
1060 if (print_files != NULL && print_files->f != NULL)
1062 fclose (print_files->f);
1063 print_files->f = NULL;
1065 p->next = print_files;
1068 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1071 skip_to_line (p, l, false);
1073 skip_to_line (p, line, true);
1078 if (functionname != NULL
1079 && (prev_functionname == NULL
1080 || strcmp (functionname, prev_functionname) != 0))
1082 if (prev_functionname != NULL)
1083 free (prev_functionname);
1084 prev_functionname = xmalloc (strlen (functionname) + 1);
1085 strcpy (prev_functionname, functionname);
1088 if (line > 0 && line != prev_line)
1092 /* Pseudo FILE object for strings. */
1098 /* sprintf to a "stream" */
1100 #ifdef ANSI_PROTOTYPES
1102 objdump_sprintf (SFILE *f, const char *format, ...)
1107 va_start (args, format);
1108 vsprintf (f->current, format, args);
1109 f->current += n = strlen (f->current);
1115 objdump_sprintf (va_alist)
1124 f = va_arg (args, SFILE *);
1125 format = va_arg (args, const char *);
1126 vsprintf (f->current, format, args);
1127 f->current += n = strlen (f->current);
1133 /* The number of zeroes we want to see before we start skipping them.
1134 The number is arbitrarily chosen. */
1136 #define SKIP_ZEROES (8)
1138 /* The number of zeroes to skip at the end of a section. If the
1139 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1140 SKIP_ZEROES, they will be disassembled. If there are fewer than
1141 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1142 attempt to avoid disassembling zeroes inserted by section
1145 #define SKIP_ZEROES_AT_END (3)
1147 /* Disassemble some data in memory between given values. */
1150 disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
1152 struct disassemble_info *info;
1153 disassembler_ftype disassemble_fn;
1161 struct objdump_disasm_info *aux;
1165 int skip_addr_chars;
1168 aux = (struct objdump_disasm_info *) info->application_data;
1174 bytes_per_line = 16;
1176 /* Figure out how many characters to skip at the start of an
1177 address, to make the disassembly look nicer. We discard leading
1178 zeroes in chunks of 4, ensuring that there is always a leading
1180 skip_addr_chars = 0;
1181 if (! prefix_addresses)
1187 section->vma + bfd_section_size (section->owner, section));
1189 while (s[0] == '0' && s[1] == '0' && s[2] == '0' && s[3] == '0'
1192 skip_addr_chars += 4;
1197 info->insn_info_valid = 0;
1205 boolean need_nl = false;
1207 /* If we see more than SKIP_ZEROES bytes of zeroes, we just
1209 for (z = i; z < stop; z++)
1212 if (! disassemble_zeroes
1213 && (info->insn_info_valid == 0
1214 || info->branch_delay_insns == 0)
1215 && (z - i >= SKIP_ZEROES
1216 || (z == stop && z - i < SKIP_ZEROES_AT_END)))
1220 /* If there are more nonzero bytes to follow, we only skip
1221 zeroes in multiples of 4, to try to avoid running over
1222 the start of an instruction which happens to start with
1225 z = i + ((z - i) &~ 3);
1238 if (with_line_numbers || with_source_code)
1239 show_line (aux->abfd, section, i);
1241 if (! prefix_addresses)
1245 sprintf_vma (buf, section->vma + i);
1246 for (s = buf + skip_addr_chars; *s == '0'; s++)
1250 printf ("%s:\t", buf + skip_addr_chars);
1254 aux->require_sec = true;
1255 objdump_print_address (section->vma + i, info);
1256 aux->require_sec = false;
1262 sfile.buffer = sfile.current = buf;
1263 info->fprintf_func = (fprintf_ftype) objdump_sprintf;
1264 info->stream = (FILE *) &sfile;
1265 info->bytes_per_line = 0;
1266 info->bytes_per_chunk = 0;
1267 if ((*relppp < relppend) && ((**relppp)->address >= (bfd_vma) i &&
1268 (**relppp)->address < (bfd_vma) i + bytes))
1269 info->flags = INSN_HAS_RELOC;
1272 bytes = (*disassemble_fn) (section->vma + i, info);
1273 info->fprintf_func = (fprintf_ftype) fprintf;
1274 info->stream = stdout;
1275 if (info->bytes_per_line != 0)
1276 bytes_per_line = info->bytes_per_line;
1284 bytes = bytes_per_line;
1285 if (i + bytes > stop)
1288 for (j = i; j < i + bytes; ++j)
1290 if (isprint (data[j]))
1291 buf[j - i] = data[j];
1298 if (prefix_addresses
1300 : show_raw_insn >= 0)
1304 /* If ! prefix_addresses and ! wide_output, we print
1305 bytes_per_line bytes per line. */
1307 if (pb > bytes_per_line && ! prefix_addresses && ! wide_output)
1308 pb = bytes_per_line;
1310 if (info->bytes_per_chunk)
1311 bpc = info->bytes_per_chunk;
1315 for (j = i; j < i + pb; j += bpc)
1318 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1320 for (k = bpc - 1; k >= 0; k--)
1321 printf ("%02x", (unsigned) data[j + k]);
1326 for (k = 0; k < bpc; k++)
1327 printf ("%02x", (unsigned) data[j + k]);
1332 for (; pb < bytes_per_line; pb += bpc)
1336 for (k = 0; k < bpc; k++)
1341 /* Separate raw data from instruction by extra space. */
1350 if (prefix_addresses
1352 : show_raw_insn >= 0)
1362 sprintf_vma (buf, section->vma + j);
1363 for (s = buf + skip_addr_chars; *s == '0'; s++)
1367 printf ("%s:\t", buf + skip_addr_chars);
1369 pb += bytes_per_line;
1372 for (; j < i + pb; j += bpc)
1376 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1378 for (k = bpc - 1; k >= 0; k--)
1379 printf ("%02x", (unsigned) data[j + k]);
1384 for (k = 0; k < bpc; k++)
1385 printf ("%02x", (unsigned) data[j + k]);
1399 && (section->flags & SEC_RELOC) != 0)
1401 while ((*relppp) < relppend
1402 && ((**relppp)->address >= (bfd_vma) i
1403 && (**relppp)->address < (bfd_vma) i + bytes))
1414 objdump_print_value (section->vma + q->address, info, true);
1416 printf (": %s\t", q->howto->name);
1418 if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
1419 printf ("*unknown*");
1422 const char *sym_name;
1424 sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
1425 if (sym_name != NULL && *sym_name != '\0')
1426 objdump_print_symname (aux->abfd, info, *q->sym_ptr_ptr);
1431 sym_sec = bfd_get_section (*q->sym_ptr_ptr);
1432 sym_name = bfd_get_section_name (aux->abfd, sym_sec);
1433 if (sym_name == NULL || *sym_name == '\0')
1434 sym_name = "*unknown*";
1435 printf ("%s", sym_name);
1442 objdump_print_value (q->addend, info, true);
1458 /* Disassemble the contents of an object file. */
1461 disassemble_data (abfd)
1465 disassembler_ftype disassemble_fn;
1466 struct disassemble_info disasm_info;
1467 struct objdump_disasm_info aux;
1471 prev_functionname = NULL;
1474 /* We make a copy of syms to sort. We don't want to sort syms
1475 because that will screw up the relocs. */
1476 sorted_syms = (asymbol **) xmalloc (symcount * sizeof (asymbol *));
1477 memcpy (sorted_syms, syms, symcount * sizeof (asymbol *));
1479 sorted_symcount = remove_useless_symbols (sorted_syms, symcount);
1481 /* Sort the symbols into section and symbol order */
1482 qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
1484 INIT_DISASSEMBLE_INFO(disasm_info, stdout, fprintf);
1485 disasm_info.application_data = (PTR) &aux;
1487 aux.require_sec = false;
1488 disasm_info.print_address_func = objdump_print_address;
1489 disasm_info.symbol_at_address_func = objdump_symbol_at_address;
1491 if (machine != (char *) NULL)
1493 const bfd_arch_info_type *info = bfd_scan_arch (machine);
1496 fprintf (stderr, _("%s: Can't use supplied machine %s\n"),
1501 abfd->arch_info = info;
1504 if (endian != BFD_ENDIAN_UNKNOWN)
1506 struct bfd_target *xvec;
1508 xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
1509 memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
1510 xvec->byteorder = endian;
1514 disassemble_fn = disassembler (abfd);
1515 if (!disassemble_fn)
1517 fprintf (stderr, _("%s: Can't disassemble for architecture %s\n"),
1519 bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
1523 disasm_info.flavour = bfd_get_flavour (abfd);
1524 disasm_info.arch = bfd_get_arch (abfd);
1525 disasm_info.mach = bfd_get_mach (abfd);
1526 if (bfd_big_endian (abfd))
1527 disasm_info.endian = BFD_ENDIAN_BIG;
1528 else if (bfd_little_endian (abfd))
1529 disasm_info.endian = BFD_ENDIAN_LITTLE;
1531 /* ??? Aborting here seems too drastic. We could default to big or little
1533 disasm_info.endian = BFD_ENDIAN_UNKNOWN;
1535 for (section = abfd->sections;
1536 section != (asection *) NULL;
1537 section = section->next)
1539 bfd_byte *data = NULL;
1540 bfd_size_type datasize = 0;
1541 arelent **relbuf = NULL;
1542 arelent **relpp = NULL;
1543 arelent **relppend = NULL;
1545 asymbol *sym = NULL;
1548 if ((section->flags & SEC_LOAD) == 0
1549 || (! disassemble_all
1551 && (section->flags & SEC_CODE) == 0))
1553 if (only != (char *) NULL && strcmp (only, section->name) != 0)
1557 && (section->flags & SEC_RELOC) != 0)
1561 relsize = bfd_get_reloc_upper_bound (abfd, section);
1563 bfd_fatal (bfd_get_filename (abfd));
1569 relbuf = (arelent **) xmalloc (relsize);
1570 relcount = bfd_canonicalize_reloc (abfd, section, relbuf, syms);
1572 bfd_fatal (bfd_get_filename (abfd));
1574 /* Sort the relocs by address. */
1575 qsort (relbuf, relcount, sizeof (arelent *), compare_relocs);
1578 relppend = relpp + relcount;
1582 printf (_("Disassembly of section %s:\n"), section->name);
1584 datasize = bfd_get_section_size_before_reloc (section);
1588 data = (bfd_byte *) xmalloc ((size_t) datasize);
1590 bfd_get_section_contents (abfd, section, data, 0, datasize);
1593 disasm_info.buffer = data;
1594 disasm_info.buffer_vma = section->vma;
1595 disasm_info.buffer_length = datasize;
1596 if (start_address == (bfd_vma) -1
1597 || start_address < disasm_info.buffer_vma)
1600 i = start_address - disasm_info.buffer_vma;
1601 if (stop_address == (bfd_vma) -1)
1605 if (stop_address < disasm_info.buffer_vma)
1608 stop = stop_address - disasm_info.buffer_vma;
1609 if (stop > disasm_info.buffer_length)
1610 stop = disasm_info.buffer_length;
1613 sym = find_symbol_for_address (abfd, section, section->vma + i,
1622 if (sym != NULL && bfd_asymbol_value (sym) <= section->vma + i)
1627 (x < sorted_symcount
1628 && bfd_asymbol_value (sorted_syms[x]) <= section->vma + i);
1631 disasm_info.symbols = & sorted_syms[place];
1632 disasm_info.num_symbols = x - place;
1635 disasm_info.symbols = NULL;
1637 if (! prefix_addresses)
1640 objdump_print_addr_with_sym (abfd, section, sym,
1647 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1649 else if (sym == NULL)
1653 while (place < sorted_symcount
1654 /* ??? Why the test for != section? */
1655 && (sorted_syms[place]->section != section
1656 || (bfd_asymbol_value (sorted_syms[place])
1657 <= bfd_asymbol_value (sym))))
1659 if (place >= sorted_symcount)
1662 nextsym = sorted_syms[place];
1665 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1667 nextstop = bfd_asymbol_value (sym) - section->vma;
1668 if (nextstop > stop)
1671 else if (nextsym == NULL)
1675 nextstop = bfd_asymbol_value (nextsym) - section->vma;
1676 if (nextstop > stop)
1680 /* If a symbol is explicitly marked as being an object
1681 rather than a function, just dump the bytes without
1682 disassembling them. */
1685 || bfd_asymbol_value (sym) > section->vma + i
1686 || ((sym->flags & BSF_OBJECT) == 0
1687 && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
1689 && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
1691 || (sym->flags & BSF_FUNCTION) != 0)
1696 disassemble_bytes (&disasm_info, disassemble_fn, insns, data, i,
1697 nextstop, &relpp, relppend);
1711 /* Define a table of stab values and print-strings. We wish the initializer
1712 could be a direct-mapped table, but instead we build one the first
1715 static void dump_section_stabs PARAMS ((bfd *abfd, char *stabsect_name,
1716 char *strsect_name));
1718 /* Dump the stabs sections from an object file that has a section that
1719 uses Sun stabs encoding. */
1725 dump_section_stabs (abfd, ".stab", ".stabstr");
1726 dump_section_stabs (abfd, ".stab.excl", ".stab.exclstr");
1727 dump_section_stabs (abfd, ".stab.index", ".stab.indexstr");
1728 dump_section_stabs (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
1731 static bfd_byte *stabs;
1732 static bfd_size_type stab_size;
1734 static char *strtab;
1735 static bfd_size_type stabstr_size;
1737 /* Read ABFD's stabs section STABSECT_NAME into `stabs'
1738 and string table section STRSECT_NAME into `strtab'.
1739 If the section exists and was read, allocate the space and return true.
1740 Otherwise return false. */
1743 read_section_stabs (abfd, stabsect_name, strsect_name)
1745 const char *stabsect_name;
1746 const char *strsect_name;
1748 asection *stabsect, *stabstrsect;
1750 stabsect = bfd_get_section_by_name (abfd, stabsect_name);
1753 printf (_("No %s section present\n\n"), stabsect_name);
1757 stabstrsect = bfd_get_section_by_name (abfd, strsect_name);
1758 if (0 == stabstrsect)
1760 fprintf (stderr, _("%s: %s has no %s section\n"), program_name,
1761 bfd_get_filename (abfd), strsect_name);
1765 stab_size = bfd_section_size (abfd, stabsect);
1766 stabstr_size = bfd_section_size (abfd, stabstrsect);
1768 stabs = (bfd_byte *) xmalloc (stab_size);
1769 strtab = (char *) xmalloc (stabstr_size);
1771 if (! bfd_get_section_contents (abfd, stabsect, (PTR) stabs, 0, stab_size))
1773 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1774 program_name, stabsect_name, bfd_get_filename (abfd),
1775 bfd_errmsg (bfd_get_error ()));
1781 if (! bfd_get_section_contents (abfd, stabstrsect, (PTR) strtab, 0,
1784 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1785 program_name, strsect_name, bfd_get_filename (abfd),
1786 bfd_errmsg (bfd_get_error ()));
1795 /* Stabs entries use a 12 byte format:
1796 4 byte string table index
1798 1 byte stab other field
1799 2 byte stab desc field
1801 FIXME: This will have to change for a 64 bit object format. */
1803 #define STRDXOFF (0)
1805 #define OTHEROFF (5)
1808 #define STABSIZE (12)
1810 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
1811 using string table section STRSECT_NAME (in `strtab'). */
1814 print_section_stabs (abfd, stabsect_name, strsect_name)
1816 const char *stabsect_name;
1817 const char *strsect_name;
1820 unsigned file_string_table_offset = 0, next_file_string_table_offset = 0;
1821 bfd_byte *stabp, *stabs_end;
1824 stabs_end = stabp + stab_size;
1826 printf (_("Contents of %s section:\n\n"), stabsect_name);
1827 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
1829 /* Loop through all symbols and print them.
1831 We start the index at -1 because there is a dummy symbol on
1832 the front of stabs-in-{coff,elf} sections that supplies sizes. */
1834 for (i = -1; stabp < stabs_end; stabp += STABSIZE, i++)
1838 unsigned char type, other;
1839 unsigned short desc;
1842 strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
1843 type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
1844 other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
1845 desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
1846 value = bfd_h_get_32 (abfd, stabp + VALOFF);
1848 printf ("\n%-6d ", i);
1849 /* Either print the stab name, or, if unnamed, print its number
1850 again (makes consistent formatting for tools like awk). */
1851 name = bfd_get_stab_name (type);
1853 printf ("%-6s", name);
1854 else if (type == N_UNDF)
1857 printf ("%-6d", type);
1858 printf (" %-6d %-6d ", other, desc);
1860 printf (" %-6lu", strx);
1862 /* Symbols with type == 0 (N_UNDF) specify the length of the
1863 string table associated with this file. We use that info
1864 to know how to relocate the *next* file's string table indices. */
1868 file_string_table_offset = next_file_string_table_offset;
1869 next_file_string_table_offset += value;
1873 /* Using the (possibly updated) string table offset, print the
1874 string (if any) associated with this symbol. */
1876 if ((strx + file_string_table_offset) < stabstr_size)
1877 printf (" %s", &strtab[strx + file_string_table_offset]);
1886 dump_section_stabs (abfd, stabsect_name, strsect_name)
1888 char *stabsect_name;
1893 /* Check for section names for which stabsect_name is a prefix, to
1894 handle .stab0, etc. */
1895 for (s = abfd->sections;
1901 len = strlen (stabsect_name);
1903 /* If the prefix matches, and the files section name ends with a
1904 nul or a digit, then we match. I.e., we want either an exact
1905 match or a section followed by a number. */
1906 if (strncmp (stabsect_name, s->name, len) == 0
1907 && (s->name[len] == '\000'
1908 || isdigit ((unsigned char) s->name[len])))
1910 if (read_section_stabs (abfd, s->name, strsect_name))
1912 print_section_stabs (abfd, s->name, strsect_name);
1921 dump_bfd_header (abfd)
1926 printf (_("architecture: %s, "),
1927 bfd_printable_arch_mach (bfd_get_arch (abfd),
1928 bfd_get_mach (abfd)));
1929 printf (_("flags 0x%08x:\n"), abfd->flags);
1931 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
1932 PF (HAS_RELOC, "HAS_RELOC");
1933 PF (EXEC_P, "EXEC_P");
1934 PF (HAS_LINENO, "HAS_LINENO");
1935 PF (HAS_DEBUG, "HAS_DEBUG");
1936 PF (HAS_SYMS, "HAS_SYMS");
1937 PF (HAS_LOCALS, "HAS_LOCALS");
1938 PF (DYNAMIC, "DYNAMIC");
1939 PF (WP_TEXT, "WP_TEXT");
1940 PF (D_PAGED, "D_PAGED");
1941 PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
1942 printf (_("\nstart address 0x"));
1943 printf_vma (abfd->start_address);
1948 dump_bfd_private_header (abfd)
1951 bfd_print_private_bfd_data (abfd, stdout);
1960 if (!bfd_check_format_matches (abfd, bfd_object, &matching))
1962 bfd_nonfatal (bfd_get_filename (abfd));
1963 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
1965 list_matching_formats (matching);
1971 /* If we are adjusting section VMA's, change them all now. Changing
1972 the BFD information is a hack. However, we must do it, or
1973 bfd_find_nearest_line will not do the right thing. */
1974 if (adjust_section_vma != 0)
1978 for (s = abfd->sections; s != NULL; s = s->next)
1980 s->vma += adjust_section_vma;
1981 s->lma += adjust_section_vma;
1985 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd),
1988 print_arelt_descr (stdout, abfd, true);
1989 if (dump_file_header)
1990 dump_bfd_header (abfd);
1991 if (dump_private_headers)
1992 dump_bfd_private_header (abfd);
1994 if (dump_section_headers)
1995 dump_headers (abfd);
1996 if (dump_symtab || dump_reloc_info || disassemble || dump_debugging)
1998 syms = slurp_symtab (abfd);
2000 if (dump_dynamic_symtab || dump_dynamic_reloc_info)
2002 dynsyms = slurp_dynamic_symtab (abfd);
2005 dump_symbols (abfd, false);
2006 if (dump_dynamic_symtab)
2007 dump_symbols (abfd, true);
2008 if (dump_stab_section_info)
2010 if (dump_reloc_info && ! disassemble)
2012 if (dump_dynamic_reloc_info)
2013 dump_dynamic_relocs (abfd);
2014 if (dump_section_contents)
2017 disassemble_data (abfd);
2022 dhandle = read_debugging_info (abfd, syms, symcount);
2023 if (dhandle != NULL)
2025 if (! print_debugging_info (stdout, dhandle))
2026 fprintf (stderr, _("%s: printing debugging information failed\n"),
2027 bfd_get_filename (abfd));
2043 display_file (filename, target)
2047 bfd *file, *arfile = (bfd *) NULL;
2049 file = bfd_openr (filename, target);
2052 bfd_nonfatal (filename);
2056 if (bfd_check_format (file, bfd_archive) == true)
2058 bfd *last_arfile = NULL;
2060 printf (_("In archive %s:\n"), bfd_get_filename (file));
2063 bfd_set_error (bfd_error_no_error);
2065 arfile = bfd_openr_next_archived_file (file, arfile);
2068 if (bfd_get_error () != bfd_error_no_more_archived_files)
2070 bfd_nonfatal (bfd_get_filename (file));
2075 display_bfd (arfile);
2077 if (last_arfile != NULL)
2078 bfd_close (last_arfile);
2079 last_arfile = arfile;
2082 if (last_arfile != NULL)
2083 bfd_close (last_arfile);
2091 /* Actually display the various requested regions */
2099 bfd_size_type datasize = 0;
2101 bfd_size_type start, stop;
2103 for (section = abfd->sections; section != NULL; section =
2108 if (only == (char *) NULL ||
2109 strcmp (only, section->name) == 0)
2111 if (section->flags & SEC_HAS_CONTENTS)
2113 printf (_("Contents of section %s:\n"), section->name);
2115 if (bfd_section_size (abfd, section) == 0)
2117 data = (bfd_byte *) xmalloc ((size_t) bfd_section_size (abfd, section));
2118 datasize = bfd_section_size (abfd, section);
2121 bfd_get_section_contents (abfd, section, (PTR) data, 0, bfd_section_size (abfd, section));
2123 if (start_address == (bfd_vma) -1
2124 || start_address < section->vma)
2127 start = start_address - section->vma;
2128 if (stop_address == (bfd_vma) -1)
2129 stop = bfd_section_size (abfd, section);
2132 if (stop_address < section->vma)
2135 stop = stop_address - section->vma;
2136 if (stop > bfd_section_size (abfd, section))
2137 stop = bfd_section_size (abfd, section);
2139 for (i = start; i < stop; i += onaline)
2143 printf (" %04lx ", (unsigned long int) (i + section->vma));
2144 for (j = i; j < i + onaline; j++)
2147 printf ("%02x", (unsigned) (data[j]));
2155 for (j = i; j < i + onaline; j++)
2160 printf ("%c", isprint (data[j]) ? data[j] : '.');
2170 /* Should perhaps share code and display with nm? */
2172 dump_symbols (abfd, dynamic)
2186 printf ("DYNAMIC SYMBOL TABLE:\n");
2194 printf ("SYMBOL TABLE:\n");
2197 for (count = 0; count < max; count++)
2201 bfd *cur_bfd = bfd_asymbol_bfd (*current);
2203 if (cur_bfd != NULL)
2208 name = bfd_asymbol_name (*current);
2210 if (do_demangle && name != NULL && *name != '\0')
2214 /* If we want to demangle the name, we demangle it
2215 here, and temporarily clobber it while calling
2216 bfd_print_symbol. FIXME: This is a gross hack. */
2219 if (bfd_get_symbol_leading_char (cur_bfd) == *n)
2221 alloc = cplus_demangle (n, DMGL_ANSI | DMGL_PARAMS);
2223 (*current)->name = alloc;
2225 (*current)->name = n;
2228 bfd_print_symbol (cur_bfd, stdout, *current,
2229 bfd_print_symbol_all);
2231 (*current)->name = name;
2252 for (a = abfd->sections; a != (asection *) NULL; a = a->next)
2256 if (bfd_is_abs_section (a))
2258 if (bfd_is_und_section (a))
2260 if (bfd_is_com_section (a))
2265 if (strcmp (only, a->name))
2268 else if ((a->flags & SEC_RELOC) == 0)
2271 relsize = bfd_get_reloc_upper_bound (abfd, a);
2273 bfd_fatal (bfd_get_filename (abfd));
2275 printf ("RELOCATION RECORDS FOR [%s]:", a->name);
2279 printf (" (none)\n\n");
2283 relpp = (arelent **) xmalloc (relsize);
2284 relcount = bfd_canonicalize_reloc (abfd, a, relpp, syms);
2286 bfd_fatal (bfd_get_filename (abfd));
2287 else if (relcount == 0)
2289 printf (" (none)\n\n");
2294 dump_reloc_set (abfd, a, relpp, relcount);
2303 dump_dynamic_relocs (abfd)
2310 relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2312 bfd_fatal (bfd_get_filename (abfd));
2314 printf ("DYNAMIC RELOCATION RECORDS");
2318 printf (" (none)\n\n");
2322 relpp = (arelent **) xmalloc (relsize);
2323 relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
2325 bfd_fatal (bfd_get_filename (abfd));
2326 else if (relcount == 0)
2328 printf (" (none)\n\n");
2333 dump_reloc_set (abfd, (asection *) NULL, relpp, relcount);
2341 dump_reloc_set (abfd, sec, relpp, relcount)
2348 char *last_filename, *last_functionname;
2349 unsigned int last_line;
2351 /* Get column headers lined up reasonably. */
2357 sprintf_vma (buf, (bfd_vma) -1);
2358 width = strlen (buf) - 7;
2360 printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
2363 last_filename = NULL;
2364 last_functionname = NULL;
2367 for (p = relpp; relcount && *p != (arelent *) NULL; p++, relcount--)
2370 const char *filename, *functionname;
2372 const char *sym_name;
2373 const char *section_name;
2375 if (start_address != (bfd_vma) -1
2376 && q->address < start_address)
2378 if (stop_address != (bfd_vma) -1
2379 && q->address > stop_address)
2382 if (with_line_numbers
2384 && bfd_find_nearest_line (abfd, sec, syms, q->address,
2385 &filename, &functionname, &line))
2387 if (functionname != NULL
2388 && (last_functionname == NULL
2389 || strcmp (functionname, last_functionname) != 0))
2391 printf ("%s():\n", functionname);
2392 if (last_functionname != NULL)
2393 free (last_functionname);
2394 last_functionname = xstrdup (functionname);
2397 && (line != last_line
2398 || (filename != NULL
2399 && last_filename != NULL
2400 && strcmp (filename, last_filename) != 0)))
2402 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
2404 if (last_filename != NULL)
2405 free (last_filename);
2406 if (filename == NULL)
2407 last_filename = NULL;
2409 last_filename = xstrdup (filename);
2413 if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
2415 sym_name = (*(q->sym_ptr_ptr))->name;
2416 section_name = (*(q->sym_ptr_ptr))->section->name;
2421 section_name = NULL;
2425 printf_vma (q->address);
2426 printf (" %-16s ", q->howto->name);
2427 objdump_print_symname (abfd, (struct disassemble_info *) NULL,
2432 if (section_name == (CONST char *) NULL)
2433 section_name = "*unknown*";
2434 printf_vma (q->address);
2435 printf (" %-16s [%s]",
2442 printf_vma (q->addend);
2448 /* The length of the longest architecture name + 1. */
2449 #define LONGEST_ARCH sizeof("rs6000:6000")
2452 endian_string (endian)
2453 enum bfd_endian endian;
2455 if (endian == BFD_ENDIAN_BIG)
2456 return "big endian";
2457 else if (endian == BFD_ENDIAN_LITTLE)
2458 return "little endian";
2460 return "endianness unknown";
2463 /* List the targets that BFD is configured to support, each followed
2464 by its endianness and the architectures it supports. */
2467 display_target_list ()
2469 extern bfd_target *bfd_target_vector[];
2473 dummy_name = choose_temp_base ();
2474 for (t = 0; bfd_target_vector[t]; t++)
2476 bfd_target *p = bfd_target_vector[t];
2477 bfd *abfd = bfd_openw (dummy_name, p->name);
2480 printf ("%s\n (header %s, data %s)\n", p->name,
2481 endian_string (p->header_byteorder),
2482 endian_string (p->byteorder));
2486 bfd_nonfatal (dummy_name);
2490 if (! bfd_set_format (abfd, bfd_object))
2492 if (bfd_get_error () != bfd_error_invalid_operation)
2493 bfd_nonfatal (p->name);
2497 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2498 if (bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0))
2500 bfd_printable_arch_mach ((enum bfd_architecture) a, 0));
2502 unlink (dummy_name);
2506 /* Print a table showing which architectures are supported for entries
2507 FIRST through LAST-1 of bfd_target_vector (targets across,
2508 architectures down). */
2511 display_info_table (first, last)
2515 extern bfd_target *bfd_target_vector[];
2519 /* Print heading of target names. */
2520 printf ("\n%*s", (int) LONGEST_ARCH, " ");
2521 for (t = first; t < last && bfd_target_vector[t]; t++)
2522 printf ("%s ", bfd_target_vector[t]->name);
2525 dummy_name = choose_temp_base ();
2526 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2527 if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0)
2529 printf ("%*s ", (int) LONGEST_ARCH - 1,
2530 bfd_printable_arch_mach (a, 0));
2531 for (t = first; t < last && bfd_target_vector[t]; t++)
2533 bfd_target *p = bfd_target_vector[t];
2535 bfd *abfd = bfd_openw (dummy_name, p->name);
2539 bfd_nonfatal (p->name);
2545 if (! bfd_set_format (abfd, bfd_object))
2547 if (bfd_get_error () != bfd_error_invalid_operation)
2548 bfd_nonfatal (p->name);
2555 if (! bfd_set_arch_mach (abfd, a, 0))
2560 printf ("%s ", p->name);
2563 int l = strlen (p->name);
2571 unlink (dummy_name);
2575 /* Print tables of all the target-architecture combinations that
2576 BFD has been configured to support. */
2579 display_target_tables ()
2582 extern bfd_target *bfd_target_vector[];
2586 colum = getenv ("COLUMNS");
2588 columns = atoi (colum);
2593 while (bfd_target_vector[t] != NULL)
2597 wid = LONGEST_ARCH + strlen (bfd_target_vector[t]->name) + 1;
2599 while (wid < columns && bfd_target_vector[t] != NULL)
2603 newwid = wid + strlen (bfd_target_vector[t]->name) + 1;
2604 if (newwid >= columns)
2609 display_info_table (oldt, t);
2616 printf (_("BFD header file version %s\n"), BFD_VERSION);
2617 display_target_list ();
2618 display_target_tables ();
2627 char *target = default_target;
2628 boolean seenflag = false;
2630 setlocale (LC_MESSAGES, "");
2631 bindtextdomain (PACKAGE, LOCALEDIR);
2632 textdomain (PACKAGE);
2634 program_name = *argv;
2635 xmalloc_set_program_name (program_name);
2637 START_PROGRESS (program_name, 0);
2640 set_default_bfd_target ();
2642 while ((c = getopt_long (argc, argv, "pib:m:VCdDlfahrRtTxsSj:wE:",
2643 long_options, (int *) 0))
2646 if (c != 'l' && c != OPTION_START_ADDRESS && c != OPTION_STOP_ADDRESS)
2651 break; /* we've been given a long option */
2659 with_line_numbers = 1;
2665 dump_file_header = true;
2668 formats_info = true;
2671 dump_private_headers = 1;
2674 dump_private_headers = 1;
2676 dump_reloc_info = 1;
2677 dump_file_header = true;
2679 dump_section_headers = 1;
2685 dump_dynamic_symtab = 1;
2694 disassemble = disassemble_all = true;
2698 with_source_code = true;
2701 dump_section_contents = 1;
2704 dump_reloc_info = 1;
2707 dump_dynamic_reloc_info = 1;
2713 dump_section_headers = 1;
2723 case OPTION_ADJUST_VMA:
2724 adjust_section_vma = parse_vma (optarg, "--adjust-vma");
2726 case OPTION_START_ADDRESS:
2727 start_address = parse_vma (optarg, "--start-address");
2729 case OPTION_STOP_ADDRESS:
2730 stop_address = parse_vma (optarg, "--stop-address");
2733 if (strcmp (optarg, "B") == 0)
2734 endian = BFD_ENDIAN_BIG;
2735 else if (strcmp (optarg, "L") == 0)
2736 endian = BFD_ENDIAN_LITTLE;
2739 fprintf (stderr, _("%s: unrecognized -E option\n"), program_name);
2744 if (strncmp (optarg, "big", strlen (optarg)) == 0)
2745 endian = BFD_ENDIAN_BIG;
2746 else if (strncmp (optarg, "little", strlen (optarg)) == 0)
2747 endian = BFD_ENDIAN_LITTLE;
2750 fprintf (stderr, _("%s: unrecognized --endian type `%s'\n"),
2751 program_name, optarg);
2761 print_version ("objdump");
2763 if (seenflag == false)
2773 display_file ("a.out", target);
2775 for (; optind < argc;)
2776 display_file (argv[optind++], target);
2779 END_PROGRESS (program_name);