1 /* objdump.c -- dump information about an object file.
2 Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Diddler.
6 BFD is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 BFD is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with BFD; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 * Until there is other documentation, refer to the manual page dump(1) in
22 * the system 5 program's reference manual
32 #define ELF_STAB_DISPLAY /* This code works, but uses internal
33 bfd and elf stuff. Flip this define
34 off if you need to just use generic
37 #ifdef ELF_STAB_DISPLAY
38 /* Internal headers for the ELF .stab-dump code - sorry. */
39 #define BYTES_IN_WORD 32
40 #include "aout/aout64.h"
41 #include "elf/internal.h"
42 extern Elf_Internal_Shdr
*bfd_elf_find_section();
43 #endif /* ELF_STAB_DISPLAY */
45 extern char *xmalloc ();
46 extern int fprintf
PARAMS ((FILE *, CONST
char *, ...));
48 char *default_target
= NULL
; /* default at runtime */
50 extern *program_version
;
51 char *program_name
= NULL
;
53 int show_version
= 0; /* show the version number */
54 int dump_section_contents
; /* -s */
55 int dump_section_headers
; /* -h */
56 boolean dump_file_header
; /* -f */
57 int dump_symtab
; /* -t */
58 int dump_reloc_info
; /* -r */
59 int dump_ar_hdrs
; /* -a */
60 int with_line_numbers
; /* -l */
61 int dump_stab_section_info
; /* -stabs */
62 boolean disassemble
; /* -d */
63 boolean info
; /* -i */
66 char *machine
= (char *) NULL
;
71 unsigned int symcount
= 0;
73 /* Forward declarations. */
76 display_file
PARAMS ((char *filename
, char *target
));
79 dump_data
PARAMS ((bfd
*abfd
));
82 dump_relocs
PARAMS ((bfd
*abfd
));
85 dump_symbols
PARAMS ((bfd
*abfd
));
91 Usage: %s [-ahifdrtxsl] [-m machine] [-j section_name] [-b bfdname]\n\
92 [--syms] [--reloc] [--header] [--version] objfile...\n", program_name
);
96 static struct option long_options
[]=
98 {"syms", no_argument
, &dump_symtab
, 1},
99 {"reloc", no_argument
, &dump_reloc_info
, 1},
100 {"header", no_argument
, &dump_section_headers
, 1},
101 {"version", no_argument
, &show_version
, 1},
102 #ifdef ELF_STAB_DISPLAY
103 {"stabs", no_argument
, &dump_stab_section_info
, 1},
105 {0, no_argument
, 0, 0}
115 for (section
= abfd
->sections
;
116 section
!= (asection
*) NULL
;
117 section
= section
->next
)
122 if (section->flags & x) { printf("%s%s",comma,y); comma = ", "; }
125 printf ("SECTION %d [%s]\t: size %08x",
128 (unsigned) bfd_get_section_size_before_reloc (section
));
130 printf_vma (section
->vma
);
131 printf (" align 2**%u\n ",
132 section
->alignment_power
);
133 PF (SEC_ALLOC
, "ALLOC");
134 PF (SEC_CONSTRUCTOR
, "CONSTRUCTOR");
135 PF (SEC_CONSTRUCTOR_TEXT
, "CONSTRUCTOR TEXT");
136 PF (SEC_CONSTRUCTOR_DATA
, "CONSTRUCTOR DATA");
137 PF (SEC_CONSTRUCTOR_BSS
, "CONSTRUCTOR BSS");
138 PF (SEC_LOAD
, "LOAD");
139 PF (SEC_RELOC
, "RELOC");
140 PF (SEC_BALIGN
, "BALIGN");
141 PF (SEC_READONLY
, "READONLY");
142 PF (SEC_CODE
, "CODE");
143 PF (SEC_DATA
, "DATA");
151 DEFUN (slurp_symtab
, (abfd
),
154 asymbol
**sy
= (asymbol
**) NULL
;
156 if (!(bfd_get_file_flags (abfd
) & HAS_SYMS
))
158 (void) printf ("No symbols in \"%s\".\n", bfd_get_filename (abfd
));
162 storage
= get_symtab_upper_bound (abfd
);
165 sy
= (asymbol
**) malloc (storage
);
168 fprintf (stderr
, "%s: out of memory.\n", program_name
);
172 symcount
= bfd_canonicalize_symtab (abfd
, sy
);
175 fprintf (stderr
, "%s: Bad symbol table in \"%s\".\n",
176 program_name
, bfd_get_filename (abfd
));
182 /* Filter out (in place) symbols that are useless for dis-assemble.
183 Return count of useful symbols. */
185 int remove_useless_symbols (syms
, count
)
189 register asymbol
**in_ptr
= syms
;
190 register asymbol
**out_ptr
= syms
;
192 while ( --count
>= 0 )
194 asymbol
*sym
= *in_ptr
++;
196 if (sym
->name
== NULL
|| sym
->name
[0] == '\0')
198 if (sym
->flags
& (BSF_DEBUGGING
))
200 if (sym
->section
== &bfd_und_section
201 || bfd_is_com_section (sym
->section
))
206 return out_ptr
- syms
;
210 /* Sort symbols into value order */
216 asymbol
*a
= *(asymbol
**)ap
;
217 asymbol
*b
= *(asymbol
**)bp
;
219 if (a
->value
> b
->value
)
221 else if (a
->value
< b
->value
)
224 if (a
->section
> b
->section
)
226 else if (a
->section
< b
->section
)
231 /* Print the supplied address symbolically if possible */
233 objdump_print_address (vma
, info
)
235 struct disassemble_info
*info
;
237 /* Perform a binary search looking for the closest symbol to
238 the required value */
240 unsigned int min
= 0;
241 unsigned int max
= symcount
;
243 unsigned int thisplace
= 1;
244 unsigned int oldthisplace
;
248 fprintf_vma (info
->stream
, vma
);
254 asymbol
*sym
; asection
*sym_sec
;
255 oldthisplace
= thisplace
;
256 thisplace
= (max
+ min
) / 2;
257 if (thisplace
== oldthisplace
)
259 sym
= syms
[thisplace
];
260 vardiff
= sym
->value
- vma
;
261 sym_sec
= sym
->section
;
265 else if (vardiff
< 0)
270 /* We've run out of places to look, print the symbol before this one
271 see if this or the symbol before describes this location the best */
275 if (syms
[thisplace
- 1]->value
- vma
>
276 syms
[thisplace
]->value
- vma
)
278 /* Previous symbol is in correct section and is closer */
284 fprintf (info
->stream
, " <%s", syms
[thisplace
]->name
);
285 if (syms
[thisplace
]->value
> vma
)
287 char buf
[30], *p
= buf
;
288 sprintf_vma (buf
, syms
[thisplace
]->value
- vma
);
291 fprintf (info
->stream
, "-%s", p
);
293 else if (vma
> syms
[thisplace
]->value
)
295 char buf
[30], *p
= buf
;
296 sprintf_vma (buf
, vma
- syms
[thisplace
]->value
);
299 fprintf (info
->stream
, "+%s", p
);
301 fprintf (info
->stream
, ">");
306 disassemble_data (abfd
)
309 bfd_byte
*data
= NULL
;
310 bfd_arch_info_type
*info
;
311 bfd_size_type datasize
= 0;
313 unsigned int (*print
) ()= 0; /* Old style */
314 disassembler_ftype disassemble
= 0; /* New style */
315 enum bfd_architecture a
;
316 struct disassemble_info disasm_info
;
319 CONST
char *prev_function
= "";
323 /* Replace symbol section relative values with abs values */
324 boolean done_dot
= false;
326 INIT_DISASSEMBLE_INFO(disasm_info
, stdout
);
327 disasm_info
.print_address_func
= objdump_print_address
;
329 for (i
= 0; i
< symcount
; i
++)
331 syms
[i
]->value
+= syms
[i
]->section
->vma
;
334 symcount
= remove_useless_symbols (syms
, symcount
);
336 /* Sort the symbols into section and symbol order */
337 (void) qsort (syms
, symcount
, sizeof (asymbol
*), comp
);
339 if (machine
!= (char *) NULL
)
341 info
= bfd_scan_arch (machine
);
344 fprintf (stderr
, "%s: Can't use supplied machine %s\n",
349 abfd
->arch_info
= info
;
352 /* See if we can disassemble using bfd */
354 if (abfd
->arch_info
->disassemble
)
356 print
= abfd
->arch_info
->disassemble
;
360 a
= bfd_get_arch (abfd
);
364 disassemble
= print_insn_sparc
;
367 if (bfd_get_mach(abfd
) == bfd_mach_z8001
)
368 disassemble
= print_insn_z8001
;
370 disassemble
= print_insn_z8002
;
373 disassemble
= print_insn_i386
;
376 disassemble
= print_insn_h8500
;
379 if (bfd_get_mach(abfd
) == bfd_mach_h8300h
)
380 disassemble
= print_insn_h8300h
;
382 disassemble
= print_insn_h8300
;
385 disassemble
= print_insn_sh
;
388 disassemble
= print_insn_alpha
;
391 disassemble
= print_insn_m68k
;
394 /* As far as I know we only handle big-endian 29k objects. */
395 disassemble
= print_insn_big_a29k
;
398 disassemble
= print_insn_i960
;
401 if (abfd
->xvec
->byteorder_big_p
)
402 disassemble
= print_insn_big_mips
;
404 disassemble
= print_insn_little_mips
;
407 fprintf (stderr
, "%s: Can't disassemble for architecture %s\n",
409 bfd_printable_arch_mach (bfd_get_arch (abfd
), 0));
415 for (section
= abfd
->sections
;
416 section
!= (asection
*) NULL
;
417 section
= section
->next
)
420 if ((section
->flags
& SEC_LOAD
)
421 && (only
== (char *) NULL
|| strcmp (only
, section
->name
) == 0))
423 printf ("Disassembly of section %s:\n", section
->name
);
425 if (bfd_get_section_size_before_reloc (section
) == 0)
428 data
= (bfd_byte
*) malloc (bfd_get_section_size_before_reloc (section
));
430 if (data
== (bfd_byte
*) NULL
)
432 fprintf (stderr
, "%s: memory exhausted.\n", program_name
);
435 datasize
= bfd_get_section_size_before_reloc (section
);
437 bfd_get_section_contents (abfd
, section
, data
, 0, bfd_get_section_size_before_reloc (section
));
439 disasm_info
.buffer
= data
;
440 disasm_info
.buffer_vma
= section
->vma
;
441 disasm_info
.buffer_length
=
442 bfd_get_section_size_before_reloc (section
);
444 while (i
< disasm_info
.buffer_length
)
446 if (data
[i
] == 0 && data
[i
+ 1] == 0 && data
[i
+ 2] == 0 &&
449 if (done_dot
== false)
459 if (with_line_numbers
)
461 CONST
char *filename
;
462 CONST
char *functionname
;
465 if (bfd_find_nearest_line (abfd
,
473 if (functionname
&& *functionname
474 && strcmp(functionname
, prev_function
))
476 printf ("%s():\n", functionname
);
477 prev_function
= functionname
;
481 if (line
&& line
!= prevline
)
483 printf ("%s:%u\n", filename
, line
);
488 objdump_print_address (section
->vma
+ i
, &disasm_info
);
491 if (disassemble
) /* New style */
493 int bytes
= (*disassemble
)(section
->vma
+ i
,
500 i
+= print (section
->vma
+ i
,
511 #ifdef ELF_STAB_DISPLAY
513 /* Define a table of stab values and print-strings. We wish the initializer
514 could be a direct-mapped table, but instead we build one the first
517 #define STAB_STRING_LENGTH 6
519 char stab_name
[256][STAB_STRING_LENGTH
];
523 char string
[STAB_STRING_LENGTH
];
526 struct stab_print stab_print
[] = {
527 #define __define_stab(NAME, CODE, STRING) {CODE, STRING},
528 #include "aout/stab.def"
533 void dump_elf_stabs_1 ();
535 /* This is a kludge for dumping the stabs section from an ELF file that
536 uses Sun stabs encoding. It has to use some hooks into BFD because
537 string table sections are not normally visible to BFD callers. */
540 dump_elf_stabs (abfd
)
545 /* Initialize stab name array if first time. */
546 if (stab_name
[0][0] == 0)
548 /* Fill in numeric values for all possible strings. */
549 for (i
= 0; i
< 256; i
++)
551 sprintf (stab_name
[i
], "%d", i
);
553 for (i
= 0; stab_print
[i
].string
[0]; i
++)
554 strcpy (stab_name
[stab_print
[i
].value
], stab_print
[i
].string
);
557 if (0 != strncmp ("elf", abfd
->xvec
->name
, 3))
559 fprintf (stderr
, "%s: %s is not in ELF format.\n", program_name
,
564 dump_elf_stabs_1 (abfd
, ".stab", ".stabstr");
565 dump_elf_stabs_1 (abfd
, ".stab.excl", ".stab.exclstr");
566 dump_elf_stabs_1 (abfd
, ".stab.index", ".stab.indexstr");
570 dump_elf_stabs_1 (abfd
, name1
, name2
)
572 char *name1
; /* Section name of .stab */
573 char *name2
; /* Section name of its string section */
575 Elf_Internal_Shdr
*stab_hdr
, *stabstr_hdr
;
577 struct internal_nlist
*stabs
, *stabs_end
;
579 unsigned file_string_table_offset
, next_file_string_table_offset
;
581 stab_hdr
= bfd_elf_find_section (abfd
, name1
);
584 printf ("Contents of %s section: none.\n\n", name1
);
588 stabstr_hdr
= bfd_elf_find_section (abfd
, name2
);
589 if (0 == stabstr_hdr
)
591 fprintf (stderr
, "%s: %s has no %s section.\n", program_name
,
592 abfd
->filename
, name2
);
596 stabs
= (struct internal_nlist
*) xmalloc (stab_hdr
->sh_size
);
597 strtab
= (char *) xmalloc (stabstr_hdr
->sh_size
);
598 stabs_end
= (struct internal_nlist
*) (stab_hdr
->sh_size
+ (char *)stabs
);
600 if (bfd_seek (abfd
, stab_hdr
->sh_offset
, SEEK_SET
) < 0 ||
601 stab_hdr
->sh_size
!= bfd_read ((PTR
)stabs
, stab_hdr
->sh_size
, 1, abfd
))
603 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
609 if (bfd_seek (abfd
, stabstr_hdr
->sh_offset
, SEEK_SET
) < 0 ||
610 stabstr_hdr
->sh_size
!= bfd_read ((PTR
)strtab
, stabstr_hdr
->sh_size
,
613 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
619 #define SWAP_SYMBOL(symp, abfd) \
621 (symp)->n_strx = bfd_h_get_32(abfd, \
622 (unsigned char *)&(symp)->n_strx); \
623 (symp)->n_desc = bfd_h_get_16 (abfd, \
624 (unsigned char *)&(symp)->n_desc); \
625 (symp)->n_value = bfd_h_get_32 (abfd, \
626 (unsigned char *)&(symp)->n_value); \
629 printf ("Contents of %s section:\n\n", name1
);
630 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
632 file_string_table_offset
= 0;
633 next_file_string_table_offset
= 0;
635 /* Loop through all symbols and print them.
637 We start the index at -1 because there is a dummy symbol on
638 the front of Sun's stabs-in-elf sections. */
640 for (i
= -1; stabs
< stabs_end
; stabs
++, i
++)
642 SWAP_SYMBOL (stabs
, abfd
);
643 printf ("\n%-6d %-6s %-6d %-6d %08x %-6d", i
,
644 stab_name
[stabs
->n_type
],
645 stabs
->n_other
, stabs
->n_desc
, stabs
->n_value
,
648 /* Symbols with type == 0 (N_UNDF) specify the length of the
649 string table associated with this file. We use that info
650 to know how to relocate the *next* file's string table indices. */
652 if (stabs
->n_type
== N_UNDF
)
654 file_string_table_offset
= next_file_string_table_offset
;
655 next_file_string_table_offset
+= stabs
->n_value
;
658 /* Now, using the possibly updated string table offset, print the
659 string (if any) associated with this symbol. */
661 if ((stabs
->n_strx
+ file_string_table_offset
) < stabstr_hdr
->sh_size
)
662 printf (" %s", &strtab
[stabs
->n_strx
+ file_string_table_offset
]);
668 #endif /* ELF_STAB_DISPLAY */
674 if (!bfd_check_format (abfd
, bfd_object
))
676 fprintf (stderr
, "%s: %s not an object file\n", program_name
,
680 printf ("\n%s: file format %s\n", abfd
->filename
, abfd
->xvec
->name
);
682 print_arelt_descr (stdout
, abfd
, true);
684 if (dump_file_header
)
688 printf ("architecture: %s, ",
689 bfd_printable_arch_mach (bfd_get_arch (abfd
),
690 bfd_get_mach (abfd
)));
691 printf ("flags 0x%08x:\n", abfd
->flags
);
693 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
694 PF (HAS_RELOC
, "HAS_RELOC");
695 PF (EXEC_P
, "EXEC_P");
696 PF (HAS_LINENO
, "HAS_LINENO");
697 PF (HAS_DEBUG
, "HAS_DEBUG");
698 PF (HAS_SYMS
, "HAS_SYMS");
699 PF (HAS_LOCALS
, "HAS_LOCALS");
700 PF (DYNAMIC
, "DYNAMIC");
701 PF (WP_TEXT
, "WP_TEXT");
702 PF (D_PAGED
, "D_PAGED");
703 PF (BFD_IS_RELAXABLE
, "BFD_IS_RELAXABLE");
704 printf ("\nstart address 0x");
705 printf_vma (abfd
->start_address
);
709 if (dump_section_headers
)
711 if (dump_symtab
|| dump_reloc_info
|| disassemble
)
713 syms
= slurp_symtab (abfd
);
717 #ifdef ELF_STAB_DISPLAY
718 if (dump_stab_section_info
)
719 dump_elf_stabs (abfd
);
723 if (dump_section_contents
)
725 /* Note that disassemble_data re-orders the syms table, but that is
726 safe - as long as it is done last! */
728 disassemble_data (abfd
);
732 display_file (filename
, target
)
736 bfd
*file
, *arfile
= (bfd
*) NULL
;
738 file
= bfd_openr (filename
, target
);
741 fprintf (stderr
, "%s: ", program_name
);
742 bfd_perror (filename
);
746 if (bfd_check_format (file
, bfd_archive
) == true)
748 printf ("In archive %s:\n", bfd_get_filename (file
));
751 bfd_error
= no_error
;
753 arfile
= bfd_openr_next_archived_file (file
, arfile
);
756 if (bfd_error
!= no_more_archived_files
)
758 fprintf (stderr
, "%s: ", program_name
);
759 bfd_perror (bfd_get_filename (file
));
764 display_bfd (arfile
);
765 /* Don't close the archive elements; we need them for next_archive */
774 /* Actually display the various requested regions */
782 bfd_size_type datasize
= 0;
785 for (section
= abfd
->sections
; section
!= NULL
; section
=
790 if (only
== (char *) NULL
||
791 strcmp (only
, section
->name
) == 0)
793 if (section
->flags
& SEC_HAS_CONTENTS
)
795 printf ("Contents of section %s:\n", section
->name
);
797 if (bfd_get_section_size_before_reloc (section
) == 0)
799 data
= (bfd_byte
*) malloc (bfd_get_section_size_before_reloc (section
));
800 if (data
== (bfd_byte
*) NULL
)
802 fprintf (stderr
, "%s: memory exhausted.\n", program_name
);
805 datasize
= bfd_get_section_size_before_reloc (section
);
808 bfd_get_section_contents (abfd
, section
, (PTR
) data
, 0, bfd_get_section_size_before_reloc (section
));
810 for (i
= 0; i
< bfd_get_section_size_before_reloc (section
); i
+= onaline
)
814 printf (" %04lx ", (unsigned long int) (i
+ section
->vma
));
815 for (j
= i
; j
< i
+ onaline
; j
++)
817 if (j
< bfd_get_section_size_before_reloc (section
))
818 printf ("%02x", (unsigned) (data
[j
]));
826 for (j
= i
; j
< i
+ onaline
; j
++)
828 if (j
>= bfd_get_section_size_before_reloc (section
))
831 printf ("%c", isprint (data
[j
]) ? data
[j
] : '.');
841 /* Should perhaps share code and display with nm? */
848 asymbol
**current
= syms
;
850 printf ("SYMBOL TABLE:\n");
852 for (count
= 0; count
< symcount
; count
++)
857 bfd
*cur_bfd
= bfd_asymbol_bfd(*current
);
860 bfd_print_symbol (cur_bfd
,
862 *current
, bfd_print_symbol_all
);
878 unsigned int relcount
;
881 for (a
= abfd
->sections
; a
!= (asection
*) NULL
; a
= a
->next
)
883 if (a
== &bfd_abs_section
)
885 if (a
== &bfd_und_section
)
887 if (bfd_is_com_section (a
))
890 printf ("RELOCATION RECORDS FOR [%s]:", a
->name
);
892 if (bfd_get_reloc_upper_bound (abfd
, a
) == 0)
894 printf (" (none)\n\n");
900 relpp
= (arelent
**) xmalloc (bfd_get_reloc_upper_bound (abfd
, a
));
901 /* Note that this must be done *before* we sort the syms table. */
902 relcount
= bfd_canonicalize_reloc (abfd
, a
, relpp
, syms
);
905 printf (" (none)\n\n");
910 printf ("OFFSET TYPE VALUE \n");
912 for (p
= relpp
; relcount
&& *p
!= (arelent
*) NULL
; p
++,
916 CONST
char *sym_name
;
918 /* CONST char *section_name = q->section == (asection *)NULL ? "*abs" :*/
919 /* q->section->name;*/
920 CONST
char *section_name
= (*(q
->sym_ptr_ptr
))->section
->name
;
922 if (q
->sym_ptr_ptr
&& *q
->sym_ptr_ptr
)
924 sym_name
= (*(q
->sym_ptr_ptr
))->name
;
932 printf_vma (q
->address
);
939 printf_vma (q
->address
);
940 printf (" %-8s [%s]",
947 printf_vma (q
->addend
);
960 #define _DUMMY_NAME_ "/dev/null"
962 #define _DUMMY_NAME_ "##dummy"
965 DEFUN (display_info_table
, (first
, last
),
966 int first AND
int last
)
969 extern bfd_target
*target_vector
[];
971 printf ("\n%12s", " ");
972 for (i
= first
; i
++ < last
&& target_vector
[i
];)
973 printf ("%s ", target_vector
[i
]->name
);
976 for (j
= (int) bfd_arch_obscure
+ 1; (int) j
< (int) bfd_arch_last
; j
++)
977 if (strcmp (bfd_printable_arch_mach (j
, 0), "UNKNOWN!") != 0)
979 printf ("%11s ", bfd_printable_arch_mach (j
, 0));
980 for (i
= first
; i
++ < last
&& target_vector
[i
];)
982 bfd_target
*p
= target_vector
[i
];
983 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
984 int l
= strlen (p
->name
);
986 bfd_set_format (abfd
, bfd_object
);
987 ok
= bfd_set_arch_mach (abfd
, j
, 0);
990 printf ("%s ", p
->name
);
994 printf ("%c", ok
? '*' : '-');
1003 DEFUN_VOID (display_info
)
1006 unsigned int i
, j
, columns
;
1007 extern bfd_target
*target_vector
[];
1008 extern char *getenv ();
1010 printf ("BFD header file version %s\n", BFD_VERSION
);
1011 for (i
= 0; target_vector
[i
]; i
++)
1013 bfd_target
*p
= target_vector
[i
];
1014 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
1015 bfd_set_format (abfd
, bfd_object
);
1016 printf ("%s\n (header %s, data %s)\n", p
->name
,
1017 p
->header_byteorder_big_p
? "big endian" : "little endian",
1018 p
->byteorder_big_p
? "big endian" : "little endian");
1019 for (j
= (int) bfd_arch_obscure
+ 1; j
< (int) bfd_arch_last
; j
++)
1020 if (bfd_set_arch_mach (abfd
, (enum bfd_architecture
) j
, 0))
1022 bfd_printable_arch_mach ((enum bfd_architecture
) j
, 0));
1025 if (colum
= getenv ("COLUMNS"))
1026 columns
= atoi (colum
);
1029 for (i
= 0; target_vector
[i
];)
1033 for (j
= 12; target_vector
[i
] && j
< columns
; i
++)
1034 j
+= strlen (target_vector
[i
]->name
) + 1;
1038 display_info_table (old
, i
);
1042 /** main and like trivia */
1050 extern char *optarg
;
1051 char *target
= default_target
;
1052 boolean seenflag
= false;
1055 program_name
= *argv
;
1057 while ((c
= getopt_long (argc
, argv
, "ib:m:Vdlfahrtxsj:", long_options
,
1071 with_line_numbers
= 1;
1077 dump_file_header
= true;
1084 dump_reloc_info
= 1;
1085 dump_file_header
= true;
1087 dump_section_headers
= 1;
1090 break; /* we've been given a long option */
1098 dump_section_contents
= 1;
1101 dump_reloc_info
= 1;
1107 dump_section_headers
= 1;
1118 printf ("%s version %s\n", program_name
, program_version
);
1120 if (seenflag
== false)
1130 display_file ("a.out", target
);
1132 for (; optind
< argc
;)
1133 display_file (argv
[optind
++], target
);