This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] objdump: get CTF parent importing right


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fd86991bc5f1d0ff256b396fbb41f0125ed00c17

commit fd86991bc5f1d0ff256b396fbb41f0125ed00c17
Author: Nick Alcock <nick.alcock@oracle.com>
Date:   Sat Aug 3 00:41:05 2019 +0100

    objdump: get CTF parent importing right
    
    The linker emits CTF into a single section named .ctf, which is a CTF
    archive where the default member (itself named ".ctf", or simply NULL)
    is the parent of all other members.  Teach objdump to look for this by
    default, rather than only trying to do it if a specific CTF parent
    section was specified.  (If no parent name is specified, we get the .ctf
    member from the same section as everything else, which matches what the
    linker generates.)
    
    binutils/
    	* objdump.c (dump_ctf): Use the default CTF archive member as the
    	parent even when no parent section is specified.
    	(dump_ctf_archive_member): Only import from the parent
    	if this is not the default ".ctf" member.

Diff:
---
 binutils/ChangeLog            |  7 +++++++
 binutils/doc/ctf.options.texi |  5 +++--
 binutils/objdump.c            | 35 +++++++++++++++++++++++------------
 3 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 3fba18e..50eeb5c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2019-08-03  Nick Alcock  <nick.alcock@oracle.com>
+
+	* objdump.c (dump_ctf): Use the default CTF archive member as the
+	parent even when no parent section is specified.
+	(dump_ctf_archive_member): Only import from the parent
+	if this is not the default ".ctf" member.
+
 2019-09-23  Nick Alcock  <nick.alcock@oracle.com>
 
 	* Makefile.am (LIBCTF): Mention the .la file.
diff --git a/binutils/doc/ctf.options.texi b/binutils/doc/ctf.options.texi
index cf05280..bb9946a 100644
--- a/binutils/doc/ctf.options.texi
+++ b/binutils/doc/ctf.options.texi
@@ -10,5 +10,6 @@ contain many subsections, all of which are displayed in order.
 
 @item --ctf-parent=@var{section}
 
-Specify the name of another section from which the CTF file can inherit
-types.
+Specify the name of another section from which the CTF dictionary can inherit
+types.  (If none is specified, we assume the CTF dictionary inherits types
+from the default-named member of the archive contained within this section.)
diff --git a/binutils/objdump.c b/binutils/objdump.c
index d5a45ae..ae50d87 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -3290,11 +3290,18 @@ dump_ctf_archive_member (ctf_file_t *ctf, const char *name, void *arg)
 
   /* Only print out the name of non-default-named archive members.
      The name .ctf appears everywhere, even for things that aren't
-     really archives, so printing it out is liable to be confusing.  */
+     really archives, so printing it out is liable to be confusing.
+
+     The parent, if there is one, is the default-owned archive member:
+     avoid importing it into itself.  (This does no harm, but looks
+     confusing.)  */
+
   if (strcmp (name, ".ctf") != 0)
-    printf (_("\nCTF archive member: %s:\n"), sanitize_string (name));
+    {
+      printf (_("\nCTF archive member: %s:\n"), sanitize_string (name));
+      ctf_import (ctf, parent);
+    }
 
-  ctf_import (ctf, parent);
   for (i = 0, thing = things; *thing[0]; thing++, i++)
     {
       ctf_dump_state_t *s = NULL;
@@ -3323,7 +3330,7 @@ dump_ctf_archive_member (ctf_file_t *ctf, const char *name, void *arg)
 static void
 dump_ctf (bfd *abfd, const char *sect_name, const char *parent_name)
 {
-  ctf_archive_t *ctfa, *parenta = NULL;
+  ctf_archive_t *ctfa, *parenta = NULL, *lookparent;
   bfd_byte *ctfdata, *parentdata = NULL;
   bfd_size_type ctfsize, parentsize;
   ctf_sect_t ctfsect;
@@ -3356,14 +3363,18 @@ dump_ctf (bfd *abfd, const char *sect_name, const char *parent_name)
 	  bfd_fatal (bfd_get_filename (abfd));
 	}
 
-      /* Assume that the applicable parent archive member is the default one.
-	 (This is what all known implementations are expected to do, if they
-	 put CTFs and their parents in archives together.)  */
-      if ((parent = ctf_arc_open_by_name (parenta, NULL, &err)) == NULL)
-	{
-	  non_fatal (_("CTF open failure: %s\n"), ctf_errmsg (err));
-	  bfd_fatal (bfd_get_filename (abfd));
-	}
+      lookparent = parenta;
+    }
+  else
+    lookparent = ctfa;
+
+  /* Assume that the applicable parent archive member is the default one.
+     (This is what all known implementations are expected to do, if they
+     put CTFs and their parents in archives together.)  */
+  if ((parent = ctf_arc_open_by_name (lookparent, NULL, &err)) == NULL)
+    {
+      non_fatal (_("CTF open failure: %s\n"), ctf_errmsg (err));
+      bfd_fatal (bfd_get_filename (abfd));
     }
 
   printf (_("Contents of CTF section %s:\n"), sanitize_string (sect_name));


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]