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:
parent
01d9317436
commit
9b15cbb789
5 changed files with 30 additions and 0 deletions
|
@ -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>
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
* ctf-api.c (ctf_type_name_raw): New.
|
* ctf-api.c (ctf_type_name_raw): New.
|
||||||
|
|
|
@ -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_size (ctf_file_t *, ctf_id_t);
|
||||||
extern ssize_t ctf_type_align (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 (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_reference (ctf_file_t *, ctf_id_t);
|
||||||
extern ctf_id_t ctf_type_pointer (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 *);
|
extern int ctf_type_encoding (ctf_file_t *, ctf_id_t, ctf_encoding_t *);
|
||||||
|
|
|
@ -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>
|
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
* ctf-types.c (ctf_type_name_raw): New.
|
* ctf-types.c (ctf_type_name_raw): New.
|
||||||
|
|
|
@ -677,6 +677,26 @@ ctf_type_kind (ctf_file_t *fp, ctf_id_t type)
|
||||||
return kind;
|
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),
|
/* If the type is one that directly references another type (such as POINTER),
|
||||||
then return the ID of the type to which it refers. */
|
then return the ID of the type to which it refers. */
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ LIBCTF_1.0 {
|
||||||
ctf_type_size;
|
ctf_type_size;
|
||||||
ctf_type_align;
|
ctf_type_align;
|
||||||
ctf_type_kind;
|
ctf_type_kind;
|
||||||
|
ctf_type_kind_forwarded;
|
||||||
ctf_type_reference;
|
ctf_type_reference;
|
||||||
ctf_type_pointer;
|
ctf_type_pointer;
|
||||||
ctf_type_encoding;
|
ctf_type_encoding;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue