mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-19 15:23:30 +08:00
objdump: Better objdump section headers in wide mode
When displaying the section headers table using objdump (-h), the column containing the section header name is currently fixed at 13 characters. A section name that is longer than 13 characters will overflow the column causing the table to become miss-aligned. In this commit I change the behaviour so that _in wide mode_ (-w -h) the section name column is dynamically resized to fit the longest section name we plan to display. In wide mode the column still retains a minimum width of 13 characters. In non-wide more the behaviour is completely unchanged. While I was changing the dump_headers function I have unified the two printf lines that handled the different address widths into a single printf, the address width is now passed into printf using the '*' field width format character. binutils/ChangeLog: * objdump.c (dump_section_header): Extract max section name length from data parameter, use this when formatting output. (find_longest_section_name): New function. (dump_headers): Calculate longest section name when in wide mode, reformat to unify printing of header line. ld/ChangeLog: * testsuite/ld-elf/eh-frame-hdr.d: Update expected results.
This commit is contained in:
parent
2132fe8503
commit
1737c64030
@ -1,3 +1,11 @@
|
||||
2017-01-20 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* objdump.c (dump_section_header): Extract max section name length
|
||||
from data parameter, use this when formatting output.
|
||||
(find_longest_section_name): New function.
|
||||
(dump_headers): Calculate longest section name when in wide mode,
|
||||
reformat to unify printing of header line.
|
||||
|
||||
2017-01-18 Bernhard Rosenkranzer <bero@lindev.ch>
|
||||
|
||||
PR 21059
|
||||
|
@ -438,11 +438,11 @@ free_only_list (void)
|
||||
|
||||
|
||||
static void
|
||||
dump_section_header (bfd *abfd, asection *section,
|
||||
void *ignored ATTRIBUTE_UNUSED)
|
||||
dump_section_header (bfd *abfd, asection *section, void *data)
|
||||
{
|
||||
char *comma = "";
|
||||
unsigned int opb = bfd_octets_per_byte (abfd);
|
||||
int longest_section_name = *((int *) data);
|
||||
|
||||
/* Ignore linker created section. See elfNN_ia64_object_p in
|
||||
bfd/elfxx-ia64.c. */
|
||||
@ -453,7 +453,7 @@ dump_section_header (bfd *abfd, asection *section,
|
||||
if (! process_section_p (section))
|
||||
return;
|
||||
|
||||
printf ("%3d %-13s %08lx ", section->index,
|
||||
printf ("%3d %-*s %08lx ", section->index, longest_section_name,
|
||||
bfd_get_section_name (abfd, section),
|
||||
(unsigned long) bfd_section_size (abfd, section) / opb);
|
||||
bfd_printf_vma (abfd, bfd_get_section_vma (abfd, section));
|
||||
@ -536,26 +536,64 @@ dump_section_header (bfd *abfd, asection *section,
|
||||
#undef PF
|
||||
}
|
||||
|
||||
/* Called on each SECTION in ABFD, update the int variable pointed to by
|
||||
DATA which contains the string length of the longest section name. */
|
||||
|
||||
static void
|
||||
find_longest_section_name (bfd *abfd, asection *section, void *data)
|
||||
{
|
||||
int *longest_so_far = (int *) data;
|
||||
const char *name;
|
||||
int len;
|
||||
|
||||
/* Ignore linker created section. */
|
||||
if (section->flags & SEC_LINKER_CREATED)
|
||||
return;
|
||||
|
||||
/* Skip sections that we are ignoring. */
|
||||
if (! process_section_p (section))
|
||||
return;
|
||||
|
||||
name = bfd_get_section_name (abfd, section);
|
||||
len = (int) strlen (name);
|
||||
if (len > *longest_so_far)
|
||||
*longest_so_far = len;
|
||||
}
|
||||
|
||||
static void
|
||||
dump_headers (bfd *abfd)
|
||||
{
|
||||
printf (_("Sections:\n"));
|
||||
/* The default width of 13 is just an arbitrary choice. */
|
||||
int max_section_name_length = 13;
|
||||
int bfd_vma_width;
|
||||
|
||||
#ifndef BFD64
|
||||
printf (_("Idx Name Size VMA LMA File off Algn"));
|
||||
bfd_vma_width = 10;
|
||||
#else
|
||||
/* With BFD64, non-ELF returns -1 and wants always 64 bit addresses. */
|
||||
if (bfd_get_arch_size (abfd) == 32)
|
||||
printf (_("Idx Name Size VMA LMA File off Algn"));
|
||||
bfd_vma_width = 10;
|
||||
else
|
||||
printf (_("Idx Name Size VMA LMA File off Algn"));
|
||||
bfd_vma_width = 18;
|
||||
#endif
|
||||
|
||||
printf (_("Sections:\n"));
|
||||
|
||||
if (wide_output)
|
||||
bfd_map_over_sections (abfd, find_longest_section_name,
|
||||
&max_section_name_length);
|
||||
|
||||
printf (_("Idx %-*s Size %-*s%-*sFile off Algn"),
|
||||
max_section_name_length, "Name",
|
||||
bfd_vma_width, "VMA",
|
||||
bfd_vma_width, "LMA");
|
||||
|
||||
if (wide_output)
|
||||
printf (_(" Flags"));
|
||||
printf ("\n");
|
||||
|
||||
bfd_map_over_sections (abfd, dump_section_header, NULL);
|
||||
bfd_map_over_sections (abfd, dump_section_header,
|
||||
&max_section_name_length);
|
||||
}
|
||||
|
||||
static asymbol **
|
||||
|
@ -1,3 +1,7 @@
|
||||
2017-01-20 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* testsuite/ld-elf/eh-frame-hdr.d: Update expected results.
|
||||
|
||||
2017-01-18 Maciej W. Rozycki <macro@imgtec.com>
|
||||
|
||||
PR ld/20995
|
||||
|
@ -5,5 +5,5 @@
|
||||
#xfail: avr*-*-* or1k*-*-elf or1k*-*-rtems* pru-*-* visium-*-*
|
||||
# These targets support CFI generation but not shared libraries.
|
||||
#...
|
||||
[0-9] .eh_frame_hdr 0*[12][048c] .*
|
||||
[0-9] .eh_frame_hdr +0*[12][048c] .*
|
||||
#pass
|
||||
|
Loading…
Reference in New Issue
Block a user