diff options
-rw-r--r-- | binutils/ChangeLog | 7 | ||||
-rw-r--r-- | binutils/doc/ctf.options.texi | 5 | ||||
-rw-r--r-- | binutils/objdump.c | 35 |
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)); |