From owner-p4-projects@FreeBSD.ORG Sat Feb 23 01:47:38 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 36B9E16A408; Sat, 23 Feb 2008 01:47:38 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D7D1516A400 for ; Sat, 23 Feb 2008 01:47:37 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C9C5213C448 for ; Sat, 23 Feb 2008 01:47:37 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m1N1lbb4096014 for ; Sat, 23 Feb 2008 01:47:37 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m1N1lbLT096011 for perforce@freebsd.org; Sat, 23 Feb 2008 01:47:37 GMT (envelope-from jb@freebsd.org) Date: Sat, 23 Feb 2008 01:47:37 GMT Message-Id: <200802230147.m1N1lbLT096011@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 136006 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Feb 2008 01:47:38 -0000 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 ||