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 ();
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
;
72 unsigned int symcount
= 0;
74 /* Forward declarations. */
77 display_file
PARAMS ((char *filename
, char *target
));
80 dump_data
PARAMS ((bfd
*abfd
));
83 dump_relocs
PARAMS ((bfd
*abfd
));
86 dump_symbols
PARAMS ((bfd
*abfd
));
92 "usage: %s [-ahifdrtxsl] [-m machine] [-j section_name] obj ...\n",
97 static struct option long_options
[]=
99 {"syms", no_argument
, &dump_symtab
, 1},
100 {"reloc", no_argument
, &dump_reloc_info
, 1},
101 {"header", no_argument
, &dump_section_headers
, 1},
102 {"version", no_argument
, &show_version
, 1},
103 #ifdef ELF_STAB_DISPLAY
104 {"stabs", no_argument
, &dump_stab_section_info
, 1},
106 {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
);
176 /* Sort symbols into value order */
182 asymbol
*a
= *(asymbol
**)ap
;
183 asymbol
*b
= *(asymbol
**)bp
;
187 if (a
->name
== (char *) NULL
|| (a
->flags
& (BSF_DEBUGGING
)))
190 a_bfd
= bfd_asymbol_bfd(a
);
191 if (b
->name
== (char *) NULL
|| (b
->flags
& (BSF_DEBUGGING
)))
194 b_bfd
= bfd_asymbol_bfd(b
);
196 diff
= a_bfd
- b_bfd
;
201 diff
= a
->value
- b
->value
;
206 return a
->section
- b
->section
;
209 /* Print the supplied address symbolically if possible */
211 print_address (vma
, stream
)
215 /* Perform a binary search looking for the closest symbol to
216 the required value */
218 unsigned int min
= 0;
219 unsigned int max
= symcount
;
221 unsigned int thisplace
= 1;
222 unsigned int oldthisplace
;
228 fprintf_vma (stream
, vma
);
234 oldthisplace
= thisplace
;
235 thisplace
= (max
+ min
) / 2;
236 if (thisplace
== oldthisplace
)
238 vardiff
= syms
[thisplace
]->value
- vma
;
241 /* Check that the value isn't merely a coincidence.
242 (if not checked, we might print some undefined symbol
243 for the address 0 rather than "main", for example. */
244 || !(syms
[thisplace
]->flags
& (BSF_GLOBAL
|BSF_LOCAL
)))
257 /* Totally awesome! the exact right symbol */
258 CONST
char *match_name
= syms
[thisplace
]->name
;
259 int sym_len
= strlen (match_name
);
261 /* Avoid "filename.o" as a match */
263 && match_name
[sym_len
- 2] == '.'
264 && match_name
[sym_len
- 1] == 'o'
265 && thisplace
+ 1 < symcount
266 && syms
[thisplace
+ 1]->value
== vma
)
267 match_name
= syms
[thisplace
+ 1]->name
;
268 /* Totally awesome! the exact right symbol */
269 fprintf_vma (stream
, vma
);
270 fprintf (stream
, " (%s+)0000", syms
[thisplace
]->name
);
274 /* We've run out of places to look, print the symbol before this one
275 see if this or the symbol before describes this location the best */
279 if (syms
[thisplace
- 1]->value
- vma
>
280 syms
[thisplace
]->value
- vma
)
282 /* Previous symbol is in correct section and is closer */
287 fprintf_vma (stream
, vma
);
288 if (syms
[thisplace
]->value
> vma
)
290 fprintf (stream
, " (%s-)", syms
[thisplace
]->name
);
291 fprintf (stream
, "%04x", syms
[thisplace
]->value
- vma
);
295 fprintf (stream
, " (%s+)", syms
[thisplace
]->name
);
296 fprintf (stream
, "%04x", vma
- syms
[thisplace
]->value
);
302 disassemble_data (abfd
)
305 bfd_byte
*data
= NULL
;
306 bfd_arch_info_type
*info
;
307 bfd_size_type datasize
= 0;
309 unsigned int (*print
) ()= 0; /* Old style */
310 disassembler_ftype disassemble
= 0; /* New style */
311 unsigned int print_insn_a29k ();
312 unsigned int print_insn_i960 ();
313 unsigned int print_insn_sparc ();
314 unsigned int print_insn_h8300 ();
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
);
328 for (i
= 0; i
< symcount
; i
++)
330 syms
[i
]->value
+= syms
[i
]->section
->vma
;
333 /* We keep a copy of the symbols in the original order */
334 syms2
= slurp_symtab (abfd
);
336 /* Sort the symbols into section and symbol order */
337 (void) qsort (syms
, symcount
, sizeof (asymbol
*), comp
);
339 /* Find the first useless symbol */
343 for (i
= 0; i
< symcount
; i
++)
345 if (syms
[i
]->name
== (char *) NULL
346 || (syms
[i
]->flags
& BSF_DEBUGGING
) != 0)
355 if (machine
!= (char *) NULL
)
357 info
= bfd_scan_arch (machine
);
360 fprintf (stderr
, "%s: Can't use supplied machine %s\n",
365 abfd
->arch_info
= info
;
368 /* See if we can disassemble using bfd */
370 if (abfd
->arch_info
->disassemble
)
372 print
= abfd
->arch_info
->disassemble
;
376 a
= bfd_get_arch (abfd
);
380 print
= print_insn_sparc
;
383 if (bfd_get_mach(abfd
) == bfd_mach_z8001
)
384 disassemble
= print_insn_z8001
;
386 disassemble
= print_insn_z8002
;
389 disassemble
= print_insn_i386
;
392 disassemble
= print_insn_m68k
;
395 print
= print_insn_a29k
;
398 print
= 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
));
440 while (i
< bfd_get_section_size_before_reloc (section
))
442 if (data
[i
] == 0 && data
[i
+ 1] == 0 && data
[i
+ 2] == 0 &&
445 if (done_dot
== false)
455 if (with_line_numbers
)
457 CONST
char *filename
;
458 CONST
char *functionname
;
461 if (bfd_find_nearest_line (abfd
,
469 if (functionname
&& *functionname
470 && strcmp(functionname
, prev_function
))
472 printf ("%s():\n", functionname
);
473 prev_function
= functionname
;
477 if (line
&& line
!= prevline
)
479 printf ("%s:%u\n", filename
, line
);
484 print_address (section
->vma
+ i
, stdout
);
487 if (disassemble
) /* New style */
488 i
+= (*disassemble
)(section
->vma
+ i
,
492 i
+= print (section
->vma
+ i
,
503 #ifdef ELF_STAB_DISPLAY
505 /* Define a table of stab values and print-strings. We wish the initializer
506 could be a direct-mapped table, but instead we build one the first
509 #define STAB_STRING_LENGTH 6
511 char stab_name
[256][STAB_STRING_LENGTH
];
515 char string
[STAB_STRING_LENGTH
];
518 struct stab_print stab_print
[] = {
519 #define __define_stab(NAME, CODE, STRING) {CODE, STRING},
520 #include "aout/stab.def"
525 void dump_elf_stabs_1 ();
527 /* This is a kludge for dumping the stabs section from an ELF file that
528 uses Sun stabs encoding. It has to use some hooks into BFD because
529 string table sections are not normally visible to BFD callers. */
532 dump_elf_stabs (abfd
)
537 /* Initialize stab name array if first time. */
538 if (stab_name
[0][0] == 0)
540 /* Fill in numeric values for all possible strings. */
541 for (i
= 0; i
< 256; i
++)
543 sprintf (stab_name
[i
], "%d", i
);
545 for (i
= 0; stab_print
[i
].string
[0]; i
++)
546 strcpy (stab_name
[stab_print
[i
].value
], stab_print
[i
].string
);
549 if (0 != strncmp ("elf", abfd
->xvec
->name
, 3))
551 fprintf (stderr
, "%s: %s is not in ELF format.\n", program_name
,
556 dump_elf_stabs_1 (abfd
, ".stab", ".stabstr");
557 dump_elf_stabs_1 (abfd
, ".stab.excl", ".stab.exclstr");
558 dump_elf_stabs_1 (abfd
, ".stab.index", ".stab.indexstr");
562 dump_elf_stabs_1 (abfd
, name1
, name2
)
564 char *name1
; /* Section name of .stab */
565 char *name2
; /* Section name of its string section */
567 Elf_Internal_Shdr
*stab_hdr
, *stabstr_hdr
;
569 struct internal_nlist
*stabs
, *stabs_end
;
571 unsigned file_string_table_offset
, next_file_string_table_offset
;
573 stab_hdr
= bfd_elf_find_section (abfd
, name1
);
576 printf ("Contents of %s section: none.\n\n", name1
);
580 stabstr_hdr
= bfd_elf_find_section (abfd
, name2
);
581 if (0 == stabstr_hdr
)
583 fprintf (stderr
, "%s: %s has no %s section.\n", program_name
,
584 abfd
->filename
, name2
);
588 stabs
= (struct internal_nlist
*) xmalloc (stab_hdr
->sh_size
);
589 strtab
= (char *) xmalloc (stabstr_hdr
->sh_size
);
590 stabs_end
= (struct internal_nlist
*) (stab_hdr
->sh_size
+ (char *)stabs
);
592 if (bfd_seek (abfd
, stab_hdr
->sh_offset
, SEEK_SET
) < 0 ||
593 stab_hdr
->sh_size
!= bfd_read ((PTR
)stabs
, stab_hdr
->sh_size
, 1, abfd
))
595 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
601 if (bfd_seek (abfd
, stabstr_hdr
->sh_offset
, SEEK_SET
) < 0 ||
602 stabstr_hdr
->sh_size
!= bfd_read ((PTR
)strtab
, stabstr_hdr
->sh_size
,
605 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
611 #define SWAP_SYMBOL(symp, abfd) \
613 (symp)->n_strx = bfd_h_get_32(abfd, \
614 (unsigned char *)&(symp)->n_strx); \
615 (symp)->n_desc = bfd_h_get_16 (abfd, \
616 (unsigned char *)&(symp)->n_desc); \
617 (symp)->n_value = bfd_h_get_32 (abfd, \
618 (unsigned char *)&(symp)->n_value); \
621 printf ("Contents of %s section:\n\n", name1
);
622 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
624 file_string_table_offset
= 0;
625 next_file_string_table_offset
= 0;
627 /* Loop through all symbols and print them.
629 We start the index at -1 because there is a dummy symbol on
630 the front of Sun's stabs-in-elf sections. */
632 for (i
= -1; stabs
< stabs_end
; stabs
++, i
++)
634 SWAP_SYMBOL (stabs
, abfd
);
635 printf ("\n%-6d %-6s %-6d %-6d %08x %-6d", i
,
636 stab_name
[stabs
->n_type
],
637 stabs
->n_other
, stabs
->n_desc
, stabs
->n_value
,
640 /* Symbols with type == 0 (N_UNDF) specify the length of the
641 string table associated with this file. We use that info
642 to know how to relocate the *next* file's string table indices. */
644 if (stabs
->n_type
== N_UNDF
)
646 file_string_table_offset
= next_file_string_table_offset
;
647 next_file_string_table_offset
+= stabs
->n_value
;
650 /* Now, using the possibly updated string table offset, print the
651 string (if any) associated with this symbol. */
653 if ((stabs
->n_strx
+ file_string_table_offset
) < stabstr_hdr
->sh_size
)
654 printf (" %s", &strtab
[stabs
->n_strx
+ file_string_table_offset
]);
660 #endif /* ELF_STAB_DISPLAY */
666 if (!bfd_check_format (abfd
, bfd_object
))
668 fprintf (stderr
, "%s: %s not an object file\n", program_name
,
672 printf ("\n%s: file format %s\n", abfd
->filename
, abfd
->xvec
->name
);
674 print_arelt_descr (stdout
, abfd
, true);
676 if (dump_file_header
)
680 printf ("architecture: %s, ",
681 bfd_printable_arch_mach (bfd_get_arch (abfd
),
682 bfd_get_mach (abfd
)));
683 printf ("flags 0x%08x:\n", abfd
->flags
);
685 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
686 PF (HAS_RELOC
, "HAS_RELOC");
687 PF (EXEC_P
, "EXEC_P");
688 PF (HAS_LINENO
, "HAS_LINENO");
689 PF (HAS_DEBUG
, "HAS_DEBUG");
690 PF (HAS_SYMS
, "HAS_SYMS");
691 PF (HAS_LOCALS
, "HAS_LOCALS");
692 PF (DYNAMIC
, "DYNAMIC");
693 PF (WP_TEXT
, "WP_TEXT");
694 PF (D_PAGED
, "D_PAGED");
695 PF (BFD_IS_RELAXABLE
, "BFD_IS_RELAXABLE");
696 printf ("\nstart address 0x");
697 printf_vma (abfd
->start_address
);
701 if (dump_section_headers
)
703 if (dump_symtab
|| dump_reloc_info
|| disassemble
)
705 syms
= slurp_symtab (abfd
);
709 #ifdef ELF_STAB_DISPLAY
710 if (dump_stab_section_info
)
711 dump_elf_stabs (abfd
);
715 if (dump_section_contents
)
718 disassemble_data (abfd
);
722 display_file (filename
, target
)
726 bfd
*file
, *arfile
= (bfd
*) NULL
;
728 file
= bfd_openr (filename
, target
);
731 bfd_perror (filename
);
735 if (bfd_check_format (file
, bfd_archive
) == true)
737 printf ("In archive %s:\n", bfd_get_filename (file
));
740 bfd_error
= no_error
;
742 arfile
= bfd_openr_next_archived_file (file
, arfile
);
745 if (bfd_error
!= no_more_archived_files
)
746 bfd_perror (bfd_get_filename (file
));
750 display_bfd (arfile
);
751 /* Don't close the archive elements; we need them for next_archive */
760 /* Actually display the various requested regions */
768 bfd_size_type datasize
= 0;
771 for (section
= abfd
->sections
; section
!= NULL
; section
=
776 if (only
== (char *) NULL
||
777 strcmp (only
, section
->name
) == 0)
779 if (section
->flags
& SEC_HAS_CONTENTS
)
781 printf ("Contents of section %s:\n", section
->name
);
783 if (bfd_get_section_size_before_reloc (section
) == 0)
785 data
= (bfd_byte
*) malloc (bfd_get_section_size_before_reloc (section
));
786 if (data
== (bfd_byte
*) NULL
)
788 fprintf (stderr
, "%s: memory exhausted.\n", program_name
);
791 datasize
= bfd_get_section_size_before_reloc (section
);
794 bfd_get_section_contents (abfd
, section
, (PTR
) data
, 0, bfd_get_section_size_before_reloc (section
));
796 for (i
= 0; i
< bfd_get_section_size_before_reloc (section
); i
+= onaline
)
800 printf (" %04lx ", (unsigned long int) (i
+ section
->vma
));
801 for (j
= i
; j
< i
+ onaline
; j
++)
803 if (j
< bfd_get_section_size_before_reloc (section
))
804 printf ("%02x", (unsigned) (data
[j
]));
812 for (j
= i
; j
< i
+ onaline
; j
++)
814 if (j
>= bfd_get_section_size_before_reloc (section
))
817 printf ("%c", isprint (data
[j
]) ? data
[j
] : '.');
827 /* Should perhaps share code and display with nm? */
834 asymbol
**current
= syms
;
836 printf ("SYMBOL TABLE:\n");
838 for (count
= 0; count
< symcount
; count
++)
843 bfd
*cur_bfd
= bfd_asymbol_bfd(*current
);
846 bfd_print_symbol (cur_bfd
,
848 *current
, bfd_print_symbol_all
);
864 unsigned int relcount
;
867 for (a
= abfd
->sections
; a
!= (asection
*) NULL
; a
= a
->next
)
869 if (a
== &bfd_abs_section
)
871 if (a
== &bfd_und_section
)
873 if (bfd_is_com_section (a
))
876 printf ("RELOCATION RECORDS FOR [%s]:", a
->name
);
878 if (bfd_get_reloc_upper_bound (abfd
, a
) == 0)
880 printf (" (none)\n\n");
886 relpp
= (arelent
**) xmalloc (bfd_get_reloc_upper_bound (abfd
, a
));
887 relcount
= bfd_canonicalize_reloc (abfd
, a
, relpp
, syms
);
890 printf (" (none)\n\n");
895 printf ("OFFSET TYPE VALUE \n");
897 for (p
= relpp
; relcount
&& *p
!= (arelent
*) NULL
; p
++,
901 CONST
char *sym_name
;
903 /* CONST char *section_name = q->section == (asection *)NULL ? "*abs" :*/
904 /* q->section->name;*/
905 CONST
char *section_name
= (*(q
->sym_ptr_ptr
))->section
->name
;
907 if (q
->sym_ptr_ptr
&& *q
->sym_ptr_ptr
)
909 sym_name
= (*(q
->sym_ptr_ptr
))->name
;
917 printf_vma (q
->address
);
924 printf_vma (q
->address
);
925 printf (" %-8s [%s]",
932 printf_vma (q
->addend
);
945 #define _DUMMY_NAME_ "/dev/null"
947 #define _DUMMY_NAME_ "##dummy"
950 DEFUN (display_info_table
, (first
, last
),
951 int first AND
int last
)
954 extern bfd_target
*target_vector
[];
956 printf ("\n%12s", " ");
957 for (i
= first
; i
++ < last
&& target_vector
[i
];)
958 printf ("%s ", target_vector
[i
]->name
);
961 for (j
= (int) bfd_arch_obscure
+ 1; (int) j
< (int) bfd_arch_last
; j
++)
962 if (strcmp (bfd_printable_arch_mach (j
, 0), "UNKNOWN!") != 0)
964 printf ("%11s ", bfd_printable_arch_mach (j
, 0));
965 for (i
= first
; i
++ < last
&& target_vector
[i
];)
967 bfd_target
*p
= target_vector
[i
];
968 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
969 int l
= strlen (p
->name
);
971 bfd_set_format (abfd
, bfd_object
);
972 ok
= bfd_set_arch_mach (abfd
, j
, 0);
975 printf ("%s ", p
->name
);
979 printf ("%c", ok
? '*' : '-');
988 DEFUN_VOID (display_info
)
991 unsigned int i
, j
, columns
;
992 extern bfd_target
*target_vector
[];
993 extern char *getenv ();
995 printf ("BFD header file version %s\n", BFD_VERSION
);
996 for (i
= 0; target_vector
[i
]; i
++)
998 bfd_target
*p
= target_vector
[i
];
999 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
1000 bfd_set_format (abfd
, bfd_object
);
1001 printf ("%s\n (header %s, data %s)\n", p
->name
,
1002 p
->header_byteorder_big_p
? "big endian" : "little endian",
1003 p
->byteorder_big_p
? "big endian" : "little endian");
1004 for (j
= (int) bfd_arch_obscure
+ 1; j
< (int) bfd_arch_last
; j
++)
1005 if (bfd_set_arch_mach (abfd
, (enum bfd_architecture
) j
, 0))
1007 bfd_printable_arch_mach ((enum bfd_architecture
) j
, 0));
1010 if (colum
= getenv ("COLUMNS"))
1011 columns
= atoi (colum
);
1014 for (i
= 0; target_vector
[i
];)
1018 for (j
= 12; target_vector
[i
] && j
< columns
; i
++)
1019 j
+= strlen (target_vector
[i
]->name
) + 1;
1023 display_info_table (old
, i
);
1027 /** main and like trivia */
1035 extern char *optarg
;
1036 char *target
= default_target
;
1037 boolean seenflag
= false;
1041 program_name
= *argv
;
1043 while ((c
= getopt_long (argc
, argv
, "ib:m:Vdlfahrtxsj:", long_options
, &ind
))
1056 with_line_numbers
= 1;
1062 dump_file_header
= true;
1069 dump_reloc_info
= 1;
1070 dump_file_header
= true;
1072 dump_section_headers
= 1;
1075 break; /* we've been given a long option */
1083 dump_section_contents
= 1;
1086 dump_reloc_info
= 1;
1092 dump_section_headers
= 1;
1103 printf ("%s version %s\n", program_name
, program_version
);
1105 if (seenflag
== false)
1115 display_file ("a.out", target
);
1117 for (; optind
< argc
;)
1118 display_file (argv
[optind
++], target
);