Print this page
libdtrace: attempt to resolve FORWARD types to concrete types

*** 39,48 **** --- 39,49 ---- #include <assert.h> #include <errno.h> #include <dt_impl.h> #include <dt_grammar.h> + #include <dt_module.h> #include <dt_parser.h> #include <dt_provider.h> static void dt_cg_node(dt_node_t *, dt_irlist_t *, dt_regset_t *);
*** 68,89 **** * the actual definition and then call ctf_member_info on the result. */ static ctf_file_t * dt_cg_membinfo(ctf_file_t *fp, ctf_id_t type, const char *s, ctf_membinfo_t *mp) { ! while (ctf_type_kind(fp, type) == CTF_K_FORWARD) { ! char n[DT_TYPE_NAMELEN]; ! dtrace_typeinfo_t dtt; ! ! if (ctf_type_name(fp, type, n, sizeof (n)) == NULL || ! dt_type_lookup(n, &dtt) == -1 || ( ! dtt.dtt_ctfp == fp && dtt.dtt_type == type)) ! break; /* unable to improve our position */ ! ! fp = dtt.dtt_ctfp; ! type = ctf_type_resolve(fp, dtt.dtt_type); ! } if (ctf_member_info(fp, type, s, mp) == CTF_ERR) return (NULL); /* ctf_errno is set for us */ return (fp); --- 69,79 ---- * the actual definition and then call ctf_member_info on the result. */ static ctf_file_t * dt_cg_membinfo(ctf_file_t *fp, ctf_id_t type, const char *s, ctf_membinfo_t *mp) { ! dt_resolve_forward_decl(&fp, &type); if (ctf_member_info(fp, type, s, mp) == CTF_ERR) return (NULL); /* ctf_errno is set for us */ return (fp);