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.
This commit is contained in:
parent
6b88d7d70c
commit
0ac6231298
4 changed files with 32 additions and 0 deletions
|
@ -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. */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue