One spot was missed when we rejigged ctf_update into ctf_serialize and
allowed all operations on dynamic containers: ctf_type_reference of
slices. A dynamic slice's vlen state is stored in the dtu_slice member,
so fetch it from there.
libctf/
* ctf-types.c (ctf_type_reference): Add support for dynamic slices.
+2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-types.c (ctf_type_reference): Add support for dynamic slices.
+
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-create.c (ctf_serialize): Add cast.
/* Slices store their type in an unusual place. */
case CTF_K_SLICE:
{
+ ctf_dtdef_t *dtd;
const ctf_slice_t *sp;
- ssize_t increment;
- (void) ctf_get_ctt_size (fp, tp, NULL, &increment);
- sp = (const ctf_slice_t *) ((uintptr_t) tp + increment);
+
+ if ((dtd = ctf_dynamic_type (ofp, type)) == NULL)
+ {
+ ssize_t increment;
+
+ (void) ctf_get_ctt_size (fp, tp, NULL, &increment);
+ sp = (const ctf_slice_t *) ((uintptr_t) tp + increment);
+ }
+ else
+ sp = &dtd->dtd_u.dtu_slice;
+
return sp->cts_type;
}
default: