public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Jose E.Marchesi <jemarch@sourceware.org> To: bfd-cvs@sourceware.org, gdb-cvs@sourceware.org Subject: [binutils-gdb] libctf: Add iteration over non-root types Date: Thu, 03 Oct 2019 16:31:00 -0000 [thread overview] Message-ID: <20191003163144.77110.qmail@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0ac6231298cbc5a3a16bd4e98d85d98700b81dee commit 0ac6231298cbc5a3a16bd4e98d85d98700b81dee Author: Nick Alcock <nick.alcock@oracle.com> Date: Sat Jul 13 20:00:07 2019 +0100 libctf: Add iteration over non-root types The existing function ctf_type_iter lets you iterate over root-visible types (types you can look up by name). There is no way to iterate over non-root-visible types, which is troublesome because both the linker and dumper want to do that. So add a new function that can do it: the callback it takes accepts an extra parameter which indicates whether the type is root-visible or not. include/ * ctf-api.h (ctf_type_all_f): New. (ctf_type_iter_all): New. libctf/ * ctf_types.c (ctf_type_iter_all): New. Diff: --- include/ChangeLog | 5 +++++ include/ctf-api.h | 2 ++ libctf/ChangeLog | 4 ++++ libctf/ctf-types.c | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/include/ChangeLog b/include/ChangeLog index c2e8031..1fe3df4 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_type_all_f): New. + (ctf_type_iter_all): New. + 2019-07-11 Nick Alcock <nick.alcock@oracle.com> * ctf.h: Add object index and function index sections. Describe diff --git a/include/ctf-api.h b/include/ctf-api.h index 28256a3..fa74788 100644 --- a/include/ctf-api.h +++ b/include/ctf-api.h @@ -211,6 +211,7 @@ typedef int ctf_member_f (const char *name, ctf_id_t membtype, typedef int ctf_enum_f (const char *name, int val, void *arg); typedef int ctf_variable_f (const char *name, ctf_id_t type, void *arg); typedef int ctf_type_f (ctf_id_t type, void *arg); +typedef int ctf_type_all_f (ctf_id_t type, int flag, void *arg); typedef int ctf_label_f (const char *name, const ctf_lblinfo_t *info, void *arg); typedef int ctf_archive_member_f (ctf_file_t *fp, const char *name, void *arg); @@ -317,6 +318,7 @@ extern int ctf_label_info (ctf_file_t *, const char *, ctf_lblinfo_t *); extern int ctf_member_iter (ctf_file_t *, ctf_id_t, ctf_member_f *, void *); extern int ctf_enum_iter (ctf_file_t *, ctf_id_t, ctf_enum_f *, void *); extern int ctf_type_iter (ctf_file_t *, ctf_type_f *, void *); +extern int ctf_type_iter_all (ctf_file_t *, ctf_type_all_f *, void *); extern int ctf_label_iter (ctf_file_t *, ctf_label_f *, void *); extern int ctf_variable_iter (ctf_file_t *, ctf_variable_f *, void *); extern int ctf_archive_iter (const ctf_archive_t *, ctf_archive_member_f *, diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 64d644f..df52650 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,9 @@ 2019-07-13 Nick Alcock <nick.alcock@oracle.com> + * ctf_types.c (ctf_type_iter_all): New. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + * ctf-open.c (init_symtab): Check for overflow against the right section. (upgrade_header): Set cth_objtidxoff, cth_funcidxoff to zero-length. diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index 5068ff1..95c9c9a 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -144,6 +144,27 @@ ctf_type_iter (ctf_file_t *fp, ctf_type_f *func, void *arg) return 0; } +/* Iterate over every type in the given CTF container, user-visible or not. + We pass the type ID of each type to the specified callback function. */ + +int +ctf_type_iter_all (ctf_file_t *fp, ctf_type_all_f *func, void *arg) +{ + ctf_id_t id, max = fp->ctf_typemax; + int rc, child = (fp->ctf_flags & LCTF_CHILD); + + for (id = 1; id <= max; id++) + { + const ctf_type_t *tp = LCTF_INDEX_TO_TYPEPTR (fp, id); + if ((rc = func (LCTF_INDEX_TO_TYPE (fp, id, child), + LCTF_INFO_ISROOT(fp, tp->ctt_info) + ? CTF_ADD_ROOT : CTF_ADD_NONROOT, arg) != 0)) + return rc; + } + + return 0; +} + /* Iterate over every variable in the given CTF container, in arbitrary order. We pass the name of each variable to the specified callback function. */
reply other threads:[~2019-10-03 16:31 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191003163144.77110.qmail@sourceware.org \ --to=jemarch@sourceware.org \ --cc=bfd-cvs@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).