+2021-01-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-open.c (init_types): Rip out code to check anonymous typedef
+ nodes.
+ * ctf-create.c (ctf_add_reftype): Likewise.
+ * ctf-lookup.c (refresh_pptrtab): Likewise.
+
2021-01-27 Nick Alcock <nick.alcock@oracle.com>
* ctf-impl.c (_libctf_nonnull_): Add parameters.
if (kind != CTF_K_POINTER)
return type;
- /* If we are adding a pointer, update the ptrtab, both the directly pointed-to
- type and (if an anonymous typedef node is being pointed at) the type that
- points at too. Note that ctf_typemax is at this point one higher than we
- want to check against, because it's just been incremented for the addition
- of this type. The pptrtab is lazily-updated as needed, so is not touched
- here. */
+ /* If we are adding a pointer, update the ptrtab, pointing at this type from
+ the type it points to. Note that ctf_typemax is at this point one higher
+ than we want to check against, because it's just been incremented for the
+ addition of this type. The pptrtab is lazily-updated as needed, so is not
+ touched here. */
uint32_t type_idx = LCTF_TYPE_TO_INDEX (fp, type);
uint32_t ref_idx = LCTF_TYPE_TO_INDEX (fp, ref);
if (LCTF_TYPE_ISCHILD (fp, ref) == child
&& ref_idx < fp->ctf_typemax)
- {
- fp->ctf_ptrtab[ref_idx] = type_idx;
-
- ctf_id_t refref_idx = LCTF_TYPE_TO_INDEX (fp, dtd->dtd_data.ctt_type);
-
- if (tmp == fp
- && (LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info) == CTF_K_TYPEDEF)
- && strcmp (ctf_strptr (fp, dtd->dtd_data.ctt_name), "") == 0
- && refref_idx < fp->ctf_typemax)
- fp->ctf_ptrtab[refref_idx] = type_idx;
- }
+ fp->ctf_ptrtab[ref_idx] = type_idx;
return type;
}
{
ctf_id_t type = LCTF_INDEX_TO_TYPE (fp, i, 1);
ctf_id_t reffed_type;
- int updated;
if (ctf_type_kind (fp, type) != CTF_K_POINTER)
continue;
/* Guard against references to invalid types. No need to consider
the CTF dict corrupt in this case: this pointer just can't be a
pointer to any type we know about. */
- if (idx <= pfp->ctf_typemax)
- {
- if (idx >= fp->ctf_pptrtab_len
- && grow_pptrtab (fp, pfp->ctf_ptrtab_len) < 0)
- return -1; /* errno is set for us. */
-
- fp->ctf_pptrtab[idx] = i;
- updated = 1;
- }
- }
- if (!updated)
- continue;
-
- /* If we updated the ptrtab entry for this type's referent, and it's an
- anonymous typedef node, we also want to chase down its referent and
- change that as well. */
-
- if ((ctf_type_kind (fp, reffed_type) == CTF_K_TYPEDEF)
- && strcmp (ctf_type_name_raw (fp, reffed_type), "") == 0)
- {
- uint32_t idx;
- idx = LCTF_TYPE_TO_INDEX (pfp, ctf_type_reference (fp, reffed_type));
-
if (idx <= pfp->ctf_typemax)
{
if (idx >= fp->ctf_pptrtab_len
unsigned long pop[CTF_K_MAX + 1] = { 0 };
const ctf_type_t *tp;
- uint32_t id, dst;
+ uint32_t id;
uint32_t *xp;
/* We determine whether the dict is a child or a parent based on the value of
ctf_dprintf ("%u base type names hashed\n",
ctf_hash_size (fp->ctf_names.ctn_readonly));
- /* Make an additional pass through the pointer table to find pointers that
- point to anonymous typedef nodes. If we find one, modify the pointer table
- so that the pointer is also known to point to the node that is referenced
- by the anonymous typedef node. */
-
- for (id = 1; id <= fp->ctf_typemax; id++)
- {
- if ((dst = fp->ctf_ptrtab[id]) != 0)
- {
- tp = LCTF_INDEX_TO_TYPEPTR (fp, id);
-
- if (LCTF_INFO_KIND (fp, tp->ctt_info) == CTF_K_TYPEDEF
- && strcmp (ctf_strptr (fp, tp->ctt_name), "") == 0
- && LCTF_TYPE_ISCHILD (fp, tp->ctt_type) == child
- && LCTF_TYPE_TO_INDEX (fp, tp->ctt_type) <= fp->ctf_typemax)
- fp->ctf_ptrtab[LCTF_TYPE_TO_INDEX (fp, tp->ctt_type)] = dst;
- }
- }
-
return 0;
}