aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/doc/ctf.options.texi5
-rw-r--r--binutils/objdump.c35
3 files changed, 33 insertions, 14 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 3fba18e5cee..50eeb5cf4d0 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 cf0528044a5..bb9946a8008 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 d5a45ae5cb9..ae50d871082 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));