summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog8
-rw-r--r--binutils/objdump.c54
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/testsuite/ld-elf/eh-frame-hdr.d2
4 files changed, 59 insertions, 9 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 5fdec0f9992..f460516a7e0 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
diff --git a/binutils/objdump.c b/binutils/objdump.c
index c03dfc5f25e..b9fecefca5a 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -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 **
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 37224a0bb6c..6e77d001536 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/testsuite/ld-elf/eh-frame-hdr.d b/ld/testsuite/ld-elf/eh-frame-hdr.d
index a76ac738662..08b12d865f2 100644
--- a/ld/testsuite/ld-elf/eh-frame-hdr.d
+++ b/ld/testsuite/ld-elf/eh-frame-hdr.d
@@ -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