diff options
Diffstat (limited to 'libctf')
-rw-r--r-- | libctf/ChangeLog | 4 | ||||
-rw-r--r-- | libctf/ctf-types.c | 20 | ||||
-rw-r--r-- | libctf/libctf.ver | 1 |
3 files changed, 25 insertions, 0 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 1754baf..949e9d0 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,9 @@ 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. (ctf_type_aname_raw): Reimplement accordingly. diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index ce3890c..d8f848c 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -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. */ diff --git a/libctf/libctf.ver b/libctf/libctf.ver index 30a0b08..b8c5133 100644 --- a/libctf/libctf.ver +++ b/libctf/libctf.ver @@ -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; |