Date: Sat, 23 Feb 2008 01:47:37 GMT From: John Birrell <jb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 136006 for review Message-ID: <200802230147.m1N1lbLT096011@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=136006 Change 136006 by jb@jb_freebsd1 on 2008/02/23 01:46:57 We need to get the size of the type we're pointing to rather than the size of the pointer. Oops. Affected files ... .. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_cg.c#13 edit Differences ... ==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_cg.c#13 (text) ==== @@ -1339,13 +1339,15 @@ } static void -dt_cg_func_typeref(dt_node_t *dnp) +dt_cg_func_typeref(dtrace_hdl_t *dtp, dt_node_t *dnp) { + dtrace_typeinfo_t dtt; dt_node_t *addr = dnp->dn_args; dt_node_t *nelm = addr->dn_list; dt_node_t *strp = nelm->dn_list; dt_node_t *typs = strp->dn_list; char buf[DT_TYPE_NAMELEN]; + char *p; ctf_type_name(addr->dn_ctfp, addr->dn_type, buf, sizeof (buf)); @@ -1358,9 +1360,16 @@ * up with a more elegant implementation later. :-) */ free(strp->dn_string); + + if ((p = strchr(buf, '*')) != NULL) + *p = '\0'; + strp->dn_string = strdup(buf); - typs->dn_value = ctf_type_size(addr->dn_ctfp, addr->dn_type); + if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_EVERY, buf, &dtt) < 0) + return; + + typs->dn_value = ctf_type_size(dtt.dtt_ctfp, dtt.dtt_type); } static void @@ -1818,7 +1827,9 @@ } switch (dnp->dn_kind) { - case DT_NODE_FUNC: + case DT_NODE_FUNC: { + dtrace_hdl_t *dtp = yypcb->pcb_hdl; + if ((idp = dnp->dn_ident)->di_kind != DT_IDENT_FUNC) { dnerror(dnp, D_CG_EXPR, "%s %s( ) may not be " "called from a D expression (D program " @@ -1828,7 +1839,7 @@ switch (idp->di_id) { case DIF_SUBR_TYPEREF: - dt_cg_func_typeref(dnp); + dt_cg_func_typeref(dtp, dnp); break; default: @@ -1847,6 +1858,7 @@ dt_cg_node_alloc(DT_LBL_NONE, instr)); break; + } case DT_NODE_VAR: if (dnp->dn_ident->di_kind == DT_IDENT_XLSOU ||
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802230147.m1N1lbLT096011>