1 /* objdump.c -- dump information about an object file.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 Free Software Foundation, Inc.
6 This file is part of GNU Binutils.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
26 #include "safe-ctype.h"
28 #include "libiberty.h"
33 /* Internal headers for the ELF .stab-dump code - sorry. */
34 #define BYTES_IN_WORD 32
35 #include "aout/aout64.h"
37 #ifdef NEED_DECLARATION_FPRINTF
38 /* This is needed by INIT_DISASSEMBLE_INFO. */
39 extern int fprintf
PARAMS ((FILE *, const char *, ...));
43 static int exit_status
= 0;
45 static char *default_target
= NULL
; /* default at runtime */
47 static int show_version
= 0; /* show the version number */
48 static int dump_section_contents
; /* -s */
49 static int dump_section_headers
; /* -h */
50 static boolean dump_file_header
; /* -f */
51 static int dump_symtab
; /* -t */
52 static int dump_dynamic_symtab
; /* -T */
53 static int dump_reloc_info
; /* -r */
54 static int dump_dynamic_reloc_info
; /* -R */
55 static int dump_ar_hdrs
; /* -a */
56 static int dump_private_headers
; /* -p */
57 static int prefix_addresses
; /* --prefix-addresses */
58 static int with_line_numbers
; /* -l */
59 static boolean with_source_code
; /* -S */
60 static int show_raw_insn
; /* --show-raw-insn */
61 static int dump_stab_section_info
; /* --stabs */
62 static int do_demangle
; /* -C, --demangle */
63 static boolean disassemble
; /* -d */
64 static boolean disassemble_all
; /* -D */
65 static int disassemble_zeroes
; /* --disassemble-zeroes */
66 static boolean formats_info
; /* -i */
67 static char *only
; /* -j secname */
68 static int wide_output
; /* -w */
69 static bfd_vma start_address
= (bfd_vma
) -1; /* --start-address */
70 static bfd_vma stop_address
= (bfd_vma
) -1; /* --stop-address */
71 static int dump_debugging
; /* --debugging */
72 static bfd_vma adjust_section_vma
= 0; /* --adjust-vma */
73 static int file_start_context
= 0; /* --file-start-context */
75 /* Extra info to pass to the disassembler address printing function. */
76 struct objdump_disasm_info
{
82 /* Architecture to disassemble for, or default if NULL. */
83 static char *machine
= (char *) NULL
;
85 /* Target specific options to the disassembler. */
86 static char *disassembler_options
= (char *) NULL
;
88 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN. */
89 static enum bfd_endian endian
= BFD_ENDIAN_UNKNOWN
;
91 /* The symbol table. */
92 static asymbol
**syms
;
94 /* Number of symbols in `syms'. */
95 static long symcount
= 0;
97 /* The sorted symbol table. */
98 static asymbol
**sorted_syms
;
100 /* Number of symbols in `sorted_syms'. */
101 static long sorted_symcount
= 0;
103 /* The dynamic symbol table. */
104 static asymbol
**dynsyms
;
106 /* Number of symbols in `dynsyms'. */
107 static long dynsymcount
= 0;
109 /* Static declarations. */
111 static void usage
PARAMS ((FILE *, int));
112 static void nonfatal
PARAMS ((const char *));
113 static void display_file
PARAMS ((char *filename
, char *target
));
114 static void dump_section_header
PARAMS ((bfd
*, asection
*, PTR
));
115 static void dump_headers
PARAMS ((bfd
*));
116 static void dump_data
PARAMS ((bfd
*abfd
));
117 static void dump_relocs
PARAMS ((bfd
*abfd
));
118 static void dump_dynamic_relocs
PARAMS ((bfd
* abfd
));
119 static void dump_reloc_set
PARAMS ((bfd
*, asection
*, arelent
**, long));
120 static void dump_symbols
PARAMS ((bfd
*abfd
, boolean dynamic
));
121 static void dump_bfd_header
PARAMS ((bfd
*));
122 static void dump_bfd_private_header
PARAMS ((bfd
*));
123 static void dump_bfd
PARAMS ((bfd
*));
124 static void display_bfd
PARAMS ((bfd
*abfd
));
125 static void display_target_list
PARAMS ((void));
126 static void display_info_table
PARAMS ((int, int));
127 static void display_target_tables
PARAMS ((void));
128 static void display_info
PARAMS ((void));
129 static void objdump_print_value
130 PARAMS ((bfd_vma
, struct disassemble_info
*, boolean
));
131 static void objdump_print_symname
132 PARAMS ((bfd
*, struct disassemble_info
*, asymbol
*));
133 static asymbol
*find_symbol_for_address
134 PARAMS ((bfd
*, asection
*, bfd_vma
, boolean
, long *));
135 static void objdump_print_addr_with_sym
136 PARAMS ((bfd
*, asection
*, asymbol
*, bfd_vma
,
137 struct disassemble_info
*, boolean
));
138 static void objdump_print_addr
139 PARAMS ((bfd_vma
, struct disassemble_info
*, boolean
));
140 static void objdump_print_address
141 PARAMS ((bfd_vma
, struct disassemble_info
*));
142 static int objdump_symbol_at_address
143 PARAMS ((bfd_vma
, struct disassemble_info
*));
144 static void show_line
PARAMS ((bfd
*, asection
*, bfd_vma
));
145 static void disassemble_bytes
146 PARAMS ((struct disassemble_info
*, disassembler_ftype
, boolean
,
147 bfd_byte
*, bfd_vma
, bfd_vma
, arelent
***, arelent
**));
148 static void disassemble_data
PARAMS ((bfd
*));
149 static const char *endian_string
PARAMS ((enum bfd_endian
));
150 static asymbol
** slurp_symtab
PARAMS ((bfd
*));
151 static asymbol
** slurp_dynamic_symtab
PARAMS ((bfd
*));
152 static long remove_useless_symbols
PARAMS ((asymbol
**, long));
153 static int compare_symbols
PARAMS ((const PTR
, const PTR
));
154 static int compare_relocs
PARAMS ((const PTR
, const PTR
));
155 static void dump_stabs
PARAMS ((bfd
*));
156 static boolean read_section_stabs
PARAMS ((bfd
*, const char *, const char *));
157 static void print_section_stabs
PARAMS ((bfd
*, const char *, const char *));
160 usage (stream
, status
)
164 fprintf (stream
, _("Usage: %s <option(s)> <file(s)>\n"), program_name
);
165 fprintf (stream
, _(" Display information from object <file(s)>.\n"));
166 fprintf (stream
, _(" At least one of the following switches must be given:\n"));
167 fprintf (stream
, _("\
168 -a, --archive-headers Display archive header information\n\
169 -f, --file-headers Display the contents of the overall file header\n\
170 -p, --private-headers Display object format specific file header contents\n\
171 -h, --[section-]headers Display the contents of the section headers\n\
172 -x, --all-headers Display the contents of all headers\n\
173 -d, --disassemble Display assembler contents of executable sections\n\
174 -D, --disassemble-all Display assembler contents of all sections\n\
175 -S, --source Intermix source code with disassembly\n\
176 -s, --full-contents Display the full contents of all sections requested\n\
177 -g, --debugging Display debug information in object file\n\
178 -G, --stabs Display (in raw form) any STABS info in the file\n\
179 -t, --syms Display the contents of the symbol table(s)\n\
180 -T, --dynamic-syms Display the contents of the dynamic symbol table\n\
181 -r, --reloc Display the relocation entries in the file\n\
182 -R, --dynamic-reloc Display the dynamic relocation entries in the file\n\
183 -v, --version Display this program's version number\n\
184 -i, --info List object formats and architectures supported\n\
185 -H, --help Display this information\n\
189 fprintf (stream
, _("\n The following switches are optional:\n"));
190 fprintf (stream
, _("\
191 -b, --target=BFDNAME Specify the target object format as BFDNAME\n\
192 -m, --architecture=MACHINE Specify the target architecture as MACHINE\n\
193 -j, --section=NAME Only display information for section NAME\n\
194 -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n\
195 -EB --endian=big Assume big endian format when disassembling\n\
196 -EL --endian=little Assume little endian format when disassembling\n\
197 --file-start-context Include context from start of file (with -S)\n\
198 -l, --line-numbers Include line numbers and filenames in output\n\
199 -C, --demangle[=STYLE] Decode mangled/processed symbol names\n\
200 The STYLE, if specified, can be `auto', 'gnu',\n\
201 'lucid', 'arm', 'hp', 'edg', or 'gnu-new-abi'\n\
202 -w, --wide Format output for more than 80 columns\n\
203 -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n\
204 --start-address=ADDR Only process data whoes address is >= ADDR\n\
205 --stop-address=ADDR Only process data whoes address is <= ADDR\n\
206 --prefix-addresses Print complete address alongside disassembly\n\
207 --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\
208 --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\
210 list_supported_targets (program_name
, stream
);
211 list_supported_architectures (program_name
, stream
);
213 disassembler_usage (stream
);
216 fprintf (stream
, _("Report bugs to %s.\n"), REPORT_BUGS_TO
);
220 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
222 #define OPTION_ENDIAN (150)
223 #define OPTION_START_ADDRESS (OPTION_ENDIAN + 1)
224 #define OPTION_STOP_ADDRESS (OPTION_START_ADDRESS + 1)
225 #define OPTION_ADJUST_VMA (OPTION_STOP_ADDRESS + 1)
227 static struct option long_options
[]=
229 {"adjust-vma", required_argument
, NULL
, OPTION_ADJUST_VMA
},
230 {"all-headers", no_argument
, NULL
, 'x'},
231 {"private-headers", no_argument
, NULL
, 'p'},
232 {"architecture", required_argument
, NULL
, 'm'},
233 {"archive-headers", no_argument
, NULL
, 'a'},
234 {"debugging", no_argument
, NULL
, 'g'},
235 {"demangle", optional_argument
, NULL
, 'C'},
236 {"disassemble", no_argument
, NULL
, 'd'},
237 {"disassemble-all", no_argument
, NULL
, 'D'},
238 {"disassembler-options", required_argument
, NULL
, 'M'},
239 {"disassemble-zeroes", no_argument
, NULL
, 'z'},
240 {"dynamic-reloc", no_argument
, NULL
, 'R'},
241 {"dynamic-syms", no_argument
, NULL
, 'T'},
242 {"endian", required_argument
, NULL
, OPTION_ENDIAN
},
243 {"file-headers", no_argument
, NULL
, 'f'},
244 {"file-start-context", no_argument
, &file_start_context
, 1},
245 {"full-contents", no_argument
, NULL
, 's'},
246 {"headers", no_argument
, NULL
, 'h'},
247 {"help", no_argument
, NULL
, 'H'},
248 {"info", no_argument
, NULL
, 'i'},
249 {"line-numbers", no_argument
, NULL
, 'l'},
250 {"no-show-raw-insn", no_argument
, &show_raw_insn
, -1},
251 {"prefix-addresses", no_argument
, &prefix_addresses
, 1},
252 {"reloc", no_argument
, NULL
, 'r'},
253 {"section", required_argument
, NULL
, 'j'},
254 {"section-headers", no_argument
, NULL
, 'h'},
255 {"show-raw-insn", no_argument
, &show_raw_insn
, 1},
256 {"source", no_argument
, NULL
, 'S'},
257 {"stabs", no_argument
, NULL
, 'G'},
258 {"start-address", required_argument
, NULL
, OPTION_START_ADDRESS
},
259 {"stop-address", required_argument
, NULL
, OPTION_STOP_ADDRESS
},
260 {"syms", no_argument
, NULL
, 't'},
261 {"target", required_argument
, NULL
, 'b'},
262 {"version", no_argument
, NULL
, 'V'},
263 {"wide", no_argument
, NULL
, 'w'},
264 {0, no_argument
, 0, 0}
276 dump_section_header (abfd
, section
, ignored
)
277 bfd
*abfd ATTRIBUTE_UNUSED
;
279 PTR ignored ATTRIBUTE_UNUSED
;
282 unsigned int opb
= bfd_octets_per_byte (abfd
);
284 printf ("%3d %-13s %08lx ", section
->index
,
285 bfd_get_section_name (abfd
, section
),
286 (unsigned long) bfd_section_size (abfd
, section
) / opb
);
287 bfd_printf_vma (abfd
, bfd_get_section_vma (abfd
, section
));
289 bfd_printf_vma (abfd
, section
->lma
);
290 printf (" %08lx 2**%u", (unsigned long) section
->filepos
,
291 bfd_get_section_alignment (abfd
, section
));
297 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
299 PF (SEC_HAS_CONTENTS
, "CONTENTS");
300 PF (SEC_ALLOC
, "ALLOC");
301 PF (SEC_CONSTRUCTOR
, "CONSTRUCTOR");
302 PF (SEC_LOAD
, "LOAD");
303 PF (SEC_RELOC
, "RELOC");
304 PF (SEC_READONLY
, "READONLY");
305 PF (SEC_CODE
, "CODE");
306 PF (SEC_DATA
, "DATA");
308 PF (SEC_DEBUGGING
, "DEBUGGING");
309 PF (SEC_NEVER_LOAD
, "NEVER_LOAD");
310 PF (SEC_EXCLUDE
, "EXCLUDE");
311 PF (SEC_SORT_ENTRIES
, "SORT_ENTRIES");
312 PF (SEC_BLOCK
, "BLOCK");
313 PF (SEC_CLINK
, "CLINK");
314 PF (SEC_SMALL_DATA
, "SMALL_DATA");
315 PF (SEC_SHARED
, "SHARED");
316 PF (SEC_ARCH_BIT_0
, "ARCH_BIT_0");
317 PF (SEC_THREAD_LOCAL
, "THREAD_LOCAL");
319 if ((section
->flags
& SEC_LINK_ONCE
) != 0)
323 switch (section
->flags
& SEC_LINK_DUPLICATES
)
327 case SEC_LINK_DUPLICATES_DISCARD
:
328 ls
= "LINK_ONCE_DISCARD";
330 case SEC_LINK_DUPLICATES_ONE_ONLY
:
331 ls
= "LINK_ONCE_ONE_ONLY";
333 case SEC_LINK_DUPLICATES_SAME_SIZE
:
334 ls
= "LINK_ONCE_SAME_SIZE";
336 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
337 ls
= "LINK_ONCE_SAME_CONTENTS";
340 printf ("%s%s", comma
, ls
);
342 if (section
->comdat
!= NULL
)
343 printf (" (COMDAT %s %ld)", section
->comdat
->name
,
344 section
->comdat
->symbol
);
357 printf (_("Sections:\n"));
360 printf (_("Idx Name Size VMA LMA File off Algn"));
362 /* With BFD64, non-ELF returns -1 and wants always 64 bit addresses. */
363 if (bfd_get_arch_size (abfd
) == 32)
364 printf (_("Idx Name Size VMA LMA File off Algn"));
366 printf (_("Idx Name Size VMA LMA File off Algn"));
370 printf (_(" Flags"));
373 bfd_map_over_sections (abfd
, dump_section_header
, (PTR
) NULL
);
380 asymbol
**sy
= (asymbol
**) NULL
;
383 if (!(bfd_get_file_flags (abfd
) & HAS_SYMS
))
385 non_fatal (_("%s: no symbols"), bfd_get_filename (abfd
));
390 storage
= bfd_get_symtab_upper_bound (abfd
);
392 bfd_fatal (bfd_get_filename (abfd
));
394 sy
= (asymbol
**) xmalloc (storage
);
396 symcount
= bfd_canonicalize_symtab (abfd
, sy
);
398 bfd_fatal (bfd_get_filename (abfd
));
400 non_fatal (_("%s: no symbols"), bfd_get_filename (abfd
));
404 /* Read in the dynamic symbols. */
407 slurp_dynamic_symtab (abfd
)
410 asymbol
**sy
= (asymbol
**) NULL
;
413 storage
= bfd_get_dynamic_symtab_upper_bound (abfd
);
416 if (!(bfd_get_file_flags (abfd
) & DYNAMIC
))
418 non_fatal (_("%s: not a dynamic object"), bfd_get_filename (abfd
));
423 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 non_fatal (_("%s: No dynamic symbols"), bfd_get_filename (abfd
));
436 /* Filter out (in place) symbols that are useless for disassembly.
437 COUNT is the number of elements in SYMBOLS.
438 Return the number of useful symbols. */
441 remove_useless_symbols (symbols
, count
)
445 register asymbol
**in_ptr
= symbols
, **out_ptr
= symbols
;
449 asymbol
*sym
= *in_ptr
++;
451 if (sym
->name
== NULL
|| sym
->name
[0] == '\0')
453 if (sym
->flags
& (BSF_DEBUGGING
))
455 if (bfd_is_und_section (sym
->section
)
456 || bfd_is_com_section (sym
->section
))
461 return out_ptr
- symbols
;
464 /* Sort symbols into value order. */
467 compare_symbols (ap
, bp
)
471 const asymbol
*a
= *(const asymbol
**)ap
;
472 const asymbol
*b
= *(const asymbol
**)bp
;
476 flagword aflags
, bflags
;
478 if (bfd_asymbol_value (a
) > bfd_asymbol_value (b
))
480 else if (bfd_asymbol_value (a
) < bfd_asymbol_value (b
))
483 if (a
->section
> b
->section
)
485 else if (a
->section
< b
->section
)
488 an
= bfd_asymbol_name (a
);
489 bn
= bfd_asymbol_name (b
);
493 /* The symbols gnu_compiled and gcc2_compiled convey no real
494 information, so put them after other symbols with the same value. */
496 af
= (strstr (an
, "gnu_compiled") != NULL
497 || strstr (an
, "gcc2_compiled") != NULL
);
498 bf
= (strstr (bn
, "gnu_compiled") != NULL
499 || strstr (bn
, "gcc2_compiled") != NULL
);
506 /* We use a heuristic for the file name, to try to sort it after
507 more useful symbols. It may not work on non Unix systems, but it
508 doesn't really matter; the only difference is precisely which
509 symbol names get printed. */
511 #define file_symbol(s, sn, snl) \
512 (((s)->flags & BSF_FILE) != 0 \
513 || ((sn)[(snl) - 2] == '.' \
514 && ((sn)[(snl) - 1] == 'o' \
515 || (sn)[(snl) - 1] == 'a')))
517 af
= file_symbol (a
, an
, anl
);
518 bf
= file_symbol (b
, bn
, bnl
);
525 /* Try to sort global symbols before local symbols before function
526 symbols before debugging symbols. */
531 if ((aflags
& BSF_DEBUGGING
) != (bflags
& BSF_DEBUGGING
))
533 if ((aflags
& BSF_DEBUGGING
) != 0)
538 if ((aflags
& BSF_FUNCTION
) != (bflags
& BSF_FUNCTION
))
540 if ((aflags
& BSF_FUNCTION
) != 0)
545 if ((aflags
& BSF_LOCAL
) != (bflags
& BSF_LOCAL
))
547 if ((aflags
& BSF_LOCAL
) != 0)
552 if ((aflags
& BSF_GLOBAL
) != (bflags
& BSF_GLOBAL
))
554 if ((aflags
& BSF_GLOBAL
) != 0)
560 /* Symbols that start with '.' might be section names, so sort them
561 after symbols that don't start with '.'. */
562 if (an
[0] == '.' && bn
[0] != '.')
564 if (an
[0] != '.' && bn
[0] == '.')
567 /* Finally, if we can't distinguish them in any other way, try to
568 get consistent results by sorting the symbols by name. */
569 return strcmp (an
, bn
);
572 /* Sort relocs into address order. */
575 compare_relocs (ap
, bp
)
579 const arelent
*a
= *(const arelent
**)ap
;
580 const arelent
*b
= *(const arelent
**)bp
;
582 if (a
->address
> b
->address
)
584 else if (a
->address
< b
->address
)
587 /* So that associated relocations tied to the same address show up
588 in the correct order, we don't do any further sorting. */
597 /* Print VMA to STREAM. If SKIP_ZEROES is true, omit leading zeroes. */
600 objdump_print_value (vma
, info
, skip_zeroes
)
602 struct disassemble_info
*info
;
607 struct objdump_disasm_info
*aux
608 = (struct objdump_disasm_info
*) info
->application_data
;
610 bfd_sprintf_vma (aux
->abfd
, buf
, vma
);
615 for (p
= buf
; *p
== '0'; ++p
)
620 (*info
->fprintf_func
) (info
->stream
, "%s", p
);
623 /* Print the name of a symbol. */
626 objdump_print_symname (abfd
, info
, sym
)
628 struct disassemble_info
*info
;
636 name
= bfd_asymbol_name (sym
);
637 if (! do_demangle
|| name
[0] == '\0')
641 /* Demangle the name. */
642 if (bfd_get_symbol_leading_char (abfd
) == name
[0])
645 alloc
= cplus_demangle (name
, DMGL_ANSI
| DMGL_PARAMS
);
653 (*info
->fprintf_func
) (info
->stream
, "%s", print
);
655 printf ("%s", print
);
661 /* Locate a symbol given a bfd, a section, and a VMA. If REQUIRE_SEC
662 is true, then always require the symbol to be in the section. This
663 returns NULL if there is no suitable symbol. If PLACE is not NULL,
664 then *PLACE is set to the index of the symbol in sorted_syms. */
667 find_symbol_for_address (abfd
, sec
, vma
, require_sec
, place
)
674 /* @@ Would it speed things up to cache the last two symbols returned,
675 and maybe their address ranges? For many processors, only one memory
676 operand can be present at a time, so the 2-entry cache wouldn't be
677 constantly churned by code doing heavy memory accesses. */
679 /* Indices in `sorted_syms'. */
681 long max
= sorted_symcount
;
683 unsigned int opb
= bfd_octets_per_byte (abfd
);
685 if (sorted_symcount
< 1)
688 /* Perform a binary search looking for the closest symbol to the
689 required value. We are searching the range (min, max]. */
690 while (min
+ 1 < max
)
694 thisplace
= (max
+ min
) / 2;
695 sym
= sorted_syms
[thisplace
];
697 if (bfd_asymbol_value (sym
) > vma
)
699 else if (bfd_asymbol_value (sym
) < vma
)
708 /* The symbol we want is now in min, the low end of the range we
709 were searching. If there are several symbols with the same
710 value, we want the first one. */
713 && (bfd_asymbol_value (sorted_syms
[thisplace
])
714 == bfd_asymbol_value (sorted_syms
[thisplace
- 1])))
717 /* If the file is relocateable, and the symbol could be from this
718 section, prefer a symbol from this section over symbols from
719 others, even if the other symbol's value might be closer.
721 Note that this may be wrong for some symbol references if the
722 sections have overlapping memory ranges, but in that case there's
723 no way to tell what's desired without looking at the relocation
726 if (sorted_syms
[thisplace
]->section
!= sec
728 || ((abfd
->flags
& HAS_RELOC
) != 0
729 && vma
>= bfd_get_section_vma (abfd
, sec
)
730 && vma
< (bfd_get_section_vma (abfd
, sec
)
731 + bfd_section_size (abfd
, sec
) / opb
))))
735 for (i
= thisplace
+ 1; i
< sorted_symcount
; i
++)
737 if (bfd_asymbol_value (sorted_syms
[i
])
738 != bfd_asymbol_value (sorted_syms
[thisplace
]))
744 if (sorted_syms
[i
]->section
== sec
746 || sorted_syms
[i
- 1]->section
!= sec
747 || (bfd_asymbol_value (sorted_syms
[i
])
748 != bfd_asymbol_value (sorted_syms
[i
- 1]))))
755 if (sorted_syms
[thisplace
]->section
!= sec
)
757 /* We didn't find a good symbol with a smaller value.
758 Look for one with a larger value. */
759 for (i
= thisplace
+ 1; i
< sorted_symcount
; i
++)
761 if (sorted_syms
[i
]->section
== sec
)
769 if (sorted_syms
[thisplace
]->section
!= sec
771 || ((abfd
->flags
& HAS_RELOC
) != 0
772 && vma
>= bfd_get_section_vma (abfd
, sec
)
773 && vma
< (bfd_get_section_vma (abfd
, sec
)
774 + bfd_section_size (abfd
, sec
)))))
776 /* There is no suitable symbol. */
784 return sorted_syms
[thisplace
];
787 /* Print an address to INFO symbolically. */
790 objdump_print_addr_with_sym (abfd
, sec
, sym
, vma
, info
, skip_zeroes
)
795 struct disassemble_info
*info
;
798 objdump_print_value (vma
, info
, skip_zeroes
);
804 (*info
->fprintf_func
) (info
->stream
, " <%s",
805 bfd_get_section_name (abfd
, sec
));
806 secaddr
= bfd_get_section_vma (abfd
, sec
);
809 (*info
->fprintf_func
) (info
->stream
, "-0x");
810 objdump_print_value (secaddr
- vma
, info
, true);
812 else if (vma
> secaddr
)
814 (*info
->fprintf_func
) (info
->stream
, "+0x");
815 objdump_print_value (vma
- secaddr
, info
, true);
817 (*info
->fprintf_func
) (info
->stream
, ">");
821 (*info
->fprintf_func
) (info
->stream
, " <");
822 objdump_print_symname (abfd
, info
, sym
);
823 if (bfd_asymbol_value (sym
) > vma
)
825 (*info
->fprintf_func
) (info
->stream
, "-0x");
826 objdump_print_value (bfd_asymbol_value (sym
) - vma
, info
, true);
828 else if (vma
> bfd_asymbol_value (sym
))
830 (*info
->fprintf_func
) (info
->stream
, "+0x");
831 objdump_print_value (vma
- bfd_asymbol_value (sym
), info
, true);
833 (*info
->fprintf_func
) (info
->stream
, ">");
837 /* Print VMA to INFO, symbolically if possible. If SKIP_ZEROES is
838 true, don't output leading zeroes. */
841 objdump_print_addr (vma
, info
, skip_zeroes
)
843 struct disassemble_info
*info
;
846 struct objdump_disasm_info
*aux
;
849 if (sorted_symcount
< 1)
851 (*info
->fprintf_func
) (info
->stream
, "0x");
852 objdump_print_value (vma
, info
, skip_zeroes
);
856 aux
= (struct objdump_disasm_info
*) info
->application_data
;
857 sym
= find_symbol_for_address (aux
->abfd
, aux
->sec
, vma
, aux
->require_sec
,
859 objdump_print_addr_with_sym (aux
->abfd
, aux
->sec
, sym
, vma
, info
,
863 /* Print VMA to INFO. This function is passed to the disassembler
867 objdump_print_address (vma
, info
)
869 struct disassemble_info
*info
;
871 objdump_print_addr (vma
, info
, ! prefix_addresses
);
874 /* Determine of the given address has a symbol associated with it. */
877 objdump_symbol_at_address (vma
, info
)
879 struct disassemble_info
* info
;
881 struct objdump_disasm_info
* aux
;
884 /* No symbols - do not bother checking. */
885 if (sorted_symcount
< 1)
888 aux
= (struct objdump_disasm_info
*) info
->application_data
;
889 sym
= find_symbol_for_address (aux
->abfd
, aux
->sec
, vma
, aux
->require_sec
,
892 return (sym
!= NULL
&& (bfd_asymbol_value (sym
) == vma
));
895 /* Hold the last function name and the last line number we displayed
898 static char *prev_functionname
;
899 static unsigned int prev_line
;
901 /* We keep a list of all files that we have seen when doing a
902 dissassembly with source, so that we know how much of the file to
903 display. This can be important for inlined functions. */
905 struct print_file_list
907 struct print_file_list
*next
;
913 static struct print_file_list
*print_files
;
915 /* The number of preceding context lines to show when we start
916 displaying a file for the first time. */
918 #define SHOW_PRECEDING_CONTEXT_LINES (5)
920 /* Skip ahead to a given line in a file, optionally printing each
924 skip_to_line
PARAMS ((struct print_file_list
*, unsigned int, boolean
));
927 skip_to_line (p
, line
, show
)
928 struct print_file_list
*p
;
932 while (p
->line
< line
)
936 if (fgets (buf
, sizeof buf
, p
->f
) == NULL
)
946 if (strchr (buf
, '\n') != NULL
)
951 /* Show the line number, or the source line, in a dissassembly
955 show_line (abfd
, section
, addr_offset
)
960 CONST
char *filename
;
961 CONST
char *functionname
;
964 if (! with_line_numbers
&& ! with_source_code
)
967 if (! bfd_find_nearest_line (abfd
, section
, syms
, addr_offset
, &filename
,
968 &functionname
, &line
))
971 if (filename
!= NULL
&& *filename
== '\0')
973 if (functionname
!= NULL
&& *functionname
== '\0')
976 if (with_line_numbers
)
978 if (functionname
!= NULL
979 && (prev_functionname
== NULL
980 || strcmp (functionname
, prev_functionname
) != 0))
981 printf ("%s():\n", functionname
);
982 if (line
> 0 && line
!= prev_line
)
983 printf ("%s:%u\n", filename
== NULL
? "???" : filename
, line
);
990 struct print_file_list
**pp
, *p
;
992 for (pp
= &print_files
; *pp
!= NULL
; pp
= &(*pp
)->next
)
993 if (strcmp ((*pp
)->filename
, filename
) == 0)
999 if (p
!= print_files
)
1003 /* We have reencountered a file name which we saw
1004 earlier. This implies that either we are dumping out
1005 code from an included file, or the same file was
1006 linked in more than once. There are two common cases
1007 of an included file: inline functions in a header
1008 file, and a bison or flex skeleton file. In the
1009 former case we want to just start printing (but we
1010 back up a few lines to give context); in the latter
1011 case we want to continue from where we left off. I
1012 can't think of a good way to distinguish the cases,
1013 so I used a heuristic based on the file name. */
1014 if (strcmp (p
->filename
+ strlen (p
->filename
) - 2, ".h") != 0)
1018 l
= line
- SHOW_PRECEDING_CONTEXT_LINES
;
1025 p
->f
= fopen (p
->filename
, "r");
1029 skip_to_line (p
, l
, false);
1031 if (print_files
->f
!= NULL
)
1033 fclose (print_files
->f
);
1034 print_files
->f
= NULL
;
1040 skip_to_line (p
, line
, true);
1042 p
->next
= print_files
;
1050 f
= fopen (filename
, "r");
1055 p
= ((struct print_file_list
*)
1056 xmalloc (sizeof (struct print_file_list
)));
1057 p
->filename
= xmalloc (strlen (filename
) + 1);
1058 strcpy (p
->filename
, filename
);
1062 if (print_files
!= NULL
&& print_files
->f
!= NULL
)
1064 fclose (print_files
->f
);
1065 print_files
->f
= NULL
;
1067 p
->next
= print_files
;
1070 if (file_start_context
)
1073 l
= line
- SHOW_PRECEDING_CONTEXT_LINES
;
1076 skip_to_line (p
, l
, false);
1078 skip_to_line (p
, line
, true);
1083 if (functionname
!= NULL
1084 && (prev_functionname
== NULL
1085 || strcmp (functionname
, prev_functionname
) != 0))
1087 if (prev_functionname
!= NULL
)
1088 free (prev_functionname
);
1089 prev_functionname
= xmalloc (strlen (functionname
) + 1);
1090 strcpy (prev_functionname
, functionname
);
1093 if (line
> 0 && line
!= prev_line
)
1097 /* Pseudo FILE object for strings. */
1105 /* sprintf to a "stream" */
1108 objdump_sprintf
VPARAMS ((SFILE
*f
, const char *format
, ...))
1113 VA_OPEN (args
, format
);
1114 VA_FIXEDARG (args
, SFILE
*, f
);
1115 VA_FIXEDARG (args
, const char *, format
);
1117 vasprintf (&buf
, format
, args
);
1122 fatal (_("Out of virtual memory"));
1127 while ((size_t) ((f
->buffer
+ f
->size
) - f
->current
) < n
+ 1)
1131 curroff
= f
->current
- f
->buffer
;
1133 f
->buffer
= xrealloc (f
->buffer
, f
->size
);
1134 f
->current
= f
->buffer
+ curroff
;
1137 memcpy (f
->current
, buf
, n
);
1139 f
->current
[0] = '\0';
1147 /* The number of zeroes we want to see before we start skipping them.
1148 The number is arbitrarily chosen. */
1151 #define SKIP_ZEROES (8)
1154 /* The number of zeroes to skip at the end of a section. If the
1155 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1156 SKIP_ZEROES, they will be disassembled. If there are fewer than
1157 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1158 attempt to avoid disassembling zeroes inserted by section
1161 #ifndef SKIP_ZEROES_AT_END
1162 #define SKIP_ZEROES_AT_END (3)
1165 /* Disassemble some data in memory between given values. */
1168 disassemble_bytes (info
, disassemble_fn
, insns
, data
,
1169 start_offset
, stop_offset
, relppp
,
1171 struct disassemble_info
*info
;
1172 disassembler_ftype disassemble_fn
;
1175 bfd_vma start_offset
;
1176 bfd_vma stop_offset
;
1180 struct objdump_disasm_info
*aux
;
1182 int octets_per_line
;
1184 int skip_addr_chars
;
1185 bfd_vma addr_offset
;
1186 int opb
= info
->octets_per_byte
;
1188 aux
= (struct objdump_disasm_info
*) info
->application_data
;
1192 octets_per_line
= 4;
1194 octets_per_line
= 16;
1196 /* Figure out how many characters to skip at the start of an
1197 address, to make the disassembly look nicer. We discard leading
1198 zeroes in chunks of 4, ensuring that there is always a leading
1200 skip_addr_chars
= 0;
1201 if (! prefix_addresses
)
1209 + bfd_section_size (section
->owner
, section
) / opb
));
1211 while (s
[0] == '0' && s
[1] == '0' && s
[2] == '0' && s
[3] == '0'
1214 skip_addr_chars
+= 4;
1219 info
->insn_info_valid
= 0;
1222 addr_offset
= start_offset
;
1223 while (addr_offset
< stop_offset
)
1227 boolean need_nl
= false;
1229 /* If we see more than SKIP_ZEROES octets of zeroes, we just
1231 for (z
= addr_offset
* opb
; z
< stop_offset
* opb
; z
++)
1234 if (! disassemble_zeroes
1235 && (info
->insn_info_valid
== 0
1236 || info
->branch_delay_insns
== 0)
1237 && (z
- addr_offset
* opb
>= SKIP_ZEROES
1238 || (z
== stop_offset
* opb
&&
1239 z
- addr_offset
* opb
< SKIP_ZEROES_AT_END
)))
1243 /* If there are more nonzero octets to follow, we only skip
1244 zeroes in multiples of 4, to try to avoid running over
1245 the start of an instruction which happens to start with
1247 if (z
!= stop_offset
* opb
)
1248 z
= addr_offset
* opb
+ ((z
- addr_offset
* opb
) &~ 3);
1250 octets
= z
- addr_offset
* opb
;
1261 if (with_line_numbers
|| with_source_code
)
1262 /* The line number tables will refer to unadjusted
1263 section VMAs, so we must undo any VMA modifications
1264 when calling show_line. */
1265 show_line (aux
->abfd
, section
, addr_offset
- adjust_section_vma
);
1267 if (! prefix_addresses
)
1271 bfd_sprintf_vma (aux
->abfd
, buf
, section
->vma
+ addr_offset
);
1272 for (s
= buf
+ skip_addr_chars
; *s
== '0'; s
++)
1276 printf ("%s:\t", buf
+ skip_addr_chars
);
1280 aux
->require_sec
= true;
1281 objdump_print_address (section
->vma
+ addr_offset
, info
);
1282 aux
->require_sec
= false;
1289 sfile
.buffer
= xmalloc (sfile
.size
);
1290 sfile
.current
= sfile
.buffer
;
1291 info
->fprintf_func
= (fprintf_ftype
) objdump_sprintf
;
1292 info
->stream
= (FILE *) &sfile
;
1293 info
->bytes_per_line
= 0;
1294 info
->bytes_per_chunk
= 0;
1296 #ifdef DISASSEMBLER_NEEDS_RELOCS
1297 /* FIXME: This is wrong. It tests the number of octets
1298 in the last instruction, not the current one. */
1299 if (*relppp
< relppend
1300 && (**relppp
)->address
>= addr_offset
1301 && (**relppp
)->address
<= addr_offset
+ octets
/ opb
)
1302 info
->flags
= INSN_HAS_RELOC
;
1307 octets
= (*disassemble_fn
) (section
->vma
+ addr_offset
, info
);
1308 info
->fprintf_func
= (fprintf_ftype
) fprintf
;
1309 info
->stream
= stdout
;
1310 if (info
->bytes_per_line
!= 0)
1311 octets_per_line
= info
->bytes_per_line
;
1314 if (sfile
.current
!= sfile
.buffer
)
1315 printf ("%s\n", sfile
.buffer
);
1316 free (sfile
.buffer
);
1324 octets
= octets_per_line
;
1325 if (addr_offset
+ octets
/ opb
> stop_offset
)
1326 octets
= (stop_offset
- addr_offset
) * opb
;
1328 for (j
= addr_offset
* opb
; j
< addr_offset
* opb
+ octets
; ++j
)
1330 if (ISPRINT (data
[j
]))
1331 buf
[j
- addr_offset
* opb
] = data
[j
];
1333 buf
[j
- addr_offset
* opb
] = '.';
1335 buf
[j
- addr_offset
* opb
] = '\0';
1338 if (prefix_addresses
1340 : show_raw_insn
>= 0)
1344 /* If ! prefix_addresses and ! wide_output, we print
1345 octets_per_line octets per line. */
1347 if (pb
> octets_per_line
&& ! prefix_addresses
&& ! wide_output
)
1348 pb
= octets_per_line
;
1350 if (info
->bytes_per_chunk
)
1351 bpc
= info
->bytes_per_chunk
;
1355 for (j
= addr_offset
* opb
; j
< addr_offset
* opb
+ pb
; j
+= bpc
)
1358 if (bpc
> 1 && info
->display_endian
== BFD_ENDIAN_LITTLE
)
1360 for (k
= bpc
- 1; k
>= 0; k
--)
1361 printf ("%02x", (unsigned) data
[j
+ k
]);
1366 for (k
= 0; k
< bpc
; k
++)
1367 printf ("%02x", (unsigned) data
[j
+ k
]);
1372 for (; pb
< octets_per_line
; pb
+= bpc
)
1376 for (k
= 0; k
< bpc
; k
++)
1381 /* Separate raw data from instruction by extra space. */
1392 printf ("%s", sfile
.buffer
);
1393 free (sfile
.buffer
);
1396 if (prefix_addresses
1398 : show_raw_insn
>= 0)
1406 j
= addr_offset
* opb
+ pb
;
1408 bfd_sprintf_vma (aux
->abfd
, buf
, section
->vma
+ j
/ opb
);
1409 for (s
= buf
+ skip_addr_chars
; *s
== '0'; s
++)
1413 printf ("%s:\t", buf
+ skip_addr_chars
);
1415 pb
+= octets_per_line
;
1418 for (; j
< addr_offset
* opb
+ pb
; j
+= bpc
)
1422 if (bpc
> 1 && info
->display_endian
== BFD_ENDIAN_LITTLE
)
1424 for (k
= bpc
- 1; k
>= 0; k
--)
1425 printf ("%02x", (unsigned) data
[j
+ k
]);
1430 for (k
= 0; k
< bpc
; k
++)
1431 printf ("%02x", (unsigned) data
[j
+ k
]);
1444 if ((section
->flags
& SEC_RELOC
) != 0
1445 #ifndef DISASSEMBLER_NEEDS_RELOCS
1450 while ((*relppp
) < relppend
1451 && ((**relppp
)->address
>= (bfd_vma
) addr_offset
1452 && (**relppp
)->address
< (bfd_vma
) addr_offset
+ octets
/ opb
))
1453 #ifdef DISASSEMBLER_NEEDS_RELOCS
1454 if (! dump_reloc_info
)
1468 objdump_print_value (section
->vma
+ q
->address
, info
, true);
1470 printf (": %s\t", q
->howto
->name
);
1472 if (q
->sym_ptr_ptr
== NULL
|| *q
->sym_ptr_ptr
== NULL
)
1473 printf ("*unknown*");
1476 const char *sym_name
;
1478 sym_name
= bfd_asymbol_name (*q
->sym_ptr_ptr
);
1479 if (sym_name
!= NULL
&& *sym_name
!= '\0')
1480 objdump_print_symname (aux
->abfd
, info
, *q
->sym_ptr_ptr
);
1485 sym_sec
= bfd_get_section (*q
->sym_ptr_ptr
);
1486 sym_name
= bfd_get_section_name (aux
->abfd
, sym_sec
);
1487 if (sym_name
== NULL
|| *sym_name
== '\0')
1488 sym_name
= "*unknown*";
1489 printf ("%s", sym_name
);
1496 objdump_print_value (q
->addend
, info
, true);
1508 addr_offset
+= octets
/ opb
;
1512 /* Disassemble the contents of an object file. */
1515 disassemble_data (abfd
)
1518 unsigned long addr_offset
;
1519 disassembler_ftype disassemble_fn
;
1520 struct disassemble_info disasm_info
;
1521 struct objdump_disasm_info aux
;
1526 prev_functionname
= NULL
;
1529 /* We make a copy of syms to sort. We don't want to sort syms
1530 because that will screw up the relocs. */
1531 sorted_syms
= (asymbol
**) xmalloc (symcount
* sizeof (asymbol
*));
1532 memcpy (sorted_syms
, syms
, symcount
* sizeof (asymbol
*));
1534 sorted_symcount
= remove_useless_symbols (sorted_syms
, symcount
);
1536 /* Sort the symbols into section and symbol order */
1537 qsort (sorted_syms
, sorted_symcount
, sizeof (asymbol
*), compare_symbols
);
1539 INIT_DISASSEMBLE_INFO(disasm_info
, stdout
, fprintf
);
1540 disasm_info
.application_data
= (PTR
) &aux
;
1542 aux
.require_sec
= false;
1543 disasm_info
.print_address_func
= objdump_print_address
;
1544 disasm_info
.symbol_at_address_func
= objdump_symbol_at_address
;
1546 if (machine
!= (char *) NULL
)
1548 const bfd_arch_info_type
*info
= bfd_scan_arch (machine
);
1551 fatal (_("Can't use supplied machine %s"), machine
);
1553 abfd
->arch_info
= info
;
1556 if (endian
!= BFD_ENDIAN_UNKNOWN
)
1558 struct bfd_target
*xvec
;
1560 xvec
= (struct bfd_target
*) xmalloc (sizeof (struct bfd_target
));
1561 memcpy (xvec
, abfd
->xvec
, sizeof (struct bfd_target
));
1562 xvec
->byteorder
= endian
;
1566 disassemble_fn
= disassembler (abfd
);
1567 if (!disassemble_fn
)
1569 non_fatal (_("Can't disassemble for architecture %s\n"),
1570 bfd_printable_arch_mach (bfd_get_arch (abfd
), 0));
1575 opb
= bfd_octets_per_byte (abfd
);
1577 disasm_info
.flavour
= bfd_get_flavour (abfd
);
1578 disasm_info
.arch
= bfd_get_arch (abfd
);
1579 disasm_info
.mach
= bfd_get_mach (abfd
);
1580 disasm_info
.disassembler_options
= disassembler_options
;
1581 disasm_info
.octets_per_byte
= opb
;
1583 if (bfd_big_endian (abfd
))
1584 disasm_info
.display_endian
= disasm_info
.endian
= BFD_ENDIAN_BIG
;
1585 else if (bfd_little_endian (abfd
))
1586 disasm_info
.display_endian
= disasm_info
.endian
= BFD_ENDIAN_LITTLE
;
1588 /* ??? Aborting here seems too drastic. We could default to big or little
1590 disasm_info
.endian
= BFD_ENDIAN_UNKNOWN
;
1592 for (section
= abfd
->sections
;
1593 section
!= (asection
*) NULL
;
1594 section
= section
->next
)
1596 bfd_byte
*data
= NULL
;
1597 bfd_size_type datasize
= 0;
1598 arelent
**relbuf
= NULL
;
1599 arelent
**relpp
= NULL
;
1600 arelent
**relppend
= NULL
;
1601 unsigned long stop_offset
;
1602 asymbol
*sym
= NULL
;
1605 if ((section
->flags
& SEC_LOAD
) == 0
1606 || (! disassemble_all
1608 && (section
->flags
& SEC_CODE
) == 0))
1610 if (only
!= (char *) NULL
&& strcmp (only
, section
->name
) != 0)
1613 if ((section
->flags
& SEC_RELOC
) != 0
1614 #ifndef DISASSEMBLER_NEEDS_RELOCS
1621 relsize
= bfd_get_reloc_upper_bound (abfd
, section
);
1623 bfd_fatal (bfd_get_filename (abfd
));
1629 relbuf
= (arelent
**) xmalloc (relsize
);
1630 relcount
= bfd_canonicalize_reloc (abfd
, section
, relbuf
, syms
);
1632 bfd_fatal (bfd_get_filename (abfd
));
1634 /* Sort the relocs by address. */
1635 qsort (relbuf
, relcount
, sizeof (arelent
*), compare_relocs
);
1638 relppend
= relpp
+ relcount
;
1640 /* Skip over the relocs belonging to addresses below the
1642 if (start_address
!= (bfd_vma
) -1)
1644 while (relpp
< relppend
1645 && (*relpp
)->address
< start_address
)
1651 printf (_("Disassembly of section %s:\n"), section
->name
);
1653 datasize
= bfd_get_section_size_before_reloc (section
);
1657 data
= (bfd_byte
*) xmalloc ((size_t) datasize
);
1659 bfd_get_section_contents (abfd
, section
, data
, 0, datasize
);
1662 disasm_info
.buffer
= data
;
1663 disasm_info
.buffer_vma
= section
->vma
;
1664 disasm_info
.buffer_length
= datasize
;
1665 disasm_info
.section
= section
;
1666 if (start_address
== (bfd_vma
) -1
1667 || start_address
< disasm_info
.buffer_vma
)
1670 addr_offset
= start_address
- disasm_info
.buffer_vma
;
1671 if (stop_address
== (bfd_vma
) -1)
1672 stop_offset
= datasize
/ opb
;
1675 if (stop_address
< disasm_info
.buffer_vma
)
1678 stop_offset
= stop_address
- disasm_info
.buffer_vma
;
1679 if (stop_offset
> disasm_info
.buffer_length
/ opb
)
1680 stop_offset
= disasm_info
.buffer_length
/ opb
;
1683 sym
= find_symbol_for_address (abfd
, section
, section
->vma
+ addr_offset
,
1686 while (addr_offset
< stop_offset
)
1689 unsigned long nextstop_offset
;
1692 if (sym
!= NULL
&& bfd_asymbol_value (sym
) <= section
->vma
+ addr_offset
)
1697 (x
< sorted_symcount
1698 && bfd_asymbol_value (sorted_syms
[x
]) <= section
->vma
+ addr_offset
);
1701 disasm_info
.symbols
= & sorted_syms
[place
];
1702 disasm_info
.num_symbols
= x
- place
;
1705 disasm_info
.symbols
= NULL
;
1707 if (! prefix_addresses
)
1710 objdump_print_addr_with_sym (abfd
, section
, sym
,
1711 section
->vma
+ addr_offset
,
1717 if (sym
!= NULL
&& bfd_asymbol_value (sym
) > section
->vma
+ addr_offset
)
1719 else if (sym
== NULL
)
1723 /* Search forward for the next appropriate symbol in
1724 SECTION. Note that all the symbols are sorted
1725 together into one big array, and that some sections
1726 may have overlapping addresses. */
1727 while (place
< sorted_symcount
1728 && (sorted_syms
[place
]->section
!= section
1729 || (bfd_asymbol_value (sorted_syms
[place
])
1730 <= bfd_asymbol_value (sym
))))
1732 if (place
>= sorted_symcount
)
1735 nextsym
= sorted_syms
[place
];
1738 if (sym
!= NULL
&& bfd_asymbol_value (sym
) > section
->vma
+ addr_offset
)
1740 nextstop_offset
= bfd_asymbol_value (sym
) - section
->vma
;
1741 if (nextstop_offset
> stop_offset
)
1742 nextstop_offset
= stop_offset
;
1744 else if (nextsym
== NULL
)
1745 nextstop_offset
= stop_offset
;
1748 nextstop_offset
= bfd_asymbol_value (nextsym
) - section
->vma
;
1749 if (nextstop_offset
> stop_offset
)
1750 nextstop_offset
= stop_offset
;
1753 /* If a symbol is explicitly marked as being an object
1754 rather than a function, just dump the bytes without
1755 disassembling them. */
1758 || bfd_asymbol_value (sym
) > section
->vma
+ addr_offset
1759 || ((sym
->flags
& BSF_OBJECT
) == 0
1760 && (strstr (bfd_asymbol_name (sym
), "gnu_compiled")
1762 && (strstr (bfd_asymbol_name (sym
), "gcc2_compiled")
1764 || (sym
->flags
& BSF_FUNCTION
) != 0)
1769 disassemble_bytes (&disasm_info
, disassemble_fn
, insns
, data
,
1770 addr_offset
, nextstop_offset
, &relpp
, relppend
);
1772 addr_offset
= nextstop_offset
;
1784 /* Define a table of stab values and print-strings. We wish the initializer
1785 could be a direct-mapped table, but instead we build one the first
1788 static void dump_section_stabs
PARAMS ((bfd
*abfd
, char *stabsect_name
,
1789 char *strsect_name
));
1791 /* Dump the stabs sections from an object file that has a section that
1792 uses Sun stabs encoding. */
1798 dump_section_stabs (abfd
, ".stab", ".stabstr");
1799 dump_section_stabs (abfd
, ".stab.excl", ".stab.exclstr");
1800 dump_section_stabs (abfd
, ".stab.index", ".stab.indexstr");
1801 dump_section_stabs (abfd
, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
1804 static bfd_byte
*stabs
;
1805 static bfd_size_type stab_size
;
1807 static char *strtab
;
1808 static bfd_size_type stabstr_size
;
1810 /* Read ABFD's stabs section STABSECT_NAME into `stabs'
1811 and string table section STRSECT_NAME into `strtab'.
1812 If the section exists and was read, allocate the space and return true.
1813 Otherwise return false. */
1816 read_section_stabs (abfd
, stabsect_name
, strsect_name
)
1818 const char *stabsect_name
;
1819 const char *strsect_name
;
1821 asection
*stabsect
, *stabstrsect
;
1823 stabsect
= bfd_get_section_by_name (abfd
, stabsect_name
);
1826 printf (_("No %s section present\n\n"), stabsect_name
);
1830 stabstrsect
= bfd_get_section_by_name (abfd
, strsect_name
);
1831 if (0 == stabstrsect
)
1833 non_fatal (_("%s has no %s section"),
1834 bfd_get_filename (abfd
), strsect_name
);
1839 stab_size
= bfd_section_size (abfd
, stabsect
);
1840 stabstr_size
= bfd_section_size (abfd
, stabstrsect
);
1842 stabs
= (bfd_byte
*) xmalloc (stab_size
);
1843 strtab
= (char *) xmalloc (stabstr_size
);
1845 if (! bfd_get_section_contents (abfd
, stabsect
, (PTR
) stabs
, 0, stab_size
))
1847 non_fatal (_("Reading %s section of %s failed: %s"),
1848 stabsect_name
, bfd_get_filename (abfd
),
1849 bfd_errmsg (bfd_get_error ()));
1856 if (! bfd_get_section_contents (abfd
, stabstrsect
, (PTR
) strtab
, 0,
1859 non_fatal (_("Reading %s section of %s failed: %s\n"),
1860 strsect_name
, bfd_get_filename (abfd
),
1861 bfd_errmsg (bfd_get_error ()));
1871 /* Stabs entries use a 12 byte format:
1872 4 byte string table index
1874 1 byte stab other field
1875 2 byte stab desc field
1877 FIXME: This will have to change for a 64 bit object format. */
1879 #define STRDXOFF (0)
1881 #define OTHEROFF (5)
1884 #define STABSIZE (12)
1886 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
1887 using string table section STRSECT_NAME (in `strtab'). */
1890 print_section_stabs (abfd
, stabsect_name
, strsect_name
)
1892 const char *stabsect_name
;
1893 const char *strsect_name ATTRIBUTE_UNUSED
;
1896 unsigned file_string_table_offset
= 0, next_file_string_table_offset
= 0;
1897 bfd_byte
*stabp
, *stabs_end
;
1900 stabs_end
= stabp
+ stab_size
;
1902 printf (_("Contents of %s section:\n\n"), stabsect_name
);
1903 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
1905 /* Loop through all symbols and print them.
1907 We start the index at -1 because there is a dummy symbol on
1908 the front of stabs-in-{coff,elf} sections that supplies sizes. */
1910 for (i
= -1; stabp
< stabs_end
; stabp
+= STABSIZE
, i
++)
1914 unsigned char type
, other
;
1915 unsigned short desc
;
1918 strx
= bfd_h_get_32 (abfd
, stabp
+ STRDXOFF
);
1919 type
= bfd_h_get_8 (abfd
, stabp
+ TYPEOFF
);
1920 other
= bfd_h_get_8 (abfd
, stabp
+ OTHEROFF
);
1921 desc
= bfd_h_get_16 (abfd
, stabp
+ DESCOFF
);
1922 value
= bfd_h_get_32 (abfd
, stabp
+ VALOFF
);
1924 printf ("\n%-6d ", i
);
1925 /* Either print the stab name, or, if unnamed, print its number
1926 again (makes consistent formatting for tools like awk). */
1927 name
= bfd_get_stab_name (type
);
1929 printf ("%-6s", name
);
1930 else if (type
== N_UNDF
)
1933 printf ("%-6d", type
);
1934 printf (" %-6d %-6d ", other
, desc
);
1935 bfd_printf_vma (abfd
, value
);
1936 printf (" %-6lu", strx
);
1938 /* Symbols with type == 0 (N_UNDF) specify the length of the
1939 string table associated with this file. We use that info
1940 to know how to relocate the *next* file's string table indices. */
1944 file_string_table_offset
= next_file_string_table_offset
;
1945 next_file_string_table_offset
+= value
;
1949 /* Using the (possibly updated) string table offset, print the
1950 string (if any) associated with this symbol. */
1952 if ((strx
+ file_string_table_offset
) < stabstr_size
)
1953 printf (" %s", &strtab
[strx
+ file_string_table_offset
]);
1962 dump_section_stabs (abfd
, stabsect_name
, strsect_name
)
1964 char *stabsect_name
;
1969 /* Check for section names for which stabsect_name is a prefix, to
1970 handle .stab0, etc. */
1971 for (s
= abfd
->sections
;
1977 len
= strlen (stabsect_name
);
1979 /* If the prefix matches, and the files section name ends with a
1980 nul or a digit, then we match. I.e., we want either an exact
1981 match or a section followed by a number. */
1982 if (strncmp (stabsect_name
, s
->name
, len
) == 0
1983 && (s
->name
[len
] == '\000'
1984 || ISDIGIT (s
->name
[len
])))
1986 if (read_section_stabs (abfd
, s
->name
, strsect_name
))
1988 print_section_stabs (abfd
, s
->name
, strsect_name
);
1997 dump_bfd_header (abfd
)
2002 printf (_("architecture: %s, "),
2003 bfd_printable_arch_mach (bfd_get_arch (abfd
),
2004 bfd_get_mach (abfd
)));
2005 printf (_("flags 0x%08x:\n"), abfd
->flags
);
2007 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2008 PF (HAS_RELOC
, "HAS_RELOC");
2009 PF (EXEC_P
, "EXEC_P");
2010 PF (HAS_LINENO
, "HAS_LINENO");
2011 PF (HAS_DEBUG
, "HAS_DEBUG");
2012 PF (HAS_SYMS
, "HAS_SYMS");
2013 PF (HAS_LOCALS
, "HAS_LOCALS");
2014 PF (DYNAMIC
, "DYNAMIC");
2015 PF (WP_TEXT
, "WP_TEXT");
2016 PF (D_PAGED
, "D_PAGED");
2017 PF (BFD_IS_RELAXABLE
, "BFD_IS_RELAXABLE");
2018 printf (_("\nstart address 0x"));
2019 bfd_printf_vma (abfd
, abfd
->start_address
);
2024 dump_bfd_private_header (abfd
)
2027 bfd_print_private_bfd_data (abfd
, stdout
);
2030 /* Dump selected contents of ABFD */
2036 /* If we are adjusting section VMA's, change them all now. Changing
2037 the BFD information is a hack. However, we must do it, or
2038 bfd_find_nearest_line will not do the right thing. */
2039 if (adjust_section_vma
!= 0)
2043 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
2045 s
->vma
+= adjust_section_vma
;
2046 s
->lma
+= adjust_section_vma
;
2050 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd
),
2053 print_arelt_descr (stdout
, abfd
, true);
2054 if (dump_file_header
)
2055 dump_bfd_header (abfd
);
2056 if (dump_private_headers
)
2057 dump_bfd_private_header (abfd
);
2059 if (dump_section_headers
)
2060 dump_headers (abfd
);
2061 if (dump_symtab
|| dump_reloc_info
|| disassemble
|| dump_debugging
)
2063 syms
= slurp_symtab (abfd
);
2065 if (dump_dynamic_symtab
|| dump_dynamic_reloc_info
)
2067 dynsyms
= slurp_dynamic_symtab (abfd
);
2070 dump_symbols (abfd
, false);
2071 if (dump_dynamic_symtab
)
2072 dump_symbols (abfd
, true);
2073 if (dump_stab_section_info
)
2075 if (dump_reloc_info
&& ! disassemble
)
2077 if (dump_dynamic_reloc_info
)
2078 dump_dynamic_relocs (abfd
);
2079 if (dump_section_contents
)
2082 disassemble_data (abfd
);
2087 dhandle
= read_debugging_info (abfd
, syms
, symcount
);
2088 if (dhandle
!= NULL
)
2090 if (! print_debugging_info (stdout
, dhandle
))
2092 non_fatal (_("%s: printing debugging information failed"),
2093 bfd_get_filename (abfd
));
2116 if (bfd_check_format_matches (abfd
, bfd_object
, &matching
))
2122 if (bfd_get_error () == bfd_error_file_ambiguously_recognized
)
2124 nonfatal (bfd_get_filename (abfd
));
2125 list_matching_formats (matching
);
2130 if (bfd_get_error () != bfd_error_file_not_recognized
)
2132 nonfatal (bfd_get_filename (abfd
));
2136 if (bfd_check_format_matches (abfd
, bfd_core
, &matching
))
2142 nonfatal (bfd_get_filename (abfd
));
2144 if (bfd_get_error () == bfd_error_file_ambiguously_recognized
)
2146 list_matching_formats (matching
);
2152 display_file (filename
, target
)
2156 bfd
*file
, *arfile
= (bfd
*) NULL
;
2158 file
= bfd_openr (filename
, target
);
2161 nonfatal (filename
);
2165 if (bfd_check_format (file
, bfd_archive
) == true)
2167 bfd
*last_arfile
= NULL
;
2169 printf (_("In archive %s:\n"), bfd_get_filename (file
));
2172 bfd_set_error (bfd_error_no_error
);
2174 arfile
= bfd_openr_next_archived_file (file
, arfile
);
2177 if (bfd_get_error () != bfd_error_no_more_archived_files
)
2178 nonfatal (bfd_get_filename (file
));
2182 display_bfd (arfile
);
2184 if (last_arfile
!= NULL
)
2185 bfd_close (last_arfile
);
2186 last_arfile
= arfile
;
2189 if (last_arfile
!= NULL
)
2190 bfd_close (last_arfile
);
2198 /* Actually display the various requested regions */
2206 bfd_size_type datasize
= 0;
2207 bfd_size_type addr_offset
;
2208 bfd_size_type start_offset
, stop_offset
;
2209 unsigned int opb
= bfd_octets_per_byte (abfd
);
2211 for (section
= abfd
->sections
; section
!= NULL
; section
=
2216 if (only
== (char *) NULL
||
2217 strcmp (only
, section
->name
) == 0)
2219 if (section
->flags
& SEC_HAS_CONTENTS
)
2221 printf (_("Contents of section %s:\n"), section
->name
);
2223 if (bfd_section_size (abfd
, section
) == 0)
2225 data
= (bfd_byte
*) xmalloc ((size_t) bfd_section_size (abfd
, section
));
2226 datasize
= bfd_section_size (abfd
, section
);
2229 bfd_get_section_contents (abfd
, section
, (PTR
) data
, 0, bfd_section_size (abfd
, section
));
2231 if (start_address
== (bfd_vma
) -1
2232 || start_address
< section
->vma
)
2235 start_offset
= start_address
- section
->vma
;
2236 if (stop_address
== (bfd_vma
) -1)
2237 stop_offset
= bfd_section_size (abfd
, section
) / opb
;
2240 if (stop_address
< section
->vma
)
2243 stop_offset
= stop_address
- section
->vma
;
2244 if (stop_offset
> bfd_section_size (abfd
, section
) / opb
)
2245 stop_offset
= bfd_section_size (abfd
, section
) / opb
;
2247 for (addr_offset
= start_offset
;
2248 addr_offset
< stop_offset
; addr_offset
+= onaline
)
2252 printf (" %04lx ", (unsigned long int)
2253 (addr_offset
+ section
->vma
));
2254 for (j
= addr_offset
* opb
;
2255 j
< addr_offset
* opb
+ onaline
; j
++)
2257 if (j
< stop_offset
* opb
)
2258 printf ("%02x", (unsigned) (data
[j
]));
2266 for (j
= addr_offset
; j
< addr_offset
* opb
+ onaline
; j
++)
2268 if (j
>= stop_offset
* opb
)
2271 printf ("%c", ISPRINT (data
[j
]) ? data
[j
] : '.');
2281 /* Should perhaps share code and display with nm? */
2283 dump_symbols (abfd
, dynamic
)
2284 bfd
*abfd ATTRIBUTE_UNUSED
;
2297 printf ("DYNAMIC SYMBOL TABLE:\n");
2305 printf ("SYMBOL TABLE:\n");
2308 for (count
= 0; count
< max
; count
++)
2312 bfd
*cur_bfd
= bfd_asymbol_bfd (*current
);
2314 if (cur_bfd
!= NULL
)
2319 name
= bfd_asymbol_name (*current
);
2321 if (do_demangle
&& name
!= NULL
&& *name
!= '\0')
2325 /* If we want to demangle the name, we demangle it
2326 here, and temporarily clobber it while calling
2327 bfd_print_symbol. FIXME: This is a gross hack. */
2330 if (bfd_get_symbol_leading_char (cur_bfd
) == *n
)
2332 alloc
= cplus_demangle (n
, DMGL_ANSI
| DMGL_PARAMS
);
2334 (*current
)->name
= alloc
;
2336 (*current
)->name
= n
;
2339 bfd_print_symbol (cur_bfd
, stdout
, *current
,
2340 bfd_print_symbol_all
);
2342 (*current
)->name
= name
;
2363 for (a
= abfd
->sections
; a
!= (asection
*) NULL
; a
= a
->next
)
2367 if (bfd_is_abs_section (a
))
2369 if (bfd_is_und_section (a
))
2371 if (bfd_is_com_section (a
))
2376 if (strcmp (only
, a
->name
))
2379 else if ((a
->flags
& SEC_RELOC
) == 0)
2382 relsize
= bfd_get_reloc_upper_bound (abfd
, a
);
2384 bfd_fatal (bfd_get_filename (abfd
));
2386 printf ("RELOCATION RECORDS FOR [%s]:", a
->name
);
2390 printf (" (none)\n\n");
2394 relpp
= (arelent
**) xmalloc (relsize
);
2395 relcount
= bfd_canonicalize_reloc (abfd
, a
, relpp
, syms
);
2397 bfd_fatal (bfd_get_filename (abfd
));
2398 else if (relcount
== 0)
2400 printf (" (none)\n\n");
2405 dump_reloc_set (abfd
, a
, relpp
, relcount
);
2414 dump_dynamic_relocs (abfd
)
2421 relsize
= bfd_get_dynamic_reloc_upper_bound (abfd
);
2423 bfd_fatal (bfd_get_filename (abfd
));
2425 printf ("DYNAMIC RELOCATION RECORDS");
2429 printf (" (none)\n\n");
2433 relpp
= (arelent
**) xmalloc (relsize
);
2434 relcount
= bfd_canonicalize_dynamic_reloc (abfd
, relpp
, dynsyms
);
2436 bfd_fatal (bfd_get_filename (abfd
));
2437 else if (relcount
== 0)
2439 printf (" (none)\n\n");
2444 dump_reloc_set (abfd
, (asection
*) NULL
, relpp
, relcount
);
2452 dump_reloc_set (abfd
, sec
, relpp
, relcount
)
2459 char *last_filename
, *last_functionname
;
2460 unsigned int last_line
;
2462 /* Get column headers lined up reasonably. */
2468 bfd_sprintf_vma (abfd
, buf
, (bfd_vma
) -1);
2469 width
= strlen (buf
) - 7;
2471 printf ("OFFSET %*s TYPE %*s VALUE \n", width
, "", 12, "");
2474 last_filename
= NULL
;
2475 last_functionname
= NULL
;
2478 for (p
= relpp
; relcount
&& *p
!= (arelent
*) NULL
; p
++, relcount
--)
2481 const char *filename
, *functionname
;
2483 const char *sym_name
;
2484 const char *section_name
;
2486 if (start_address
!= (bfd_vma
) -1
2487 && q
->address
< start_address
)
2489 if (stop_address
!= (bfd_vma
) -1
2490 && q
->address
> stop_address
)
2493 if (with_line_numbers
2495 && bfd_find_nearest_line (abfd
, sec
, syms
, q
->address
,
2496 &filename
, &functionname
, &line
))
2498 if (functionname
!= NULL
2499 && (last_functionname
== NULL
2500 || strcmp (functionname
, last_functionname
) != 0))
2502 printf ("%s():\n", functionname
);
2503 if (last_functionname
!= NULL
)
2504 free (last_functionname
);
2505 last_functionname
= xstrdup (functionname
);
2508 && (line
!= last_line
2509 || (filename
!= NULL
2510 && last_filename
!= NULL
2511 && strcmp (filename
, last_filename
) != 0)))
2513 printf ("%s:%u\n", filename
== NULL
? "???" : filename
, line
);
2515 if (last_filename
!= NULL
)
2516 free (last_filename
);
2517 if (filename
== NULL
)
2518 last_filename
= NULL
;
2520 last_filename
= xstrdup (filename
);
2524 if (q
->sym_ptr_ptr
&& *q
->sym_ptr_ptr
)
2526 sym_name
= (*(q
->sym_ptr_ptr
))->name
;
2527 section_name
= (*(q
->sym_ptr_ptr
))->section
->name
;
2532 section_name
= NULL
;
2536 bfd_printf_vma (abfd
, q
->address
);
2538 printf (" %-16s ", q
->howto
->name
);
2540 printf (" %-16d ", q
->howto
->type
);
2541 objdump_print_symname (abfd
, (struct disassemble_info
*) NULL
,
2546 if (section_name
== (CONST
char *) NULL
)
2547 section_name
= "*unknown*";
2548 bfd_printf_vma (abfd
, q
->address
);
2549 printf (" %-16s [%s]",
2556 bfd_printf_vma (abfd
, q
->addend
);
2562 /* The length of the longest architecture name + 1. */
2563 #define LONGEST_ARCH sizeof("powerpc:common")
2566 endian_string (endian
)
2567 enum bfd_endian endian
;
2569 if (endian
== BFD_ENDIAN_BIG
)
2570 return "big endian";
2571 else if (endian
== BFD_ENDIAN_LITTLE
)
2572 return "little endian";
2574 return "endianness unknown";
2577 /* List the targets that BFD is configured to support, each followed
2578 by its endianness and the architectures it supports. */
2581 display_target_list ()
2583 extern const bfd_target
*const *bfd_target_vector
;
2587 dummy_name
= make_temp_file (NULL
);
2588 for (t
= 0; bfd_target_vector
[t
]; t
++)
2590 const bfd_target
*p
= bfd_target_vector
[t
];
2591 bfd
*abfd
= bfd_openw (dummy_name
, p
->name
);
2594 printf ("%s\n (header %s, data %s)\n", p
->name
,
2595 endian_string (p
->header_byteorder
),
2596 endian_string (p
->byteorder
));
2600 nonfatal (dummy_name
);
2604 if (! bfd_set_format (abfd
, bfd_object
))
2606 if (bfd_get_error () != bfd_error_invalid_operation
)
2608 bfd_close_all_done (abfd
);
2612 for (a
= (int) bfd_arch_obscure
+ 1; a
< (int) bfd_arch_last
; a
++)
2613 if (bfd_set_arch_mach (abfd
, (enum bfd_architecture
) a
, 0))
2615 bfd_printable_arch_mach ((enum bfd_architecture
) a
, 0));
2616 bfd_close_all_done (abfd
);
2618 unlink (dummy_name
);
2622 /* Print a table showing which architectures are supported for entries
2623 FIRST through LAST-1 of bfd_target_vector (targets across,
2624 architectures down). */
2627 display_info_table (first
, last
)
2631 extern const bfd_target
*const *bfd_target_vector
;
2635 /* Print heading of target names. */
2636 printf ("\n%*s", (int) LONGEST_ARCH
, " ");
2637 for (t
= first
; t
< last
&& bfd_target_vector
[t
]; t
++)
2638 printf ("%s ", bfd_target_vector
[t
]->name
);
2641 dummy_name
= make_temp_file (NULL
);
2642 for (a
= (int) bfd_arch_obscure
+ 1; a
< (int) bfd_arch_last
; a
++)
2643 if (strcmp (bfd_printable_arch_mach (a
, 0), "UNKNOWN!") != 0)
2645 printf ("%*s ", (int) LONGEST_ARCH
- 1,
2646 bfd_printable_arch_mach (a
, 0));
2647 for (t
= first
; t
< last
&& bfd_target_vector
[t
]; t
++)
2649 const bfd_target
*p
= bfd_target_vector
[t
];
2651 bfd
*abfd
= bfd_openw (dummy_name
, p
->name
);
2661 if (! bfd_set_format (abfd
, bfd_object
))
2663 if (bfd_get_error () != bfd_error_invalid_operation
)
2671 if (! bfd_set_arch_mach (abfd
, a
, 0))
2676 printf ("%s ", p
->name
);
2679 int l
= strlen (p
->name
);
2685 bfd_close_all_done (abfd
);
2689 unlink (dummy_name
);
2693 /* Print tables of all the target-architecture combinations that
2694 BFD has been configured to support. */
2697 display_target_tables ()
2700 extern const bfd_target
*const *bfd_target_vector
;
2704 colum
= getenv ("COLUMNS");
2706 columns
= atoi (colum
);
2711 while (bfd_target_vector
[t
] != NULL
)
2715 wid
= LONGEST_ARCH
+ strlen (bfd_target_vector
[t
]->name
) + 1;
2717 while (wid
< columns
&& bfd_target_vector
[t
] != NULL
)
2721 newwid
= wid
+ strlen (bfd_target_vector
[t
]->name
) + 1;
2722 if (newwid
>= columns
)
2727 display_info_table (oldt
, t
);
2734 printf (_("BFD header file version %s\n"), BFD_VERSION_STRING
);
2735 display_target_list ();
2736 display_target_tables ();
2739 int main
PARAMS ((int, char **));
2747 char *target
= default_target
;
2748 boolean seenflag
= false;
2750 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
2751 setlocale (LC_MESSAGES
, "");
2753 #if defined (HAVE_SETLOCALE)
2754 setlocale (LC_CTYPE
, "");
2756 bindtextdomain (PACKAGE
, LOCALEDIR
);
2757 textdomain (PACKAGE
);
2759 program_name
= *argv
;
2760 xmalloc_set_program_name (program_name
);
2762 START_PROGRESS (program_name
, 0);
2765 set_default_bfd_target ();
2767 while ((c
= getopt_long (argc
, argv
, "pib:m:M:VvCdDlfaHhrRtTxsSj:wE:zgG",
2768 long_options
, (int *) 0))
2774 break; /* We've been given a long option. */
2779 disassembler_options
= optarg
;
2785 with_line_numbers
= true;
2794 enum demangling_styles style
;
2796 style
= cplus_demangle_name_to_style (optarg
);
2797 if (style
== unknown_demangling
)
2798 fatal (_("unknown demangling style `%s'"),
2801 cplus_demangle_set_style (style
);
2807 case OPTION_ADJUST_VMA
:
2808 adjust_section_vma
= parse_vma (optarg
, "--adjust-vma");
2810 case OPTION_START_ADDRESS
:
2811 start_address
= parse_vma (optarg
, "--start-address");
2813 case OPTION_STOP_ADDRESS
:
2814 stop_address
= parse_vma (optarg
, "--stop-address");
2817 if (strcmp (optarg
, "B") == 0)
2818 endian
= BFD_ENDIAN_BIG
;
2819 else if (strcmp (optarg
, "L") == 0)
2820 endian
= BFD_ENDIAN_LITTLE
;
2823 non_fatal (_("unrecognized -E option"));
2828 if (strncmp (optarg
, "big", strlen (optarg
)) == 0)
2829 endian
= BFD_ENDIAN_BIG
;
2830 else if (strncmp (optarg
, "little", strlen (optarg
)) == 0)
2831 endian
= BFD_ENDIAN_LITTLE
;
2834 non_fatal (_("unrecognized --endian type `%s'"), optarg
);
2840 dump_file_header
= true;
2844 formats_info
= true;
2848 dump_private_headers
= true;
2852 dump_private_headers
= true;
2854 dump_reloc_info
= true;
2855 dump_file_header
= true;
2856 dump_ar_hdrs
= true;
2857 dump_section_headers
= true;
2865 dump_dynamic_symtab
= true;
2873 disassemble_zeroes
= true;
2877 disassemble_all
= true;
2882 with_source_code
= true;
2890 dump_stab_section_info
= true;
2894 dump_section_contents
= true;
2898 dump_reloc_info
= true;
2902 dump_dynamic_reloc_info
= true;
2906 dump_ar_hdrs
= true;
2910 dump_section_headers
= true;
2918 show_version
= true;
2928 print_version ("objdump");
2930 if (seenflag
== false)
2938 display_file ("a.out", target
);
2940 for (; optind
< argc
;)
2941 display_file (argv
[optind
++], target
);
2944 END_PROGRESS (program_name
);