+2021-03-18 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-impl.h (ctf_dtdef_t) <dtd_u.dtu_arr>: Remove.
+ * ctf-create.c (ctf_add_array): Use the dtd_vlen, not dtu_arr.
+ (ctf_set_array): Likewise.
+ * ctf-serialize.c (ctf_emit_type_sect): Just copy the dtd_vlen.
+ * ctf-types.c (ctf_array_info): Just use the vlen.
+
2021-03-18 Nick Alcock <nick.alcock@oracle.com>
* ctf-impl.h (ctf_dtdef_t) <dtd_u.dtu_enc>: Remove.
ctf_add_array (ctf_dict_t *fp, uint32_t flag, const ctf_arinfo_t *arp)
{
ctf_dtdef_t *dtd;
+ ctf_array_t cta;
ctf_id_t type;
ctf_dict_t *tmp = fp;
}
if ((type = ctf_add_generic (fp, flag, NULL, CTF_K_ARRAY,
- 0, &dtd)) == CTF_ERR)
+ sizeof (ctf_array_t), &dtd)) == CTF_ERR)
return CTF_ERR; /* errno is set for us. */
+ memset (&cta, 0, sizeof (ctf_array_t));
+
dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_ARRAY, flag, 0);
dtd->dtd_data.ctt_size = 0;
- dtd->dtd_u.dtu_arr = *arp;
+ cta.cta_contents = (uint32_t) arp->ctr_contents;
+ cta.cta_index = (uint32_t) arp->ctr_index;
+ cta.cta_nelems = arp->ctr_nelems;
+ memcpy (dtd->dtd_vlen, &cta, sizeof (ctf_array_t));
return type;
}
ctf_set_array (ctf_dict_t *fp, ctf_id_t type, const ctf_arinfo_t *arp)
{
ctf_dtdef_t *dtd = ctf_dtd_lookup (fp, type);
+ ctf_array_t *vlen;
if (!(fp->ctf_flags & LCTF_RDWR))
return (ctf_set_errno (fp, ECTF_RDONLY));
|| LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info) != CTF_K_ARRAY)
return (ctf_set_errno (fp, ECTF_BADID));
+ vlen = (ctf_array_t *) dtd->dtd_vlen;
fp->ctf_flags |= LCTF_DIRTY;
- dtd->dtd_u.dtu_arr = *arp;
+ vlen->cta_contents = (uint32_t) arp->ctr_contents;
+ vlen->cta_index = (uint32_t) arp->ctr_index;
+ vlen->cta_nelems = arp->ctr_nelems;
return 0;
}
union
{
ctf_list_t dtu_members; /* struct, union, or enum */
- ctf_arinfo_t dtu_arr; /* array */
uint32_t *dtu_argv; /* function */
} dtd_u;
} ctf_dtdef_t;
uint32_t kind = LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info);
uint32_t vlen = LCTF_INFO_VLEN (fp, dtd->dtd_data.ctt_info);
- ctf_array_t cta;
size_t len;
ctf_stype_t *copied;
const char *name;
break;
case CTF_K_ARRAY:
- cta.cta_contents = (uint32_t) dtd->dtd_u.dtu_arr.ctr_contents;
- cta.cta_index = (uint32_t) dtd->dtd_u.dtu_arr.ctr_index;
- cta.cta_nelems = dtd->dtd_u.dtu_arr.ctr_nelems;
- memcpy (t, &cta, sizeof (cta));
- t += sizeof (cta);
+ memcpy (t, dtd->dtd_vlen, sizeof (struct ctf_array));
+ t += sizeof (struct ctf_array);
break;
case CTF_K_FUNCTION:
return (ctf_set_errno (ofp, ECTF_NOTARRAY));
if ((dtd = ctf_dynamic_type (ofp, type)) != NULL)
+ ap = (const ctf_array_t *) dtd->dtd_vlen;
+ else
{
- *arp = dtd->dtd_u.dtu_arr;
- return 0;
+ ctf_get_ctt_size (fp, tp, NULL, &increment);
+ ap = (const ctf_array_t *) ((uintptr_t) tp + increment);
}
-
- (void) ctf_get_ctt_size (fp, tp, NULL, &increment);
-
- ap = (const ctf_array_t *) ((uintptr_t) tp + increment);
arp->ctr_contents = ap->cta_contents;
arp->ctr_index = ap->cta_index;
arp->ctr_nelems = ap->cta_nelems;