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, _("\
229 Usage: %s [-ahifCdDprRtTxsSlw] [-b bfdname] [-m machine] \n\
230 [-j section-name] [-M disassembler-options]\n\
231 [--archive-headers] [--target=bfdname] [--debugging] [--disassemble]\n\
232 [--disassemble-all] [--disassemble-zeroes] [--file-headers]\n\
233 [--section-headers] [--headers]\n\
234 [--info] [--section=section-name] [--line-numbers] [--source]\n"),
236 fprintf (stream, _("\
237 [--architecture=machine] [--reloc] [--full-contents] [--stabs]\n\
238 [--syms] [--all-headers] [--dynamic-syms] [--dynamic-reloc]\n\
239 [--wide] [--version] [--help] [--private-headers]\n\
240 [--start-address=addr] [--stop-address=addr]\n\
241 [--prefix-addresses] [--[no-]show-raw-insn] [--demangle]\n\
242 [--adjust-vma=offset] [-EB|-EL] [--endian={big|little}] objfile...\n\
243 at least one option besides -l (--line-numbers) must be given\n"));
244 list_supported_targets (program_name, stream);
246 fprintf (stream, _("Report bugs to bug-gnu-utils@gnu.org\n"));
250 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
252 #define OPTION_ENDIAN (150)
253 #define OPTION_START_ADDRESS (OPTION_ENDIAN + 1)
254 #define OPTION_STOP_ADDRESS (OPTION_START_ADDRESS + 1)
255 #define OPTION_ADJUST_VMA (OPTION_STOP_ADDRESS + 1)
257 static struct option long_options[]=
259 {"adjust-vma", required_argument, NULL, OPTION_ADJUST_VMA},
260 {"all-headers", no_argument, NULL, 'x'},
261 {"private-headers", no_argument, NULL, 'p'},
262 {"architecture", required_argument, NULL, 'm'},
263 {"archive-headers", no_argument, NULL, 'a'},
264 {"debugging", no_argument, &dump_debugging, 1},
265 {"demangle", no_argument, &do_demangle, 1},
266 {"disassemble", no_argument, NULL, 'd'},
267 {"disassemble-all", no_argument, NULL, 'D'},
268 {"disassembler-options", required_argument, NULL, 'M'},
269 {"disassemble-zeroes", no_argument, &disassemble_zeroes, 1},
270 {"dynamic-reloc", no_argument, NULL, 'R'},
271 {"dynamic-syms", no_argument, NULL, 'T'},
272 {"endian", required_argument, NULL, OPTION_ENDIAN},
273 {"file-headers", no_argument, NULL, 'f'},
274 {"full-contents", no_argument, NULL, 's'},
275 {"headers", no_argument, NULL, 'h'},
276 {"help", no_argument, NULL, 'H'},
277 {"info", no_argument, NULL, 'i'},
278 {"line-numbers", no_argument, NULL, 'l'},
279 {"no-show-raw-insn", no_argument, &show_raw_insn, -1},
280 {"prefix-addresses", no_argument, &prefix_addresses, 1},
281 {"reloc", no_argument, NULL, 'r'},
282 {"section", required_argument, NULL, 'j'},
283 {"section-headers", no_argument, NULL, 'h'},
284 {"show-raw-insn", no_argument, &show_raw_insn, 1},
285 {"source", no_argument, NULL, 'S'},
286 {"stabs", no_argument, &dump_stab_section_info, 1},
287 {"start-address", required_argument, NULL, OPTION_START_ADDRESS},
288 {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
289 {"syms", no_argument, NULL, 't'},
290 {"target", required_argument, NULL, 'b'},
291 {"version", no_argument, &show_version, 1},
292 {"wide", no_argument, &wide_output, 'w'},
293 {0, no_argument, 0, 0}
305 dump_section_header (abfd, section, ignored)
306 bfd *abfd ATTRIBUTE_UNUSED;
308 PTR ignored ATTRIBUTE_UNUSED;
312 printf ("%3d %-13s %08lx ", section->index,
313 bfd_get_section_name (abfd, section),
314 (unsigned long) bfd_section_size (abfd, section));
315 printf_vma (bfd_get_section_vma (abfd, section));
317 printf_vma (section->lma);
318 printf (" %08lx 2**%u", section->filepos,
319 bfd_get_section_alignment (abfd, section));
325 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
327 PF (SEC_HAS_CONTENTS, "CONTENTS");
328 PF (SEC_ALLOC, "ALLOC");
329 PF (SEC_CONSTRUCTOR, "CONSTRUCTOR");
330 PF (SEC_CONSTRUCTOR_TEXT, "CONSTRUCTOR TEXT");
331 PF (SEC_CONSTRUCTOR_DATA, "CONSTRUCTOR DATA");
332 PF (SEC_CONSTRUCTOR_BSS, "CONSTRUCTOR BSS");
333 PF (SEC_LOAD, "LOAD");
334 PF (SEC_RELOC, "RELOC");
336 PF (SEC_BALIGN, "BALIGN");
338 PF (SEC_READONLY, "READONLY");
339 PF (SEC_CODE, "CODE");
340 PF (SEC_DATA, "DATA");
342 PF (SEC_DEBUGGING, "DEBUGGING");
343 PF (SEC_NEVER_LOAD, "NEVER_LOAD");
344 PF (SEC_EXCLUDE, "EXCLUDE");
345 PF (SEC_SORT_ENTRIES, "SORT_ENTRIES");
346 PF (SEC_SMALL_DATA, "SMALL_DATA");
347 PF (SEC_SHARED, "SHARED");
349 if ((section->flags & SEC_LINK_ONCE) != 0)
353 switch (section->flags & SEC_LINK_DUPLICATES)
357 case SEC_LINK_DUPLICATES_DISCARD:
358 ls = "LINK_ONCE_DISCARD";
360 case SEC_LINK_DUPLICATES_ONE_ONLY:
361 ls = "LINK_ONCE_ONE_ONLY";
363 case SEC_LINK_DUPLICATES_SAME_SIZE:
364 ls = "LINK_ONCE_SAME_SIZE";
366 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
367 ls = "LINK_ONCE_SAME_CONTENTS";
370 printf ("%s%s", comma, ls);
372 if (section->comdat != NULL)
373 printf (" (COMDAT %s %ld)", section->comdat->name,
374 section->comdat->symbol);
387 printf (_("Sections:\n"));
390 printf (_("Idx Name Size VMA LMA File off Algn"));
392 printf (_("Idx Name Size VMA LMA File off Algn"));
396 printf (_(" Flags"));
399 bfd_map_over_sections (abfd, dump_section_header, (PTR) NULL);
406 asymbol **sy = (asymbol **) NULL;
409 if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
411 fprintf (stderr, _("%s: no symbols\n"), bfd_get_filename (abfd));
416 storage = bfd_get_symtab_upper_bound (abfd);
418 bfd_fatal (bfd_get_filename (abfd));
422 sy = (asymbol **) xmalloc (storage);
424 symcount = bfd_canonicalize_symtab (abfd, sy);
426 bfd_fatal (bfd_get_filename (abfd));
428 fprintf (stderr, _("%s: no symbols\n"), bfd_get_filename (abfd));
432 /* Read in the dynamic symbols. */
435 slurp_dynamic_symtab (abfd)
438 asymbol **sy = (asymbol **) NULL;
441 storage = bfd_get_dynamic_symtab_upper_bound (abfd);
444 if (!(bfd_get_file_flags (abfd) & DYNAMIC))
446 fprintf (stderr, _("%s: %s: not a dynamic object\n"),
447 program_name, bfd_get_filename (abfd));
452 bfd_fatal (bfd_get_filename (abfd));
457 sy = (asymbol **) xmalloc (storage);
459 dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy);
461 bfd_fatal (bfd_get_filename (abfd));
462 if (dynsymcount == 0)
463 fprintf (stderr, _("%s: %s: No dynamic symbols\n"),
464 program_name, bfd_get_filename (abfd));
468 /* Filter out (in place) symbols that are useless for disassembly.
469 COUNT is the number of elements in SYMBOLS.
470 Return the number of useful symbols. */
473 remove_useless_symbols (symbols, count)
477 register asymbol **in_ptr = symbols, **out_ptr = symbols;
481 asymbol *sym = *in_ptr++;
483 if (sym->name == NULL || sym->name[0] == '\0')
485 if (sym->flags & (BSF_DEBUGGING))
487 if (bfd_is_und_section (sym->section)
488 || bfd_is_com_section (sym->section))
493 return out_ptr - symbols;
496 /* Sort symbols into value order. */
499 compare_symbols (ap, bp)
503 const asymbol *a = *(const asymbol **)ap;
504 const asymbol *b = *(const asymbol **)bp;
508 flagword aflags, bflags;
510 if (bfd_asymbol_value (a) > bfd_asymbol_value (b))
512 else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
515 if (a->section > b->section)
517 else if (a->section < b->section)
520 an = bfd_asymbol_name (a);
521 bn = bfd_asymbol_name (b);
525 /* The symbols gnu_compiled and gcc2_compiled convey no real
526 information, so put them after other symbols with the same value. */
528 af = (strstr (an, "gnu_compiled") != NULL
529 || strstr (an, "gcc2_compiled") != NULL);
530 bf = (strstr (bn, "gnu_compiled") != NULL
531 || strstr (bn, "gcc2_compiled") != NULL);
538 /* We use a heuristic for the file name, to try to sort it after
539 more useful symbols. It may not work on non Unix systems, but it
540 doesn't really matter; the only difference is precisely which
541 symbol names get printed. */
543 #define file_symbol(s, sn, snl) \
544 (((s)->flags & BSF_FILE) != 0 \
545 || ((sn)[(snl) - 2] == '.' \
546 && ((sn)[(snl) - 1] == 'o' \
547 || (sn)[(snl) - 1] == 'a')))
549 af = file_symbol (a, an, anl);
550 bf = file_symbol (b, bn, bnl);
557 /* Try to sort global symbols before local symbols before function
558 symbols before debugging symbols. */
563 if ((aflags & BSF_DEBUGGING) != (bflags & BSF_DEBUGGING))
565 if ((aflags & BSF_DEBUGGING) != 0)
570 if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
572 if ((aflags & BSF_FUNCTION) != 0)
577 if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
579 if ((aflags & BSF_LOCAL) != 0)
584 if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL))
586 if ((aflags & BSF_GLOBAL) != 0)
592 /* Symbols that start with '.' might be section names, so sort them
593 after symbols that don't start with '.'. */
594 if (an[0] == '.' && bn[0] != '.')
596 if (an[0] != '.' && bn[0] == '.')
599 /* Finally, if we can't distinguish them in any other way, try to
600 get consistent results by sorting the symbols by name. */
601 return strcmp (an, bn);
604 /* Sort relocs into address order. */
607 compare_relocs (ap, bp)
611 const arelent *a = *(const arelent **)ap;
612 const arelent *b = *(const arelent **)bp;
614 if (a->address > b->address)
616 else if (a->address < b->address)
619 /* So that associated relocations tied to the same address show up
620 in the correct order, we don't do any further sorting. */
629 /* Print VMA to STREAM. If SKIP_ZEROES is true, omit leading zeroes. */
632 objdump_print_value (vma, info, skip_zeroes)
634 struct disassemble_info *info;
640 sprintf_vma (buf, vma);
645 for (p = buf; *p == '0'; ++p)
650 (*info->fprintf_func) (info->stream, "%s", p);
653 /* Print the name of a symbol. */
656 objdump_print_symname (abfd, info, sym)
658 struct disassemble_info *info;
666 name = bfd_asymbol_name (sym);
667 if (! do_demangle || name[0] == '\0')
671 /* Demangle the name. */
672 if (bfd_get_symbol_leading_char (abfd) == name[0])
675 alloc = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
683 (*info->fprintf_func) (info->stream, "%s", print);
685 printf ("%s", print);
691 /* Locate a symbol given a bfd, a section, and a VMA. If REQUIRE_SEC
692 is true, then always require the symbol to be in the section. This
693 returns NULL if there is no suitable symbol. If PLACE is not NULL,
694 then *PLACE is set to the index of the symbol in sorted_syms. */
697 find_symbol_for_address (abfd, sec, vma, require_sec, place)
704 /* @@ Would it speed things up to cache the last two symbols returned,
705 and maybe their address ranges? For many processors, only one memory
706 operand can be present at a time, so the 2-entry cache wouldn't be
707 constantly churned by code doing heavy memory accesses. */
709 /* Indices in `sorted_syms'. */
711 long max = sorted_symcount;
714 if (sorted_symcount < 1)
717 /* Perform a binary search looking for the closest symbol to the
718 required value. We are searching the range (min, max]. */
719 while (min + 1 < max)
723 thisplace = (max + min) / 2;
724 sym = sorted_syms[thisplace];
726 if (bfd_asymbol_value (sym) > vma)
728 else if (bfd_asymbol_value (sym) < vma)
737 /* The symbol we want is now in min, the low end of the range we
738 were searching. If there are several symbols with the same
739 value, we want the first one. */
742 && (bfd_asymbol_value (sorted_syms[thisplace])
743 == bfd_asymbol_value (sorted_syms[thisplace - 1])))
746 /* If the file is relocateable, and the symbol could be from this
747 section, prefer a symbol from this section over symbols from
748 others, even if the other symbol's value might be closer.
750 Note that this may be wrong for some symbol references if the
751 sections have overlapping memory ranges, but in that case there's
752 no way to tell what's desired without looking at the relocation
755 if (sorted_syms[thisplace]->section != sec
757 || ((abfd->flags & HAS_RELOC) != 0
758 && vma >= bfd_get_section_vma (abfd, sec)
759 && vma < (bfd_get_section_vma (abfd, sec)
760 + bfd_section_size (abfd, sec)))))
764 for (i = thisplace + 1; i < sorted_symcount; i++)
766 if (bfd_asymbol_value (sorted_syms[i])
767 != bfd_asymbol_value (sorted_syms[thisplace]))
773 if (sorted_syms[i]->section == sec
775 || sorted_syms[i - 1]->section != sec
776 || (bfd_asymbol_value (sorted_syms[i])
777 != bfd_asymbol_value (sorted_syms[i - 1]))))
784 if (sorted_syms[thisplace]->section != sec)
786 /* We didn't find a good symbol with a smaller value.
787 Look for one with a larger value. */
788 for (i = thisplace + 1; i < sorted_symcount; i++)
790 if (sorted_syms[i]->section == sec)
798 if (sorted_syms[thisplace]->section != sec
800 || ((abfd->flags & HAS_RELOC) != 0
801 && vma >= bfd_get_section_vma (abfd, sec)
802 && vma < (bfd_get_section_vma (abfd, sec)
803 + bfd_section_size (abfd, sec)))))
805 /* There is no suitable symbol. */
813 return sorted_syms[thisplace];
816 /* Print an address to INFO symbolically. */
819 objdump_print_addr_with_sym (abfd, sec, sym, vma, info, skip_zeroes)
824 struct disassemble_info *info;
827 objdump_print_value (vma, info, skip_zeroes);
833 (*info->fprintf_func) (info->stream, " <%s",
834 bfd_get_section_name (abfd, sec));
835 secaddr = bfd_get_section_vma (abfd, sec);
838 (*info->fprintf_func) (info->stream, "-0x");
839 objdump_print_value (secaddr - vma, info, true);
841 else if (vma > secaddr)
843 (*info->fprintf_func) (info->stream, "+0x");
844 objdump_print_value (vma - secaddr, info, true);
846 (*info->fprintf_func) (info->stream, ">");
850 (*info->fprintf_func) (info->stream, " <");
851 objdump_print_symname (abfd, info, sym);
852 if (bfd_asymbol_value (sym) > vma)
854 (*info->fprintf_func) (info->stream, "-0x");
855 objdump_print_value (bfd_asymbol_value (sym) - vma, info, true);
857 else if (vma > bfd_asymbol_value (sym))
859 (*info->fprintf_func) (info->stream, "+0x");
860 objdump_print_value (vma - bfd_asymbol_value (sym), info, true);
862 (*info->fprintf_func) (info->stream, ">");
866 /* Print VMA to INFO, symbolically if possible. If SKIP_ZEROES is
867 true, don't output leading zeroes. */
870 objdump_print_addr (vma, info, skip_zeroes)
872 struct disassemble_info *info;
875 struct objdump_disasm_info *aux;
878 if (sorted_symcount < 1)
880 (*info->fprintf_func) (info->stream, "0x");
881 objdump_print_value (vma, info, skip_zeroes);
885 aux = (struct objdump_disasm_info *) info->application_data;
886 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
888 objdump_print_addr_with_sym (aux->abfd, aux->sec, sym, vma, info,
892 /* Print VMA to INFO. This function is passed to the disassembler
896 objdump_print_address (vma, info)
898 struct disassemble_info *info;
900 objdump_print_addr (vma, info, ! prefix_addresses);
903 /* Determine of the given address has a symbol associated with it. */
906 objdump_symbol_at_address (vma, info)
908 struct disassemble_info * info;
910 struct objdump_disasm_info * aux;
913 /* No symbols - do not bother checking. */
914 if (sorted_symcount < 1)
917 aux = (struct objdump_disasm_info *) info->application_data;
918 sym = find_symbol_for_address (aux->abfd, aux->sec, vma, aux->require_sec,
921 return (sym != NULL && (bfd_asymbol_value (sym) == vma));
924 /* Hold the last function name and the last line number we displayed
927 static char *prev_functionname;
928 static unsigned int prev_line;
930 /* We keep a list of all files that we have seen when doing a
931 dissassembly with source, so that we know how much of the file to
932 display. This can be important for inlined functions. */
934 struct print_file_list
936 struct print_file_list *next;
942 static struct print_file_list *print_files;
944 /* The number of preceding context lines to show when we start
945 displaying a file for the first time. */
947 #define SHOW_PRECEDING_CONTEXT_LINES (5)
949 /* Skip ahead to a given line in a file, optionally printing each
953 skip_to_line PARAMS ((struct print_file_list *, unsigned int, boolean));
956 skip_to_line (p, line, show)
957 struct print_file_list *p;
961 while (p->line < line)
965 if (fgets (buf, sizeof buf, p->f) == NULL)
975 if (strchr (buf, '\n') != NULL)
980 /* Show the line number, or the source line, in a dissassembly
984 show_line (abfd, section, off)
989 CONST char *filename;
990 CONST char *functionname;
993 if (! with_line_numbers && ! with_source_code)
996 if (! bfd_find_nearest_line (abfd, section, syms, off, &filename,
997 &functionname, &line))
1000 if (filename != NULL && *filename == '\0')
1002 if (functionname != NULL && *functionname == '\0')
1003 functionname = NULL;
1005 if (with_line_numbers)
1007 if (functionname != NULL
1008 && (prev_functionname == NULL
1009 || strcmp (functionname, prev_functionname) != 0))
1010 printf ("%s():\n", functionname);
1011 if (line > 0 && line != prev_line)
1012 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
1015 if (with_source_code
1019 struct print_file_list **pp, *p;
1021 for (pp = &print_files; *pp != NULL; pp = &(*pp)->next)
1022 if (strcmp ((*pp)->filename, filename) == 0)
1028 if (p != print_files)
1032 /* We have reencountered a file name which we saw
1033 earlier. This implies that either we are dumping out
1034 code from an included file, or the same file was
1035 linked in more than once. There are two common cases
1036 of an included file: inline functions in a header
1037 file, and a bison or flex skeleton file. In the
1038 former case we want to just start printing (but we
1039 back up a few lines to give context); in the latter
1040 case we want to continue from where we left off. I
1041 can't think of a good way to distinguish the cases,
1042 so I used a heuristic based on the file name. */
1043 if (strcmp (p->filename + strlen (p->filename) - 2, ".h") != 0)
1047 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1054 p->f = fopen (p->filename, "r");
1058 skip_to_line (p, l, false);
1060 if (print_files->f != NULL)
1062 fclose (print_files->f);
1063 print_files->f = NULL;
1069 skip_to_line (p, line, true);
1071 p->next = print_files;
1079 f = fopen (filename, "r");
1084 p = ((struct print_file_list *)
1085 xmalloc (sizeof (struct print_file_list)));
1086 p->filename = xmalloc (strlen (filename) + 1);
1087 strcpy (p->filename, filename);
1091 if (print_files != NULL && print_files->f != NULL)
1093 fclose (print_files->f);
1094 print_files->f = NULL;
1096 p->next = print_files;
1099 l = line - SHOW_PRECEDING_CONTEXT_LINES;
1102 skip_to_line (p, l, false);
1104 skip_to_line (p, line, true);
1109 if (functionname != NULL
1110 && (prev_functionname == NULL
1111 || strcmp (functionname, prev_functionname) != 0))
1113 if (prev_functionname != NULL)
1114 free (prev_functionname);
1115 prev_functionname = xmalloc (strlen (functionname) + 1);
1116 strcpy (prev_functionname, functionname);
1119 if (line > 0 && line != prev_line)
1123 /* Pseudo FILE object for strings. */
1131 /* sprintf to a "stream" */
1134 #ifdef ANSI_PROTOTYPES
1135 objdump_sprintf (SFILE *f, const char *format, ...)
1137 objdump_sprintf (va_alist)
1141 #ifndef ANSI_PROTOTYPES
1149 #ifdef ANSI_PROTOTYPES
1150 va_start (args, format);
1153 f = va_arg (args, SFILE *);
1154 format = va_arg (args, const char *);
1157 vasprintf (&buf, format, args);
1163 fprintf (stderr, _("Out of virtual memory\n"));
1169 while ((size_t) ((f->buffer + f->size) - f->current) < n + 1)
1173 curroff = f->current - f->buffer;
1175 f->buffer = xrealloc (f->buffer, f->size);
1176 f->current = f->buffer + curroff;
1179 memcpy (f->current, buf, n);
1181 f->current[0] = '\0';
1188 /* The number of zeroes we want to see before we start skipping them.
1189 The number is arbitrarily chosen. */
1191 #define SKIP_ZEROES (8)
1193 /* The number of zeroes to skip at the end of a section. If the
1194 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1195 SKIP_ZEROES, they will be disassembled. If there are fewer than
1196 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1197 attempt to avoid disassembling zeroes inserted by section
1200 #define SKIP_ZEROES_AT_END (3)
1202 /* Disassemble some data in memory between given values. */
1205 disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
1207 struct disassemble_info *info;
1208 disassembler_ftype disassemble_fn;
1216 struct objdump_disasm_info *aux;
1220 int skip_addr_chars;
1223 aux = (struct objdump_disasm_info *) info->application_data;
1229 bytes_per_line = 16;
1231 /* Figure out how many characters to skip at the start of an
1232 address, to make the disassembly look nicer. We discard leading
1233 zeroes in chunks of 4, ensuring that there is always a leading
1235 skip_addr_chars = 0;
1236 if (! prefix_addresses)
1242 section->vma + bfd_section_size (section->owner, section));
1244 while (s[0] == '0' && s[1] == '0' && s[2] == '0' && s[3] == '0'
1247 skip_addr_chars += 4;
1252 info->insn_info_valid = 0;
1260 boolean need_nl = false;
1262 /* If we see more than SKIP_ZEROES bytes of zeroes, we just
1264 for (z = i; z < stop; z++)
1267 if (! disassemble_zeroes
1268 && (info->insn_info_valid == 0
1269 || info->branch_delay_insns == 0)
1270 && (z - i >= SKIP_ZEROES
1271 || (z == stop && z - i < SKIP_ZEROES_AT_END)))
1275 /* If there are more nonzero bytes to follow, we only skip
1276 zeroes in multiples of 4, to try to avoid running over
1277 the start of an instruction which happens to start with
1280 z = i + ((z - i) &~ 3);
1293 if (with_line_numbers || with_source_code)
1294 show_line (aux->abfd, section, i);
1296 if (! prefix_addresses)
1300 sprintf_vma (buf, section->vma + i);
1301 for (s = buf + skip_addr_chars; *s == '0'; s++)
1305 printf ("%s:\t", buf + skip_addr_chars);
1309 aux->require_sec = true;
1310 objdump_print_address (section->vma + i, info);
1311 aux->require_sec = false;
1318 sfile.buffer = xmalloc (sfile.size);
1319 sfile.current = sfile.buffer;
1320 info->fprintf_func = (fprintf_ftype) objdump_sprintf;
1321 info->stream = (FILE *) &sfile;
1322 info->bytes_per_line = 0;
1323 info->bytes_per_chunk = 0;
1325 /* FIXME: This is wrong. It tests the number of bytes
1326 in the last instruction, not the current one. */
1327 if (*relppp < relppend
1328 && (**relppp)->address >= i
1329 && (**relppp)->address < i + bytes)
1330 info->flags = INSN_HAS_RELOC;
1334 bytes = (*disassemble_fn) (section->vma + i, info);
1335 info->fprintf_func = (fprintf_ftype) fprintf;
1336 info->stream = stdout;
1337 if (info->bytes_per_line != 0)
1338 bytes_per_line = info->bytes_per_line;
1341 if (sfile.current != sfile.buffer)
1342 printf ("%s\n", sfile.buffer);
1343 free (sfile.buffer);
1351 bytes = bytes_per_line;
1352 if (i + bytes > stop)
1355 for (j = i; j < i + bytes; ++j)
1357 if (isprint (data[j]))
1358 buf[j - i] = data[j];
1365 if (prefix_addresses
1367 : show_raw_insn >= 0)
1371 /* If ! prefix_addresses and ! wide_output, we print
1372 bytes_per_line bytes per line. */
1374 if (pb > bytes_per_line && ! prefix_addresses && ! wide_output)
1375 pb = bytes_per_line;
1377 if (info->bytes_per_chunk)
1378 bpc = info->bytes_per_chunk;
1382 for (j = i; j < i + pb; j += bpc)
1385 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1387 for (k = bpc - 1; k >= 0; k--)
1388 printf ("%02x", (unsigned) data[j + k]);
1393 for (k = 0; k < bpc; k++)
1394 printf ("%02x", (unsigned) data[j + k]);
1399 for (; pb < bytes_per_line; pb += bpc)
1403 for (k = 0; k < bpc; k++)
1408 /* Separate raw data from instruction by extra space. */
1419 printf ("%s", sfile.buffer);
1420 free (sfile.buffer);
1423 if (prefix_addresses
1425 : show_raw_insn >= 0)
1435 sprintf_vma (buf, section->vma + j);
1436 for (s = buf + skip_addr_chars; *s == '0'; s++)
1440 printf ("%s:\t", buf + skip_addr_chars);
1442 pb += bytes_per_line;
1445 for (; j < i + pb; j += bpc)
1449 if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
1451 for (k = bpc - 1; k >= 0; k--)
1452 printf ("%02x", (unsigned) data[j + k]);
1457 for (k = 0; k < bpc; k++)
1458 printf ("%02x", (unsigned) data[j + k]);
1472 && (section->flags & SEC_RELOC) != 0)
1474 while ((*relppp) < relppend
1475 && ((**relppp)->address >= (bfd_vma) i
1476 && (**relppp)->address < (bfd_vma) i + bytes))
1487 objdump_print_value (section->vma + q->address, info, true);
1489 printf (": %s\t", q->howto->name);
1491 if (q->sym_ptr_ptr == NULL || *q->sym_ptr_ptr == NULL)
1492 printf ("*unknown*");
1495 const char *sym_name;
1497 sym_name = bfd_asymbol_name (*q->sym_ptr_ptr);
1498 if (sym_name != NULL && *sym_name != '\0')
1499 objdump_print_symname (aux->abfd, info, *q->sym_ptr_ptr);
1504 sym_sec = bfd_get_section (*q->sym_ptr_ptr);
1505 sym_name = bfd_get_section_name (aux->abfd, sym_sec);
1506 if (sym_name == NULL || *sym_name == '\0')
1507 sym_name = "*unknown*";
1508 printf ("%s", sym_name);
1515 objdump_print_value (q->addend, info, true);
1531 /* Disassemble the contents of an object file. */
1534 disassemble_data (abfd)
1538 disassembler_ftype disassemble_fn;
1539 struct disassemble_info disasm_info;
1540 struct objdump_disasm_info aux;
1544 prev_functionname = NULL;
1547 /* We make a copy of syms to sort. We don't want to sort syms
1548 because that will screw up the relocs. */
1549 sorted_syms = (asymbol **) xmalloc (symcount * sizeof (asymbol *));
1550 memcpy (sorted_syms, syms, symcount * sizeof (asymbol *));
1552 sorted_symcount = remove_useless_symbols (sorted_syms, symcount);
1554 /* Sort the symbols into section and symbol order */
1555 qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
1557 INIT_DISASSEMBLE_INFO(disasm_info, stdout, fprintf);
1558 disasm_info.application_data = (PTR) &aux;
1560 aux.require_sec = false;
1561 disasm_info.print_address_func = objdump_print_address;
1562 disasm_info.symbol_at_address_func = objdump_symbol_at_address;
1564 if (machine != (char *) NULL)
1566 const bfd_arch_info_type *info = bfd_scan_arch (machine);
1569 fprintf (stderr, _("%s: Can't use supplied machine %s\n"),
1574 abfd->arch_info = info;
1577 if (endian != BFD_ENDIAN_UNKNOWN)
1579 struct bfd_target *xvec;
1581 xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target));
1582 memcpy (xvec, abfd->xvec, sizeof (struct bfd_target));
1583 xvec->byteorder = endian;
1587 disassemble_fn = disassembler (abfd);
1588 if (!disassemble_fn)
1590 fprintf (stderr, _("%s: Can't disassemble for architecture %s\n"),
1592 bfd_printable_arch_mach (bfd_get_arch (abfd), 0));
1597 disasm_info.flavour = bfd_get_flavour (abfd);
1598 disasm_info.arch = bfd_get_arch (abfd);
1599 disasm_info.mach = bfd_get_mach (abfd);
1600 disasm_info.disassembler_options = disassembler_options;
1602 if (bfd_big_endian (abfd))
1603 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_BIG;
1604 else if (bfd_little_endian (abfd))
1605 disasm_info.display_endian = disasm_info.endian = BFD_ENDIAN_LITTLE;
1607 /* ??? Aborting here seems too drastic. We could default to big or little
1609 disasm_info.endian = BFD_ENDIAN_UNKNOWN;
1611 for (section = abfd->sections;
1612 section != (asection *) NULL;
1613 section = section->next)
1615 bfd_byte *data = NULL;
1616 bfd_size_type datasize = 0;
1617 arelent **relbuf = NULL;
1618 arelent **relpp = NULL;
1619 arelent **relppend = NULL;
1621 asymbol *sym = NULL;
1624 if ((section->flags & SEC_LOAD) == 0
1625 || (! disassemble_all
1627 && (section->flags & SEC_CODE) == 0))
1629 if (only != (char *) NULL && strcmp (only, section->name) != 0)
1633 && (section->flags & SEC_RELOC) != 0)
1637 relsize = bfd_get_reloc_upper_bound (abfd, section);
1639 bfd_fatal (bfd_get_filename (abfd));
1645 relbuf = (arelent **) xmalloc (relsize);
1646 relcount = bfd_canonicalize_reloc (abfd, section, relbuf, syms);
1648 bfd_fatal (bfd_get_filename (abfd));
1650 /* Sort the relocs by address. */
1651 qsort (relbuf, relcount, sizeof (arelent *), compare_relocs);
1654 relppend = relpp + relcount;
1656 /* Skip over the relocs belonging to addresses below the
1658 if (start_address != (bfd_vma) -1)
1660 while (relpp < relppend
1661 && (*relpp)->address < start_address)
1667 printf (_("Disassembly of section %s:\n"), section->name);
1669 datasize = bfd_get_section_size_before_reloc (section);
1673 data = (bfd_byte *) xmalloc ((size_t) datasize);
1675 bfd_get_section_contents (abfd, section, data, 0, datasize);
1678 disasm_info.buffer = data;
1679 disasm_info.buffer_vma = section->vma;
1680 disasm_info.buffer_length = datasize;
1681 if (start_address == (bfd_vma) -1
1682 || start_address < disasm_info.buffer_vma)
1685 i = start_address - disasm_info.buffer_vma;
1686 if (stop_address == (bfd_vma) -1)
1690 if (stop_address < disasm_info.buffer_vma)
1693 stop = stop_address - disasm_info.buffer_vma;
1694 if (stop > disasm_info.buffer_length)
1695 stop = disasm_info.buffer_length;
1698 sym = find_symbol_for_address (abfd, section, section->vma + i,
1707 if (sym != NULL && bfd_asymbol_value (sym) <= section->vma + i)
1712 (x < sorted_symcount
1713 && bfd_asymbol_value (sorted_syms[x]) <= section->vma + i);
1716 disasm_info.symbols = & sorted_syms[place];
1717 disasm_info.num_symbols = x - place;
1720 disasm_info.symbols = NULL;
1722 if (! prefix_addresses)
1725 objdump_print_addr_with_sym (abfd, section, sym,
1732 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1734 else if (sym == NULL)
1738 while (place < sorted_symcount
1739 /* ??? Why the test for != section? */
1740 && (sorted_syms[place]->section != section
1741 || (bfd_asymbol_value (sorted_syms[place])
1742 <= bfd_asymbol_value (sym))))
1744 if (place >= sorted_symcount)
1747 nextsym = sorted_syms[place];
1750 if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
1752 nextstop = bfd_asymbol_value (sym) - section->vma;
1753 if (nextstop > stop)
1756 else if (nextsym == NULL)
1760 nextstop = bfd_asymbol_value (nextsym) - section->vma;
1761 if (nextstop > stop)
1765 /* If a symbol is explicitly marked as being an object
1766 rather than a function, just dump the bytes without
1767 disassembling them. */
1770 || bfd_asymbol_value (sym) > section->vma + i
1771 || ((sym->flags & BSF_OBJECT) == 0
1772 && (strstr (bfd_asymbol_name (sym), "gnu_compiled")
1774 && (strstr (bfd_asymbol_name (sym), "gcc2_compiled")
1776 || (sym->flags & BSF_FUNCTION) != 0)
1781 disassemble_bytes (&disasm_info, disassemble_fn, insns, data, i,
1782 nextstop, &relpp, relppend);
1796 /* Define a table of stab values and print-strings. We wish the initializer
1797 could be a direct-mapped table, but instead we build one the first
1800 static void dump_section_stabs PARAMS ((bfd *abfd, char *stabsect_name,
1801 char *strsect_name));
1803 /* Dump the stabs sections from an object file that has a section that
1804 uses Sun stabs encoding. */
1810 dump_section_stabs (abfd, ".stab", ".stabstr");
1811 dump_section_stabs (abfd, ".stab.excl", ".stab.exclstr");
1812 dump_section_stabs (abfd, ".stab.index", ".stab.indexstr");
1813 dump_section_stabs (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
1816 static bfd_byte *stabs;
1817 static bfd_size_type stab_size;
1819 static char *strtab;
1820 static bfd_size_type stabstr_size;
1822 /* Read ABFD's stabs section STABSECT_NAME into `stabs'
1823 and string table section STRSECT_NAME into `strtab'.
1824 If the section exists and was read, allocate the space and return true.
1825 Otherwise return false. */
1828 read_section_stabs (abfd, stabsect_name, strsect_name)
1830 const char *stabsect_name;
1831 const char *strsect_name;
1833 asection *stabsect, *stabstrsect;
1835 stabsect = bfd_get_section_by_name (abfd, stabsect_name);
1838 printf (_("No %s section present\n\n"), stabsect_name);
1842 stabstrsect = bfd_get_section_by_name (abfd, strsect_name);
1843 if (0 == stabstrsect)
1845 fprintf (stderr, _("%s: %s has no %s section\n"), program_name,
1846 bfd_get_filename (abfd), strsect_name);
1851 stab_size = bfd_section_size (abfd, stabsect);
1852 stabstr_size = bfd_section_size (abfd, stabstrsect);
1854 stabs = (bfd_byte *) xmalloc (stab_size);
1855 strtab = (char *) xmalloc (stabstr_size);
1857 if (! bfd_get_section_contents (abfd, stabsect, (PTR) stabs, 0, stab_size))
1859 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1860 program_name, stabsect_name, bfd_get_filename (abfd),
1861 bfd_errmsg (bfd_get_error ()));
1868 if (! bfd_get_section_contents (abfd, stabstrsect, (PTR) strtab, 0,
1871 fprintf (stderr, _("%s: Reading %s section of %s failed: %s\n"),
1872 program_name, strsect_name, bfd_get_filename (abfd),
1873 bfd_errmsg (bfd_get_error ()));
1883 /* Stabs entries use a 12 byte format:
1884 4 byte string table index
1886 1 byte stab other field
1887 2 byte stab desc field
1889 FIXME: This will have to change for a 64 bit object format. */
1891 #define STRDXOFF (0)
1893 #define OTHEROFF (5)
1896 #define STABSIZE (12)
1898 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
1899 using string table section STRSECT_NAME (in `strtab'). */
1902 print_section_stabs (abfd, stabsect_name, strsect_name)
1904 const char *stabsect_name;
1905 const char *strsect_name ATTRIBUTE_UNUSED;
1908 unsigned file_string_table_offset = 0, next_file_string_table_offset = 0;
1909 bfd_byte *stabp, *stabs_end;
1912 stabs_end = stabp + stab_size;
1914 printf (_("Contents of %s section:\n\n"), stabsect_name);
1915 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
1917 /* Loop through all symbols and print them.
1919 We start the index at -1 because there is a dummy symbol on
1920 the front of stabs-in-{coff,elf} sections that supplies sizes. */
1922 for (i = -1; stabp < stabs_end; stabp += STABSIZE, i++)
1926 unsigned char type, other;
1927 unsigned short desc;
1930 strx = bfd_h_get_32 (abfd, stabp + STRDXOFF);
1931 type = bfd_h_get_8 (abfd, stabp + TYPEOFF);
1932 other = bfd_h_get_8 (abfd, stabp + OTHEROFF);
1933 desc = bfd_h_get_16 (abfd, stabp + DESCOFF);
1934 value = bfd_h_get_32 (abfd, stabp + VALOFF);
1936 printf ("\n%-6d ", i);
1937 /* Either print the stab name, or, if unnamed, print its number
1938 again (makes consistent formatting for tools like awk). */
1939 name = bfd_get_stab_name (type);
1941 printf ("%-6s", name);
1942 else if (type == N_UNDF)
1945 printf ("%-6d", type);
1946 printf (" %-6d %-6d ", other, desc);
1948 printf (" %-6lu", strx);
1950 /* Symbols with type == 0 (N_UNDF) specify the length of the
1951 string table associated with this file. We use that info
1952 to know how to relocate the *next* file's string table indices. */
1956 file_string_table_offset = next_file_string_table_offset;
1957 next_file_string_table_offset += value;
1961 /* Using the (possibly updated) string table offset, print the
1962 string (if any) associated with this symbol. */
1964 if ((strx + file_string_table_offset) < stabstr_size)
1965 printf (" %s", &strtab[strx + file_string_table_offset]);
1974 dump_section_stabs (abfd, stabsect_name, strsect_name)
1976 char *stabsect_name;
1981 /* Check for section names for which stabsect_name is a prefix, to
1982 handle .stab0, etc. */
1983 for (s = abfd->sections;
1989 len = strlen (stabsect_name);
1991 /* If the prefix matches, and the files section name ends with a
1992 nul or a digit, then we match. I.e., we want either an exact
1993 match or a section followed by a number. */
1994 if (strncmp (stabsect_name, s->name, len) == 0
1995 && (s->name[len] == '\000'
1996 || isdigit ((unsigned char) s->name[len])))
1998 if (read_section_stabs (abfd, s->name, strsect_name))
2000 print_section_stabs (abfd, s->name, strsect_name);
2009 dump_bfd_header (abfd)
2014 printf (_("architecture: %s, "),
2015 bfd_printable_arch_mach (bfd_get_arch (abfd),
2016 bfd_get_mach (abfd)));
2017 printf (_("flags 0x%08x:\n"), abfd->flags);
2019 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2020 PF (HAS_RELOC, "HAS_RELOC");
2021 PF (EXEC_P, "EXEC_P");
2022 PF (HAS_LINENO, "HAS_LINENO");
2023 PF (HAS_DEBUG, "HAS_DEBUG");
2024 PF (HAS_SYMS, "HAS_SYMS");
2025 PF (HAS_LOCALS, "HAS_LOCALS");
2026 PF (DYNAMIC, "DYNAMIC");
2027 PF (WP_TEXT, "WP_TEXT");
2028 PF (D_PAGED, "D_PAGED");
2029 PF (BFD_IS_RELAXABLE, "BFD_IS_RELAXABLE");
2030 printf (_("\nstart address 0x"));
2031 printf_vma (abfd->start_address);
2036 dump_bfd_private_header (abfd)
2039 bfd_print_private_bfd_data (abfd, stdout);
2048 if (!bfd_check_format_matches (abfd, bfd_object, &matching))
2050 nonfatal (bfd_get_filename (abfd));
2051 if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
2053 list_matching_formats (matching);
2059 /* If we are adjusting section VMA's, change them all now. Changing
2060 the BFD information is a hack. However, we must do it, or
2061 bfd_find_nearest_line will not do the right thing. */
2062 if (adjust_section_vma != 0)
2066 for (s = abfd->sections; s != NULL; s = s->next)
2068 s->vma += adjust_section_vma;
2069 s->lma += adjust_section_vma;
2073 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd),
2076 print_arelt_descr (stdout, abfd, true);
2077 if (dump_file_header)
2078 dump_bfd_header (abfd);
2079 if (dump_private_headers)
2080 dump_bfd_private_header (abfd);
2082 if (dump_section_headers)
2083 dump_headers (abfd);
2084 if (dump_symtab || dump_reloc_info || disassemble || dump_debugging)
2086 syms = slurp_symtab (abfd);
2088 if (dump_dynamic_symtab || dump_dynamic_reloc_info)
2090 dynsyms = slurp_dynamic_symtab (abfd);
2093 dump_symbols (abfd, false);
2094 if (dump_dynamic_symtab)
2095 dump_symbols (abfd, true);
2096 if (dump_stab_section_info)
2098 if (dump_reloc_info && ! disassemble)
2100 if (dump_dynamic_reloc_info)
2101 dump_dynamic_relocs (abfd);
2102 if (dump_section_contents)
2105 disassemble_data (abfd);
2110 dhandle = read_debugging_info (abfd, syms, symcount);
2111 if (dhandle != NULL)
2113 if (! print_debugging_info (stdout, dhandle))
2116 _("%s: printing debugging information failed\n"),
2117 bfd_get_filename (abfd));
2135 display_file (filename, target)
2139 bfd *file, *arfile = (bfd *) NULL;
2141 file = bfd_openr (filename, target);
2144 nonfatal (filename);
2148 if (bfd_check_format (file, bfd_archive) == true)
2150 bfd *last_arfile = NULL;
2152 printf (_("In archive %s:\n"), bfd_get_filename (file));
2155 bfd_set_error (bfd_error_no_error);
2157 arfile = bfd_openr_next_archived_file (file, arfile);
2160 if (bfd_get_error () != bfd_error_no_more_archived_files)
2161 nonfatal (bfd_get_filename (file));
2165 display_bfd (arfile);
2167 if (last_arfile != NULL)
2168 bfd_close (last_arfile);
2169 last_arfile = arfile;
2172 if (last_arfile != NULL)
2173 bfd_close (last_arfile);
2181 /* Actually display the various requested regions */
2189 bfd_size_type datasize = 0;
2191 bfd_size_type start, stop;
2193 for (section = abfd->sections; section != NULL; section =
2198 if (only == (char *) NULL ||
2199 strcmp (only, section->name) == 0)
2201 if (section->flags & SEC_HAS_CONTENTS)
2203 printf (_("Contents of section %s:\n"), section->name);
2205 if (bfd_section_size (abfd, section) == 0)
2207 data = (bfd_byte *) xmalloc ((size_t) bfd_section_size (abfd, section));
2208 datasize = bfd_section_size (abfd, section);
2211 bfd_get_section_contents (abfd, section, (PTR) data, 0, bfd_section_size (abfd, section));
2213 if (start_address == (bfd_vma) -1
2214 || start_address < section->vma)
2217 start = start_address - section->vma;
2218 if (stop_address == (bfd_vma) -1)
2219 stop = bfd_section_size (abfd, section);
2222 if (stop_address < section->vma)
2225 stop = stop_address - section->vma;
2226 if (stop > bfd_section_size (abfd, section))
2227 stop = bfd_section_size (abfd, section);
2229 for (i = start; i < stop; i += onaline)
2233 printf (" %04lx ", (unsigned long int) (i + section->vma));
2234 for (j = i; j < i + onaline; j++)
2237 printf ("%02x", (unsigned) (data[j]));
2245 for (j = i; j < i + onaline; j++)
2250 printf ("%c", isprint (data[j]) ? data[j] : '.');
2260 /* Should perhaps share code and display with nm? */
2262 dump_symbols (abfd, dynamic)
2263 bfd *abfd ATTRIBUTE_UNUSED;
2276 printf ("DYNAMIC SYMBOL TABLE:\n");
2284 printf ("SYMBOL TABLE:\n");
2287 for (count = 0; count < max; count++)
2291 bfd *cur_bfd = bfd_asymbol_bfd (*current);
2293 if (cur_bfd != NULL)
2298 name = bfd_asymbol_name (*current);
2300 if (do_demangle && name != NULL && *name != '\0')
2304 /* If we want to demangle the name, we demangle it
2305 here, and temporarily clobber it while calling
2306 bfd_print_symbol. FIXME: This is a gross hack. */
2309 if (bfd_get_symbol_leading_char (cur_bfd) == *n)
2311 alloc = cplus_demangle (n, DMGL_ANSI | DMGL_PARAMS);
2313 (*current)->name = alloc;
2315 (*current)->name = n;
2318 bfd_print_symbol (cur_bfd, stdout, *current,
2319 bfd_print_symbol_all);
2321 (*current)->name = name;
2342 for (a = abfd->sections; a != (asection *) NULL; a = a->next)
2346 if (bfd_is_abs_section (a))
2348 if (bfd_is_und_section (a))
2350 if (bfd_is_com_section (a))
2355 if (strcmp (only, a->name))
2358 else if ((a->flags & SEC_RELOC) == 0)
2361 relsize = bfd_get_reloc_upper_bound (abfd, a);
2363 bfd_fatal (bfd_get_filename (abfd));
2365 printf ("RELOCATION RECORDS FOR [%s]:", a->name);
2369 printf (" (none)\n\n");
2373 relpp = (arelent **) xmalloc (relsize);
2374 relcount = bfd_canonicalize_reloc (abfd, a, relpp, syms);
2376 bfd_fatal (bfd_get_filename (abfd));
2377 else if (relcount == 0)
2379 printf (" (none)\n\n");
2384 dump_reloc_set (abfd, a, relpp, relcount);
2393 dump_dynamic_relocs (abfd)
2400 relsize = bfd_get_dynamic_reloc_upper_bound (abfd);
2402 bfd_fatal (bfd_get_filename (abfd));
2404 printf ("DYNAMIC RELOCATION RECORDS");
2408 printf (" (none)\n\n");
2412 relpp = (arelent **) xmalloc (relsize);
2413 relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms);
2415 bfd_fatal (bfd_get_filename (abfd));
2416 else if (relcount == 0)
2418 printf (" (none)\n\n");
2423 dump_reloc_set (abfd, (asection *) NULL, relpp, relcount);
2431 dump_reloc_set (abfd, sec, relpp, relcount)
2438 char *last_filename, *last_functionname;
2439 unsigned int last_line;
2441 /* Get column headers lined up reasonably. */
2447 sprintf_vma (buf, (bfd_vma) -1);
2448 width = strlen (buf) - 7;
2450 printf ("OFFSET %*s TYPE %*s VALUE \n", width, "", 12, "");
2453 last_filename = NULL;
2454 last_functionname = NULL;
2457 for (p = relpp; relcount && *p != (arelent *) NULL; p++, relcount--)
2460 const char *filename, *functionname;
2462 const char *sym_name;
2463 const char *section_name;
2465 if (start_address != (bfd_vma) -1
2466 && q->address < start_address)
2468 if (stop_address != (bfd_vma) -1
2469 && q->address > stop_address)
2472 if (with_line_numbers
2474 && bfd_find_nearest_line (abfd, sec, syms, q->address,
2475 &filename, &functionname, &line))
2477 if (functionname != NULL
2478 && (last_functionname == NULL
2479 || strcmp (functionname, last_functionname) != 0))
2481 printf ("%s():\n", functionname);
2482 if (last_functionname != NULL)
2483 free (last_functionname);
2484 last_functionname = xstrdup (functionname);
2487 && (line != last_line
2488 || (filename != NULL
2489 && last_filename != NULL
2490 && strcmp (filename, last_filename) != 0)))
2492 printf ("%s:%u\n", filename == NULL ? "???" : filename, line);
2494 if (last_filename != NULL)
2495 free (last_filename);
2496 if (filename == NULL)
2497 last_filename = NULL;
2499 last_filename = xstrdup (filename);
2503 if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
2505 sym_name = (*(q->sym_ptr_ptr))->name;
2506 section_name = (*(q->sym_ptr_ptr))->section->name;
2511 section_name = NULL;
2515 printf_vma (q->address);
2517 printf (" %-16s ", q->howto->name);
2519 printf (" %-16d ", q->howto->type);
2520 objdump_print_symname (abfd, (struct disassemble_info *) NULL,
2525 if (section_name == (CONST char *) NULL)
2526 section_name = "*unknown*";
2527 printf_vma (q->address);
2528 printf (" %-16s [%s]",
2535 printf_vma (q->addend);
2541 /* The length of the longest architecture name + 1. */
2542 #define LONGEST_ARCH sizeof("rs6000:6000")
2545 endian_string (endian)
2546 enum bfd_endian endian;
2548 if (endian == BFD_ENDIAN_BIG)
2549 return "big endian";
2550 else if (endian == BFD_ENDIAN_LITTLE)
2551 return "little endian";
2553 return "endianness unknown";
2556 /* List the targets that BFD is configured to support, each followed
2557 by its endianness and the architectures it supports. */
2560 display_target_list ()
2562 extern bfd_target *bfd_target_vector[];
2566 dummy_name = choose_temp_base ();
2567 for (t = 0; bfd_target_vector[t]; t++)
2569 bfd_target *p = bfd_target_vector[t];
2570 bfd *abfd = bfd_openw (dummy_name, p->name);
2573 printf ("%s\n (header %s, data %s)\n", p->name,
2574 endian_string (p->header_byteorder),
2575 endian_string (p->byteorder));
2579 nonfatal (dummy_name);
2583 if (! bfd_set_format (abfd, bfd_object))
2585 if (bfd_get_error () != bfd_error_invalid_operation)
2590 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2591 if (bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0))
2593 bfd_printable_arch_mach ((enum bfd_architecture) a, 0));
2595 unlink (dummy_name);
2599 /* Print a table showing which architectures are supported for entries
2600 FIRST through LAST-1 of bfd_target_vector (targets across,
2601 architectures down). */
2604 display_info_table (first, last)
2608 extern bfd_target *bfd_target_vector[];
2612 /* Print heading of target names. */
2613 printf ("\n%*s", (int) LONGEST_ARCH, " ");
2614 for (t = first; t < last && bfd_target_vector[t]; t++)
2615 printf ("%s ", bfd_target_vector[t]->name);
2618 dummy_name = choose_temp_base ();
2619 for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
2620 if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0)
2622 printf ("%*s ", (int) LONGEST_ARCH - 1,
2623 bfd_printable_arch_mach (a, 0));
2624 for (t = first; t < last && bfd_target_vector[t]; t++)
2626 bfd_target *p = bfd_target_vector[t];
2628 bfd *abfd = bfd_openw (dummy_name, p->name);
2638 if (! bfd_set_format (abfd, bfd_object))
2640 if (bfd_get_error () != bfd_error_invalid_operation)
2648 if (! bfd_set_arch_mach (abfd, a, 0))
2653 printf ("%s ", p->name);
2656 int l = strlen (p->name);
2664 unlink (dummy_name);
2668 /* Print tables of all the target-architecture combinations that
2669 BFD has been configured to support. */
2672 display_target_tables ()
2675 extern bfd_target *bfd_target_vector[];
2679 colum = getenv ("COLUMNS");
2681 columns = atoi (colum);
2686 while (bfd_target_vector[t] != NULL)
2690 wid = LONGEST_ARCH + strlen (bfd_target_vector[t]->name) + 1;
2692 while (wid < columns && bfd_target_vector[t] != NULL)
2696 newwid = wid + strlen (bfd_target_vector[t]->name) + 1;
2697 if (newwid >= columns)
2702 display_info_table (oldt, t);
2709 printf (_("BFD header file version %s\n"), BFD_VERSION);
2710 display_target_list ();
2711 display_target_tables ();
2720 char *target = default_target;
2721 boolean seenflag = false;
2723 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
2724 setlocale (LC_MESSAGES, "");
2726 bindtextdomain (PACKAGE, LOCALEDIR);
2727 textdomain (PACKAGE);
2729 program_name = *argv;
2730 xmalloc_set_program_name (program_name);
2732 START_PROGRESS (program_name, 0);
2735 set_default_bfd_target ();
2737 while ((c = getopt_long (argc, argv, "pib:m:M:VCdDlfahrRtTxsSj:wE:",
2738 long_options, (int *) 0))
2741 if (c != 'l' && c != OPTION_START_ADDRESS && c != OPTION_STOP_ADDRESS)
2746 break; /* we've been given a long option */
2751 disassembler_options = optarg;
2757 with_line_numbers = 1;
2763 dump_file_header = true;
2766 formats_info = true;
2769 dump_private_headers = 1;
2772 dump_private_headers = 1;
2774 dump_reloc_info = 1;
2775 dump_file_header = true;
2777 dump_section_headers = 1;
2783 dump_dynamic_symtab = 1;
2792 disassemble = disassemble_all = true;
2796 with_source_code = true;
2799 dump_section_contents = 1;
2802 dump_reloc_info = 1;
2805 dump_dynamic_reloc_info = 1;
2811 dump_section_headers = 1;
2821 case OPTION_ADJUST_VMA:
2822 adjust_section_vma = parse_vma (optarg, "--adjust-vma");
2824 case OPTION_START_ADDRESS:
2825 start_address = parse_vma (optarg, "--start-address");
2827 case OPTION_STOP_ADDRESS:
2828 stop_address = parse_vma (optarg, "--stop-address");
2831 if (strcmp (optarg, "B") == 0)
2832 endian = BFD_ENDIAN_BIG;
2833 else if (strcmp (optarg, "L") == 0)
2834 endian = BFD_ENDIAN_LITTLE;
2837 fprintf (stderr, _("%s: unrecognized -E option\n"),
2843 if (strncmp (optarg, "big", strlen (optarg)) == 0)
2844 endian = BFD_ENDIAN_BIG;
2845 else if (strncmp (optarg, "little", strlen (optarg)) == 0)
2846 endian = BFD_ENDIAN_LITTLE;
2849 fprintf (stderr, _("%s: unrecognized --endian type `%s'\n"),
2850 program_name, optarg);
2860 print_version ("objdump");
2862 if (seenflag == false)
2872 display_file ("a.out", target);
2874 for (; optind < argc;)
2875 display_file (argv[optind++], target);
2878 END_PROGRESS (program_name);