diff --git a/ctf_encoder.c b/ctf_encoder.c index 825cfa2..6f06c08 100644 --- a/ctf_encoder.c +++ b/ctf_encoder.c @@ -155,7 +155,8 @@ static int enumeration_type__encode(struct tag *self, uint16_t core_id, struct type *etype = tag__type(self); int64_t position; int ctf_id = ctf__add_enumeration_type(ctf, etype->namespace.name, - etype->nr_members, &position); + etype->size, etype->nr_members, + &position); if (ctf_id < 0 || tag__check_id_drift(self, core_id, ctf_id)) return -1; diff --git a/libctf.c b/libctf.c index e8fd2c8..10ca8d1 100644 --- a/libctf.c +++ b/libctf.c @@ -324,14 +324,14 @@ int ctf__add_function_type(struct ctf *self, uint16_t type, uint16_t nr_parms, return ++self->type_index; } -int ctf__add_enumeration_type(struct ctf *self, uint32_t name, +int ctf__add_enumeration_type(struct ctf *self, uint32_t name, uint16_t size, uint16_t nr_entries, int64_t *position) { struct ctf_short_type e; e.ctf_name = name; e.ctf_info = CTF_INFO_ENCODE(CTF_TYPE_KIND_ENUM, nr_entries, 0); - e.ctf_size = 0; + e.ctf_size = size; gobuffer__add(&self->types, &e, sizeof(e)); *position = gobuffer__allocate(&self->types, diff --git a/libctf.h b/libctf.h index 62c21b8..b70aea9 100644 --- a/libctf.h +++ b/libctf.h @@ -31,7 +31,7 @@ int ctf__add_array(struct ctf *self, uint16_t type, uint16_t index_type, void ctf__add_parameter(struct ctf *self, uint16_t type, int64_t *position); int ctf__add_function_type(struct ctf *self, uint16_t type, uint16_t nr_parms, bool varargs, int64_t *position); -int ctf__add_enumeration_type(struct ctf *self, uint32_t name, +int ctf__add_enumeration_type(struct ctf *self, uint32_t name, uint16_t size, uint16_t nr_entries, int64_t *position); void ctf__add_enumerator(struct ctf *self, uint32_t name, uint32_t value, int64_t *position);