Print this page
libdtrace: attempt to resolve FORWARD types to concrete types
*** 48,57 ****
--- 48,58 ----
dt_xlator_create_member(const char *name, ctf_id_t type, ulong_t off, void *arg)
{
dt_xlator_t *dxp = arg;
dtrace_hdl_t *dtp = dxp->dx_hdl;
dt_node_t *enp, *mnp;
+ ctf_file_t *ctfp;
if ((enp = dt_node_xalloc(dtp, DT_NODE_XLATOR)) == NULL)
return (dt_set_errno(dtp, EDT_NOMEM));
enp->dn_link = dxp->dx_nodes;
*** 69,79 ****
* the current member. These refs will be used by dt_cg.c and dt_as.c.
*/
enp->dn_op = DT_TOK_XLATE;
enp->dn_xlator = dxp;
enp->dn_xmember = mnp;
! dt_node_type_assign(enp, dxp->dx_dst_ctfp, type, B_FALSE);
/*
* For the member itself, we use a DT_NODE_MEMBER as usual with the
* appropriate name, output type, and member expression set to 'enp'.
*/
--- 70,87 ----
* the current member. These refs will be used by dt_cg.c and dt_as.c.
*/
enp->dn_op = DT_TOK_XLATE;
enp->dn_xlator = dxp;
enp->dn_xmember = mnp;
! /*
! * XXX: Is it ok for the CTF of the type to not be from the dst ctf?
! *
! * I suspect it's actually unnecessary, but I'm also unclear on
! * dynamic translators
! */
! dt_resolve_forward_decl(&ctfp, &type);
! dt_node_type_assign(enp, ctfp, type, B_FALSE);
/*
* For the member itself, we use a DT_NODE_MEMBER as usual with the
* appropriate name, output type, and member expression set to 'enp'.
*/