Lines Matching refs:dnp

403 dt_node_promote(dt_node_t *lp, dt_node_t *rp, dt_node_t *dnp)  in dt_node_promote()  argument
405 dt_type_promote(lp, rp, &dnp->dn_ctfp, &dnp->dn_type); in dt_node_promote()
406 dt_node_type_assign(dnp, dnp->dn_ctfp, dnp->dn_type, B_FALSE); in dt_node_promote()
407 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_node_promote()
411 dt_node_name(const dt_node_t *dnp, char *buf, size_t len) in dt_node_name() argument
420 switch (dnp->dn_kind) { in dt_node_name()
423 (u_longlong_t)dnp->dn_value); in dt_node_name()
426 s = strchr2esc(dnp->dn_string, strlen(dnp->dn_string)); in dt_node_name()
428 s != NULL ? s : dnp->dn_string); in dt_node_name()
432 (void) snprintf(buf, len, "identifier %s", dnp->dn_string); in dt_node_name()
438 switch (dnp->dn_ident->di_kind) { in dt_node_name()
449 dt_idkind_name(dnp->dn_ident->di_kind), in dt_node_name()
450 prefix, dnp->dn_ident->di_name, suffix); in dt_node_name()
453 dts = dnp->dn_ident->di_data; in dt_node_name()
459 dt_node_type_name(dnp, n1, sizeof (n1))); in dt_node_name()
464 (void) snprintf(buf, len, "operator %s", opstr(dnp->dn_op)); in dt_node_name()
468 if (dnp->dn_expr) in dt_node_name()
469 return (dt_node_name(dnp->dn_expr, buf, len)); in dt_node_name()
473 if (dnp->dn_desc->dtpd_id == 0) { in dt_node_name()
476 dnp->dn_desc->dtpd_provider, dnp->dn_desc->dtpd_mod, in dt_node_name()
477 dnp->dn_desc->dtpd_func, dnp->dn_desc->dtpd_name); in dt_node_name()
480 dnp->dn_desc->dtpd_id); in dt_node_name()
487 (void) snprintf(buf, len, "member %s", dnp->dn_membname); in dt_node_name()
491 dt_type_name(dnp->dn_xlator->dx_dst_ctfp, in dt_node_name()
492 dnp->dn_xlator->dx_dst_type, n1, sizeof (n1)), in dt_node_name()
493 dt_type_name(dnp->dn_xlator->dx_src_ctfp, in dt_node_name()
494 dnp->dn_xlator->dx_src_type, n2, sizeof (n2))); in dt_node_name()
500 (void) snprintf(buf, len, "node <%u>", dnp->dn_kind); in dt_node_name()
514 dt_node_t *dnp = dt_alloc(dtp, sizeof (dt_node_t)); in dt_node_xalloc() local
516 if (dnp == NULL) in dt_node_xalloc()
519 dnp->dn_ctfp = NULL; in dt_node_xalloc()
520 dnp->dn_type = CTF_ERR; in dt_node_xalloc()
521 dnp->dn_bitoff = 0; in dt_node_xalloc()
522 dnp->dn_kind = (uchar_t)kind; in dt_node_xalloc()
523 dnp->dn_flags = 0; in dt_node_xalloc()
524 dnp->dn_op = 0; in dt_node_xalloc()
525 dnp->dn_line = -1; in dt_node_xalloc()
526 dnp->dn_reg = -1; in dt_node_xalloc()
527 dnp->dn_attr = _dtrace_defattr; in dt_node_xalloc()
528 dnp->dn_list = NULL; in dt_node_xalloc()
529 dnp->dn_link = NULL; in dt_node_xalloc()
530 bzero(&dnp->dn_u, sizeof (dnp->dn_u)); in dt_node_xalloc()
532 return (dnp); in dt_node_xalloc()
544 dt_node_t *dnp = dt_node_xalloc(yypcb->pcb_hdl, kind); in dt_node_alloc() local
546 if (dnp == NULL) in dt_node_alloc()
549 dnp->dn_line = yylineno; in dt_node_alloc()
550 dnp->dn_link = yypcb->pcb_list; in dt_node_alloc()
551 yypcb->pcb_list = dnp; in dt_node_alloc()
553 return (dnp); in dt_node_alloc()
557 dt_node_free(dt_node_t *dnp) in dt_node_free() argument
559 uchar_t kind = dnp->dn_kind; in dt_node_free()
561 dnp->dn_kind = DT_NODE_FREE; in dt_node_free()
567 free(dnp->dn_string); in dt_node_free()
568 dnp->dn_string = NULL; in dt_node_free()
574 if (dnp->dn_ident != NULL) { in dt_node_free()
575 if (dnp->dn_ident->di_flags & DT_IDFLG_ORPHAN) in dt_node_free()
576 dt_ident_destroy(dnp->dn_ident); in dt_node_free()
577 dnp->dn_ident = NULL; in dt_node_free()
579 dt_node_list_free(&dnp->dn_args); in dt_node_free()
583 if (dnp->dn_child != NULL) { in dt_node_free()
584 dt_node_free(dnp->dn_child); in dt_node_free()
585 dnp->dn_child = NULL; in dt_node_free()
590 if (dnp->dn_expr != NULL) { in dt_node_free()
591 dt_node_free(dnp->dn_expr); in dt_node_free()
592 dnp->dn_expr = NULL; in dt_node_free()
596 if (dnp->dn_left != NULL) { in dt_node_free()
597 dt_node_free(dnp->dn_left); in dt_node_free()
598 dnp->dn_left = NULL; in dt_node_free()
600 if (dnp->dn_right != NULL) { in dt_node_free()
601 dt_node_free(dnp->dn_right); in dt_node_free()
602 dnp->dn_right = NULL; in dt_node_free()
608 if (dnp->dn_expr != NULL) { in dt_node_free()
609 dt_node_free(dnp->dn_expr); in dt_node_free()
610 dnp->dn_expr = NULL; in dt_node_free()
615 if (dnp->dn_aggfun != NULL) { in dt_node_free()
616 dt_node_free(dnp->dn_aggfun); in dt_node_free()
617 dnp->dn_aggfun = NULL; in dt_node_free()
619 dt_node_list_free(&dnp->dn_aggtup); in dt_node_free()
623 free(dnp->dn_spec); in dt_node_free()
624 dnp->dn_spec = NULL; in dt_node_free()
625 free(dnp->dn_desc); in dt_node_free()
626 dnp->dn_desc = NULL; in dt_node_free()
630 if (dnp->dn_pred != NULL) in dt_node_free()
631 dt_node_free(dnp->dn_pred); in dt_node_free()
632 if (dnp->dn_locals != NULL) in dt_node_free()
633 dt_idhash_destroy(dnp->dn_locals); in dt_node_free()
634 dt_node_list_free(&dnp->dn_pdescs); in dt_node_free()
635 dt_node_list_free(&dnp->dn_acts); in dt_node_free()
639 free(dnp->dn_membname); in dt_node_free()
640 dnp->dn_membname = NULL; in dt_node_free()
641 if (dnp->dn_membexpr != NULL) { in dt_node_free()
642 dt_node_free(dnp->dn_membexpr); in dt_node_free()
643 dnp->dn_membexpr = NULL; in dt_node_free()
648 dt_node_list_free(&dnp->dn_probes); in dt_node_free()
649 free(dnp->dn_provname); in dt_node_free()
650 dnp->dn_provname = NULL; in dt_node_free()
654 dt_node_list_free(&dnp->dn_list); in dt_node_free()
660 dt_node_attr_assign(dt_node_t *dnp, dtrace_attribute_t attr) in dt_node_attr_assign() argument
667 dnerror(dnp, D_ATTR_MIN, "attributes for %s (%s) are less than " in dt_node_attr_assign()
668 "predefined minimum\n", dt_node_name(dnp, s, sizeof (s)), in dt_node_attr_assign()
672 dnp->dn_attr = attr; in dt_node_attr_assign()
676 dt_node_type_assign_member(dt_node_t *dnp, ctf_file_t *fp, ctf_id_t type, in dt_node_type_assign_member() argument
683 dnp->dn_flags &= in dt_node_type_assign_member()
688 dnp->dn_flags |= DT_NF_BITFIELD; in dt_node_type_assign_member()
691 dnp->dn_flags |= DT_NF_SIGNED; in dt_node_type_assign_member()
696 dnp->dn_flags |= DT_NF_REF; in dt_node_type_assign_member()
702 dnp->dn_flags |= DT_NF_REF; in dt_node_type_assign_member()
705 dnp->dn_flags |= DT_NF_REF; in dt_node_type_assign_member()
708 dnp->dn_flags |= DT_NF_USERLAND; in dt_node_type_assign_member()
710 dnp->dn_flags |= DT_NF_COOKED; in dt_node_type_assign_member()
711 dnp->dn_ctfp = fp; in dt_node_type_assign_member()
712 dnp->dn_type = type; in dt_node_type_assign_member()
713 dnp->dn_bitoff = bitoff; in dt_node_type_assign_member()
718 dt_node_type_assign(dt_node_t *dnp, ctf_file_t *fp, ctf_id_t type, in dt_node_type_assign() argument
721 return (dt_node_type_assign_member(dnp, fp, type, user, 0)); in dt_node_type_assign()
735 dt_node_type_name(const dt_node_t *dnp, char *buf, size_t len) in dt_node_type_name() argument
737 if (dt_node_is_dynamic(dnp) && dnp->dn_ident != NULL) { in dt_node_type_name()
739 dt_idkind_name(dt_ident_resolve(dnp->dn_ident)->di_kind)); in dt_node_type_name()
743 if (dnp->dn_flags & DT_NF_USERLAND) { in dt_node_type_name()
746 (void) dt_type_name(dnp->dn_ctfp, dnp->dn_type, buf + n, len); in dt_node_type_name()
750 return (dt_type_name(dnp->dn_ctfp, dnp->dn_type, buf, len)); in dt_node_type_name()
754 dt_node_type_size(const dt_node_t *dnp) in dt_node_type_size() argument
759 if (dnp->dn_kind == DT_NODE_STRING) in dt_node_type_size()
760 return (strlen(dnp->dn_string) + 1); in dt_node_type_size()
762 if (dt_node_is_dynamic(dnp) && dnp->dn_ident != NULL) in dt_node_type_size()
763 return (dt_ident_size(dnp->dn_ident)); in dt_node_type_size()
765 base = ctf_type_resolve(dnp->dn_ctfp, dnp->dn_type); in dt_node_type_size()
767 if (ctf_type_kind(dnp->dn_ctfp, base) == CTF_K_FORWARD) in dt_node_type_size()
778 if (ctf_type_kind(dnp->dn_ctfp, base) == CTF_K_POINTER && in dt_node_type_size()
779 ctf_getmodel(dnp->dn_ctfp) == CTF_MODEL_ILP32 && in dt_node_type_size()
780 !(dnp->dn_flags & DT_NF_USERLAND) && in dt_node_type_size()
784 return (ctf_type_size(dnp->dn_ctfp, dnp->dn_type)); in dt_node_type_size()
793 dt_node_resolve(const dt_node_t *dnp, uint_t idkind) in dt_node_resolve() argument
797 switch (dnp->dn_kind) { in dt_node_resolve()
804 idp = dt_ident_resolve(dnp->dn_ident); in dt_node_resolve()
808 if (dt_node_is_dynamic(dnp)) { in dt_node_resolve()
809 idp = dt_ident_resolve(dnp->dn_ident); in dt_node_resolve()
817 dt_node_sizeof(const dt_node_t *dnp) in dt_node_sizeof() argument
832 if (dnp->dn_kind != DT_NODE_SYM) in dt_node_sizeof()
833 return (dt_node_type_size(dnp)); in dt_node_sizeof()
835 sip = dnp->dn_ident->di_data; in dt_node_sizeof()
845 dt_node_is_integer(const dt_node_t *dnp) in dt_node_is_integer() argument
847 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_integer()
852 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_integer()
854 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_integer()
865 dt_node_is_float(const dt_node_t *dnp) in dt_node_is_float() argument
867 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_float()
872 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_float()
874 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_float()
878 ctf_type_encoding(dnp->dn_ctfp, type, &e) == 0 && ( in dt_node_is_float()
884 dt_node_is_scalar(const dt_node_t *dnp) in dt_node_is_scalar() argument
886 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_scalar()
891 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_scalar()
893 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_scalar()
905 dt_node_is_arith(const dt_node_t *dnp) in dt_node_is_arith() argument
907 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_arith()
912 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_arith()
914 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_arith()
924 dt_node_is_vfptr(const dt_node_t *dnp) in dt_node_is_vfptr() argument
926 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_vfptr()
931 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_vfptr()
933 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_vfptr()
945 dt_node_is_dynamic(const dt_node_t *dnp) in dt_node_is_dynamic() argument
947 if (dnp->dn_kind == DT_NODE_VAR && in dt_node_is_dynamic()
948 (dnp->dn_ident->di_flags & DT_IDFLG_INLINE)) { in dt_node_is_dynamic()
949 const dt_idnode_t *inp = dnp->dn_ident->di_iarg; in dt_node_is_dynamic()
953 return (dnp->dn_ctfp == DT_DYN_CTFP(yypcb->pcb_hdl) && in dt_node_is_dynamic()
954 dnp->dn_type == DT_DYN_TYPE(yypcb->pcb_hdl)); in dt_node_is_dynamic()
958 dt_node_is_string(const dt_node_t *dnp) in dt_node_is_string() argument
960 return (dnp->dn_ctfp == DT_STR_CTFP(yypcb->pcb_hdl) && in dt_node_is_string()
961 dnp->dn_type == DT_STR_TYPE(yypcb->pcb_hdl)); in dt_node_is_string()
965 dt_node_is_stack(const dt_node_t *dnp) in dt_node_is_stack() argument
967 return (dnp->dn_ctfp == DT_STACK_CTFP(yypcb->pcb_hdl) && in dt_node_is_stack()
968 dnp->dn_type == DT_STACK_TYPE(yypcb->pcb_hdl)); in dt_node_is_stack()
972 dt_node_is_symaddr(const dt_node_t *dnp) in dt_node_is_symaddr() argument
974 return (dnp->dn_ctfp == DT_SYMADDR_CTFP(yypcb->pcb_hdl) && in dt_node_is_symaddr()
975 dnp->dn_type == DT_SYMADDR_TYPE(yypcb->pcb_hdl)); in dt_node_is_symaddr()
979 dt_node_is_usymaddr(const dt_node_t *dnp) in dt_node_is_usymaddr() argument
981 return (dnp->dn_ctfp == DT_USYMADDR_CTFP(yypcb->pcb_hdl) && in dt_node_is_usymaddr()
982 dnp->dn_type == DT_USYMADDR_TYPE(yypcb->pcb_hdl)); in dt_node_is_usymaddr()
986 dt_node_is_strcompat(const dt_node_t *dnp) in dt_node_is_strcompat() argument
988 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_strcompat()
994 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_strcompat()
996 base = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_strcompat()
1014 dt_node_is_pointer(const dt_node_t *dnp) in dt_node_is_pointer() argument
1016 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_pointer()
1019 assert(dnp->dn_flags & DT_NF_COOKED); in dt_node_is_pointer()
1021 if (dt_node_is_string(dnp)) in dt_node_is_pointer()
1024 kind = ctf_type_kind(fp, ctf_type_resolve(fp, dnp->dn_type)); in dt_node_is_pointer()
1029 dt_node_is_void(const dt_node_t *dnp) in dt_node_is_void() argument
1031 ctf_file_t *fp = dnp->dn_ctfp; in dt_node_is_void()
1035 if (dt_node_is_dynamic(dnp)) in dt_node_is_void()
1038 if (dt_node_is_stack(dnp)) in dt_node_is_void()
1041 if (dt_node_is_symaddr(dnp) || dt_node_is_usymaddr(dnp)) in dt_node_is_void()
1044 type = ctf_type_resolve(fp, dnp->dn_type); in dt_node_is_void()
1201 dt_node_is_posconst(const dt_node_t *dnp) in dt_node_is_posconst() argument
1203 return (dnp->dn_kind == DT_NODE_INT && dnp->dn_value != 0 && ( in dt_node_is_posconst()
1204 (dnp->dn_flags & DT_NF_SIGNED) == 0 || (int64_t)dnp->dn_value > 0)); in dt_node_is_posconst()
1208 dt_node_is_actfunc(const dt_node_t *dnp) in dt_node_is_actfunc() argument
1210 return (dnp->dn_kind == DT_NODE_FUNC && in dt_node_is_actfunc()
1211 dnp->dn_ident->di_kind == DT_IDENT_ACTFUNC); in dt_node_is_actfunc()
1247 dt_node_t *dnp = dt_node_alloc(DT_NODE_INT); in dt_node_int() local
1256 dnp->dn_op = DT_TOK_INT; in dt_node_int()
1257 dnp->dn_value = value; in dt_node_int()
1268 dt_node_type_assign(dnp, in dt_node_int()
1278 return (dt_node_op1(DT_TOK_IPOS, dnp)); in dt_node_int()
1280 return (dt_node_op1(DT_TOK_INEG, dnp)); in dt_node_int()
1282 return (dnp); in dt_node_int()
1297 dt_node_t *dnp; in dt_node_string() local
1302 dnp = dt_node_alloc(DT_NODE_STRING); in dt_node_string()
1303 dnp->dn_op = DT_TOK_STRING; in dt_node_string()
1304 dnp->dn_string = string; in dt_node_string()
1305 dt_node_type_assign(dnp, DT_STR_CTFP(dtp), DT_STR_TYPE(dtp), B_FALSE); in dt_node_string()
1307 return (dnp); in dt_node_string()
1314 dt_node_t *dnp; in dt_node_ident() local
1333 dnp = dt_node_alloc(DT_NODE_INT); in dt_node_ident()
1334 dnp->dn_op = DT_TOK_INT; in dt_node_ident()
1335 dnp->dn_value = inp->din_root->dn_value; in dt_node_ident()
1336 dt_node_type_propagate(inp->din_root, dnp); in dt_node_ident()
1338 return (dnp); in dt_node_ident()
1342 dnp = dt_node_alloc(DT_NODE_IDENT); in dt_node_ident()
1343 dnp->dn_op = name[0] == '@' ? DT_TOK_AGG : DT_TOK_IDENT; in dt_node_ident()
1344 dnp->dn_string = name; in dt_node_ident()
1346 return (dnp); in dt_node_ident()
1359 dt_node_t *dnp; in dt_node_type() local
1378 dnp = dt_node_alloc(DT_NODE_TYPE); in dt_node_type()
1379 dnp->dn_op = DT_TOK_IDENT; in dt_node_type()
1380 dnp->dn_string = name; in dt_node_type()
1382 dt_node_type_assign(dnp, dtt.dtt_ctfp, dtt.dtt_type, in dt_node_type()
1387 dt_node_attr_assign(dnp, _dtrace_defattr); in dt_node_type()
1389 dt_node_attr_assign(dnp, _dtrace_typattr); in dt_node_type()
1391 return (dnp); in dt_node_type()
1401 dt_node_t *dnp = dt_node_alloc(DT_NODE_TYPE); in dt_node_vatype() local
1403 dnp->dn_op = DT_TOK_IDENT; in dt_node_vatype()
1404 dnp->dn_ctfp = yypcb->pcb_hdl->dt_cdefs->dm_ctfp; in dt_node_vatype()
1405 dnp->dn_type = CTF_ERR; in dt_node_vatype()
1406 dnp->dn_bitoff = 0; in dt_node_vatype()
1407 dnp->dn_attr = _dtrace_defattr; in dt_node_vatype()
1409 return (dnp); in dt_node_vatype()
1657 dt_node_t *dnp = ddp->dd_node; in dt_node_decl() local
1660 for (; dnp != NULL; dnp = dnp->dn_list, argc++) { in dt_node_decl()
1666 if (ctf_type_cmp(dnp->dn_ctfp, dnp->dn_type, in dt_node_decl()
1676 dt_node_type_name(dnp, n1, sizeof (n1)), in dt_node_decl()
1763 dt_node_func(dt_node_t *dnp, dt_node_t *args) in dt_node_func() argument
1767 if (dnp->dn_kind != DT_NODE_IDENT) { in dt_node_func()
1772 idp = dt_idstack_lookup(&yypcb->pcb_globals, dnp->dn_string); in dt_node_func()
1776 "undefined function name: %s\n", dnp->dn_string); in dt_node_func()
1786 free(dnp->dn_string); in dt_node_func()
1787 dnp->dn_string = NULL; in dt_node_func()
1789 dnp->dn_kind = DT_NODE_FUNC; in dt_node_func()
1790 dnp->dn_flags &= ~DT_NF_COOKED; in dt_node_func()
1791 dnp->dn_ident = idp; in dt_node_func()
1792 dnp->dn_args = args; in dt_node_func()
1793 dnp->dn_list = NULL; in dt_node_func()
1795 return (dnp); in dt_node_func()
1851 dt_node_t *dnp; in dt_node_op1() local
1904 dnp = dt_node_alloc(DT_NODE_OP1); in dt_node_op1()
1906 dnp->dn_op = (ushort_t)op; in dt_node_op1()
1907 dnp->dn_child = cp; in dt_node_op1()
1909 return (dnp); in dt_node_op1()
1948 dt_node_t *dnp; in dt_node_op2() local
1967 dnp = dt_node_int(0); /* allocate new integer node for result */ in dt_node_op2()
1971 dnp->dn_value = l || r; in dt_node_op2()
1972 dt_node_type_assign(dnp, in dt_node_op2()
1976 dnp->dn_value = (l != 0) ^ (r != 0); in dt_node_op2()
1977 dt_node_type_assign(dnp, in dt_node_op2()
1981 dnp->dn_value = l && r; in dt_node_op2()
1982 dt_node_type_assign(dnp, in dt_node_op2()
1986 dnp->dn_value = l | r; in dt_node_op2()
1987 dt_node_promote(lp, rp, dnp); in dt_node_op2()
1990 dnp->dn_value = l ^ r; in dt_node_op2()
1991 dt_node_promote(lp, rp, dnp); in dt_node_op2()
1994 dnp->dn_value = l & r; in dt_node_op2()
1995 dt_node_promote(lp, rp, dnp); in dt_node_op2()
1998 dnp->dn_value = l == r; in dt_node_op2()
1999 dt_node_type_assign(dnp, in dt_node_op2()
2003 dnp->dn_value = l != r; in dt_node_op2()
2004 dt_node_type_assign(dnp, in dt_node_op2()
2008 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2009 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2010 dnp->dn_value = (intmax_t)l < (intmax_t)r; in dt_node_op2()
2012 dnp->dn_value = l < r; in dt_node_op2()
2013 dt_node_type_assign(dnp, in dt_node_op2()
2017 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2018 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2019 dnp->dn_value = (intmax_t)l <= (intmax_t)r; in dt_node_op2()
2021 dnp->dn_value = l <= r; in dt_node_op2()
2022 dt_node_type_assign(dnp, in dt_node_op2()
2026 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2027 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2028 dnp->dn_value = (intmax_t)l > (intmax_t)r; in dt_node_op2()
2030 dnp->dn_value = l > r; in dt_node_op2()
2031 dt_node_type_assign(dnp, in dt_node_op2()
2035 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2036 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2037 dnp->dn_value = (intmax_t)l >= (intmax_t)r; in dt_node_op2()
2039 dnp->dn_value = l >= r; in dt_node_op2()
2040 dt_node_type_assign(dnp, in dt_node_op2()
2044 dnp->dn_value = l << r; in dt_node_op2()
2045 dt_node_type_propagate(lp, dnp); in dt_node_op2()
2050 dnp->dn_value = l >> r; in dt_node_op2()
2051 dt_node_type_propagate(lp, dnp); in dt_node_op2()
2056 dnp->dn_value = l + r; in dt_node_op2()
2057 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2060 dnp->dn_value = l - r; in dt_node_op2()
2061 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2064 dnp->dn_value = l * r; in dt_node_op2()
2065 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2068 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2069 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2070 dnp->dn_value = (intmax_t)l / (intmax_t)r; in dt_node_op2()
2072 dnp->dn_value = l / r; in dt_node_op2()
2075 dt_node_promote(lp, rp, dnp); in dt_node_op2()
2076 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_op2()
2077 dnp->dn_value = (intmax_t)l % (intmax_t)r; in dt_node_op2()
2079 dnp->dn_value = l % r; in dt_node_op2()
2082 dt_node_free(dnp); in dt_node_op2()
2083 dnp = NULL; in dt_node_op2()
2086 if (dnp != NULL) { in dt_node_op2()
2089 return (dnp); in dt_node_op2()
2107 dnp = dt_node_alloc(DT_NODE_OP2); in dt_node_op2()
2109 dnp->dn_op = (ushort_t)op; in dt_node_op2()
2110 dnp->dn_left = lp; in dt_node_op2()
2111 dnp->dn_right = rp; in dt_node_op2()
2113 return (dnp); in dt_node_op2()
2119 dt_node_t *dnp; in dt_node_op3() local
2124 dnp = dt_node_alloc(DT_NODE_OP3); in dt_node_op3()
2125 dnp->dn_op = DT_TOK_QUESTION; in dt_node_op3()
2126 dnp->dn_expr = expr; in dt_node_op3()
2127 dnp->dn_left = lp; in dt_node_op3()
2128 dnp->dn_right = rp; in dt_node_op3()
2130 return (dnp); in dt_node_op3()
2136 dt_node_t *dnp; in dt_node_statement() local
2143 dnp = dt_node_alloc(DT_NODE_DFUNC); in dt_node_statement()
2145 dnp = dt_node_alloc(DT_NODE_DEXPR); in dt_node_statement()
2147 dnp->dn_expr = expr; in dt_node_statement()
2148 return (dnp); in dt_node_statement()
2154 dt_node_t *dnp = dt_node_alloc(DT_NODE_IF); in dt_node_if() local
2155 dnp->dn_conditional = pred; in dt_node_if()
2156 dnp->dn_body = acts; in dt_node_if()
2157 dnp->dn_alternate_body = else_acts; in dt_node_if()
2159 return (dnp); in dt_node_if()
2166 dt_node_t *dnp; in dt_node_pdesc_by_name() local
2171 dnp = dt_node_alloc(DT_NODE_PDESC); in dt_node_pdesc_by_name()
2172 dnp->dn_spec = spec; in dt_node_pdesc_by_name()
2173 dnp->dn_desc = malloc(sizeof (dtrace_probedesc_t)); in dt_node_pdesc_by_name()
2175 if (dnp->dn_desc == NULL) in dt_node_pdesc_by_name()
2178 if (dtrace_xstr2desc(dtp, yypcb->pcb_pspec, dnp->dn_spec, in dt_node_pdesc_by_name()
2179 yypcb->pcb_sargc, yypcb->pcb_sargv, dnp->dn_desc) != 0) { in dt_node_pdesc_by_name()
2181 dnp->dn_spec, dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_node_pdesc_by_name()
2184 free(dnp->dn_spec); in dt_node_pdesc_by_name()
2185 dnp->dn_spec = NULL; in dt_node_pdesc_by_name()
2187 return (dnp); in dt_node_pdesc_by_name()
2198 dt_node_t *dnp = dt_node_alloc(DT_NODE_PDESC); in dt_node_pdesc_by_id() local
2200 if ((dnp->dn_desc = malloc(sizeof (dtrace_probedesc_t))) == NULL) in dt_node_pdesc_by_id()
2214 if (dtrace_id2desc(dtp, (dtrace_id_t)id, dnp->dn_desc) != 0) { in dt_node_pdesc_by_id()
2219 return (dnp); in dt_node_pdesc_by_id()
2225 dt_node_t *dnp = dt_node_alloc(DT_NODE_CLAUSE); in dt_node_clause() local
2227 dnp->dn_pdescs = pdescs; in dt_node_clause()
2228 dnp->dn_pred = pred; in dt_node_clause()
2229 dnp->dn_acts = acts; in dt_node_clause()
2231 return (dnp); in dt_node_clause()
2246 dt_node_t *dnp; in dt_node_inline() local
2291 dnp = dt_node_alloc(DT_NODE_INLINE); in dt_node_inline()
2292 dt_node_type_assign(dnp, dtt.dtt_ctfp, dtt.dtt_type, B_FALSE); in dt_node_inline()
2293 dt_node_attr_assign(dnp, _dtrace_defattr); in dt_node_inline()
2295 if (dt_node_is_void(dnp)) { in dt_node_inline()
2300 if (ctf_type_kind(dnp->dn_ctfp, ctf_type_resolve( in dt_node_inline()
2301 dnp->dn_ctfp, dnp->dn_type)) == CTF_K_FORWARD) { in dt_node_inline()
2304 dt_node_type_name(dnp, n, sizeof (n)), dsp->ds_ident); in dt_node_inline()
2312 idp = dnp->dn_ident = dt_ident_create(dsp->ds_ident, in dt_node_inline()
2406 (void) dt_ident_cook(dnp, idp, &ddp->dd_node); in dt_node_inline()
2424 return (dt_node_cook(dnp, DT_IDFLG_REF)); in dt_node_inline()
2431 dt_node_t *dnp; in dt_node_member() local
2442 dnp = dt_node_alloc(DT_NODE_MEMBER); in dt_node_member()
2443 dnp->dn_membname = name; in dt_node_member()
2444 dnp->dn_membexpr = expr; in dt_node_member()
2447 dt_node_type_assign(dnp, dtt.dtt_ctfp, dtt.dtt_type, in dt_node_member()
2450 return (dnp); in dt_node_member()
2460 dt_node_t *dnp; in dt_node_xlator() local
2511 dnp = dt_node_alloc(DT_NODE_XLATOR); in dt_node_xlator()
2512 dnp->dn_xlator = dxp; in dt_node_xlator()
2513 dnp->dn_members = members; in dt_node_xlator()
2515 return (dt_node_cook(dnp, DT_IDFLG_REF)); in dt_node_xlator()
2523 dt_node_t *dnp; in dt_node_probe() local
2542 dnp = dt_node_alloc(DT_NODE_PROBE); in dt_node_probe()
2544 dnp->dn_ident = dt_ident_create(name, DT_IDENT_PROBE, in dt_node_probe()
2564 if (dnp->dn_ident == NULL || dt_probe_create(dtp, in dt_node_probe()
2565 dnp->dn_ident, protoc, nargs, nargc, xargs, xargc) == NULL) in dt_node_probe()
2568 return (dnp); in dt_node_probe()
2575 dt_node_t *dnp = dt_node_alloc(DT_NODE_PROVIDER); in dt_node_provider() local
2579 dnp->dn_provname = name; in dt_node_provider()
2580 dnp->dn_probes = probes; in dt_node_provider()
2583 dnerror(dnp, D_PROV_BADNAME, "provider name may not " in dt_node_provider()
2588 dnerror(dnp, D_PROV_BADNAME, "provider name may not exceed %d " in dt_node_provider()
2593 dnerror(dnp, D_PROV_BADNAME, "provider name may not " in dt_node_provider()
2603 if ((dnp->dn_provider = dt_provider_lookup(dtp, name)) != NULL) in dt_node_provider()
2604 dnp->dn_provred = B_TRUE; in dt_node_provider()
2605 else if ((dnp->dn_provider = dt_provider_create(dtp, name)) == NULL) in dt_node_provider()
2608 dnp->dn_provider->pv_flags |= DT_PROVIDER_INTF; in dt_node_provider()
2621 lnp->dn_link = dnp->dn_provider->pv_nodes; in dt_node_provider()
2622 dnp->dn_provider->pv_nodes = yypcb->pcb_list; in dt_node_provider()
2625 return (dnp); in dt_node_provider()
2631 dt_node_t *dnp = dt_node_alloc(DT_NODE_PROG); in dt_node_program() local
2632 dnp->dn_list = lnp; in dt_node_program()
2633 return (dnp); in dt_node_program()
2645 dt_xcook_ident(dt_node_t *dnp, dt_idhash_t *dhp, uint_t idkind, int create) in dt_xcook_ident() argument
2668 if ((name = strrchr(dnp->dn_string, '`')) != NULL) { in dt_xcook_ident()
2669 if (name > dnp->dn_string && name[-1] == '`') { in dt_xcook_ident()
2674 if (name == dnp->dn_string + uref) in dt_xcook_ident()
2677 scope = dnp->dn_string; in dt_xcook_ident()
2684 name = dnp->dn_string + 1; in dt_xcook_ident()
2688 name = dnp->dn_string; in dt_xcook_ident()
2725 attr = dt_ident_cook(dnp, idp, NULL); in dt_xcook_ident()
2727 dt_node_type_assign(dnp, in dt_xcook_ident()
2732 free(dnp->dn_string); in dt_xcook_ident()
2733 dnp->dn_string = NULL; in dt_xcook_ident()
2734 dnp->dn_kind = dnkind; in dt_xcook_ident()
2735 dnp->dn_ident = idp; in dt_xcook_ident()
2736 dnp->dn_flags |= DT_NF_LVALUE; in dt_xcook_ident()
2739 dnp->dn_flags |= DT_NF_WRITABLE; in dt_xcook_ident()
2741 dt_node_attr_assign(dnp, attr); in dt_xcook_ident()
2798 free(dnp->dn_string); in dt_xcook_ident()
2799 dnp->dn_string = NULL; in dt_xcook_ident()
2800 dnp->dn_kind = DT_NODE_SYM; in dt_xcook_ident()
2801 dnp->dn_ident = idp; in dt_xcook_ident()
2802 dnp->dn_flags |= DT_NF_LVALUE; in dt_xcook_ident()
2804 dt_node_type_assign(dnp, dtt.dtt_ctfp, dtt.dtt_type, in dt_xcook_ident()
2806 dt_node_attr_assign(dnp, _dtrace_symattr); in dt_xcook_ident()
2810 dnp->dn_flags |= DT_NF_USERLAND; in dt_xcook_ident()
2850 attr = dt_ident_cook(dnp, idp, NULL); in dt_xcook_ident()
2852 dt_node_type_assign(dnp, in dt_xcook_ident()
2857 free(dnp->dn_string); in dt_xcook_ident()
2858 dnp->dn_string = NULL; in dt_xcook_ident()
2859 dnp->dn_kind = dnkind; in dt_xcook_ident()
2860 dnp->dn_ident = idp; in dt_xcook_ident()
2861 dnp->dn_flags |= DT_NF_LVALUE | DT_NF_WRITABLE; in dt_xcook_ident()
2863 dt_node_attr_assign(dnp, attr); in dt_xcook_ident()
2867 dnp->dn_string, mark, name, in dt_xcook_ident()
2871 dnp->dn_string, dtrace_errmsg(dtp, dtrace_errno(dtp))); in dt_xcook_ident()
2876 dt_cook_ident(dt_node_t *dnp, uint_t idflags) in dt_cook_ident() argument
2880 if (dnp->dn_op == DT_TOK_AGG) in dt_cook_ident()
2881 dt_xcook_ident(dnp, dtp->dt_aggs, DT_IDENT_AGG, B_FALSE); in dt_cook_ident()
2883 dt_xcook_ident(dnp, dtp->dt_globals, DT_IDENT_SCALAR, B_FALSE); in dt_cook_ident()
2885 return (dt_node_cook(dnp, idflags)); in dt_cook_ident()
2895 dt_cook_var(dt_node_t *dnp, uint_t idflags) in dt_cook_var() argument
2897 dt_ident_t *idp = dnp->dn_ident; in dt_cook_var()
2900 dnerror(dnp, D_VAR_UNDEF, in dt_cook_var()
2907 dt_node_attr_assign(dnp, dt_ident_cook(dnp, idp, &dnp->dn_args)); in dt_cook_var()
2908 return (dnp); in dt_cook_var()
2913 dt_cook_func(dt_node_t *dnp, uint_t idflags) in dt_cook_func() argument
2915 dt_node_attr_assign(dnp, in dt_cook_func()
2916 dt_ident_cook(dnp, dnp->dn_ident, &dnp->dn_args)); in dt_cook_func()
2918 return (dnp); in dt_cook_func()
2922 dt_cook_op1(dt_node_t *dnp, uint_t idflags) in dt_cook_op1() argument
2925 dt_node_t *cp = dnp->dn_child; in dt_cook_op1()
2936 if (dnp->dn_op == DT_TOK_PREINC || dnp->dn_op == DT_TOK_POSTINC || in dt_cook_op1()
2937 dnp->dn_op == DT_TOK_PREDEC || dnp->dn_op == DT_TOK_POSTDEC) in dt_cook_op1()
2949 cp = dnp->dn_child = dt_node_cook(cp, 0); /* don't set idflags yet */ in dt_cook_op1()
2963 switch (dnp->dn_op) { in dt_cook_op1()
2972 dnp->dn_ident = &dxp->dx_souid; in dt_cook_op1()
2973 dt_node_type_assign(dnp, in dt_cook_op1()
2974 dnp->dn_ident->di_ctfp, dnp->dn_ident->di_type, in dt_cook_op1()
2995 dt_node_type_assign(dnp, cp->dn_ctfp, type, in dt_cook_op1()
3011 if (kind != CTF_K_ARRAY || dt_node_is_string(dnp)) in dt_cook_op1()
3012 dnp->dn_flags |= DT_NF_LVALUE; /* see K&R[A7.4.3] */ in dt_cook_op1()
3024 dnp->dn_flags |= DT_NF_WRITABLE; in dt_cook_op1()
3027 (kind == CTF_K_POINTER || (dnp->dn_flags & DT_NF_REF))) in dt_cook_op1()
3028 dnp->dn_flags |= DT_NF_USERLAND; in dt_cook_op1()
3035 "of arithmetic type\n", opstr(dnp->dn_op)); in dt_cook_op1()
3037 dt_node_type_propagate(cp, dnp); /* see K&R[A7.4.4-6] */ in dt_cook_op1()
3043 "integral type\n", opstr(dnp->dn_op)); in dt_cook_op1()
3045 dt_node_type_propagate(cp, dnp); /* see K&R[A7.4.4-6] */ in dt_cook_op1()
3051 "of scalar type\n", opstr(dnp->dn_op)); in dt_cook_op1()
3053 dt_node_type_assign(dnp, DT_INT_CTFP(dtp), DT_INT_TYPE(dtp), in dt_cook_op1()
3087 dt_node_type_assign(dnp, dtt.dtt_ctfp, dtt.dtt_type, in dt_cook_op1()
3102 dt_node_type_assign(dnp, dtp->dt_ddefs->dm_ctfp, in dt_cook_op1()
3114 dt_node_type_assign(dnp, DT_STR_CTFP(dtp), DT_STR_TYPE(dtp), in dt_cook_op1()
3124 "scalar type\n", opstr(dnp->dn_op)); in dt_cook_op1()
3129 "of known size\n", opstr(dnp->dn_op)); in dt_cook_op1()
3134 "lvalue as an operand\n", opstr(dnp->dn_op)); in dt_cook_op1()
3139 "to a writable variable\n", opstr(dnp->dn_op)); in dt_cook_op1()
3142 dt_node_type_propagate(cp, dnp); /* see K&R[A7.4.1] */ in dt_cook_op1()
3146 xyerror(D_UNKNOWN, "invalid unary op %s\n", opstr(dnp->dn_op)); in dt_cook_op1()
3149 dt_node_attr_assign(dnp, cp->dn_attr); in dt_cook_op1()
3150 return (dnp); in dt_cook_op1()
3154 dt_assign_common(dt_node_t *dnp) in dt_assign_common() argument
3156 dt_node_t *lp = dnp->dn_left; in dt_assign_common()
3157 dt_node_t *rp = dnp->dn_right; in dt_assign_common()
3158 int op = dnp->dn_op; in dt_assign_common()
3174 dt_node_type_propagate(lp, dnp); /* see K&R[A7.17] */ in dt_assign_common()
3175 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_assign_common()
3179 dt_cook_op2(dt_node_t *dnp, uint_t idflags) in dt_cook_op2() argument
3182 dt_node_t *lp = dnp->dn_left; in dt_cook_op2()
3183 dt_node_t *rp = dnp->dn_right; in dt_cook_op2()
3184 int op = dnp->dn_op; in dt_cook_op2()
3223 lp = dnp->dn_left = dt_node_cook(lp, 0); in dt_cook_op2()
3250 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3251 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3258 dt_node_promote(lp, rp, dnp); /* see K&R[A7.11-13] */ in dt_cook_op2()
3263 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3264 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3271 dt_node_type_propagate(lp, dnp); /* see K&R[A7.8] */ in dt_cook_op2()
3272 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3276 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3277 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3284 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */ in dt_cook_op2()
3289 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3290 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3297 dt_node_promote(lp, rp, dnp); /* see K&R[A7.6] */ in dt_cook_op2()
3303 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3304 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3311 dt_node_type_assign(dnp, DT_INT_CTFP(dtp), DT_INT_TYPE(dtp), in dt_cook_op2()
3313 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3330 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3361 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3389 dt_node_type_assign(dnp, DT_INT_CTFP(dtp), DT_INT_TYPE(dtp), in dt_cook_op2()
3391 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3404 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3405 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3438 dt_node_type_assign(dnp, ctfp, type, B_FALSE); in dt_cook_op2()
3439 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3442 dnp->dn_flags |= DT_NF_USERLAND; in dt_cook_op2()
3457 lp = dnp->dn_left = in dt_cook_op2()
3460 rp = dnp->dn_right = in dt_cook_op2()
3476 lp = dnp->dn_left = in dt_cook_op2()
3479 rp = dnp->dn_right = in dt_cook_op2()
3505 lp = dnp->dn_left = dt_node_cook(lp, 0); /* don't set mod yet */ in dt_cook_op2()
3506 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3552 dnp->dn_left = dnp->dn_right = NULL; in dt_cook_op2()
3553 dt_node_free(dnp); in dt_cook_op2()
3628 lp = dnp->dn_left = in dt_cook_op2()
3631 rp = dnp->dn_right = in dt_cook_op2()
3662 dt_assign_common(dnp); in dt_cook_op2()
3689 dnp->dn_right = dnp->dn_left; in dt_cook_op2()
3690 dt_node_free(dnp); in dt_cook_op2()
3696 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3782 dt_node_type_assign_member(dnp, ctfp, m.ctm_type, B_FALSE, in dt_cook_op2()
3784 dt_node_attr_assign(dnp, lp->dn_attr); in dt_cook_op2()
3787 dt_node_is_string(dnp))) in dt_cook_op2()
3788 dnp->dn_flags |= DT_NF_LVALUE; /* see K&R[A7.3.3] */ in dt_cook_op2()
3791 (kind != CTF_K_ARRAY || dt_node_is_string(dnp))) in dt_cook_op2()
3792 dnp->dn_flags |= DT_NF_LVALUE; /* see K&R[A7.3.3] */ in dt_cook_op2()
3795 dnp->dn_flags |= DT_NF_WRITABLE; in dt_cook_op2()
3798 (dnp->dn_flags & DT_NF_REF))) in dt_cook_op2()
3799 dnp->dn_flags |= DT_NF_USERLAND; in dt_cook_op2()
3826 dnp->dn_left = dnp->dn_right = NULL; in dt_cook_op2()
3827 dt_node_free(dnp); in dt_cook_op2()
3883 lnp = dnp->dn_link; in dt_cook_op2()
3884 bcopy(lp, dnp, sizeof (dt_node_t)); in dt_cook_op2()
3885 dnp->dn_link = lnp; in dt_cook_op2()
3887 dnp->dn_args = rp; in dt_cook_op2()
3888 dnp->dn_list = NULL; in dt_cook_op2()
3891 return (dt_node_cook(dnp, idflags)); in dt_cook_op2()
3898 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3908 dnp->dn_ident = dt_xlator_ident(dxp, lp->dn_ctfp, lp->dn_type); in dt_cook_op2()
3909 dt_node_type_assign(dnp, DT_DYN_CTFP(dtp), DT_DYN_TYPE(dtp), in dt_cook_op2()
3911 dt_node_attr_assign(dnp, in dt_cook_op2()
3912 dt_attr_min(rp->dn_attr, dnp->dn_ident->di_attr)); in dt_cook_op2()
3921 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3956 dt_node_type_propagate(lp, dnp); /* see K&R[A7.5] */ in dt_cook_op2()
3957 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3964 dnp->dn_flags |= DT_NF_WRITABLE; in dt_cook_op2()
3970 lp = dnp->dn_left = dt_node_cook(lp, DT_IDFLG_REF); in dt_cook_op2()
3971 rp = dnp->dn_right = dt_node_cook(rp, DT_IDFLG_REF); in dt_cook_op2()
3983 dt_node_type_propagate(rp, dnp); /* see K&R[A7.18] */ in dt_cook_op2()
3984 dt_node_attr_assign(dnp, dt_attr_min(lp->dn_attr, rp->dn_attr)); in dt_cook_op2()
3998 if (dnp->dn_op == DT_TOK_LBRAC && op == DT_TOK_ADD) { in dt_cook_op2()
4007 dnp->dn_op = DT_TOK_ADD; in dt_cook_op2()
4008 pnp = dt_node_op1(DT_TOK_DEREF, dnp); in dt_cook_op2()
4019 pnp->dn_link = dnp->dn_link; in dt_cook_op2()
4020 dnp->dn_link = pnp; in dt_cook_op2()
4025 return (dnp); in dt_cook_op2()
4030 dt_cook_op3(dt_node_t *dnp, uint_t idflags) in dt_cook_op3() argument
4036 dnp->dn_expr = dt_node_cook(dnp->dn_expr, DT_IDFLG_REF); in dt_cook_op3()
4037 lp = dnp->dn_left = dt_node_cook(dnp->dn_left, DT_IDFLG_REF); in dt_cook_op3()
4038 rp = dnp->dn_right = dt_node_cook(dnp->dn_right, DT_IDFLG_REF); in dt_cook_op3()
4040 if (!dt_node_is_scalar(dnp->dn_expr)) { in dt_cook_op3()
4075 dt_node_type_assign(dnp, ctfp, type, B_FALSE); in dt_cook_op3()
4076 dt_node_attr_assign(dnp, dt_attr_min(dnp->dn_expr->dn_attr, in dt_cook_op3()
4079 return (dnp); in dt_cook_op3()
4083 dt_cook_statement(dt_node_t *dnp, uint_t idflags) in dt_cook_statement() argument
4085 dnp->dn_expr = dt_node_cook(dnp->dn_expr, idflags); in dt_cook_statement()
4086 dt_node_attr_assign(dnp, dnp->dn_expr->dn_attr); in dt_cook_statement()
4088 return (dnp); in dt_cook_statement()
4099 dt_cook_aggregation(dt_node_t *dnp, uint_t idflags) in dt_cook_aggregation() argument
4103 if (dnp->dn_aggfun != NULL) { in dt_cook_aggregation()
4104 dnp->dn_aggfun = dt_node_cook(dnp->dn_aggfun, DT_IDFLG_REF); in dt_cook_aggregation()
4105 dt_node_attr_assign(dnp, dt_ident_cook(dnp, in dt_cook_aggregation()
4106 dnp->dn_ident, &dnp->dn_aggtup)); in dt_cook_aggregation()
4108 dt_node_type_assign(dnp, DT_DYN_CTFP(dtp), DT_DYN_TYPE(dtp), in dt_cook_aggregation()
4110 dt_node_attr_assign(dnp, dnp->dn_ident->di_attr); in dt_cook_aggregation()
4113 return (dnp); in dt_cook_aggregation()
4160 dt_cook_clause(dt_node_t *dnp, uint_t idflags) in dt_cook_clause() argument
4169 dt_node_attr_assign(dnp, yypcb->pcb_pinfo.dtp_attr); in dt_cook_clause()
4170 dnp->dn_ctxattr = yypcb->pcb_pinfo.dtp_attr; in dt_cook_clause()
4175 if (dnp->dn_pred != NULL && (err = setjmp(yypcb->pcb_jmpbuf)) != 0) { in dt_cook_clause()
4186 dt_node_attr_assign(dnp, in dt_cook_clause()
4187 dt_node_list_cook(&dnp->dn_acts, idflags)); in dt_cook_clause()
4193 if (dnp->dn_pred != NULL) { in dt_cook_clause()
4196 dnp->dn_pred = dt_node_cook(dnp->dn_pred, idflags); in dt_cook_clause()
4197 dt_node_attr_assign(dnp, in dt_cook_clause()
4198 dt_attr_min(dnp->dn_attr, dnp->dn_pred->dn_attr)); in dt_cook_clause()
4200 if (!dt_node_is_scalar(dnp->dn_pred)) { in dt_cook_clause()
4211 dt_node_attr_assign(dnp, in dt_cook_clause()
4212 dt_node_list_cook(&dnp->dn_acts, idflags)); in dt_cook_clause()
4217 return (dnp); in dt_cook_clause()
4222 dt_cook_inline(dt_node_t *dnp, uint_t idflags) in dt_cook_inline() argument
4224 dt_idnode_t *inp = dnp->dn_ident->di_iarg; in dt_cook_inline()
4230 assert(dnp->dn_ident->di_flags & DT_IDFLG_INLINE); in dt_cook_inline()
4241 ctf_file_t *lctfp = dnp->dn_ctfp; in dt_cook_inline()
4242 ctf_id_t ltype = ctf_type_resolve(lctfp, dnp->dn_type); in dt_cook_inline()
4254 dnerror(dnp, D_OP_INCOMPAT, in dt_cook_inline()
4256 "\"%s\" = \"%s\"\n", dnp->dn_ident->di_name, in dt_cook_inline()
4261 } else if (dt_node_is_argcompat(dnp, inp->din_root) == 0) { in dt_cook_inline()
4262 dnerror(dnp, D_OP_INCOMPAT, in dt_cook_inline()
4264 "\"%s\" = \"%s\"\n", dnp->dn_ident->di_name, in dt_cook_inline()
4265 dt_node_type_name(dnp, n1, sizeof (n1)), in dt_cook_inline()
4269 return (dnp); in dt_cook_inline()
4273 dt_cook_member(dt_node_t *dnp, uint_t idflags) in dt_cook_member() argument
4275 dnp->dn_membexpr = dt_node_cook(dnp->dn_membexpr, idflags); in dt_cook_member()
4276 dt_node_attr_assign(dnp, dnp->dn_membexpr->dn_attr); in dt_cook_member()
4277 return (dnp); in dt_cook_member()
4282 dt_cook_xlator(dt_node_t *dnp, uint_t idflags) in dt_cook_xlator() argument
4285 dt_xlator_t *dxp = dnp->dn_xlator; in dt_cook_xlator()
4301 for (mnp = dnp->dn_members; mnp != NULL; mnp = mnp->dn_list) { in dt_cook_xlator()
4331 dt_node_type_assign(dnp, DT_DYN_CTFP(dtp), DT_DYN_TYPE(dtp), B_FALSE); in dt_cook_xlator()
4332 dt_node_attr_assign(dnp, _dtrace_defattr); in dt_cook_xlator()
4334 return (dnp); in dt_cook_xlator()
4409 dt_cook_probe(dt_node_t *dnp, dt_provider_t *pvp) in dt_cook_probe() argument
4412 dt_probe_t *prp = dnp->dn_ident->di_data; in dt_cook_probe()
4437 dnerror(dnp, D_PROV_PRXLATOR, "translator for %s:%s output " in dt_cook_probe()
4439 pvp->pv_desc.dtvd_name, dnp->dn_ident->di_name, i + 1, in dt_cook_probe()
4447 dt_cook_provider(dt_node_t *dnp, uint_t idflags) in dt_cook_provider() argument
4449 dt_provider_t *pvp = dnp->dn_provider; in dt_cook_provider()
4457 for (pnp = dnp->dn_probes; pnp != NULL; pnp = pnp->dn_list) { in dt_cook_provider()
4463 if (prp != NULL && dnp->dn_provred) { in dt_cook_provider()
4466 } else if (prp == NULL && dnp->dn_provred) { in dt_cook_provider()
4471 dnp->dn_provname, dnp->dn_provname, in dt_cook_provider()
4472 probename, dnp->dn_provname, probename); in dt_cook_provider()
4475 dnp->dn_provname, probename); in dt_cook_provider()
4482 return (dnp); in dt_cook_provider()
4487 dt_cook_none(dt_node_t *dnp, uint_t idflags) in dt_cook_none() argument
4489 return (dnp); in dt_cook_none()
4524 dt_node_cook(dt_node_t *dnp, uint_t idflags) in dt_node_cook() argument
4528 yylineno = dnp->dn_line; in dt_node_cook()
4530 assert(dnp->dn_kind < in dt_node_cook()
4532 dnp = dt_cook_funcs[dnp->dn_kind](dnp, idflags); in dt_node_cook()
4533 dnp->dn_flags |= DT_NF_COOKED; in dt_node_cook()
4535 if (dnp->dn_kind == DT_NODE_VAR || dnp->dn_kind == DT_NODE_AGG) in dt_node_cook()
4536 dnp->dn_ident->di_flags |= idflags; in dt_node_cook()
4539 return (dnp); in dt_node_cook()
4546 dt_node_t *dnp, *nnp; in dt_node_list_cook() local
4548 for (dnp = (pnp != NULL ? *pnp : NULL); dnp != NULL; dnp = nnp) { in dt_node_list_cook()
4549 nnp = dnp->dn_list; in dt_node_list_cook()
4550 dnp = *pnp = dt_node_cook(dnp, idflags); in dt_node_list_cook()
4551 attr = dt_attr_min(attr, dnp->dn_attr); in dt_node_list_cook()
4552 dnp->dn_list = nnp; in dt_node_list_cook()
4553 pnp = &dnp->dn_list; in dt_node_list_cook()
4562 dt_node_t *dnp, *nnp; in dt_node_list_free() local
4564 for (dnp = (pnp != NULL ? *pnp : NULL); dnp != NULL; dnp = nnp) { in dt_node_list_free()
4565 nnp = dnp->dn_list; in dt_node_list_free()
4566 dt_node_free(dnp); in dt_node_list_free()
4576 dt_node_t *dnp, *nnp; in dt_node_link_free() local
4578 for (dnp = (pnp != NULL ? *pnp : NULL); dnp != NULL; dnp = nnp) { in dt_node_link_free()
4579 nnp = dnp->dn_link; in dt_node_link_free()
4580 dt_node_free(dnp); in dt_node_link_free()
4583 for (dnp = (pnp != NULL ? *pnp : NULL); dnp != NULL; dnp = nnp) { in dt_node_link_free()
4584 nnp = dnp->dn_link; in dt_node_link_free()
4585 free(dnp); in dt_node_link_free()
4595 dt_node_t *dnp; in dt_node_link() local
4602 for (dnp = lp; dnp->dn_list != NULL; dnp = dnp->dn_list) in dt_node_link()
4605 dnp->dn_list = rp; in dt_node_link()
4615 dt_node_diftype(dtrace_hdl_t *dtp, const dt_node_t *dnp, dtrace_diftype_t *tp) in dt_node_diftype() argument
4617 if (dnp->dn_ctfp == DT_STR_CTFP(dtp) && in dt_node_diftype()
4618 dnp->dn_type == DT_STR_TYPE(dtp)) { in dt_node_diftype()
4623 tp->dtdt_ckind = ctf_type_kind(dnp->dn_ctfp, in dt_node_diftype()
4624 ctf_type_resolve(dnp->dn_ctfp, dnp->dn_type)); in dt_node_diftype()
4627 tp->dtdt_flags = (dnp->dn_flags & DT_NF_REF) ? in dt_node_diftype()
4628 (dnp->dn_flags & DT_NF_USERLAND) ? DIF_TF_BYUREF : in dt_node_diftype()
4631 tp->dtdt_size = ctf_type_size(dnp->dn_ctfp, dnp->dn_type); in dt_node_diftype()
4650 dt_printd(dt_node_t *dnp, FILE *fp, int depth) in dt_printd() argument
4654 switch (dnp->dn_kind) { in dt_printd()
4656 (void) fprintf(fp, "0x%llx", (u_longlong_t)dnp->dn_value); in dt_printd()
4657 if (!(dnp->dn_flags & DT_NF_SIGNED)) in dt_printd()
4662 char *escd = strchr2esc(dnp->dn_string, strlen(dnp->dn_string)); in dt_printd()
4669 (void) fprintf(fp, "%s", dnp->dn_string); in dt_printd()
4674 (dnp->dn_ident->di_flags & DT_IDFLG_LOCAL) ? "this->" : in dt_printd()
4675 (dnp->dn_ident->di_flags & DT_IDFLG_TLS) ? "self->" : "", in dt_printd()
4676 dnp->dn_ident->di_name); in dt_printd()
4678 if (dnp->dn_args != NULL) { in dt_printd()
4681 for (arg = dnp->dn_args; arg != NULL; in dt_printd()
4693 const dtrace_syminfo_t *dts = dnp->dn_ident->di_data; in dt_printd()
4698 (void) fprintf(fp, "%s(", dnp->dn_ident->di_name); in dt_printd()
4700 for (arg = dnp->dn_args; arg != NULL; arg = arg->dn_list) { in dt_printd()
4709 (void) fprintf(fp, "%s(", opstr(dnp->dn_op)); in dt_printd()
4710 dt_printd(dnp->dn_child, fp, 0); in dt_printd()
4716 dt_printd(dnp->dn_left, fp, 0); in dt_printd()
4717 if (dnp->dn_op == DT_TOK_LPAR) { in dt_printd()
4719 dt_printd(dnp->dn_right, fp, 0); in dt_printd()
4722 if (dnp->dn_op == DT_TOK_PTR || dnp->dn_op == DT_TOK_DOT || in dt_printd()
4723 dnp->dn_op == DT_TOK_LBRAC) in dt_printd()
4724 (void) fprintf(fp, "%s", opstr(dnp->dn_op)); in dt_printd()
4726 (void) fprintf(fp, " %s ", opstr(dnp->dn_op)); in dt_printd()
4727 dt_printd(dnp->dn_right, fp, 0); in dt_printd()
4728 if (dnp->dn_op == DT_TOK_LBRAC) { in dt_printd()
4729 dt_node_t *ln = dnp->dn_right; in dt_printd()
4742 dt_printd(dnp->dn_expr, fp, 0); in dt_printd()
4744 dt_printd(dnp->dn_left, fp, 0); in dt_printd()
4746 dt_printd(dnp->dn_right, fp, 0); in dt_printd()
4753 dt_printd(dnp->dn_expr, fp, depth + 1); in dt_printd()
4759 dnp->dn_desc->dtpd_provider, dnp->dn_desc->dtpd_mod, in dt_printd()
4760 dnp->dn_desc->dtpd_func, dnp->dn_desc->dtpd_name); in dt_printd()
4764 for (arg = dnp->dn_pdescs; arg != NULL; arg = arg->dn_list) { in dt_printd()
4771 if (dnp->dn_pred != NULL) { in dt_printd()
4773 dt_printd(dnp->dn_pred, fp, 0); in dt_printd()
4778 for (arg = dnp->dn_acts; arg != NULL; arg = arg->dn_list) in dt_printd()
4786 dt_printd(dnp->dn_conditional, fp, 0); in dt_printd()
4789 for (arg = dnp->dn_body; arg != NULL; arg = arg->dn_list) in dt_printd()
4791 if (dnp->dn_alternate_body == NULL) { in dt_printd()
4795 for (arg = dnp->dn_alternate_body; arg != NULL; in dt_printd()
4805 (void *)dnp, dnp->dn_kind); in dt_printd()
4810 dt_node_printr(dt_node_t *dnp, FILE *fp, int depth) in dt_node_printr() argument
4818 (void) dt_attr_str(dnp->dn_attr, a, sizeof (a)); in dt_node_printr()
4820 if (dnp->dn_ctfp != NULL && dnp->dn_type != CTF_ERR && in dt_node_printr()
4821 ctf_type_name(dnp->dn_ctfp, dnp->dn_type, n, sizeof (n)) != NULL) { in dt_node_printr()
4825 dnp->dn_type, a); in dt_node_printr()
4828 if (dnp->dn_flags != 0) { in dt_node_printr()
4830 if (dnp->dn_flags & DT_NF_SIGNED) in dt_node_printr()
4832 if (dnp->dn_flags & DT_NF_COOKED) in dt_node_printr()
4834 if (dnp->dn_flags & DT_NF_REF) in dt_node_printr()
4836 if (dnp->dn_flags & DT_NF_LVALUE) in dt_node_printr()
4838 if (dnp->dn_flags & DT_NF_WRITABLE) in dt_node_printr()
4840 if (dnp->dn_flags & DT_NF_BITFIELD) in dt_node_printr()
4842 if (dnp->dn_flags & DT_NF_USERLAND) in dt_node_printr()
4848 switch (dnp->dn_kind) { in dt_node_printr()
4850 (void) fprintf(fp, "FREE <node %p>\n", (void *)dnp); in dt_node_printr()
4855 (u_longlong_t)dnp->dn_value, buf); in dt_node_printr()
4859 char *escd = strchr2esc(dnp->dn_string, strlen(dnp->dn_string)); in dt_node_printr()
4866 (void) fprintf(fp, "IDENT %s (%s)\n", dnp->dn_string, buf); in dt_node_printr()
4871 (dnp->dn_ident->di_flags & DT_IDFLG_LOCAL) ? "this->" : in dt_node_printr()
4872 (dnp->dn_ident->di_flags & DT_IDFLG_TLS) ? "self->" : "", in dt_node_printr()
4873 dnp->dn_ident->di_name, buf); in dt_node_printr()
4875 if (dnp->dn_args != NULL) in dt_node_printr()
4878 for (arg = dnp->dn_args; arg != NULL; arg = arg->dn_list) { in dt_node_printr()
4884 if (dnp->dn_args != NULL) in dt_node_printr()
4889 dts = dnp->dn_ident->di_data; in dt_node_printr()
4895 if (dnp->dn_string != NULL) { in dt_node_printr()
4897 buf, dnp->dn_string); in dt_node_printr()
4904 dnp->dn_ident->di_name, buf); in dt_node_printr()
4906 for (arg = dnp->dn_args; arg != NULL; arg = arg->dn_list) { in dt_node_printr()
4914 (void) fprintf(fp, "OP1 %s (%s)\n", opstr(dnp->dn_op), buf); in dt_node_printr()
4915 dt_node_printr(dnp->dn_child, fp, depth + 1); in dt_node_printr()
4919 (void) fprintf(fp, "OP2 %s (%s)\n", opstr(dnp->dn_op), buf); in dt_node_printr()
4920 dt_node_printr(dnp->dn_left, fp, depth + 1); in dt_node_printr()
4921 dt_node_printr(dnp->dn_right, fp, depth + 1); in dt_node_printr()
4922 if (dnp->dn_op == DT_TOK_LBRAC) { in dt_node_printr()
4923 dt_node_t *ln = dnp->dn_right; in dt_node_printr()
4933 dt_node_printr(dnp->dn_expr, fp, depth + 1); in dt_node_printr()
4935 dt_node_printr(dnp->dn_left, fp, depth + 1); in dt_node_printr()
4937 dt_node_printr(dnp->dn_right, fp, depth + 1); in dt_node_printr()
4943 dt_node_printr(dnp->dn_expr, fp, depth + 1); in dt_node_printr()
4948 dnp->dn_ident->di_name, a); in dt_node_printr()
4950 for (arg = dnp->dn_aggtup; arg != NULL; arg = arg->dn_list) { in dt_node_printr()
4956 if (dnp->dn_aggfun) { in dt_node_printr()
4958 dt_node_printr(dnp->dn_aggfun, fp, depth + 1); in dt_node_printr()
4962 if (dnp->dn_aggfun) in dt_node_printr()
4968 dnp->dn_desc->dtpd_provider, dnp->dn_desc->dtpd_mod, in dt_node_printr()
4969 dnp->dn_desc->dtpd_func, dnp->dn_desc->dtpd_name, in dt_node_printr()
4970 dnp->dn_desc->dtpd_id); in dt_node_printr()
4976 for (arg = dnp->dn_pdescs; arg != NULL; arg = arg->dn_list) in dt_node_printr()
4980 dt_attr_str(dnp->dn_ctxattr, a, sizeof (a))); in dt_node_printr()
4982 if (dnp->dn_pred != NULL) { in dt_node_printr()
4984 dt_node_printr(dnp->dn_pred, fp, depth + 1); in dt_node_printr()
4988 for (arg = dnp->dn_acts; arg != NULL; arg = arg->dn_list) in dt_node_printr()
4994 inp = dnp->dn_ident->di_iarg; in dt_node_printr()
4997 dnp->dn_ident->di_name, buf); in dt_node_printr()
5002 (void) fprintf(fp, "MEMBER %s (%s)\n", dnp->dn_membname, buf); in dt_node_printr()
5003 if (dnp->dn_membexpr) in dt_node_printr()
5004 dt_node_printr(dnp->dn_membexpr, fp, depth + 1); in dt_node_printr()
5010 if (ctf_type_name(dnp->dn_xlator->dx_src_ctfp, in dt_node_printr()
5011 dnp->dn_xlator->dx_src_type, n, sizeof (n)) != NULL) in dt_node_printr()
5014 if (ctf_type_name(dnp->dn_xlator->dx_dst_ctfp, in dt_node_printr()
5015 dnp->dn_xlator->dx_dst_type, n, sizeof (n)) != NULL) in dt_node_printr()
5020 for (arg = dnp->dn_members; arg != NULL; arg = arg->dn_list) in dt_node_printr()
5025 (void) fprintf(fp, "PROBE %s\n", dnp->dn_ident->di_name); in dt_node_printr()
5030 dnp->dn_provname, dnp->dn_provred ? "redecl" : "decl"); in dt_node_printr()
5031 for (arg = dnp->dn_probes; arg != NULL; arg = arg->dn_list) in dt_node_printr()
5037 for (arg = dnp->dn_list; arg != NULL; arg = arg->dn_list) in dt_node_printr()
5044 dt_node_printr(dnp->dn_conditional, fp, depth + 1); in dt_node_printr()
5047 for (arg = dnp->dn_body; arg != NULL; arg = arg->dn_list) in dt_node_printr()
5050 if (dnp->dn_alternate_body != NULL) { in dt_node_printr()
5052 for (arg = dnp->dn_alternate_body; arg != NULL; in dt_node_printr()
5061 (void *)dnp, dnp->dn_kind); in dt_node_printr()
5066 dt_node_root(dt_node_t *dnp) in dt_node_root() argument
5068 yypcb->pcb_root = dnp; in dt_node_root()
5074 dnerror(const dt_node_t *dnp, dt_errtag_t tag, const char *format, ...) in dnerror() argument
5079 yylineno = dnp->dn_line; in dnerror()
5091 dnwarn(const dt_node_t *dnp, dt_errtag_t tag, const char *format, ...) in dnwarn() argument
5096 yylineno = dnp->dn_line; in dnwarn()