1 /* objdump.c -- dump information about an object file.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
4 2012 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 3, 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, 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
26 Objdump displays information about one or more object files, either on
27 their own, or inside libraries. It is commonly used as a disassembler,
28 but it can also display information about file headers, symbol tables,
29 relocations, debugging directives and more.
31 The flow of execution is as follows:
33 1. Command line arguments are checked for control switches and the
34 information to be displayed is selected.
36 2. Any remaining arguments are assumed to be object files, and they are
37 processed in order by display_bfd(). If the file is an archive each
38 of its elements is processed in turn.
40 3. The file's target architecture and binary file format are determined
41 by bfd_check_format(). If they are recognised, then dump_bfd() is
44 4. dump_bfd() in turn calls separate functions to display the requested
45 item(s) of information(s). For example disassemble_data() is called if
46 a disassembly has been requested.
48 When disassembling the code loops through blocks of instructions bounded
49 by symbols, calling disassemble_bytes() on each block. The actual
50 disassembling is done by the libopcodes library, via a function pointer
51 supplied by the disassembler() function. */
61 #include "safe-ctype.h"
63 #include "libiberty.h"
65 #include "filenames.h"
74 /* Internal headers for the ELF .stab-dump code - sorry. */
75 #define BYTES_IN_WORD 32
76 #include "aout/aout64.h"
79 static int exit_status
= 0;
81 static char *default_target
= NULL
; /* Default at runtime. */
83 /* The following variables are set based on arguments passed on the
85 static int show_version
= 0; /* Show the version number. */
86 static int dump_section_contents
; /* -s */
87 static int dump_section_headers
; /* -h */
88 static bfd_boolean dump_file_header
; /* -f */
89 static int dump_symtab
; /* -t */
90 static int dump_dynamic_symtab
; /* -T */
91 static int dump_reloc_info
; /* -r */
92 static int dump_dynamic_reloc_info
; /* -R */
93 static int dump_ar_hdrs
; /* -a */
94 static int dump_private_headers
; /* -p */
95 static char *dump_private_options
; /* -P */
96 static int prefix_addresses
; /* --prefix-addresses */
97 static int with_line_numbers
; /* -l */
98 static bfd_boolean with_source_code
; /* -S */
99 static int show_raw_insn
; /* --show-raw-insn */
100 static int dump_dwarf_section_info
; /* --dwarf */
101 static int dump_stab_section_info
; /* --stabs */
102 static int do_demangle
; /* -C, --demangle */
103 static bfd_boolean disassemble
; /* -d */
104 static bfd_boolean disassemble_all
; /* -D */
105 static int disassemble_zeroes
; /* --disassemble-zeroes */
106 static bfd_boolean formats_info
; /* -i */
107 static int wide_output
; /* -w */
108 static int insn_width
; /* --insn-width */
109 static bfd_vma start_address
= (bfd_vma
) -1; /* --start-address */
110 static bfd_vma stop_address
= (bfd_vma
) -1; /* --stop-address */
111 static int dump_debugging
; /* --debugging */
112 static int dump_debugging_tags
; /* --debugging-tags */
113 static int suppress_bfd_header
;
114 static int dump_special_syms
= 0; /* --special-syms */
115 static bfd_vma adjust_section_vma
= 0; /* --adjust-vma */
116 static int file_start_context
= 0; /* --file-start-context */
117 static bfd_boolean display_file_offsets
;/* -F */
118 static const char *prefix
; /* --prefix */
119 static int prefix_strip
; /* --prefix-strip */
120 static size_t prefix_length
;
122 /* A structure to record the sections mentioned in -j switches. */
125 const char * name
; /* The name of the section. */
126 bfd_boolean seen
; /* A flag to indicate that the section has been found in one or more input files. */
127 struct only
* next
; /* Pointer to the next structure in the list. */
129 /* Pointer to an array of 'only' structures.
130 This pointer is NULL if the -j switch has not been used. */
131 static struct only
* only_list
= NULL
;
133 /* Variables for handling include file path table. */
134 static const char **include_paths
;
135 static int include_path_count
;
137 /* Extra info to pass to the section disassembler and address printing
139 struct objdump_disasm_info
143 bfd_boolean require_sec
;
144 arelent
** dynrelbuf
;
146 disassembler_ftype disassemble_fn
;
150 /* Architecture to disassemble for, or default if NULL. */
151 static char *machine
= NULL
;
153 /* Target specific options to the disassembler. */
154 static char *disassembler_options
= NULL
;
156 /* Endianness to disassemble for, or default if BFD_ENDIAN_UNKNOWN. */
157 static enum bfd_endian endian
= BFD_ENDIAN_UNKNOWN
;
159 /* The symbol table. */
160 static asymbol
**syms
;
162 /* Number of symbols in `syms'. */
163 static long symcount
= 0;
165 /* The sorted symbol table. */
166 static asymbol
**sorted_syms
;
168 /* Number of symbols in `sorted_syms'. */
169 static long sorted_symcount
= 0;
171 /* The dynamic symbol table. */
172 static asymbol
**dynsyms
;
174 /* The synthetic symbol table. */
175 static asymbol
*synthsyms
;
176 static long synthcount
= 0;
178 /* Number of symbols in `dynsyms'. */
179 static long dynsymcount
= 0;
181 static bfd_byte
*stabs
;
182 static bfd_size_type stab_size
;
185 static bfd_size_type stabstr_size
;
187 static bfd_boolean is_relocatable
= FALSE
;
189 /* Handlers for -P/--private. */
190 static const struct objdump_private_desc
* const objdump_private_vectors
[] =
192 OBJDUMP_PRIVATE_VECTORS
197 usage (FILE *stream
, int status
)
199 fprintf (stream
, _("Usage: %s <option(s)> <file(s)>\n"), program_name
);
200 fprintf (stream
, _(" Display information from object <file(s)>.\n"));
201 fprintf (stream
, _(" At least one of the following switches must be given:\n"));
202 fprintf (stream
, _("\
203 -a, --archive-headers Display archive header information\n\
204 -f, --file-headers Display the contents of the overall file header\n\
205 -p, --private-headers Display object format specific file header contents\n\
206 -P, --private=OPT,OPT... Display object format specific contents\n\
207 -h, --[section-]headers Display the contents of the section headers\n\
208 -x, --all-headers Display the contents of all headers\n\
209 -d, --disassemble Display assembler contents of executable sections\n\
210 -D, --disassemble-all Display assembler contents of all sections\n\
211 -S, --source Intermix source code with disassembly\n\
212 -s, --full-contents Display the full contents of all sections requested\n\
213 -g, --debugging Display debug information in object file\n\
214 -e, --debugging-tags Display debug information using ctags style\n\
215 -G, --stabs Display (in raw form) any STABS info in the file\n\
216 -W[lLiaprmfFsoRt] or\n\
217 --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,\n\
218 =frames-interp,=str,=loc,=Ranges,=pubtypes,\n\
219 =gdb_index,=trace_info,=trace_abbrev,=trace_aranges]\n\
220 Display DWARF info in the file\n\
221 -t, --syms Display the contents of the symbol table(s)\n\
222 -T, --dynamic-syms Display the contents of the dynamic symbol table\n\
223 -r, --reloc Display the relocation entries in the file\n\
224 -R, --dynamic-reloc Display the dynamic relocation entries in the file\n\
225 @<file> Read options from <file>\n\
226 -v, --version Display this program's version number\n\
227 -i, --info List object formats and architectures supported\n\
228 -H, --help Display this information\n\
232 const struct objdump_private_desc
* const *desc
;
234 fprintf (stream
, _("\n The following switches are optional:\n"));
235 fprintf (stream
, _("\
236 -b, --target=BFDNAME Specify the target object format as BFDNAME\n\
237 -m, --architecture=MACHINE Specify the target architecture as MACHINE\n\
238 -j, --section=NAME Only display information for section NAME\n\
239 -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n\
240 -EB --endian=big Assume big endian format when disassembling\n\
241 -EL --endian=little Assume little endian format when disassembling\n\
242 --file-start-context Include context from start of file (with -S)\n\
243 -I, --include=DIR Add DIR to search list for source files\n\
244 -l, --line-numbers Include line numbers and filenames in output\n\
245 -F, --file-offsets Include file offsets when displaying information\n\
246 -C, --demangle[=STYLE] Decode mangled/processed symbol names\n\
247 The STYLE, if specified, can be `auto', `gnu',\n\
248 `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\
250 -w, --wide Format output for more than 80 columns\n\
251 -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n\
252 --start-address=ADDR Only process data whose address is >= ADDR\n\
253 --stop-address=ADDR Only process data whose address is <= ADDR\n\
254 --prefix-addresses Print complete address alongside disassembly\n\
255 --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\
256 --insn-width=WIDTH Display WIDTH bytes on a single line for -d\n\
257 --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\
258 --special-syms Include special symbols in symbol dumps\n\
259 --prefix=PREFIX Add PREFIX to absolute paths for -S\n\
260 --prefix-strip=LEVEL Strip initial directory names for -S\n"));
261 fprintf (stream
, _("\
262 --dwarf-depth=N Do not display DIEs at depth N or greater\n\
263 --dwarf-start=N Display DIEs starting with N, at the same depth\n\
265 list_supported_targets (program_name
, stream
);
266 list_supported_architectures (program_name
, stream
);
268 disassembler_usage (stream
);
270 if (objdump_private_vectors
[0] != NULL
)
273 _("\nOptions supported for -P/--private switch:\n"));
274 for (desc
= objdump_private_vectors
; *desc
!= NULL
; desc
++)
275 (*desc
)->help (stream
);
278 if (REPORT_BUGS_TO
[0] && status
== 0)
279 fprintf (stream
, _("Report bugs to %s.\n"), REPORT_BUGS_TO
);
283 /* 150 isn't special; it's just an arbitrary non-ASCII char value. */
287 OPTION_START_ADDRESS
,
298 static struct option long_options
[]=
300 {"adjust-vma", required_argument
, NULL
, OPTION_ADJUST_VMA
},
301 {"all-headers", no_argument
, NULL
, 'x'},
302 {"private-headers", no_argument
, NULL
, 'p'},
303 {"private", required_argument
, NULL
, 'P'},
304 {"architecture", required_argument
, NULL
, 'm'},
305 {"archive-headers", no_argument
, NULL
, 'a'},
306 {"debugging", no_argument
, NULL
, 'g'},
307 {"debugging-tags", no_argument
, NULL
, 'e'},
308 {"demangle", optional_argument
, NULL
, 'C'},
309 {"disassemble", no_argument
, NULL
, 'd'},
310 {"disassemble-all", no_argument
, NULL
, 'D'},
311 {"disassembler-options", required_argument
, NULL
, 'M'},
312 {"disassemble-zeroes", no_argument
, NULL
, 'z'},
313 {"dynamic-reloc", no_argument
, NULL
, 'R'},
314 {"dynamic-syms", no_argument
, NULL
, 'T'},
315 {"endian", required_argument
, NULL
, OPTION_ENDIAN
},
316 {"file-headers", no_argument
, NULL
, 'f'},
317 {"file-offsets", no_argument
, NULL
, 'F'},
318 {"file-start-context", no_argument
, &file_start_context
, 1},
319 {"full-contents", no_argument
, NULL
, 's'},
320 {"headers", no_argument
, NULL
, 'h'},
321 {"help", no_argument
, NULL
, 'H'},
322 {"info", no_argument
, NULL
, 'i'},
323 {"line-numbers", no_argument
, NULL
, 'l'},
324 {"no-show-raw-insn", no_argument
, &show_raw_insn
, -1},
325 {"prefix-addresses", no_argument
, &prefix_addresses
, 1},
326 {"reloc", no_argument
, NULL
, 'r'},
327 {"section", required_argument
, NULL
, 'j'},
328 {"section-headers", no_argument
, NULL
, 'h'},
329 {"show-raw-insn", no_argument
, &show_raw_insn
, 1},
330 {"source", no_argument
, NULL
, 'S'},
331 {"special-syms", no_argument
, &dump_special_syms
, 1},
332 {"include", required_argument
, NULL
, 'I'},
333 {"dwarf", optional_argument
, NULL
, OPTION_DWARF
},
334 {"stabs", no_argument
, NULL
, 'G'},
335 {"start-address", required_argument
, NULL
, OPTION_START_ADDRESS
},
336 {"stop-address", required_argument
, NULL
, OPTION_STOP_ADDRESS
},
337 {"syms", no_argument
, NULL
, 't'},
338 {"target", required_argument
, NULL
, 'b'},
339 {"version", no_argument
, NULL
, 'V'},
340 {"wide", no_argument
, NULL
, 'w'},
341 {"prefix", required_argument
, NULL
, OPTION_PREFIX
},
342 {"prefix-strip", required_argument
, NULL
, OPTION_PREFIX_STRIP
},
343 {"insn-width", required_argument
, NULL
, OPTION_INSN_WIDTH
},
344 {"dwarf-depth", required_argument
, 0, OPTION_DWARF_DEPTH
},
345 {"dwarf-start", required_argument
, 0, OPTION_DWARF_START
},
346 {0, no_argument
, 0, 0}
350 nonfatal (const char *msg
)
356 /* Returns TRUE if the specified section should be dumped. */
359 process_section_p (asection
* section
)
363 if (only_list
== NULL
)
366 for (only
= only_list
; only
; only
= only
->next
)
367 if (strcmp (only
->name
, section
->name
) == 0)
376 /* Add an entry to the 'only' list. */
379 add_only (char * name
)
383 /* First check to make sure that we do not
384 already have an entry for this name. */
385 for (only
= only_list
; only
; only
= only
->next
)
386 if (strcmp (only
->name
, name
) == 0)
389 only
= xmalloc (sizeof * only
);
392 only
->next
= only_list
;
396 /* Release the memory used by the 'only' list.
397 PR 11225: Issue a warning message for unseen sections.
398 Only do this if none of the sections were seen. This is mainly to support
399 tools like the GAS testsuite where an object file is dumped with a list of
400 generic section names known to be present in a range of different file
404 free_only_list (void)
406 bfd_boolean at_least_one_seen
= FALSE
;
410 if (only_list
== NULL
)
413 for (only
= only_list
; only
; only
= only
->next
)
416 at_least_one_seen
= TRUE
;
420 for (only
= only_list
; only
; only
= next
)
422 if (! at_least_one_seen
)
424 non_fatal (_("section '%s' mentioned in a -j option, "
425 "but not found in any input file"),
436 dump_section_header (bfd
*abfd
, asection
*section
,
437 void *ignored ATTRIBUTE_UNUSED
)
440 unsigned int opb
= bfd_octets_per_byte (abfd
);
442 /* Ignore linker created section. See elfNN_ia64_object_p in
444 if (section
->flags
& SEC_LINKER_CREATED
)
447 /* PR 10413: Skip sections that we are ignoring. */
448 if (! process_section_p (section
))
451 printf ("%3d %-13s %08lx ", section
->index
,
452 bfd_get_section_name (abfd
, section
),
453 (unsigned long) bfd_section_size (abfd
, section
) / opb
);
454 bfd_printf_vma (abfd
, bfd_get_section_vma (abfd
, section
));
456 bfd_printf_vma (abfd
, section
->lma
);
457 printf (" %08lx 2**%u", (unsigned long) section
->filepos
,
458 bfd_get_section_alignment (abfd
, section
));
464 if (section->flags & x) { printf ("%s%s", comma, y); comma = ", "; }
466 PF (SEC_HAS_CONTENTS
, "CONTENTS");
467 PF (SEC_ALLOC
, "ALLOC");
468 PF (SEC_CONSTRUCTOR
, "CONSTRUCTOR");
469 PF (SEC_LOAD
, "LOAD");
470 PF (SEC_RELOC
, "RELOC");
471 PF (SEC_READONLY
, "READONLY");
472 PF (SEC_CODE
, "CODE");
473 PF (SEC_DATA
, "DATA");
475 PF (SEC_DEBUGGING
, "DEBUGGING");
476 PF (SEC_NEVER_LOAD
, "NEVER_LOAD");
477 PF (SEC_EXCLUDE
, "EXCLUDE");
478 PF (SEC_SORT_ENTRIES
, "SORT_ENTRIES");
479 if (bfd_get_arch (abfd
) == bfd_arch_tic54x
)
481 PF (SEC_TIC54X_BLOCK
, "BLOCK");
482 PF (SEC_TIC54X_CLINK
, "CLINK");
484 PF (SEC_SMALL_DATA
, "SMALL_DATA");
485 if (bfd_get_flavour (abfd
) == bfd_target_coff_flavour
)
486 PF (SEC_COFF_SHARED
, "SHARED");
487 PF (SEC_THREAD_LOCAL
, "THREAD_LOCAL");
488 PF (SEC_GROUP
, "GROUP");
490 if ((section
->flags
& SEC_LINK_ONCE
) != 0)
493 struct coff_comdat_info
*comdat
;
495 switch (section
->flags
& SEC_LINK_DUPLICATES
)
499 case SEC_LINK_DUPLICATES_DISCARD
:
500 ls
= "LINK_ONCE_DISCARD";
502 case SEC_LINK_DUPLICATES_ONE_ONLY
:
503 ls
= "LINK_ONCE_ONE_ONLY";
505 case SEC_LINK_DUPLICATES_SAME_SIZE
:
506 ls
= "LINK_ONCE_SAME_SIZE";
508 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
509 ls
= "LINK_ONCE_SAME_CONTENTS";
512 printf ("%s%s", comma
, ls
);
514 comdat
= bfd_coff_get_comdat_section (abfd
, section
);
516 printf (" (COMDAT %s %ld)", comdat
->name
, comdat
->symbol
);
526 dump_headers (bfd
*abfd
)
528 printf (_("Sections:\n"));
531 printf (_("Idx Name Size VMA LMA File off Algn"));
533 /* With BFD64, non-ELF returns -1 and wants always 64 bit addresses. */
534 if (bfd_get_arch_size (abfd
) == 32)
535 printf (_("Idx Name Size VMA LMA File off Algn"));
537 printf (_("Idx Name Size VMA LMA File off Algn"));
541 printf (_(" Flags"));
544 bfd_map_over_sections (abfd
, dump_section_header
, NULL
);
548 slurp_symtab (bfd
*abfd
)
553 if (!(bfd_get_file_flags (abfd
) & HAS_SYMS
))
559 storage
= bfd_get_symtab_upper_bound (abfd
);
561 bfd_fatal (bfd_get_filename (abfd
));
563 sy
= (asymbol
**) xmalloc (storage
);
565 symcount
= bfd_canonicalize_symtab (abfd
, sy
);
567 bfd_fatal (bfd_get_filename (abfd
));
571 /* Read in the dynamic symbols. */
574 slurp_dynamic_symtab (bfd
*abfd
)
579 storage
= bfd_get_dynamic_symtab_upper_bound (abfd
);
582 if (!(bfd_get_file_flags (abfd
) & DYNAMIC
))
584 non_fatal (_("%s: not a dynamic object"), bfd_get_filename (abfd
));
590 bfd_fatal (bfd_get_filename (abfd
));
593 sy
= (asymbol
**) xmalloc (storage
);
595 dynsymcount
= bfd_canonicalize_dynamic_symtab (abfd
, sy
);
597 bfd_fatal (bfd_get_filename (abfd
));
601 /* Filter out (in place) symbols that are useless for disassembly.
602 COUNT is the number of elements in SYMBOLS.
603 Return the number of useful symbols. */
606 remove_useless_symbols (asymbol
**symbols
, long count
)
608 asymbol
**in_ptr
= symbols
, **out_ptr
= symbols
;
612 asymbol
*sym
= *in_ptr
++;
614 if (sym
->name
== NULL
|| sym
->name
[0] == '\0')
616 if (sym
->flags
& (BSF_DEBUGGING
| BSF_SECTION_SYM
))
618 if (bfd_is_und_section (sym
->section
)
619 || bfd_is_com_section (sym
->section
))
624 return out_ptr
- symbols
;
627 /* Sort symbols into value order. */
630 compare_symbols (const void *ap
, const void *bp
)
632 const asymbol
*a
= * (const asymbol
**) ap
;
633 const asymbol
*b
= * (const asymbol
**) bp
;
643 if (bfd_asymbol_value (a
) > bfd_asymbol_value (b
))
645 else if (bfd_asymbol_value (a
) < bfd_asymbol_value (b
))
648 if (a
->section
> b
->section
)
650 else if (a
->section
< b
->section
)
653 an
= bfd_asymbol_name (a
);
654 bn
= bfd_asymbol_name (b
);
658 /* The symbols gnu_compiled and gcc2_compiled convey no real
659 information, so put them after other symbols with the same value. */
660 af
= (strstr (an
, "gnu_compiled") != NULL
661 || strstr (an
, "gcc2_compiled") != NULL
);
662 bf
= (strstr (bn
, "gnu_compiled") != NULL
663 || strstr (bn
, "gcc2_compiled") != NULL
);
670 /* We use a heuristic for the file name, to try to sort it after
671 more useful symbols. It may not work on non Unix systems, but it
672 doesn't really matter; the only difference is precisely which
673 symbol names get printed. */
675 #define file_symbol(s, sn, snl) \
676 (((s)->flags & BSF_FILE) != 0 \
677 || ((sn)[(snl) - 2] == '.' \
678 && ((sn)[(snl) - 1] == 'o' \
679 || (sn)[(snl) - 1] == 'a')))
681 af
= file_symbol (a
, an
, anl
);
682 bf
= file_symbol (b
, bn
, bnl
);
689 /* Try to sort global symbols before local symbols before function
690 symbols before debugging symbols. */
695 if ((aflags
& BSF_DEBUGGING
) != (bflags
& BSF_DEBUGGING
))
697 if ((aflags
& BSF_DEBUGGING
) != 0)
702 if ((aflags
& BSF_FUNCTION
) != (bflags
& BSF_FUNCTION
))
704 if ((aflags
& BSF_FUNCTION
) != 0)
709 if ((aflags
& BSF_LOCAL
) != (bflags
& BSF_LOCAL
))
711 if ((aflags
& BSF_LOCAL
) != 0)
716 if ((aflags
& BSF_GLOBAL
) != (bflags
& BSF_GLOBAL
))
718 if ((aflags
& BSF_GLOBAL
) != 0)
724 /* Symbols that start with '.' might be section names, so sort them
725 after symbols that don't start with '.'. */
726 if (an
[0] == '.' && bn
[0] != '.')
728 if (an
[0] != '.' && bn
[0] == '.')
731 /* Finally, if we can't distinguish them in any other way, try to
732 get consistent results by sorting the symbols by name. */
733 return strcmp (an
, bn
);
736 /* Sort relocs into address order. */
739 compare_relocs (const void *ap
, const void *bp
)
741 const arelent
*a
= * (const arelent
**) ap
;
742 const arelent
*b
= * (const arelent
**) bp
;
744 if (a
->address
> b
->address
)
746 else if (a
->address
< b
->address
)
749 /* So that associated relocations tied to the same address show up
750 in the correct order, we don't do any further sorting. */
759 /* Print an address (VMA) to the output stream in INFO.
760 If SKIP_ZEROES is TRUE, omit leading zeroes. */
763 objdump_print_value (bfd_vma vma
, struct disassemble_info
*inf
,
764 bfd_boolean skip_zeroes
)
768 struct objdump_disasm_info
*aux
;
770 aux
= (struct objdump_disasm_info
*) inf
->application_data
;
771 bfd_sprintf_vma (aux
->abfd
, buf
, vma
);
776 for (p
= buf
; *p
== '0'; ++p
)
781 (*inf
->fprintf_func
) (inf
->stream
, "%s", p
);
784 /* Print the name of a symbol. */
787 objdump_print_symname (bfd
*abfd
, struct disassemble_info
*inf
,
794 name
= bfd_asymbol_name (sym
);
795 if (do_demangle
&& name
[0] != '\0')
797 /* Demangle the name. */
798 alloc
= bfd_demangle (abfd
, name
, DMGL_ANSI
| DMGL_PARAMS
);
804 (*inf
->fprintf_func
) (inf
->stream
, "%s", name
);
812 /* Locate a symbol given a bfd and a section (from INFO->application_data),
813 and a VMA. If INFO->application_data->require_sec is TRUE, then always
814 require the symbol to be in the section. Returns NULL if there is no
815 suitable symbol. If PLACE is not NULL, then *PLACE is set to the index
816 of the symbol in sorted_syms. */
819 find_symbol_for_address (bfd_vma vma
,
820 struct disassemble_info
*inf
,
823 /* @@ Would it speed things up to cache the last two symbols returned,
824 and maybe their address ranges? For many processors, only one memory
825 operand can be present at a time, so the 2-entry cache wouldn't be
826 constantly churned by code doing heavy memory accesses. */
828 /* Indices in `sorted_syms'. */
830 long max_count
= sorted_symcount
;
832 struct objdump_disasm_info
*aux
;
836 bfd_boolean want_section
;
838 if (sorted_symcount
< 1)
841 aux
= (struct objdump_disasm_info
*) inf
->application_data
;
844 opb
= inf
->octets_per_byte
;
846 /* Perform a binary search looking for the closest symbol to the
847 required value. We are searching the range (min, max_count]. */
848 while (min
+ 1 < max_count
)
852 thisplace
= (max_count
+ min
) / 2;
853 sym
= sorted_syms
[thisplace
];
855 if (bfd_asymbol_value (sym
) > vma
)
856 max_count
= thisplace
;
857 else if (bfd_asymbol_value (sym
) < vma
)
866 /* The symbol we want is now in min, the low end of the range we
867 were searching. If there are several symbols with the same
868 value, we want the first one. */
871 && (bfd_asymbol_value (sorted_syms
[thisplace
])
872 == bfd_asymbol_value (sorted_syms
[thisplace
- 1])))
875 /* Prefer a symbol in the current section if we have multple symbols
876 with the same value, as can occur with overlays or zero size
879 while (min
< max_count
880 && (bfd_asymbol_value (sorted_syms
[min
])
881 == bfd_asymbol_value (sorted_syms
[thisplace
])))
883 if (sorted_syms
[min
]->section
== sec
884 && inf
->symbol_is_valid (sorted_syms
[min
], inf
))
891 return sorted_syms
[thisplace
];
896 /* If the file is relocatable, and the symbol could be from this
897 section, prefer a symbol from this section over symbols from
898 others, even if the other symbol's value might be closer.
900 Note that this may be wrong for some symbol references if the
901 sections have overlapping memory ranges, but in that case there's
902 no way to tell what's desired without looking at the relocation
905 Also give the target a chance to reject symbols. */
906 want_section
= (aux
->require_sec
907 || ((abfd
->flags
& HAS_RELOC
) != 0
908 && vma
>= bfd_get_section_vma (abfd
, sec
)
909 && vma
< (bfd_get_section_vma (abfd
, sec
)
910 + bfd_section_size (abfd
, sec
) / opb
)));
911 if ((sorted_syms
[thisplace
]->section
!= sec
&& want_section
)
912 || ! inf
->symbol_is_valid (sorted_syms
[thisplace
], inf
))
915 long newplace
= sorted_symcount
;
917 for (i
= min
- 1; i
>= 0; i
--)
919 if ((sorted_syms
[i
]->section
== sec
|| !want_section
)
920 && inf
->symbol_is_valid (sorted_syms
[i
], inf
))
922 if (newplace
== sorted_symcount
)
925 if (bfd_asymbol_value (sorted_syms
[i
])
926 != bfd_asymbol_value (sorted_syms
[newplace
]))
929 /* Remember this symbol and keep searching until we reach
930 an earlier address. */
935 if (newplace
!= sorted_symcount
)
936 thisplace
= newplace
;
939 /* We didn't find a good symbol with a smaller value.
940 Look for one with a larger value. */
941 for (i
= thisplace
+ 1; i
< sorted_symcount
; i
++)
943 if ((sorted_syms
[i
]->section
== sec
|| !want_section
)
944 && inf
->symbol_is_valid (sorted_syms
[i
], inf
))
952 if ((sorted_syms
[thisplace
]->section
!= sec
&& want_section
)
953 || ! inf
->symbol_is_valid (sorted_syms
[thisplace
], inf
))
954 /* There is no suitable symbol. */
961 return sorted_syms
[thisplace
];
964 /* Print an address and the offset to the nearest symbol. */
967 objdump_print_addr_with_sym (bfd
*abfd
, asection
*sec
, asymbol
*sym
,
968 bfd_vma vma
, struct disassemble_info
*inf
,
969 bfd_boolean skip_zeroes
)
971 objdump_print_value (vma
, inf
, skip_zeroes
);
977 (*inf
->fprintf_func
) (inf
->stream
, " <%s",
978 bfd_get_section_name (abfd
, sec
));
979 secaddr
= bfd_get_section_vma (abfd
, sec
);
982 (*inf
->fprintf_func
) (inf
->stream
, "-0x");
983 objdump_print_value (secaddr
- vma
, inf
, TRUE
);
985 else if (vma
> secaddr
)
987 (*inf
->fprintf_func
) (inf
->stream
, "+0x");
988 objdump_print_value (vma
- secaddr
, inf
, TRUE
);
990 (*inf
->fprintf_func
) (inf
->stream
, ">");
994 (*inf
->fprintf_func
) (inf
->stream
, " <");
995 objdump_print_symname (abfd
, inf
, sym
);
996 if (bfd_asymbol_value (sym
) > vma
)
998 (*inf
->fprintf_func
) (inf
->stream
, "-0x");
999 objdump_print_value (bfd_asymbol_value (sym
) - vma
, inf
, TRUE
);
1001 else if (vma
> bfd_asymbol_value (sym
))
1003 (*inf
->fprintf_func
) (inf
->stream
, "+0x");
1004 objdump_print_value (vma
- bfd_asymbol_value (sym
), inf
, TRUE
);
1006 (*inf
->fprintf_func
) (inf
->stream
, ">");
1009 if (display_file_offsets
)
1010 inf
->fprintf_func (inf
->stream
, _(" (File Offset: 0x%lx)"),
1011 (long int)(sec
->filepos
+ (vma
- sec
->vma
)));
1014 /* Print an address (VMA), symbolically if possible.
1015 If SKIP_ZEROES is TRUE, don't output leading zeroes. */
1018 objdump_print_addr (bfd_vma vma
,
1019 struct disassemble_info
*inf
,
1020 bfd_boolean skip_zeroes
)
1022 struct objdump_disasm_info
*aux
;
1023 asymbol
*sym
= NULL
;
1024 bfd_boolean skip_find
= FALSE
;
1026 aux
= (struct objdump_disasm_info
*) inf
->application_data
;
1028 if (sorted_symcount
< 1)
1030 (*inf
->fprintf_func
) (inf
->stream
, "0x");
1031 objdump_print_value (vma
, inf
, skip_zeroes
);
1033 if (display_file_offsets
)
1034 inf
->fprintf_func (inf
->stream
, _(" (File Offset: 0x%lx)"),
1035 (long int)(aux
->sec
->filepos
+ (vma
- aux
->sec
->vma
)));
1039 if (aux
->reloc
!= NULL
1040 && aux
->reloc
->sym_ptr_ptr
!= NULL
1041 && * aux
->reloc
->sym_ptr_ptr
!= NULL
)
1043 sym
= * aux
->reloc
->sym_ptr_ptr
;
1045 /* Adjust the vma to the reloc. */
1046 vma
+= bfd_asymbol_value (sym
);
1048 if (bfd_is_und_section (bfd_get_section (sym
)))
1053 sym
= find_symbol_for_address (vma
, inf
, NULL
);
1055 objdump_print_addr_with_sym (aux
->abfd
, aux
->sec
, sym
, vma
, inf
,
1059 /* Print VMA to INFO. This function is passed to the disassembler
1063 objdump_print_address (bfd_vma vma
, struct disassemble_info
*inf
)
1065 objdump_print_addr (vma
, inf
, ! prefix_addresses
);
1068 /* Determine if the given address has a symbol associated with it. */
1071 objdump_symbol_at_address (bfd_vma vma
, struct disassemble_info
* inf
)
1075 sym
= find_symbol_for_address (vma
, inf
, NULL
);
1077 return (sym
!= NULL
&& (bfd_asymbol_value (sym
) == vma
));
1080 /* Hold the last function name and the last line number we displayed
1081 in a disassembly. */
1083 static char *prev_functionname
;
1084 static unsigned int prev_line
;
1086 /* We keep a list of all files that we have seen when doing a
1087 disassembly with source, so that we know how much of the file to
1088 display. This can be important for inlined functions. */
1090 struct print_file_list
1092 struct print_file_list
*next
;
1093 const char *filename
;
1094 const char *modname
;
1097 const char **linemap
;
1103 static struct print_file_list
*print_files
;
1105 /* The number of preceding context lines to show when we start
1106 displaying a file for the first time. */
1108 #define SHOW_PRECEDING_CONTEXT_LINES (5)
1110 /* Read a complete file into memory. */
1113 slurp_file (const char *fn
, size_t *size
)
1116 int ps
= getpagesize ();
1121 int fd
= open (fn
, O_RDONLY
| O_BINARY
);
1125 if (fstat (fd
, &st
) < 0)
1132 msize
= (*size
+ ps
- 1) & ~(ps
- 1);
1133 map
= mmap (NULL
, msize
, PROT_READ
, MAP_SHARED
, fd
, 0);
1134 if (map
!= (char *) -1L)
1140 map
= (const char *) malloc (*size
);
1141 if (!map
|| (size_t) read (fd
, (char *) map
, *size
) != *size
)
1143 free ((void *) map
);
1150 #define line_map_decrease 5
1152 /* Precompute array of lines for a mapped file. */
1154 static const char **
1155 index_file (const char *map
, size_t size
, unsigned int *maxline
)
1157 const char *p
, *lstart
, *end
;
1158 int chars_per_line
= 45; /* First iteration will use 40. */
1159 unsigned int lineno
;
1160 const char **linemap
= NULL
;
1161 unsigned long line_map_size
= 0;
1167 for (p
= map
; p
< end
; p
++)
1171 if (p
+ 1 < end
&& p
[1] == '\r')
1174 else if (*p
== '\r')
1176 if (p
+ 1 < end
&& p
[1] == '\n')
1182 /* End of line found. */
1184 if (linemap
== NULL
|| line_map_size
< lineno
+ 1)
1186 unsigned long newsize
;
1188 chars_per_line
-= line_map_decrease
;
1189 if (chars_per_line
<= 1)
1191 line_map_size
= size
/ chars_per_line
+ 1;
1192 if (line_map_size
< lineno
+ 1)
1193 line_map_size
= lineno
+ 1;
1194 newsize
= line_map_size
* sizeof (char *);
1195 linemap
= (const char **) xrealloc (linemap
, newsize
);
1198 linemap
[lineno
++] = lstart
;
1206 /* Tries to open MODNAME, and if successful adds a node to print_files
1207 linked list and returns that node. Returns NULL on failure. */
1209 static struct print_file_list
*
1210 try_print_file_open (const char *origname
, const char *modname
)
1212 struct print_file_list
*p
;
1214 p
= (struct print_file_list
*) xmalloc (sizeof (struct print_file_list
));
1216 p
->map
= slurp_file (modname
, &p
->mapsize
);
1223 p
->linemap
= index_file (p
->map
, p
->mapsize
, &p
->maxline
);
1225 p
->filename
= origname
;
1226 p
->modname
= modname
;
1227 p
->next
= print_files
;
1233 /* If the the source file, as described in the symtab, is not found
1234 try to locate it in one of the paths specified with -I
1235 If found, add location to print_files linked list. */
1237 static struct print_file_list
*
1238 update_source_path (const char *filename
)
1240 struct print_file_list
*p
;
1244 p
= try_print_file_open (filename
, filename
);
1248 if (include_path_count
== 0)
1251 /* Get the name of the file. */
1252 fname
= lbasename (filename
);
1254 /* If file exists under a new path, we need to add it to the list
1255 so that show_line knows about it. */
1256 for (i
= 0; i
< include_path_count
; i
++)
1258 char *modname
= concat (include_paths
[i
], "/", fname
, (const char *) 0);
1260 p
= try_print_file_open (filename
, modname
);
1270 /* Print a source file line. */
1273 print_line (struct print_file_list
*p
, unsigned int linenum
)
1279 if (linenum
>= p
->maxline
)
1281 l
= p
->linemap
[linenum
];
1282 /* Test fwrite return value to quiet glibc warning. */
1283 len
= strcspn (l
, "\n\r");
1284 if (len
== 0 || fwrite (l
, len
, 1, stdout
) == 1)
1288 /* Print a range of source code lines. */
1291 dump_lines (struct print_file_list
*p
, unsigned int start
, unsigned int end
)
1295 while (start
<= end
)
1297 print_line (p
, start
);
1302 /* Show the line number, or the source line, in a disassembly
1306 show_line (bfd
*abfd
, asection
*section
, bfd_vma addr_offset
)
1308 const char *filename
;
1309 const char *functionname
;
1310 unsigned int linenumber
;
1313 if (! with_line_numbers
&& ! with_source_code
)
1316 if (! bfd_find_nearest_line (abfd
, section
, syms
, addr_offset
, &filename
,
1317 &functionname
, &linenumber
))
1320 if (filename
!= NULL
&& *filename
== '\0')
1322 if (functionname
!= NULL
&& *functionname
== '\0')
1323 functionname
= NULL
;
1326 && IS_ABSOLUTE_PATH (filename
)
1330 const char *fname
= filename
;
1331 char *path
= (char *) alloca (prefix_length
+ PATH_MAX
+ 1);
1334 memcpy (path
, prefix
, prefix_length
);
1335 path_up
= path
+ prefix_length
;
1337 /* Build relocated filename, stripping off leading directories
1338 from the initial filename if requested. */
1339 if (prefix_strip
> 0)
1344 /* Skip selected directory levels. */
1345 for (s
= fname
+ 1; *s
!= '\0' && level
< prefix_strip
; s
++)
1346 if (IS_DIR_SEPARATOR(*s
))
1353 /* Update complete filename. */
1354 strncpy (path_up
, fname
, PATH_MAX
);
1355 path_up
[PATH_MAX
] = '\0';
1363 if (with_line_numbers
)
1365 if (functionname
!= NULL
1366 && (prev_functionname
== NULL
1367 || strcmp (functionname
, prev_functionname
) != 0))
1368 printf ("%s():\n", functionname
);
1369 if (linenumber
> 0 && linenumber
!= prev_line
)
1370 printf ("%s:%u\n", filename
== NULL
? "???" : filename
, linenumber
);
1373 if (with_source_code
1377 struct print_file_list
**pp
, *p
;
1380 for (pp
= &print_files
; *pp
!= NULL
; pp
= &(*pp
)->next
)
1381 if (filename_cmp ((*pp
)->filename
, filename
) == 0)
1388 filename
= xstrdup (filename
);
1389 p
= update_source_path (filename
);
1392 if (p
!= NULL
&& linenumber
!= p
->last_line
)
1394 if (file_start_context
&& p
->first
)
1398 l
= linenumber
- SHOW_PRECEDING_CONTEXT_LINES
;
1399 if (l
>= linenumber
)
1401 if (p
->last_line
>= l
&& p
->last_line
<= linenumber
)
1402 l
= p
->last_line
+ 1;
1404 dump_lines (p
, l
, linenumber
);
1405 p
->last_line
= linenumber
;
1410 if (functionname
!= NULL
1411 && (prev_functionname
== NULL
1412 || strcmp (functionname
, prev_functionname
) != 0))
1414 if (prev_functionname
!= NULL
)
1415 free (prev_functionname
);
1416 prev_functionname
= (char *) xmalloc (strlen (functionname
) + 1);
1417 strcpy (prev_functionname
, functionname
);
1420 if (linenumber
> 0 && linenumber
!= prev_line
)
1421 prev_line
= linenumber
;
1424 /* Pseudo FILE object for strings. */
1432 /* sprintf to a "stream". */
1434 static int ATTRIBUTE_PRINTF_2
1435 objdump_sprintf (SFILE
*f
, const char *format
, ...)
1442 size_t space
= f
->alloc
- f
->pos
;
1444 va_start (args
, format
);
1445 n
= vsnprintf (f
->buffer
+ f
->pos
, space
, format
, args
);
1451 f
->alloc
= (f
->alloc
+ n
) * 2;
1452 f
->buffer
= (char *) xrealloc (f
->buffer
, f
->alloc
);
1459 /* The number of zeroes we want to see before we start skipping them.
1460 The number is arbitrarily chosen. */
1462 #define DEFAULT_SKIP_ZEROES 8
1464 /* The number of zeroes to skip at the end of a section. If the
1465 number of zeroes at the end is between SKIP_ZEROES_AT_END and
1466 SKIP_ZEROES, they will be disassembled. If there are fewer than
1467 SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
1468 attempt to avoid disassembling zeroes inserted by section
1471 #define DEFAULT_SKIP_ZEROES_AT_END 3
1473 /* Disassemble some data in memory between given values. */
1476 disassemble_bytes (struct disassemble_info
* inf
,
1477 disassembler_ftype disassemble_fn
,
1480 bfd_vma start_offset
,
1481 bfd_vma stop_offset
,
1484 arelent
** relppend
)
1486 struct objdump_disasm_info
*aux
;
1488 int octets_per_line
;
1489 int skip_addr_chars
;
1490 bfd_vma addr_offset
;
1491 unsigned int opb
= inf
->octets_per_byte
;
1492 unsigned int skip_zeroes
= inf
->skip_zeroes
;
1493 unsigned int skip_zeroes_at_end
= inf
->skip_zeroes_at_end
;
1497 aux
= (struct objdump_disasm_info
*) inf
->application_data
;
1501 sfile
.buffer
= (char *) xmalloc (sfile
.alloc
);
1505 octets_per_line
= insn_width
;
1507 octets_per_line
= 4;
1509 octets_per_line
= 16;
1511 /* Figure out how many characters to skip at the start of an
1512 address, to make the disassembly look nicer. We discard leading
1513 zeroes in chunks of 4, ensuring that there is always a leading
1515 skip_addr_chars
= 0;
1516 if (! prefix_addresses
)
1520 bfd_sprintf_vma (aux
->abfd
, buf
, section
->vma
+ section
->size
/ opb
);
1522 while (buf
[skip_addr_chars
] == '0')
1525 /* Don't discard zeros on overflow. */
1526 if (buf
[skip_addr_chars
] == '\0' && section
->vma
!= 0)
1527 skip_addr_chars
= 0;
1529 if (skip_addr_chars
!= 0)
1530 skip_addr_chars
= (skip_addr_chars
- 1) & -4;
1533 inf
->insn_info_valid
= 0;
1535 addr_offset
= start_offset
;
1536 while (addr_offset
< stop_offset
)
1539 bfd_boolean need_nl
= FALSE
;
1540 int previous_octets
;
1542 /* Remember the length of the previous instruction. */
1543 previous_octets
= octets
;
1546 /* Make sure we don't use relocs from previous instructions. */
1549 /* If we see more than SKIP_ZEROES octets of zeroes, we just
1551 for (z
= addr_offset
* opb
; z
< stop_offset
* opb
; z
++)
1554 if (! disassemble_zeroes
1555 && (inf
->insn_info_valid
== 0
1556 || inf
->branch_delay_insns
== 0)
1557 && (z
- addr_offset
* opb
>= skip_zeroes
1558 || (z
== stop_offset
* opb
&&
1559 z
- addr_offset
* opb
< skip_zeroes_at_end
)))
1561 /* If there are more nonzero octets to follow, we only skip
1562 zeroes in multiples of 4, to try to avoid running over
1563 the start of an instruction which happens to start with
1565 if (z
!= stop_offset
* opb
)
1566 z
= addr_offset
* opb
+ ((z
- addr_offset
* opb
) &~ 3);
1568 octets
= z
- addr_offset
* opb
;
1570 /* If we are going to display more data, and we are displaying
1571 file offsets, then tell the user how many zeroes we skip
1572 and the file offset from where we resume dumping. */
1573 if (display_file_offsets
&& ((addr_offset
+ (octets
/ opb
)) < stop_offset
))
1574 printf ("\t... (skipping %d zeroes, resuming at file offset: 0x%lx)\n",
1576 (unsigned long) (section
->filepos
1577 + (addr_offset
+ (octets
/ opb
))));
1587 if (with_line_numbers
|| with_source_code
)
1588 show_line (aux
->abfd
, section
, addr_offset
);
1590 if (! prefix_addresses
)
1594 bfd_sprintf_vma (aux
->abfd
, buf
, section
->vma
+ addr_offset
);
1595 for (s
= buf
+ skip_addr_chars
; *s
== '0'; s
++)
1599 printf ("%s:\t", buf
+ skip_addr_chars
);
1603 aux
->require_sec
= TRUE
;
1604 objdump_print_address (section
->vma
+ addr_offset
, inf
);
1605 aux
->require_sec
= FALSE
;
1612 inf
->fprintf_func
= (fprintf_ftype
) objdump_sprintf
;
1613 inf
->stream
= &sfile
;
1614 inf
->bytes_per_line
= 0;
1615 inf
->bytes_per_chunk
= 0;
1616 inf
->flags
= disassemble_all
? DISASSEMBLE_DATA
: 0;
1618 inf
->flags
|= USER_SPECIFIED_MACHINE_TYPE
;
1620 if (inf
->disassembler_needs_relocs
1621 && (bfd_get_file_flags (aux
->abfd
) & EXEC_P
) == 0
1622 && (bfd_get_file_flags (aux
->abfd
) & DYNAMIC
) == 0
1623 && *relppp
< relppend
)
1625 bfd_signed_vma distance_to_rel
;
1627 distance_to_rel
= (**relppp
)->address
1628 - (rel_offset
+ addr_offset
);
1630 /* Check to see if the current reloc is associated with
1631 the instruction that we are about to disassemble. */
1632 if (distance_to_rel
== 0
1633 /* FIXME: This is wrong. We are trying to catch
1634 relocs that are addressed part way through the
1635 current instruction, as might happen with a packed
1636 VLIW instruction. Unfortunately we do not know the
1637 length of the current instruction since we have not
1638 disassembled it yet. Instead we take a guess based
1639 upon the length of the previous instruction. The
1640 proper solution is to have a new target-specific
1641 disassembler function which just returns the length
1642 of an instruction at a given address without trying
1643 to display its disassembly. */
1644 || (distance_to_rel
> 0
1645 && distance_to_rel
< (bfd_signed_vma
) (previous_octets
/ opb
)))
1647 inf
->flags
|= INSN_HAS_RELOC
;
1648 aux
->reloc
= **relppp
;
1652 octets
= (*disassemble_fn
) (section
->vma
+ addr_offset
, inf
);
1653 inf
->fprintf_func
= (fprintf_ftype
) fprintf
;
1654 inf
->stream
= stdout
;
1655 if (insn_width
== 0 && inf
->bytes_per_line
!= 0)
1656 octets_per_line
= inf
->bytes_per_line
;
1657 if (octets
< (int) opb
)
1660 printf ("%s\n", sfile
.buffer
);
1663 non_fatal (_("disassemble_fn returned length %d"),
1674 octets
= octets_per_line
;
1675 if (addr_offset
+ octets
/ opb
> stop_offset
)
1676 octets
= (stop_offset
- addr_offset
) * opb
;
1678 for (j
= addr_offset
* opb
; j
< addr_offset
* opb
+ octets
; ++j
)
1680 if (ISPRINT (data
[j
]))
1681 buf
[j
- addr_offset
* opb
] = data
[j
];
1683 buf
[j
- addr_offset
* opb
] = '.';
1685 buf
[j
- addr_offset
* opb
] = '\0';
1688 if (prefix_addresses
1690 : show_raw_insn
>= 0)
1694 /* If ! prefix_addresses and ! wide_output, we print
1695 octets_per_line octets per line. */
1697 if (pb
> octets_per_line
&& ! prefix_addresses
&& ! wide_output
)
1698 pb
= octets_per_line
;
1700 if (inf
->bytes_per_chunk
)
1701 bpc
= inf
->bytes_per_chunk
;
1705 for (j
= addr_offset
* opb
; j
< addr_offset
* opb
+ pb
; j
+= bpc
)
1709 if (bpc
> 1 && inf
->display_endian
== BFD_ENDIAN_LITTLE
)
1711 for (k
= bpc
- 1; k
>= 0; k
--)
1712 printf ("%02x", (unsigned) data
[j
+ k
]);
1717 for (k
= 0; k
< bpc
; k
++)
1718 printf ("%02x", (unsigned) data
[j
+ k
]);
1723 for (; pb
< octets_per_line
; pb
+= bpc
)
1727 for (k
= 0; k
< bpc
; k
++)
1732 /* Separate raw data from instruction by extra space. */
1742 printf ("%s", sfile
.buffer
);
1744 if (prefix_addresses
1746 : show_raw_insn
>= 0)
1754 j
= addr_offset
* opb
+ pb
;
1756 bfd_sprintf_vma (aux
->abfd
, buf
, section
->vma
+ j
/ opb
);
1757 for (s
= buf
+ skip_addr_chars
; *s
== '0'; s
++)
1761 printf ("%s:\t", buf
+ skip_addr_chars
);
1763 pb
+= octets_per_line
;
1766 for (; j
< addr_offset
* opb
+ pb
; j
+= bpc
)
1770 if (bpc
> 1 && inf
->display_endian
== BFD_ENDIAN_LITTLE
)
1772 for (k
= bpc
- 1; k
>= 0; k
--)
1773 printf ("%02x", (unsigned) data
[j
+ k
]);
1778 for (k
= 0; k
< bpc
; k
++)
1779 printf ("%02x", (unsigned) data
[j
+ k
]);
1792 while ((*relppp
) < relppend
1793 && (**relppp
)->address
< rel_offset
+ addr_offset
+ octets
/ opb
)
1795 if (dump_reloc_info
|| dump_dynamic_reloc_info
)
1806 objdump_print_value (section
->vma
- rel_offset
+ q
->address
,
1809 if (q
->howto
== NULL
)
1810 printf (": *unknown*\t");
1811 else if (q
->howto
->name
)
1812 printf (": %s\t", q
->howto
->name
);
1814 printf (": %d\t", q
->howto
->type
);
1816 if (q
->sym_ptr_ptr
== NULL
|| *q
->sym_ptr_ptr
== NULL
)
1817 printf ("*unknown*");
1820 const char *sym_name
;
1822 sym_name
= bfd_asymbol_name (*q
->sym_ptr_ptr
);
1823 if (sym_name
!= NULL
&& *sym_name
!= '\0')
1824 objdump_print_symname (aux
->abfd
, inf
, *q
->sym_ptr_ptr
);
1829 sym_sec
= bfd_get_section (*q
->sym_ptr_ptr
);
1830 sym_name
= bfd_get_section_name (aux
->abfd
, sym_sec
);
1831 if (sym_name
== NULL
|| *sym_name
== '\0')
1832 sym_name
= "*unknown*";
1833 printf ("%s", sym_name
);
1840 objdump_print_value (q
->addend
, inf
, TRUE
);
1852 addr_offset
+= octets
/ opb
;
1855 free (sfile
.buffer
);
1859 disassemble_section (bfd
*abfd
, asection
*section
, void *inf
)
1861 const struct elf_backend_data
* bed
;
1862 bfd_vma sign_adjust
= 0;
1863 struct disassemble_info
* pinfo
= (struct disassemble_info
*) inf
;
1864 struct objdump_disasm_info
* paux
;
1865 unsigned int opb
= pinfo
->octets_per_byte
;
1866 bfd_byte
* data
= NULL
;
1867 bfd_size_type datasize
= 0;
1868 arelent
** rel_pp
= NULL
;
1869 arelent
** rel_ppstart
= NULL
;
1870 arelent
** rel_ppend
;
1871 unsigned long stop_offset
;
1872 asymbol
* sym
= NULL
;
1876 unsigned long addr_offset
;
1878 /* Sections that do not contain machine
1879 code are not normally disassembled. */
1880 if (! disassemble_all
1881 && only_list
== NULL
1882 && ((section
->flags
& (SEC_CODE
| SEC_HAS_CONTENTS
))
1883 != (SEC_CODE
| SEC_HAS_CONTENTS
)))
1886 if (! process_section_p (section
))
1889 datasize
= bfd_get_section_size (section
);
1893 /* Decide which set of relocs to use. Load them if necessary. */
1894 paux
= (struct objdump_disasm_info
*) pinfo
->application_data
;
1895 if (paux
->dynrelbuf
)
1897 rel_pp
= paux
->dynrelbuf
;
1898 rel_count
= paux
->dynrelcount
;
1899 /* Dynamic reloc addresses are absolute, non-dynamic are section
1900 relative. REL_OFFSET specifies the reloc address corresponding
1901 to the start of this section. */
1902 rel_offset
= section
->vma
;
1910 if ((section
->flags
& SEC_RELOC
) != 0
1911 && (dump_reloc_info
|| pinfo
->disassembler_needs_relocs
))
1915 relsize
= bfd_get_reloc_upper_bound (abfd
, section
);
1917 bfd_fatal (bfd_get_filename (abfd
));
1921 rel_ppstart
= rel_pp
= (arelent
**) xmalloc (relsize
);
1922 rel_count
= bfd_canonicalize_reloc (abfd
, section
, rel_pp
, syms
);
1924 bfd_fatal (bfd_get_filename (abfd
));
1926 /* Sort the relocs by address. */
1927 qsort (rel_pp
, rel_count
, sizeof (arelent
*), compare_relocs
);
1931 rel_ppend
= rel_pp
+ rel_count
;
1933 data
= (bfd_byte
*) xmalloc (datasize
);
1935 bfd_get_section_contents (abfd
, section
, data
, 0, datasize
);
1937 paux
->sec
= section
;
1938 pinfo
->buffer
= data
;
1939 pinfo
->buffer_vma
= section
->vma
;
1940 pinfo
->buffer_length
= datasize
;
1941 pinfo
->section
= section
;
1943 if (start_address
== (bfd_vma
) -1
1944 || start_address
< pinfo
->buffer_vma
)
1947 addr_offset
= start_address
- pinfo
->buffer_vma
;
1949 if (stop_address
== (bfd_vma
) -1)
1950 stop_offset
= datasize
/ opb
;
1953 if (stop_address
< pinfo
->buffer_vma
)
1956 stop_offset
= stop_address
- pinfo
->buffer_vma
;
1957 if (stop_offset
> pinfo
->buffer_length
/ opb
)
1958 stop_offset
= pinfo
->buffer_length
/ opb
;
1961 /* Skip over the relocs belonging to addresses below the
1963 while (rel_pp
< rel_ppend
1964 && (*rel_pp
)->address
< rel_offset
+ addr_offset
)
1967 if (addr_offset
< stop_offset
)
1968 printf (_("\nDisassembly of section %s:\n"), section
->name
);
1970 /* Find the nearest symbol forwards from our current position. */
1971 paux
->require_sec
= TRUE
;
1972 sym
= (asymbol
*) find_symbol_for_address (section
->vma
+ addr_offset
,
1973 (struct disassemble_info
*) inf
,
1975 paux
->require_sec
= FALSE
;
1977 /* PR 9774: If the target used signed addresses then we must make
1978 sure that we sign extend the value that we calculate for 'addr'
1979 in the loop below. */
1980 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1981 && (bed
= get_elf_backend_data (abfd
)) != NULL
1982 && bed
->sign_extend_vma
)
1983 sign_adjust
= (bfd_vma
) 1 << (bed
->s
->arch_size
- 1);
1985 /* Disassemble a block of instructions up to the address associated with
1986 the symbol we have just found. Then print the symbol and find the
1987 next symbol on. Repeat until we have disassembled the entire section
1988 or we have reached the end of the address range we are interested in. */
1989 while (addr_offset
< stop_offset
)
1993 unsigned long nextstop_offset
;
1996 addr
= section
->vma
+ addr_offset
;
1997 addr
= ((addr
& ((sign_adjust
<< 1) - 1)) ^ sign_adjust
) - sign_adjust
;
1999 if (sym
!= NULL
&& bfd_asymbol_value (sym
) <= addr
)
2004 (x
< sorted_symcount
2005 && (bfd_asymbol_value (sorted_syms
[x
]) <= addr
));
2009 pinfo
->symbols
= sorted_syms
+ place
;
2010 pinfo
->num_symbols
= x
- place
;
2011 pinfo
->symtab_pos
= place
;
2015 pinfo
->symbols
= NULL
;
2016 pinfo
->num_symbols
= 0;
2017 pinfo
->symtab_pos
= -1;
2020 if (! prefix_addresses
)
2022 pinfo
->fprintf_func (pinfo
->stream
, "\n");
2023 objdump_print_addr_with_sym (abfd
, section
, sym
, addr
,
2025 pinfo
->fprintf_func (pinfo
->stream
, ":\n");
2028 if (sym
!= NULL
&& bfd_asymbol_value (sym
) > addr
)
2030 else if (sym
== NULL
)
2034 #define is_valid_next_sym(SYM) \
2035 ((SYM)->section == section \
2036 && (bfd_asymbol_value (SYM) > bfd_asymbol_value (sym)) \
2037 && pinfo->symbol_is_valid (SYM, pinfo))
2039 /* Search forward for the next appropriate symbol in
2040 SECTION. Note that all the symbols are sorted
2041 together into one big array, and that some sections
2042 may have overlapping addresses. */
2043 while (place
< sorted_symcount
2044 && ! is_valid_next_sym (sorted_syms
[place
]))
2047 if (place
>= sorted_symcount
)
2050 nextsym
= sorted_syms
[place
];
2053 if (sym
!= NULL
&& bfd_asymbol_value (sym
) > addr
)
2054 nextstop_offset
= bfd_asymbol_value (sym
) - section
->vma
;
2055 else if (nextsym
== NULL
)
2056 nextstop_offset
= stop_offset
;
2058 nextstop_offset
= bfd_asymbol_value (nextsym
) - section
->vma
;
2060 if (nextstop_offset
> stop_offset
2061 || nextstop_offset
<= addr_offset
)
2062 nextstop_offset
= stop_offset
;
2064 /* If a symbol is explicitly marked as being an object
2065 rather than a function, just dump the bytes without
2066 disassembling them. */
2069 || sym
->section
!= section
2070 || bfd_asymbol_value (sym
) > addr
2071 || ((sym
->flags
& BSF_OBJECT
) == 0
2072 && (strstr (bfd_asymbol_name (sym
), "gnu_compiled")
2074 && (strstr (bfd_asymbol_name (sym
), "gcc2_compiled")
2076 || (sym
->flags
& BSF_FUNCTION
) != 0)
2081 disassemble_bytes (pinfo
, paux
->disassemble_fn
, insns
, data
,
2082 addr_offset
, nextstop_offset
,
2083 rel_offset
, &rel_pp
, rel_ppend
);
2085 addr_offset
= nextstop_offset
;
2091 if (rel_ppstart
!= NULL
)
2095 /* Disassemble the contents of an object file. */
2098 disassemble_data (bfd
*abfd
)
2100 struct disassemble_info disasm_info
;
2101 struct objdump_disasm_info aux
;
2105 prev_functionname
= NULL
;
2108 /* We make a copy of syms to sort. We don't want to sort syms
2109 because that will screw up the relocs. */
2110 sorted_symcount
= symcount
? symcount
: dynsymcount
;
2111 sorted_syms
= (asymbol
**) xmalloc ((sorted_symcount
+ synthcount
)
2112 * sizeof (asymbol
*));
2113 memcpy (sorted_syms
, symcount
? syms
: dynsyms
,
2114 sorted_symcount
* sizeof (asymbol
*));
2116 sorted_symcount
= remove_useless_symbols (sorted_syms
, sorted_symcount
);
2118 for (i
= 0; i
< synthcount
; ++i
)
2120 sorted_syms
[sorted_symcount
] = synthsyms
+ i
;
2124 /* Sort the symbols into section and symbol order. */
2125 qsort (sorted_syms
, sorted_symcount
, sizeof (asymbol
*), compare_symbols
);
2127 init_disassemble_info (&disasm_info
, stdout
, (fprintf_ftype
) fprintf
);
2129 disasm_info
.application_data
= (void *) &aux
;
2131 aux
.require_sec
= FALSE
;
2132 aux
.dynrelbuf
= NULL
;
2133 aux
.dynrelcount
= 0;
2136 disasm_info
.print_address_func
= objdump_print_address
;
2137 disasm_info
.symbol_at_address_func
= objdump_symbol_at_address
;
2139 if (machine
!= NULL
)
2141 const bfd_arch_info_type
*inf
= bfd_scan_arch (machine
);
2144 fatal (_("can't use supplied machine %s"), machine
);
2146 abfd
->arch_info
= inf
;
2149 if (endian
!= BFD_ENDIAN_UNKNOWN
)
2151 struct bfd_target
*xvec
;
2153 xvec
= (struct bfd_target
*) xmalloc (sizeof (struct bfd_target
));
2154 memcpy (xvec
, abfd
->xvec
, sizeof (struct bfd_target
));
2155 xvec
->byteorder
= endian
;
2159 /* Use libopcodes to locate a suitable disassembler. */
2160 aux
.disassemble_fn
= disassembler (abfd
);
2161 if (!aux
.disassemble_fn
)
2163 non_fatal (_("can't disassemble for architecture %s\n"),
2164 bfd_printable_arch_mach (bfd_get_arch (abfd
), 0));
2169 disasm_info
.flavour
= bfd_get_flavour (abfd
);
2170 disasm_info
.arch
= bfd_get_arch (abfd
);
2171 disasm_info
.mach
= bfd_get_mach (abfd
);
2172 disasm_info
.disassembler_options
= disassembler_options
;
2173 disasm_info
.octets_per_byte
= bfd_octets_per_byte (abfd
);
2174 disasm_info
.skip_zeroes
= DEFAULT_SKIP_ZEROES
;
2175 disasm_info
.skip_zeroes_at_end
= DEFAULT_SKIP_ZEROES_AT_END
;
2176 disasm_info
.disassembler_needs_relocs
= FALSE
;
2178 if (bfd_big_endian (abfd
))
2179 disasm_info
.display_endian
= disasm_info
.endian
= BFD_ENDIAN_BIG
;
2180 else if (bfd_little_endian (abfd
))
2181 disasm_info
.display_endian
= disasm_info
.endian
= BFD_ENDIAN_LITTLE
;
2183 /* ??? Aborting here seems too drastic. We could default to big or little
2185 disasm_info
.endian
= BFD_ENDIAN_UNKNOWN
;
2187 /* Allow the target to customize the info structure. */
2188 disassemble_init_for_target (& disasm_info
);
2190 /* Pre-load the dynamic relocs if we are going
2191 to be dumping them along with the disassembly. */
2192 if (dump_dynamic_reloc_info
)
2194 long relsize
= bfd_get_dynamic_reloc_upper_bound (abfd
);
2197 bfd_fatal (bfd_get_filename (abfd
));
2201 aux
.dynrelbuf
= (arelent
**) xmalloc (relsize
);
2202 aux
.dynrelcount
= bfd_canonicalize_dynamic_reloc (abfd
,
2205 if (aux
.dynrelcount
< 0)
2206 bfd_fatal (bfd_get_filename (abfd
));
2208 /* Sort the relocs by address. */
2209 qsort (aux
.dynrelbuf
, aux
.dynrelcount
, sizeof (arelent
*),
2213 disasm_info
.symtab
= sorted_syms
;
2214 disasm_info
.symtab_size
= sorted_symcount
;
2216 bfd_map_over_sections (abfd
, disassemble_section
, & disasm_info
);
2218 if (aux
.dynrelbuf
!= NULL
)
2219 free (aux
.dynrelbuf
);
2224 load_specific_debug_section (enum dwarf_section_display_enum debug
,
2225 asection
*sec
, void *file
)
2227 struct dwarf_section
*section
= &debug_displays
[debug
].section
;
2228 bfd
*abfd
= (bfd
*) file
;
2231 /* If it is already loaded, do nothing. */
2232 if (section
->start
!= NULL
)
2235 section
->address
= 0;
2236 section
->size
= bfd_get_section_size (sec
);
2237 section
->start
= NULL
;
2238 ret
= bfd_get_full_section_contents (abfd
, sec
, §ion
->start
);
2242 free_debug_section (debug
);
2243 printf (_("\nCan't get contents for section '%s'.\n"),
2248 if (is_relocatable
&& debug_displays
[debug
].relocate
)
2250 /* We want to relocate the data we've already read (and
2251 decompressed), so we store a pointer to the data in
2252 the bfd_section, and tell it that the contents are
2253 already in memory. */
2254 sec
->contents
= section
->start
;
2255 sec
->flags
|= SEC_IN_MEMORY
;
2256 sec
->size
= section
->size
;
2258 ret
= bfd_simple_get_relocated_section_contents (abfd
,
2265 free_debug_section (debug
);
2266 printf (_("\nCan't get contents for section '%s'.\n"),
2276 load_debug_section (enum dwarf_section_display_enum debug
, void *file
)
2278 struct dwarf_section
*section
= &debug_displays
[debug
].section
;
2279 bfd
*abfd
= (bfd
*) file
;
2282 /* If it is already loaded, do nothing. */
2283 if (section
->start
!= NULL
)
2286 /* Locate the debug section. */
2287 sec
= bfd_get_section_by_name (abfd
, section
->uncompressed_name
);
2289 section
->name
= section
->uncompressed_name
;
2292 sec
= bfd_get_section_by_name (abfd
, section
->compressed_name
);
2294 section
->name
= section
->compressed_name
;
2299 return load_specific_debug_section (debug
, sec
, file
);
2303 free_debug_section (enum dwarf_section_display_enum debug
)
2305 struct dwarf_section
*section
= &debug_displays
[debug
].section
;
2307 if (section
->start
== NULL
)
2310 free ((char *) section
->start
);
2311 section
->start
= NULL
;
2312 section
->address
= 0;
2317 dump_dwarf_section (bfd
*abfd
, asection
*section
,
2318 void *arg ATTRIBUTE_UNUSED
)
2320 const char *name
= bfd_get_section_name (abfd
, section
);
2324 if (CONST_STRNEQ (name
, ".gnu.linkonce.wi."))
2325 match
= ".debug_info";
2329 for (i
= 0; i
< max
; i
++)
2330 if ((strcmp (debug_displays
[i
].section
.uncompressed_name
, match
) == 0
2331 || strcmp (debug_displays
[i
].section
.compressed_name
, match
) == 0)
2332 && debug_displays
[i
].enabled
!= NULL
2333 && *debug_displays
[i
].enabled
)
2335 struct dwarf_section
*sec
= &debug_displays
[i
].section
;
2337 if (strcmp (sec
->uncompressed_name
, match
) == 0)
2338 sec
->name
= sec
->uncompressed_name
;
2340 sec
->name
= sec
->compressed_name
;
2341 if (load_specific_debug_section ((enum dwarf_section_display_enum
) i
,
2344 debug_displays
[i
].display (sec
, abfd
);
2346 if (i
!= info
&& i
!= abbrev
)
2347 free_debug_section ((enum dwarf_section_display_enum
) i
);
2353 /* Dump the dwarf debugging information. */
2356 dump_dwarf (bfd
*abfd
)
2358 is_relocatable
= (abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0;
2360 eh_addr_size
= bfd_arch_bits_per_address (abfd
) / 8;
2362 if (bfd_big_endian (abfd
))
2363 byte_get
= byte_get_big_endian
;
2364 else if (bfd_little_endian (abfd
))
2365 byte_get
= byte_get_little_endian
;
2369 switch (bfd_get_arch (abfd
))
2372 switch (bfd_get_mach (abfd
))
2374 case bfd_mach_x86_64
:
2375 case bfd_mach_x86_64_intel_syntax
:
2376 init_dwarf_regnames_x86_64 ();
2380 init_dwarf_regnames_i386 ();
2389 bfd_map_over_sections (abfd
, dump_dwarf_section
, NULL
);
2391 free_debug_memory ();
2394 /* Read ABFD's stabs section STABSECT_NAME, and return a pointer to
2395 it. Return NULL on failure. */
2398 read_section_stabs (bfd
*abfd
, const char *sect_name
, bfd_size_type
*size_ptr
)
2404 stabsect
= bfd_get_section_by_name (abfd
, sect_name
);
2405 if (stabsect
== NULL
)
2407 printf (_("No %s section present\n\n"), sect_name
);
2411 size
= bfd_section_size (abfd
, stabsect
);
2412 contents
= (char *) xmalloc (size
);
2414 if (! bfd_get_section_contents (abfd
, stabsect
, contents
, 0, size
))
2416 non_fatal (_("reading %s section of %s failed: %s"),
2417 sect_name
, bfd_get_filename (abfd
),
2418 bfd_errmsg (bfd_get_error ()));
2429 /* Stabs entries use a 12 byte format:
2430 4 byte string table index
2432 1 byte stab other field
2433 2 byte stab desc field
2435 FIXME: This will have to change for a 64 bit object format. */
2437 #define STRDXOFF (0)
2439 #define OTHEROFF (5)
2442 #define STABSIZE (12)
2444 /* Print ABFD's stabs section STABSECT_NAME (in `stabs'),
2445 using string table section STRSECT_NAME (in `strtab'). */
2448 print_section_stabs (bfd
*abfd
,
2449 const char *stabsect_name
,
2450 unsigned *string_offset_ptr
)
2453 unsigned file_string_table_offset
= 0;
2454 unsigned next_file_string_table_offset
= *string_offset_ptr
;
2455 bfd_byte
*stabp
, *stabs_end
;
2458 stabs_end
= stabp
+ stab_size
;
2460 printf (_("Contents of %s section:\n\n"), stabsect_name
);
2461 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
2463 /* Loop through all symbols and print them.
2465 We start the index at -1 because there is a dummy symbol on
2466 the front of stabs-in-{coff,elf} sections that supplies sizes. */
2467 for (i
= -1; stabp
< stabs_end
; stabp
+= STABSIZE
, i
++)
2471 unsigned char type
, other
;
2472 unsigned short desc
;
2475 strx
= bfd_h_get_32 (abfd
, stabp
+ STRDXOFF
);
2476 type
= bfd_h_get_8 (abfd
, stabp
+ TYPEOFF
);
2477 other
= bfd_h_get_8 (abfd
, stabp
+ OTHEROFF
);
2478 desc
= bfd_h_get_16 (abfd
, stabp
+ DESCOFF
);
2479 value
= bfd_h_get_32 (abfd
, stabp
+ VALOFF
);
2481 printf ("\n%-6d ", i
);
2482 /* Either print the stab name, or, if unnamed, print its number
2483 again (makes consistent formatting for tools like awk). */
2484 name
= bfd_get_stab_name (type
);
2486 printf ("%-6s", name
);
2487 else if (type
== N_UNDF
)
2490 printf ("%-6d", type
);
2491 printf (" %-6d %-6d ", other
, desc
);
2492 bfd_printf_vma (abfd
, value
);
2493 printf (" %-6lu", strx
);
2495 /* Symbols with type == 0 (N_UNDF) specify the length of the
2496 string table associated with this file. We use that info
2497 to know how to relocate the *next* file's string table indices. */
2500 file_string_table_offset
= next_file_string_table_offset
;
2501 next_file_string_table_offset
+= value
;
2505 /* Using the (possibly updated) string table offset, print the
2506 string (if any) associated with this symbol. */
2507 if ((strx
+ file_string_table_offset
) < stabstr_size
)
2508 printf (" %s", &strtab
[strx
+ file_string_table_offset
]);
2514 *string_offset_ptr
= next_file_string_table_offset
;
2519 const char * section_name
;
2520 const char * string_section_name
;
2521 unsigned string_offset
;
2526 find_stabs_section (bfd
*abfd
, asection
*section
, void *names
)
2529 stab_section_names
* sought
= (stab_section_names
*) names
;
2531 /* Check for section names for which stabsect_name is a prefix, to
2532 handle .stab.N, etc. */
2533 len
= strlen (sought
->section_name
);
2535 /* If the prefix matches, and the files section name ends with a
2536 nul or a digit, then we match. I.e., we want either an exact
2537 match or a section followed by a number. */
2538 if (strncmp (sought
->section_name
, section
->name
, len
) == 0
2539 && (section
->name
[len
] == 0
2540 || (section
->name
[len
] == '.' && ISDIGIT (section
->name
[len
+ 1]))))
2543 strtab
= read_section_stabs (abfd
, sought
->string_section_name
,
2548 stabs
= (bfd_byte
*) read_section_stabs (abfd
, section
->name
,
2551 print_section_stabs (abfd
, section
->name
, &sought
->string_offset
);
2557 dump_stabs_section (bfd
*abfd
, char *stabsect_name
, char *strsect_name
)
2559 stab_section_names s
;
2561 s
.section_name
= stabsect_name
;
2562 s
.string_section_name
= strsect_name
;
2563 s
.string_offset
= 0;
2565 bfd_map_over_sections (abfd
, find_stabs_section
, & s
);
2571 /* Dump the any sections containing stabs debugging information. */
2574 dump_stabs (bfd
*abfd
)
2576 dump_stabs_section (abfd
, ".stab", ".stabstr");
2577 dump_stabs_section (abfd
, ".stab.excl", ".stab.exclstr");
2578 dump_stabs_section (abfd
, ".stab.index", ".stab.indexstr");
2581 dump_stabs_section (abfd
, "LC_SYMTAB.stabs", "LC_SYMTAB.stabstr");
2583 dump_stabs_section (abfd
, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
2587 dump_bfd_header (bfd
*abfd
)
2591 printf (_("architecture: %s, "),
2592 bfd_printable_arch_mach (bfd_get_arch (abfd
),
2593 bfd_get_mach (abfd
)));
2594 printf (_("flags 0x%08x:\n"), abfd
->flags
& ~BFD_FLAGS_FOR_BFD_USE_MASK
);
2596 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
2597 PF (HAS_RELOC
, "HAS_RELOC");
2598 PF (EXEC_P
, "EXEC_P");
2599 PF (HAS_LINENO
, "HAS_LINENO");
2600 PF (HAS_DEBUG
, "HAS_DEBUG");
2601 PF (HAS_SYMS
, "HAS_SYMS");
2602 PF (HAS_LOCALS
, "HAS_LOCALS");
2603 PF (DYNAMIC
, "DYNAMIC");
2604 PF (WP_TEXT
, "WP_TEXT");
2605 PF (D_PAGED
, "D_PAGED");
2606 PF (BFD_IS_RELAXABLE
, "BFD_IS_RELAXABLE");
2607 PF (HAS_LOAD_PAGE
, "HAS_LOAD_PAGE");
2608 printf (_("\nstart address 0x"));
2609 bfd_printf_vma (abfd
, abfd
->start_address
);
2615 dump_bfd_private_header (bfd
*abfd
)
2617 bfd_print_private_bfd_data (abfd
, stdout
);
2621 dump_target_specific (bfd
*abfd
)
2623 const struct objdump_private_desc
* const *desc
;
2624 struct objdump_private_option
*opt
;
2627 /* Find the desc. */
2628 for (desc
= objdump_private_vectors
; *desc
!= NULL
; desc
++)
2629 if ((*desc
)->filter (abfd
))
2634 non_fatal (_("option -P/--private not supported by this file"));
2638 /* Clear all options. */
2639 for (opt
= (*desc
)->options
; opt
->name
; opt
++)
2640 opt
->selected
= FALSE
;
2642 /* Decode options. */
2643 b
= dump_private_options
;
2646 e
= strchr (b
, ',');
2651 for (opt
= (*desc
)->options
; opt
->name
; opt
++)
2652 if (strcmp (opt
->name
, b
) == 0)
2654 opt
->selected
= TRUE
;
2657 if (opt
->name
== NULL
)
2658 non_fatal (_("target specific dump '%s' not supported"), b
);
2669 (*desc
)->dump (abfd
);
2672 /* Display a section in hexadecimal format with associated characters.
2673 Each line prefixed by the zero padded address. */
2676 dump_section (bfd
*abfd
, asection
*section
, void *dummy ATTRIBUTE_UNUSED
)
2679 bfd_size_type datasize
;
2680 bfd_size_type addr_offset
;
2681 bfd_size_type start_offset
;
2682 bfd_size_type stop_offset
;
2683 unsigned int opb
= bfd_octets_per_byte (abfd
);
2684 /* Bytes per line. */
2685 const int onaline
= 16;
2690 if ((section
->flags
& SEC_HAS_CONTENTS
) == 0)
2693 if (! process_section_p (section
))
2696 if ((datasize
= bfd_section_size (abfd
, section
)) == 0)
2699 /* Compute the address range to display. */
2700 if (start_address
== (bfd_vma
) -1
2701 || start_address
< section
->vma
)
2704 start_offset
= start_address
- section
->vma
;
2706 if (stop_address
== (bfd_vma
) -1)
2707 stop_offset
= datasize
/ opb
;
2710 if (stop_address
< section
->vma
)
2713 stop_offset
= stop_address
- section
->vma
;
2715 if (stop_offset
> datasize
/ opb
)
2716 stop_offset
= datasize
/ opb
;
2719 if (start_offset
>= stop_offset
)
2722 printf (_("Contents of section %s:"), section
->name
);
2723 if (display_file_offsets
)
2724 printf (_(" (Starting at file offset: 0x%lx)"),
2725 (unsigned long) (section
->filepos
+ start_offset
));
2728 if (!bfd_get_full_section_contents (abfd
, section
, &data
))
2730 non_fatal (_("Reading section failed"));
2736 bfd_sprintf_vma (abfd
, buf
, start_offset
+ section
->vma
);
2737 if (strlen (buf
) >= sizeof (buf
))
2741 while (buf
[count
] == '0' && buf
[count
+1] != '\0')
2743 count
= strlen (buf
) - count
;
2747 bfd_sprintf_vma (abfd
, buf
, stop_offset
+ section
->vma
- 1);
2748 if (strlen (buf
) >= sizeof (buf
))
2752 while (buf
[count
] == '0' && buf
[count
+1] != '\0')
2754 count
= strlen (buf
) - count
;
2758 for (addr_offset
= start_offset
;
2759 addr_offset
< stop_offset
; addr_offset
+= onaline
/ opb
)
2763 bfd_sprintf_vma (abfd
, buf
, (addr_offset
+ section
->vma
));
2764 count
= strlen (buf
);
2765 if ((size_t) count
>= sizeof (buf
))
2769 while (count
< width
)
2774 fputs (buf
+ count
- width
, stdout
);
2777 for (j
= addr_offset
* opb
;
2778 j
< addr_offset
* opb
+ onaline
; j
++)
2780 if (j
< stop_offset
* opb
)
2781 printf ("%02x", (unsigned) (data
[j
]));
2789 for (j
= addr_offset
* opb
;
2790 j
< addr_offset
* opb
+ onaline
; j
++)
2792 if (j
>= stop_offset
* opb
)
2795 printf ("%c", ISPRINT (data
[j
]) ? data
[j
] : '.');
2802 /* Actually display the various requested regions. */
2805 dump_data (bfd
*abfd
)
2807 bfd_map_over_sections (abfd
, dump_section
, NULL
);
2810 /* Should perhaps share code and display with nm? */
2813 dump_symbols (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_boolean dynamic
)
2822 max_count
= dynsymcount
;
2823 printf ("DYNAMIC SYMBOL TABLE:\n");
2828 max_count
= symcount
;
2829 printf ("SYMBOL TABLE:\n");
2833 printf (_("no symbols\n"));
2835 for (count
= 0; count
< max_count
; count
++)
2839 if (*current
== NULL
)
2840 printf (_("no information for symbol number %ld\n"), count
);
2842 else if ((cur_bfd
= bfd_asymbol_bfd (*current
)) == NULL
)
2843 printf (_("could not determine the type of symbol number %ld\n"),
2846 else if (process_section_p ((* current
)->section
)
2847 && (dump_special_syms
2848 || !bfd_is_target_special_symbol (cur_bfd
, *current
)))
2850 const char *name
= (*current
)->name
;
2852 if (do_demangle
&& name
!= NULL
&& *name
!= '\0')
2856 /* If we want to demangle the name, we demangle it
2857 here, and temporarily clobber it while calling
2858 bfd_print_symbol. FIXME: This is a gross hack. */
2859 alloc
= bfd_demangle (cur_bfd
, name
, DMGL_ANSI
| DMGL_PARAMS
);
2861 (*current
)->name
= alloc
;
2862 bfd_print_symbol (cur_bfd
, stdout
, *current
,
2863 bfd_print_symbol_all
);
2866 (*current
)->name
= name
;
2871 bfd_print_symbol (cur_bfd
, stdout
, *current
,
2872 bfd_print_symbol_all
);
2882 dump_reloc_set (bfd
*abfd
, asection
*sec
, arelent
**relpp
, long relcount
)
2885 char *last_filename
, *last_functionname
;
2886 unsigned int last_line
;
2888 /* Get column headers lined up reasonably. */
2896 bfd_sprintf_vma (abfd
, buf
, (bfd_vma
) -1);
2897 width
= strlen (buf
) - 7;
2899 printf ("OFFSET %*s TYPE %*s VALUE \n", width
, "", 12, "");
2902 last_filename
= NULL
;
2903 last_functionname
= NULL
;
2906 for (p
= relpp
; relcount
&& *p
!= NULL
; p
++, relcount
--)
2909 const char *filename
, *functionname
;
2910 unsigned int linenumber
;
2911 const char *sym_name
;
2912 const char *section_name
;
2913 bfd_vma addend2
= 0;
2915 if (start_address
!= (bfd_vma
) -1
2916 && q
->address
< start_address
)
2918 if (stop_address
!= (bfd_vma
) -1
2919 && q
->address
> stop_address
)
2922 if (with_line_numbers
2924 && bfd_find_nearest_line (abfd
, sec
, syms
, q
->address
,
2925 &filename
, &functionname
, &linenumber
))
2927 if (functionname
!= NULL
2928 && (last_functionname
== NULL
2929 || strcmp (functionname
, last_functionname
) != 0))
2931 printf ("%s():\n", functionname
);
2932 if (last_functionname
!= NULL
)
2933 free (last_functionname
);
2934 last_functionname
= xstrdup (functionname
);
2938 && (linenumber
!= last_line
2939 || (filename
!= NULL
2940 && last_filename
!= NULL
2941 && filename_cmp (filename
, last_filename
) != 0)))
2943 printf ("%s:%u\n", filename
== NULL
? "???" : filename
, linenumber
);
2944 last_line
= linenumber
;
2945 if (last_filename
!= NULL
)
2946 free (last_filename
);
2947 if (filename
== NULL
)
2948 last_filename
= NULL
;
2950 last_filename
= xstrdup (filename
);
2954 if (q
->sym_ptr_ptr
&& *q
->sym_ptr_ptr
)
2956 sym_name
= (*(q
->sym_ptr_ptr
))->name
;
2957 section_name
= (*(q
->sym_ptr_ptr
))->section
->name
;
2962 section_name
= NULL
;
2965 bfd_printf_vma (abfd
, q
->address
);
2966 if (q
->howto
== NULL
)
2967 printf (" *unknown* ");
2968 else if (q
->howto
->name
)
2970 const char *name
= q
->howto
->name
;
2972 /* R_SPARC_OLO10 relocations contain two addends.
2973 But because 'arelent' lacks enough storage to
2974 store them both, the 64-bit ELF Sparc backend
2975 records this as two relocations. One R_SPARC_LO10
2976 and one R_SPARC_13, both pointing to the same
2977 address. This is merely so that we have some
2978 place to store both addend fields.
2980 Undo this transformation, otherwise the output
2981 will be confusing. */
2982 if (abfd
->xvec
->flavour
== bfd_target_elf_flavour
2983 && elf_tdata(abfd
)->elf_header
->e_machine
== EM_SPARCV9
2985 && !strcmp (q
->howto
->name
, "R_SPARC_LO10"))
2987 arelent
*q2
= *(p
+ 1);
2990 && q
->address
== q2
->address
2991 && !strcmp (q2
->howto
->name
, "R_SPARC_13"))
2993 name
= "R_SPARC_OLO10";
2994 addend2
= q2
->addend
;
2998 printf (" %-16s ", name
);
3001 printf (" %-16d ", q
->howto
->type
);
3005 objdump_print_symname (abfd
, NULL
, *q
->sym_ptr_ptr
);
3009 if (section_name
== NULL
)
3010 section_name
= "*unknown*";
3011 printf ("[%s]", section_name
);
3017 bfd_printf_vma (abfd
, q
->addend
);
3022 bfd_printf_vma (abfd
, addend2
);
3028 if (last_filename
!= NULL
)
3029 free (last_filename
);
3030 if (last_functionname
!= NULL
)
3031 free (last_functionname
);
3035 dump_relocs_in_section (bfd
*abfd
,
3037 void *dummy ATTRIBUTE_UNUSED
)
3043 if ( bfd_is_abs_section (section
)
3044 || bfd_is_und_section (section
)
3045 || bfd_is_com_section (section
)
3046 || (! process_section_p (section
))
3047 || ((section
->flags
& SEC_RELOC
) == 0))
3050 relsize
= bfd_get_reloc_upper_bound (abfd
, section
);
3052 bfd_fatal (bfd_get_filename (abfd
));
3054 printf ("RELOCATION RECORDS FOR [%s]:", section
->name
);
3058 printf (" (none)\n\n");
3062 relpp
= (arelent
**) xmalloc (relsize
);
3063 relcount
= bfd_canonicalize_reloc (abfd
, section
, relpp
, syms
);
3066 bfd_fatal (bfd_get_filename (abfd
));
3067 else if (relcount
== 0)
3068 printf (" (none)\n\n");
3072 dump_reloc_set (abfd
, section
, relpp
, relcount
);
3079 dump_relocs (bfd
*abfd
)
3081 bfd_map_over_sections (abfd
, dump_relocs_in_section
, NULL
);
3085 dump_dynamic_relocs (bfd
*abfd
)
3091 relsize
= bfd_get_dynamic_reloc_upper_bound (abfd
);
3093 bfd_fatal (bfd_get_filename (abfd
));
3095 printf ("DYNAMIC RELOCATION RECORDS");
3098 printf (" (none)\n\n");
3101 relpp
= (arelent
**) xmalloc (relsize
);
3102 relcount
= bfd_canonicalize_dynamic_reloc (abfd
, relpp
, dynsyms
);
3105 bfd_fatal (bfd_get_filename (abfd
));
3106 else if (relcount
== 0)
3107 printf (" (none)\n\n");
3111 dump_reloc_set (abfd
, NULL
, relpp
, relcount
);
3118 /* Creates a table of paths, to search for source files. */
3121 add_include_path (const char *path
)
3125 include_path_count
++;
3126 include_paths
= (const char **)
3127 xrealloc (include_paths
, include_path_count
* sizeof (*include_paths
));
3128 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3129 if (path
[1] == ':' && path
[2] == 0)
3130 path
= concat (path
, ".", (const char *) 0);
3132 include_paths
[include_path_count
- 1] = path
;
3136 adjust_addresses (bfd
*abfd ATTRIBUTE_UNUSED
,
3140 if ((section
->flags
& SEC_DEBUGGING
) == 0)
3142 bfd_boolean
*has_reloc_p
= (bfd_boolean
*) arg
;
3143 section
->vma
+= adjust_section_vma
;
3145 section
->lma
+= adjust_section_vma
;
3149 /* Dump selected contents of ABFD. */
3152 dump_bfd (bfd
*abfd
)
3154 /* If we are adjusting section VMA's, change them all now. Changing
3155 the BFD information is a hack. However, we must do it, or
3156 bfd_find_nearest_line will not do the right thing. */
3157 if (adjust_section_vma
!= 0)
3159 bfd_boolean has_reloc
= (abfd
->flags
& HAS_RELOC
);
3160 bfd_map_over_sections (abfd
, adjust_addresses
, &has_reloc
);
3163 if (! dump_debugging_tags
&& ! suppress_bfd_header
)
3164 printf (_("\n%s: file format %s\n"), bfd_get_filename (abfd
),
3167 print_arelt_descr (stdout
, abfd
, TRUE
);
3168 if (dump_file_header
)
3169 dump_bfd_header (abfd
);
3170 if (dump_private_headers
)
3171 dump_bfd_private_header (abfd
);
3172 if (dump_private_options
!= NULL
)
3173 dump_target_specific (abfd
);
3174 if (! dump_debugging_tags
&& ! suppress_bfd_header
)
3176 if (dump_section_headers
)
3177 dump_headers (abfd
);
3183 || dump_dwarf_section_info
)
3184 syms
= slurp_symtab (abfd
);
3185 if (dump_dynamic_symtab
|| dump_dynamic_reloc_info
3186 || (disassemble
&& bfd_get_dynamic_symtab_upper_bound (abfd
) > 0))
3187 dynsyms
= slurp_dynamic_symtab (abfd
);
3190 synthcount
= bfd_get_synthetic_symtab (abfd
, symcount
, syms
,
3191 dynsymcount
, dynsyms
, &synthsyms
);
3197 dump_symbols (abfd
, FALSE
);
3198 if (dump_dynamic_symtab
)
3199 dump_symbols (abfd
, TRUE
);
3200 if (dump_dwarf_section_info
)
3202 if (dump_stab_section_info
)
3204 if (dump_reloc_info
&& ! disassemble
)
3206 if (dump_dynamic_reloc_info
&& ! disassemble
)
3207 dump_dynamic_relocs (abfd
);
3208 if (dump_section_contents
)
3211 disassemble_data (abfd
);
3217 dhandle
= read_debugging_info (abfd
, syms
, symcount
, TRUE
);
3218 if (dhandle
!= NULL
)
3220 if (!print_debugging_info (stdout
, dhandle
, abfd
, syms
,
3222 dump_debugging_tags
? TRUE
: FALSE
))
3224 non_fatal (_("%s: printing debugging information failed"),
3225 bfd_get_filename (abfd
));
3229 /* PR 6483: If there was no STABS or IEEE debug
3230 info in the file, try DWARF instead. */
3231 else if (! dump_dwarf_section_info
)
3261 display_object_bfd (bfd
*abfd
)
3265 if (bfd_check_format_matches (abfd
, bfd_object
, &matching
))
3271 if (bfd_get_error () == bfd_error_file_ambiguously_recognized
)
3273 nonfatal (bfd_get_filename (abfd
));
3274 list_matching_formats (matching
);
3279 if (bfd_get_error () != bfd_error_file_not_recognized
)
3281 nonfatal (bfd_get_filename (abfd
));
3285 if (bfd_check_format_matches (abfd
, bfd_core
, &matching
))
3291 nonfatal (bfd_get_filename (abfd
));
3293 if (bfd_get_error () == bfd_error_file_ambiguously_recognized
)
3295 list_matching_formats (matching
);
3301 display_any_bfd (bfd
*file
, int level
)
3303 /* Decompress sections unless dumping the section contents. */
3304 if (!dump_section_contents
)
3305 file
->flags
|= BFD_DECOMPRESS
;
3307 /* If the file is an archive, process all of its elements. */
3308 if (bfd_check_format (file
, bfd_archive
))
3311 bfd
*last_arfile
= NULL
;
3314 printf (_("In archive %s:\n"), bfd_get_filename (file
));
3316 printf (_("In nested archive %s:\n"), bfd_get_filename (file
));
3320 bfd_set_error (bfd_error_no_error
);
3322 arfile
= bfd_openr_next_archived_file (file
, arfile
);
3325 if (bfd_get_error () != bfd_error_no_more_archived_files
)
3326 nonfatal (bfd_get_filename (file
));
3330 display_any_bfd (arfile
, level
+ 1);
3332 if (last_arfile
!= NULL
)
3333 bfd_close (last_arfile
);
3334 last_arfile
= arfile
;
3337 if (last_arfile
!= NULL
)
3338 bfd_close (last_arfile
);
3341 display_object_bfd (file
);
3345 display_file (char *filename
, char *target
)
3349 if (get_file_size (filename
) < 1)
3355 file
= bfd_openr (filename
, target
);
3358 nonfatal (filename
);
3362 display_any_bfd (file
, 0);
3368 main (int argc
, char **argv
)
3371 char *target
= default_target
;
3372 bfd_boolean seenflag
= FALSE
;
3374 #if defined (HAVE_SETLOCALE)
3375 #if defined (HAVE_LC_MESSAGES)
3376 setlocale (LC_MESSAGES
, "");
3378 setlocale (LC_CTYPE
, "");
3381 bindtextdomain (PACKAGE
, LOCALEDIR
);
3382 textdomain (PACKAGE
);
3384 program_name
= *argv
;
3385 xmalloc_set_program_name (program_name
);
3387 START_PROGRESS (program_name
, 0);
3389 expandargv (&argc
, &argv
);
3392 set_default_bfd_target ();
3394 while ((c
= getopt_long (argc
, argv
,
3395 "pP:ib:m:M:VvCdDlfFaHhrRtTxsSI:j:wE:zgeGW::",
3396 long_options
, (int *) 0))
3402 break; /* We've been given a long option. */
3407 if (disassembler_options
)
3408 /* Ignore potential memory leak for now. */
3409 disassembler_options
= concat (disassembler_options
, ",",
3410 optarg
, (const char *) NULL
);
3412 disassembler_options
= optarg
;
3418 display_file_offsets
= TRUE
;
3421 with_line_numbers
= TRUE
;
3430 enum demangling_styles style
;
3432 style
= cplus_demangle_name_to_style (optarg
);
3433 if (style
== unknown_demangling
)
3434 fatal (_("unknown demangling style `%s'"),
3437 cplus_demangle_set_style (style
);
3443 case OPTION_ADJUST_VMA
:
3444 adjust_section_vma
= parse_vma (optarg
, "--adjust-vma");
3446 case OPTION_START_ADDRESS
:
3447 start_address
= parse_vma (optarg
, "--start-address");
3448 if ((stop_address
!= (bfd_vma
) -1) && stop_address
<= start_address
)
3449 fatal (_("error: the start address should be before the end address"));
3451 case OPTION_STOP_ADDRESS
:
3452 stop_address
= parse_vma (optarg
, "--stop-address");
3453 if ((start_address
!= (bfd_vma
) -1) && stop_address
<= start_address
)
3454 fatal (_("error: the stop address should be after the start address"));
3458 prefix_length
= strlen (prefix
);
3459 /* Remove an unnecessary trailing '/' */
3460 while (IS_DIR_SEPARATOR (prefix
[prefix_length
- 1]))
3463 case OPTION_PREFIX_STRIP
:
3464 prefix_strip
= atoi (optarg
);
3465 if (prefix_strip
< 0)
3466 fatal (_("error: prefix strip must be non-negative"));
3468 case OPTION_INSN_WIDTH
:
3469 insn_width
= strtoul (optarg
, NULL
, 0);
3470 if (insn_width
<= 0)
3471 fatal (_("error: instruction width must be positive"));
3474 if (strcmp (optarg
, "B") == 0)
3475 endian
= BFD_ENDIAN_BIG
;
3476 else if (strcmp (optarg
, "L") == 0)
3477 endian
= BFD_ENDIAN_LITTLE
;
3480 nonfatal (_("unrecognized -E option"));
3485 if (strncmp (optarg
, "big", strlen (optarg
)) == 0)
3486 endian
= BFD_ENDIAN_BIG
;
3487 else if (strncmp (optarg
, "little", strlen (optarg
)) == 0)
3488 endian
= BFD_ENDIAN_LITTLE
;
3491 non_fatal (_("unrecognized --endian type `%s'"), optarg
);
3498 dump_file_header
= TRUE
;
3502 formats_info
= TRUE
;
3506 add_include_path (optarg
);
3509 dump_private_headers
= TRUE
;
3513 dump_private_options
= optarg
;
3517 dump_private_headers
= TRUE
;
3519 dump_reloc_info
= TRUE
;
3520 dump_file_header
= TRUE
;
3521 dump_ar_hdrs
= TRUE
;
3522 dump_section_headers
= TRUE
;
3530 dump_dynamic_symtab
= TRUE
;
3538 disassemble_zeroes
= TRUE
;
3542 disassemble_all
= TRUE
;
3547 with_source_code
= TRUE
;
3556 dump_debugging_tags
= 1;
3561 dump_dwarf_section_info
= TRUE
;
3564 dwarf_select_sections_by_letters (optarg
);
3566 dwarf_select_sections_all ();
3569 dump_dwarf_section_info
= TRUE
;
3572 dwarf_select_sections_by_names (optarg
);
3574 dwarf_select_sections_all ();
3576 case OPTION_DWARF_DEPTH
:
3579 dwarf_cutoff_level
= strtoul (optarg
, & cp
, 0);
3582 case OPTION_DWARF_START
:
3585 dwarf_start_die
= strtoul (optarg
, & cp
, 0);
3586 suppress_bfd_header
= 1;
3590 dump_stab_section_info
= TRUE
;
3594 dump_section_contents
= TRUE
;
3598 dump_reloc_info
= TRUE
;
3602 dump_dynamic_reloc_info
= TRUE
;
3606 dump_ar_hdrs
= TRUE
;
3610 dump_section_headers
= TRUE
;
3618 show_version
= TRUE
;
3628 print_version ("objdump");
3634 exit_status
= display_info ();
3638 display_file ("a.out", target
);
3640 for (; optind
< argc
;)
3641 display_file (argv
[optind
++], target
);
3646 END_PROGRESS (program_name
);