libctf: add ctf_type_kind_forwarded

This is just like ctf_type_kind, except that forwards get the
type of the thing being pointed to rather than CTF_K_FORWARD.

include/
	* ctf-api.h (ctf_type_kind_forwarded): New.
libctf/
	* ctf-types.c (ctf_type_kind_forwarded): New.
This commit is contained in:
Nick Alcock 2020-06-02 21:09:49 +01:00
parent 01d9317436
commit 9b15cbb789
5 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-api.h (ctf_type_kind_forwarded): New.
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-api.c (ctf_type_name_raw): New.

View File

@ -328,6 +328,7 @@ extern const char *ctf_type_name_raw (ctf_file_t *, ctf_id_t);
extern ssize_t ctf_type_size (ctf_file_t *, ctf_id_t);
extern ssize_t ctf_type_align (ctf_file_t *, ctf_id_t);
extern int ctf_type_kind (ctf_file_t *, ctf_id_t);
extern int ctf_type_kind_forwarded (ctf_file_t *, ctf_id_t);
extern ctf_id_t ctf_type_reference (ctf_file_t *, ctf_id_t);
extern ctf_id_t ctf_type_pointer (ctf_file_t *, ctf_id_t);
extern int ctf_type_encoding (ctf_file_t *, ctf_id_t, ctf_encoding_t *);

View File

@ -1,3 +1,7 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-types.c (ctf_type_kind_forwarded): New.
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-types.c (ctf_type_name_raw): New.

View File

@ -677,6 +677,26 @@ ctf_type_kind (ctf_file_t *fp, ctf_id_t type)
return kind;
}
/* Return the kind of this type, except, for forwards, return the kind of thing
this is a forward to. */
int
ctf_type_kind_forwarded (ctf_file_t *fp, ctf_id_t type)
{
int kind;
const ctf_type_t *tp;
if ((kind = ctf_type_kind (fp, type)) < 0)
return -1; /* errno is set for us. */
if (kind != CTF_K_FORWARD)
return kind;
if ((tp = ctf_lookup_by_id (&fp, type)) == NULL)
return -1; /* errno is set for us. */
return tp->ctt_type;
}
/* If the type is one that directly references another type (such as POINTER),
then return the ID of the type to which it refers. */

View File

@ -63,6 +63,7 @@ LIBCTF_1.0 {
ctf_type_size;
ctf_type_align;
ctf_type_kind;
ctf_type_kind_forwarded;
ctf_type_reference;
ctf_type_pointer;
ctf_type_encoding;