* readelf.c (do_wide): New.
(options): Add --wide. (usage, parse_args): Likewise. (process_program_headers): Put each segment on a single line if --wide is given. (process_section_headers): Put each section on a single line if --wide is given. * doc/binutils.texi: Document it. * NEWS: Likewise.
This commit is contained in:
parent
09c1cc8828
commit
d974e25661
@ -1,3 +1,15 @@
|
||||
2001-09-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* readelf.c (do_wide): New.
|
||||
(options): Add --wide.
|
||||
(usage, parse_args): Likewise.
|
||||
(process_program_headers): Put each segment on a single line if
|
||||
--wide is given.
|
||||
(process_section_headers): Put each section on a single line if
|
||||
--wide is given.
|
||||
* doc/binutils.texi: Document it.
|
||||
* NEWS: Likewise.
|
||||
|
||||
2001-09-25 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* readelf.c (print_vma): Print 8 digits of low hex value.
|
||||
|
@ -1,5 +1,8 @@
|
||||
-*- text -*-
|
||||
|
||||
* readelf: Add --wide option to not break section header or segment listing
|
||||
lines to fit into 80 columns.
|
||||
|
||||
* strings: Add --encoding to display wide character strings. By Markus Kuhn.
|
||||
|
||||
* objcopy: Add --rename-section to change section names.
|
||||
|
@ -2837,6 +2837,7 @@ readelf [@option{-a}|@option{--all}]
|
||||
[@option{-w[liaprmf]}|@option{--debug-dump}[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames]]
|
||||
[@option{-histogram}]
|
||||
[@option{-v}|@option{--version}]
|
||||
[@option{-W}|@option{--wide}]
|
||||
[@option{-H}|@option{--help}]
|
||||
@var{elffile}@dots{}
|
||||
@c man end
|
||||
@ -2949,6 +2950,14 @@ of the symbol tables.
|
||||
@itemx --version
|
||||
Display the version number of readelf.
|
||||
|
||||
@item -W
|
||||
@itemx --wide
|
||||
Don't break output lines to fit into 80 columns. By default
|
||||
@command{readelf} breaks section header and segment listing lines for
|
||||
64-bit ELF files, so that they fit into 80 columns. This option causes
|
||||
@command{readelf} to print each section header resp. each segment one a
|
||||
single line, which is far more readable on terminals wider than 80 columns.
|
||||
|
||||
@item -H
|
||||
@itemx --help
|
||||
Display the command line options understood by @command{readelf}.
|
||||
|
@ -111,6 +111,7 @@ int do_using_dynamic;
|
||||
int do_header;
|
||||
int do_dump;
|
||||
int do_version;
|
||||
int do_wide;
|
||||
int do_histogram;
|
||||
int do_debugging;
|
||||
int do_debug_info;
|
||||
@ -2071,6 +2072,7 @@ struct option options [] =
|
||||
#endif
|
||||
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{"wide", no_argument, 0, 'W'},
|
||||
{"help", no_argument, 0, 'H'},
|
||||
{0, no_argument, 0, 0}
|
||||
};
|
||||
@ -2105,6 +2107,7 @@ usage ()
|
||||
#endif
|
||||
fprintf (stdout, _(" -I or --histogram Display histogram of bucket list lengths\n"));
|
||||
fprintf (stdout, _(" -v or --version Display the version number of readelf\n"));
|
||||
fprintf (stdout, _(" -W or --wide Don't split lines to fit into 80 columns\n"));
|
||||
fprintf (stdout, _(" -H or --help Display this information\n"));
|
||||
fprintf (stdout, _("Report bugs to %s\n"), REPORT_BUGS_TO);
|
||||
|
||||
@ -2153,7 +2156,7 @@ parse_args (argc, argv)
|
||||
usage ();
|
||||
|
||||
while ((c = getopt_long
|
||||
(argc, argv, "ersuahnldSDAIw::x:i:vV", options, NULL)) != EOF)
|
||||
(argc, argv, "ersuahnldSDAIw::x:i:vVW", options, NULL)) != EOF)
|
||||
{
|
||||
char * cp;
|
||||
int section;
|
||||
@ -2295,6 +2298,9 @@ parse_args (argc, argv)
|
||||
case 'V':
|
||||
do_version ++;
|
||||
break;
|
||||
case 'W':
|
||||
do_wide ++;
|
||||
break;
|
||||
default:
|
||||
oops:
|
||||
/* xgettext:c-format */
|
||||
@ -2578,6 +2584,9 @@ process_program_headers (file)
|
||||
if (is_32bit_elf)
|
||||
printf
|
||||
(_(" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"));
|
||||
else if (do_wide)
|
||||
printf
|
||||
(_(" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"));
|
||||
else
|
||||
{
|
||||
printf
|
||||
@ -2612,6 +2621,48 @@ process_program_headers (file)
|
||||
(segment->p_flags & PF_X ? 'E' : ' '));
|
||||
printf ("%#lx", (unsigned long) segment->p_align);
|
||||
}
|
||||
else if (do_wide)
|
||||
{
|
||||
if ((unsigned long) segment->p_offset == segment->p_offset)
|
||||
printf ("0x%6.6lx ", (unsigned long) segment->p_offset);
|
||||
else
|
||||
{
|
||||
print_vma (segment->p_offset, FULL_HEX);
|
||||
putchar (' ');
|
||||
}
|
||||
|
||||
print_vma (segment->p_vaddr, FULL_HEX);
|
||||
putchar (' ');
|
||||
print_vma (segment->p_paddr, FULL_HEX);
|
||||
putchar (' ');
|
||||
|
||||
if ((unsigned long) segment->p_filesz == segment->p_filesz)
|
||||
printf ("0x%6.6lx ", (unsigned long) segment->p_filesz);
|
||||
else
|
||||
{
|
||||
print_vma (segment->p_filesz, FULL_HEX);
|
||||
putchar (' ');
|
||||
}
|
||||
|
||||
if ((unsigned long) segment->p_memsz == segment->p_memsz)
|
||||
printf ("0x%6.6lx", (unsigned long) segment->p_memsz);
|
||||
else
|
||||
{
|
||||
print_vma (segment->p_offset, FULL_HEX);
|
||||
}
|
||||
|
||||
printf (" %c%c%c ",
|
||||
(segment->p_flags & PF_R ? 'R' : ' '),
|
||||
(segment->p_flags & PF_W ? 'W' : ' '),
|
||||
(segment->p_flags & PF_X ? 'E' : ' '));
|
||||
|
||||
if ((unsigned long) segment->p_align == segment->p_align)
|
||||
printf ("%#lx", (unsigned long) segment->p_align);
|
||||
else
|
||||
{
|
||||
print_vma (segment->p_align, PREFIX_HEX);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print_vma (segment->p_offset, FULL_HEX);
|
||||
@ -3050,6 +3101,9 @@ process_section_headers (file)
|
||||
if (is_32bit_elf)
|
||||
printf
|
||||
(_(" [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n"));
|
||||
else if (do_wide)
|
||||
printf
|
||||
(_(" [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n"));
|
||||
else
|
||||
{
|
||||
printf (_(" [Nr] Name Type Address Offset\n"));
|
||||
@ -3081,11 +3135,59 @@ process_section_headers (file)
|
||||
(unsigned long) section->sh_info,
|
||||
(unsigned long) section->sh_addralign);
|
||||
}
|
||||
else if (do_wide)
|
||||
{
|
||||
print_vma (section->sh_addr, LONG_HEX);
|
||||
|
||||
if ((long) section->sh_offset == section->sh_offset)
|
||||
printf (" %6.6lx", (unsigned long) section->sh_offset);
|
||||
else
|
||||
{
|
||||
putchar (' ');
|
||||
print_vma (section->sh_offset, LONG_HEX);
|
||||
}
|
||||
|
||||
if ((unsigned long) section->sh_size == section->sh_size)
|
||||
printf (" %6.6lx", (unsigned long) section->sh_size);
|
||||
else
|
||||
{
|
||||
putchar (' ');
|
||||
print_vma (section->sh_size, LONG_HEX);
|
||||
}
|
||||
|
||||
if ((unsigned long) section->sh_entsize == section->sh_entsize)
|
||||
printf (" %2.2lx", (unsigned long) section->sh_entsize);
|
||||
else
|
||||
{
|
||||
putchar (' ');
|
||||
print_vma (section->sh_entsize, LONG_HEX);
|
||||
}
|
||||
|
||||
printf (" %3s ", get_elf_section_flags (section->sh_flags));
|
||||
|
||||
printf ("%2ld %3lx ",
|
||||
(unsigned long) section->sh_link,
|
||||
(unsigned long) section->sh_info);
|
||||
|
||||
if ((unsigned long) section->sh_addralign == section->sh_addralign)
|
||||
printf ("%2ld\n", (unsigned long) section->sh_addralign);
|
||||
else
|
||||
{
|
||||
print_vma (section->sh_addralign, DEC);
|
||||
putchar ('\n');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
putchar (' ');
|
||||
print_vma (section->sh_addr, LONG_HEX);
|
||||
printf (" %8.8lx", (unsigned long) section->sh_offset);
|
||||
if ((long) section->sh_offset == section->sh_offset)
|
||||
printf (" %8.8lx", (unsigned long) section->sh_offset);
|
||||
else
|
||||
{
|
||||
printf (" ");
|
||||
print_vma (section->sh_offset, LONG_HEX);
|
||||
}
|
||||
printf ("\n ");
|
||||
print_vma (section->sh_size, LONG_HEX);
|
||||
printf (" ");
|
||||
|
Loading…
Reference in New Issue
Block a user