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
;
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]\n\
93 [--syms] [--reloc] [--header] [--version] obj ...\n",
98 static struct option long_options
[]=
100 {"syms", no_argument
, &dump_symtab
, 1},
101 {"reloc", no_argument
, &dump_reloc_info
, 1},
102 {"header", no_argument
, &dump_section_headers
, 1},
103 {"version", no_argument
, &show_version
, 1},
104 #ifdef ELF_STAB_DISPLAY
105 {"stabs", no_argument
, &dump_stab_section_info
, 1},
107 {0, no_argument
, 0, 0}};
116 for (section
= abfd
->sections
;
117 section
!= (asection
*) NULL
;
118 section
= section
->next
)
123 if (section->flags & x) { printf("%s%s",comma,y); comma = ", "; }
126 printf ("SECTION %d [%s]\t: size %08x",
129 (unsigned) bfd_get_section_size_before_reloc (section
));
131 printf_vma (section
->vma
);
132 printf (" align 2**%u\n ",
133 section
->alignment_power
);
134 PF (SEC_ALLOC
, "ALLOC");
135 PF (SEC_CONSTRUCTOR
, "CONSTRUCTOR");
136 PF (SEC_CONSTRUCTOR_TEXT
, "CONSTRUCTOR TEXT");
137 PF (SEC_CONSTRUCTOR_DATA
, "CONSTRUCTOR DATA");
138 PF (SEC_CONSTRUCTOR_BSS
, "CONSTRUCTOR BSS");
139 PF (SEC_LOAD
, "LOAD");
140 PF (SEC_RELOC
, "RELOC");
141 PF (SEC_BALIGN
, "BALIGN");
142 PF (SEC_READONLY
, "READONLY");
143 PF (SEC_CODE
, "CODE");
144 PF (SEC_DATA
, "DATA");
152 DEFUN (slurp_symtab
, (abfd
),
155 asymbol
**sy
= (asymbol
**) NULL
;
157 if (!(bfd_get_file_flags (abfd
) & HAS_SYMS
))
159 (void) printf ("No symbols in \"%s\".\n", bfd_get_filename (abfd
));
163 storage
= get_symtab_upper_bound (abfd
);
166 sy
= (asymbol
**) malloc (storage
);
169 fprintf (stderr
, "%s: out of memory.\n", program_name
);
173 symcount
= bfd_canonicalize_symtab (abfd
, sy
);
177 /* Sort symbols into value order */
183 asymbol
*a
= *(asymbol
**)ap
;
184 asymbol
*b
= *(asymbol
**)bp
;
188 if (a
->name
== (char *) NULL
|| (a
->flags
& (BSF_DEBUGGING
)))
191 a_bfd
= bfd_asymbol_bfd(a
);
192 if (b
->name
== (char *) NULL
|| (b
->flags
& (BSF_DEBUGGING
)))
195 b_bfd
= bfd_asymbol_bfd(b
);
197 diff
= a_bfd
- b_bfd
;
202 diff
= a
->value
- b
->value
;
207 return a
->section
- b
->section
;
210 /* Print the supplied address symbolically if possible */
212 print_address (vma
, stream
)
216 /* Perform a binary search looking for the closest symbol to
217 the required value */
219 unsigned int min
= 0;
220 unsigned int max
= symcount
;
222 unsigned int thisplace
= 1;
223 unsigned int oldthisplace
;
229 fprintf_vma (stream
, vma
);
235 oldthisplace
= thisplace
;
236 thisplace
= (max
+ min
) / 2;
237 if (thisplace
== oldthisplace
)
239 vardiff
= syms
[thisplace
]->value
- vma
;
242 /* Check that the value isn't merely a coincidence.
243 (if not checked, we might print some undefined symbol
244 for the address 0 rather than "main", for example. */
245 || !(syms
[thisplace
]->flags
& (BSF_GLOBAL
|BSF_LOCAL
)))
258 /* Totally awesome! the exact right symbol */
259 CONST
char *match_name
= syms
[thisplace
]->name
;
260 int sym_len
= strlen (match_name
);
262 /* Avoid "filename.o" as a match */
264 && match_name
[sym_len
- 2] == '.'
265 && match_name
[sym_len
- 1] == 'o'
266 && thisplace
+ 1 < symcount
267 && syms
[thisplace
+ 1]->value
== vma
)
268 match_name
= syms
[thisplace
+ 1]->name
;
269 /* Totally awesome! the exact right symbol */
270 fprintf_vma (stream
, vma
);
271 fprintf (stream
, " (%s+)0000", syms
[thisplace
]->name
);
275 /* We've run out of places to look, print the symbol before this one
276 see if this or the symbol before describes this location the best */
280 if (syms
[thisplace
- 1]->value
- vma
>
281 syms
[thisplace
]->value
- vma
)
283 /* Previous symbol is in correct section and is closer */
288 fprintf_vma (stream
, vma
);
289 if (syms
[thisplace
]->value
> vma
)
291 fprintf (stream
, " (%s-)", syms
[thisplace
]->name
);
292 fprintf (stream
, "%04x", syms
[thisplace
]->value
- vma
);
296 fprintf (stream
, " (%s+)", syms
[thisplace
]->name
);
297 fprintf (stream
, "%04x", vma
- syms
[thisplace
]->value
);
303 disassemble_data (abfd
)
306 bfd_byte
*data
= NULL
;
307 bfd_arch_info_type
*info
;
308 bfd_size_type datasize
= 0;
310 unsigned int (*print
) ()= 0; /* Old style */
311 disassembler_ftype disassemble
= 0; /* New style */
312 unsigned int print_insn_a29k ();
313 unsigned int print_insn_i960 ();
314 unsigned int print_insn_sparc ();
315 unsigned int print_insn_h8300 ();
316 enum bfd_architecture a
;
317 struct disassemble_info disasm_info
;
320 CONST
char *prev_function
= "";
324 /* Replace symbol section relative values with abs values */
325 boolean done_dot
= false;
327 INIT_DISASSEMBLE_INFO(disasm_info
, stdout
);
329 for (i
= 0; i
< symcount
; i
++)
331 syms
[i
]->value
+= syms
[i
]->section
->vma
;
334 /* We keep a copy of the symbols in the original order */
335 syms2
= slurp_symtab (abfd
);
337 /* Sort the symbols into section and symbol order */
338 (void) qsort (syms
, symcount
, sizeof (asymbol
*), comp
);
340 /* Find the first useless symbol */
344 for (i
= 0; i
< symcount
; i
++)
346 if (syms
[i
]->name
== (char *) NULL
347 || (syms
[i
]->flags
& BSF_DEBUGGING
) != 0)
356 if (machine
!= (char *) NULL
)
358 info
= bfd_scan_arch (machine
);
361 fprintf (stderr
, "%s: Can't use supplied machine %s\n",
366 abfd
->arch_info
= info
;
369 /* See if we can disassemble using bfd */
371 if (abfd
->arch_info
->disassemble
)
373 print
= abfd
->arch_info
->disassemble
;
377 a
= bfd_get_arch (abfd
);
381 print
= print_insn_sparc
;
384 if (bfd_get_mach(abfd
) == bfd_mach_z8001
)
385 disassemble
= print_insn_z8001
;
387 disassemble
= print_insn_z8002
;
390 disassemble
= print_insn_i386
;
393 disassemble
= print_insn_h8500
;
396 disassemble
= print_insn_m68k
;
399 print
= print_insn_a29k
;
402 print
= print_insn_i960
;
405 if (abfd
->xvec
->byteorder_big_p
)
406 disassemble
= print_insn_big_mips
;
408 disassemble
= print_insn_little_mips
;
411 fprintf (stderr
, "%s: Can't disassemble for architecture %s\n",
413 bfd_printable_arch_mach (bfd_get_arch (abfd
), 0));
419 for (section
= abfd
->sections
;
420 section
!= (asection
*) NULL
;
421 section
= section
->next
)
424 if ((section
->flags
& SEC_LOAD
)
425 && (only
== (char *) NULL
|| strcmp (only
, section
->name
) == 0))
427 printf ("Disassembly of section %s:\n", section
->name
);
429 if (bfd_get_section_size_before_reloc (section
) == 0)
432 data
= (bfd_byte
*) malloc (bfd_get_section_size_before_reloc (section
));
434 if (data
== (bfd_byte
*) NULL
)
436 fprintf (stderr
, "%s: memory exhausted.\n", program_name
);
439 datasize
= bfd_get_section_size_before_reloc (section
);
441 bfd_get_section_contents (abfd
, section
, data
, 0, bfd_get_section_size_before_reloc (section
));
444 while (i
< bfd_get_section_size_before_reloc (section
))
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 print_address (section
->vma
+ i
, stdout
);
491 if (disassemble
) /* New style */
492 i
+= (*disassemble
)(section
->vma
+ i
,
496 i
+= print (section
->vma
+ i
,
507 #ifdef ELF_STAB_DISPLAY
509 /* Define a table of stab values and print-strings. We wish the initializer
510 could be a direct-mapped table, but instead we build one the first
513 #define STAB_STRING_LENGTH 6
515 char stab_name
[256][STAB_STRING_LENGTH
];
519 char string
[STAB_STRING_LENGTH
];
522 struct stab_print stab_print
[] = {
523 #define __define_stab(NAME, CODE, STRING) {CODE, STRING},
524 #include "aout/stab.def"
529 void dump_elf_stabs_1 ();
531 /* This is a kludge for dumping the stabs section from an ELF file that
532 uses Sun stabs encoding. It has to use some hooks into BFD because
533 string table sections are not normally visible to BFD callers. */
536 dump_elf_stabs (abfd
)
541 /* Initialize stab name array if first time. */
542 if (stab_name
[0][0] == 0)
544 /* Fill in numeric values for all possible strings. */
545 for (i
= 0; i
< 256; i
++)
547 sprintf (stab_name
[i
], "%d", i
);
549 for (i
= 0; stab_print
[i
].string
[0]; i
++)
550 strcpy (stab_name
[stab_print
[i
].value
], stab_print
[i
].string
);
553 if (0 != strncmp ("elf", abfd
->xvec
->name
, 3))
555 fprintf (stderr
, "%s: %s is not in ELF format.\n", program_name
,
560 dump_elf_stabs_1 (abfd
, ".stab", ".stabstr");
561 dump_elf_stabs_1 (abfd
, ".stab.excl", ".stab.exclstr");
562 dump_elf_stabs_1 (abfd
, ".stab.index", ".stab.indexstr");
566 dump_elf_stabs_1 (abfd
, name1
, name2
)
568 char *name1
; /* Section name of .stab */
569 char *name2
; /* Section name of its string section */
571 Elf_Internal_Shdr
*stab_hdr
, *stabstr_hdr
;
573 struct internal_nlist
*stabs
, *stabs_end
;
575 unsigned file_string_table_offset
, next_file_string_table_offset
;
577 stab_hdr
= bfd_elf_find_section (abfd
, name1
);
580 printf ("Contents of %s section: none.\n\n", name1
);
584 stabstr_hdr
= bfd_elf_find_section (abfd
, name2
);
585 if (0 == stabstr_hdr
)
587 fprintf (stderr
, "%s: %s has no %s section.\n", program_name
,
588 abfd
->filename
, name2
);
592 stabs
= (struct internal_nlist
*) xmalloc (stab_hdr
->sh_size
);
593 strtab
= (char *) xmalloc (stabstr_hdr
->sh_size
);
594 stabs_end
= (struct internal_nlist
*) (stab_hdr
->sh_size
+ (char *)stabs
);
596 if (bfd_seek (abfd
, stab_hdr
->sh_offset
, SEEK_SET
) < 0 ||
597 stab_hdr
->sh_size
!= bfd_read ((PTR
)stabs
, stab_hdr
->sh_size
, 1, abfd
))
599 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
605 if (bfd_seek (abfd
, stabstr_hdr
->sh_offset
, SEEK_SET
) < 0 ||
606 stabstr_hdr
->sh_size
!= bfd_read ((PTR
)strtab
, stabstr_hdr
->sh_size
,
609 fprintf (stderr
, "%s: reading %s section of %s failed.\n",
615 #define SWAP_SYMBOL(symp, abfd) \
617 (symp)->n_strx = bfd_h_get_32(abfd, \
618 (unsigned char *)&(symp)->n_strx); \
619 (symp)->n_desc = bfd_h_get_16 (abfd, \
620 (unsigned char *)&(symp)->n_desc); \
621 (symp)->n_value = bfd_h_get_32 (abfd, \
622 (unsigned char *)&(symp)->n_value); \
625 printf ("Contents of %s section:\n\n", name1
);
626 printf ("Symnum n_type n_othr n_desc n_value n_strx String\n");
628 file_string_table_offset
= 0;
629 next_file_string_table_offset
= 0;
631 /* Loop through all symbols and print them.
633 We start the index at -1 because there is a dummy symbol on
634 the front of Sun's stabs-in-elf sections. */
636 for (i
= -1; stabs
< stabs_end
; stabs
++, i
++)
638 SWAP_SYMBOL (stabs
, abfd
);
639 printf ("\n%-6d %-6s %-6d %-6d %08x %-6d", i
,
640 stab_name
[stabs
->n_type
],
641 stabs
->n_other
, stabs
->n_desc
, stabs
->n_value
,
644 /* Symbols with type == 0 (N_UNDF) specify the length of the
645 string table associated with this file. We use that info
646 to know how to relocate the *next* file's string table indices. */
648 if (stabs
->n_type
== N_UNDF
)
650 file_string_table_offset
= next_file_string_table_offset
;
651 next_file_string_table_offset
+= stabs
->n_value
;
654 /* Now, using the possibly updated string table offset, print the
655 string (if any) associated with this symbol. */
657 if ((stabs
->n_strx
+ file_string_table_offset
) < stabstr_hdr
->sh_size
)
658 printf (" %s", &strtab
[stabs
->n_strx
+ file_string_table_offset
]);
664 #endif /* ELF_STAB_DISPLAY */
670 if (!bfd_check_format (abfd
, bfd_object
))
672 fprintf (stderr
, "%s: %s not an object file\n", program_name
,
676 printf ("\n%s: file format %s\n", abfd
->filename
, abfd
->xvec
->name
);
678 print_arelt_descr (stdout
, abfd
, true);
680 if (dump_file_header
)
684 printf ("architecture: %s, ",
685 bfd_printable_arch_mach (bfd_get_arch (abfd
),
686 bfd_get_mach (abfd
)));
687 printf ("flags 0x%08x:\n", abfd
->flags
);
689 #define PF(x, y) if (abfd->flags & x) {printf("%s%s", comma, y); comma=", ";}
690 PF (HAS_RELOC
, "HAS_RELOC");
691 PF (EXEC_P
, "EXEC_P");
692 PF (HAS_LINENO
, "HAS_LINENO");
693 PF (HAS_DEBUG
, "HAS_DEBUG");
694 PF (HAS_SYMS
, "HAS_SYMS");
695 PF (HAS_LOCALS
, "HAS_LOCALS");
696 PF (DYNAMIC
, "DYNAMIC");
697 PF (WP_TEXT
, "WP_TEXT");
698 PF (D_PAGED
, "D_PAGED");
699 PF (BFD_IS_RELAXABLE
, "BFD_IS_RELAXABLE");
700 printf ("\nstart address 0x");
701 printf_vma (abfd
->start_address
);
705 if (dump_section_headers
)
707 if (dump_symtab
|| dump_reloc_info
|| disassemble
)
709 syms
= slurp_symtab (abfd
);
713 #ifdef ELF_STAB_DISPLAY
714 if (dump_stab_section_info
)
715 dump_elf_stabs (abfd
);
719 if (dump_section_contents
)
722 disassemble_data (abfd
);
726 display_file (filename
, target
)
730 bfd
*file
, *arfile
= (bfd
*) NULL
;
732 file
= bfd_openr (filename
, target
);
735 bfd_perror (filename
);
739 if (bfd_check_format (file
, bfd_archive
) == true)
741 printf ("In archive %s:\n", bfd_get_filename (file
));
744 bfd_error
= no_error
;
746 arfile
= bfd_openr_next_archived_file (file
, arfile
);
749 if (bfd_error
!= no_more_archived_files
)
750 bfd_perror (bfd_get_filename (file
));
754 display_bfd (arfile
);
755 /* Don't close the archive elements; we need them for next_archive */
764 /* Actually display the various requested regions */
772 bfd_size_type datasize
= 0;
775 for (section
= abfd
->sections
; section
!= NULL
; section
=
780 if (only
== (char *) NULL
||
781 strcmp (only
, section
->name
) == 0)
783 if (section
->flags
& SEC_HAS_CONTENTS
)
785 printf ("Contents of section %s:\n", section
->name
);
787 if (bfd_get_section_size_before_reloc (section
) == 0)
789 data
= (bfd_byte
*) malloc (bfd_get_section_size_before_reloc (section
));
790 if (data
== (bfd_byte
*) NULL
)
792 fprintf (stderr
, "%s: memory exhausted.\n", program_name
);
795 datasize
= bfd_get_section_size_before_reloc (section
);
798 bfd_get_section_contents (abfd
, section
, (PTR
) data
, 0, bfd_get_section_size_before_reloc (section
));
800 for (i
= 0; i
< bfd_get_section_size_before_reloc (section
); i
+= onaline
)
804 printf (" %04lx ", (unsigned long int) (i
+ section
->vma
));
805 for (j
= i
; j
< i
+ onaline
; j
++)
807 if (j
< bfd_get_section_size_before_reloc (section
))
808 printf ("%02x", (unsigned) (data
[j
]));
816 for (j
= i
; j
< i
+ onaline
; j
++)
818 if (j
>= bfd_get_section_size_before_reloc (section
))
821 printf ("%c", isprint (data
[j
]) ? data
[j
] : '.');
831 /* Should perhaps share code and display with nm? */
838 asymbol
**current
= syms
;
840 printf ("SYMBOL TABLE:\n");
842 for (count
= 0; count
< symcount
; count
++)
847 bfd
*cur_bfd
= bfd_asymbol_bfd(*current
);
850 bfd_print_symbol (cur_bfd
,
852 *current
, bfd_print_symbol_all
);
868 unsigned int relcount
;
871 for (a
= abfd
->sections
; a
!= (asection
*) NULL
; a
= a
->next
)
873 if (a
== &bfd_abs_section
)
875 if (a
== &bfd_und_section
)
877 if (bfd_is_com_section (a
))
880 printf ("RELOCATION RECORDS FOR [%s]:", a
->name
);
882 if (bfd_get_reloc_upper_bound (abfd
, a
) == 0)
884 printf (" (none)\n\n");
890 relpp
= (arelent
**) xmalloc (bfd_get_reloc_upper_bound (abfd
, a
));
891 relcount
= bfd_canonicalize_reloc (abfd
, a
, relpp
, syms
);
894 printf (" (none)\n\n");
899 printf ("OFFSET TYPE VALUE \n");
901 for (p
= relpp
; relcount
&& *p
!= (arelent
*) NULL
; p
++,
905 CONST
char *sym_name
;
907 /* CONST char *section_name = q->section == (asection *)NULL ? "*abs" :*/
908 /* q->section->name;*/
909 CONST
char *section_name
= (*(q
->sym_ptr_ptr
))->section
->name
;
911 if (q
->sym_ptr_ptr
&& *q
->sym_ptr_ptr
)
913 sym_name
= (*(q
->sym_ptr_ptr
))->name
;
921 printf_vma (q
->address
);
928 printf_vma (q
->address
);
929 printf (" %-8s [%s]",
936 printf_vma (q
->addend
);
949 #define _DUMMY_NAME_ "/dev/null"
951 #define _DUMMY_NAME_ "##dummy"
954 DEFUN (display_info_table
, (first
, last
),
955 int first AND
int last
)
958 extern bfd_target
*target_vector
[];
960 printf ("\n%12s", " ");
961 for (i
= first
; i
++ < last
&& target_vector
[i
];)
962 printf ("%s ", target_vector
[i
]->name
);
965 for (j
= (int) bfd_arch_obscure
+ 1; (int) j
< (int) bfd_arch_last
; j
++)
966 if (strcmp (bfd_printable_arch_mach (j
, 0), "UNKNOWN!") != 0)
968 printf ("%11s ", bfd_printable_arch_mach (j
, 0));
969 for (i
= first
; i
++ < last
&& target_vector
[i
];)
971 bfd_target
*p
= target_vector
[i
];
972 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
973 int l
= strlen (p
->name
);
975 bfd_set_format (abfd
, bfd_object
);
976 ok
= bfd_set_arch_mach (abfd
, j
, 0);
979 printf ("%s ", p
->name
);
983 printf ("%c", ok
? '*' : '-');
992 DEFUN_VOID (display_info
)
995 unsigned int i
, j
, columns
;
996 extern bfd_target
*target_vector
[];
997 extern char *getenv ();
999 printf ("BFD header file version %s\n", BFD_VERSION
);
1000 for (i
= 0; target_vector
[i
]; i
++)
1002 bfd_target
*p
= target_vector
[i
];
1003 bfd
*abfd
= bfd_openw (_DUMMY_NAME_
, p
->name
);
1004 bfd_set_format (abfd
, bfd_object
);
1005 printf ("%s\n (header %s, data %s)\n", p
->name
,
1006 p
->header_byteorder_big_p
? "big endian" : "little endian",
1007 p
->byteorder_big_p
? "big endian" : "little endian");
1008 for (j
= (int) bfd_arch_obscure
+ 1; j
< (int) bfd_arch_last
; j
++)
1009 if (bfd_set_arch_mach (abfd
, (enum bfd_architecture
) j
, 0))
1011 bfd_printable_arch_mach ((enum bfd_architecture
) j
, 0));
1014 if (colum
= getenv ("COLUMNS"))
1015 columns
= atoi (colum
);
1018 for (i
= 0; target_vector
[i
];)
1022 for (j
= 12; target_vector
[i
] && j
< columns
; i
++)
1023 j
+= strlen (target_vector
[i
]->name
) + 1;
1027 display_info_table (old
, i
);
1031 /** main and like trivia */
1039 extern char *optarg
;
1040 char *target
= default_target
;
1041 boolean seenflag
= false;
1045 program_name
= *argv
;
1047 while ((c
= getopt_long (argc
, argv
, "ib:m:Vdlfahrtxsj:", long_options
, &ind
))
1060 with_line_numbers
= 1;
1066 dump_file_header
= true;
1073 dump_reloc_info
= 1;
1074 dump_file_header
= true;
1076 dump_section_headers
= 1;
1079 break; /* we've been given a long option */
1087 dump_section_contents
= 1;
1090 dump_reloc_info
= 1;
1096 dump_section_headers
= 1;
1107 printf ("%s version %s\n", program_name
, program_version
);
1109 if (seenflag
== false)
1119 display_file ("a.out", target
);
1121 for (; optind
< argc
;)
1122 display_file (argv
[optind
++], target
);