aboutsummaryrefslogtreecommitdiff
path: root/libctf/ctf-dump.c
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2021-03-25 16:32:46 +0000
committerNick Alcock <nick.alcock@oracle.com>2021-03-25 16:32:46 +0000
commit485170cdb1b634b550cf227f4642dcb38097b80c (patch)
tree3492de973db099fd12f05c3b288e698924fc4dfd /libctf/ctf-dump.c
parentba3c61fc5854059a71baee9cb2b951275bf3cb7b (diff)
downloadgdb-485170cdb1b634b550cf227f4642dcb38097b80c.zip
gdb-485170cdb1b634b550cf227f4642dcb38097b80c.tar.gz
gdb-485170cdb1b634b550cf227f4642dcb38097b80c.tar.bz2
libctf, dump: do not emit size or alignment if it would error
When we dump normal types, we emit their size and/or alignment: but size and alignment dumping can return errors if the type is part of a chain that terminates in a forward. Emitting 0xffffffff as a size or alignment is unhelpful, so simply skip emitting this info for any type for which size or alignment checks return an error, no matter what the error is. libctf/ChangeLog 2021-03-25 Nick Alcock <nick.alcock@oracle.com> * ctf-dump.c (ctf_dump_format_type): Don't emit size or alignment on error.
Diffstat (limited to 'libctf/ctf-dump.c')
-rw-r--r--libctf/ctf-dump.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libctf/ctf-dump.c b/libctf/ctf-dump.c
index 8540212..bd9b50d 100644
--- a/libctf/ctf-dump.c
+++ b/libctf/ctf-dump.c
@@ -100,6 +100,7 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag)
ctf_encoding_t ep;
ctf_arinfo_t ar;
int kind, unsliced_kind;
+ ssize_t size, align;
const char *nonroot_leader = "";
const char *nonroot_trailer = "";
const char *idstr = "";
@@ -180,10 +181,10 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag)
bit = NULL;
}
- if (kind != CTF_K_FUNCTION && kind != CTF_K_FORWARD)
+ size = ctf_type_size (fp, id);
+ if (kind != CTF_K_FUNCTION && size >= 0)
{
- if (asprintf (&bit, " (size 0x%lx)",
- (unsigned long) ctf_type_size (fp, id)) < 0)
+ if (asprintf (&bit, " (size 0x%lx)", (unsigned long int) size) < 0)
goto oom;
str = str_append (str, bit);
@@ -191,10 +192,11 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag)
bit = NULL;
}
- if (kind != CTF_K_FORWARD)
+ align = ctf_type_align (fp, id);
+ if (align >= 0)
{
if (asprintf (&bit, " (aligned at 0x%lx)",
- (unsigned long) ctf_type_align (fp, id)) < 0)
+ (unsigned long int) align) < 0)
goto oom;
str = str_append (str, bit);