Lines Matching refs:cmp
100 ctf_merge_gettype(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_gettype() argument
102 if (cmp->cm_dedup == B_FALSE) { in ctf_merge_gettype()
103 VERIFY(cmp->cm_tmap[id].cmt_map != 0); in ctf_merge_gettype()
104 return (cmp->cm_tmap[id].cmt_map); in ctf_merge_gettype()
107 while (cmp->cm_tmap[id].cmt_missing == B_FALSE) { in ctf_merge_gettype()
108 VERIFY(cmp->cm_tmap[id].cmt_map != 0); in ctf_merge_gettype()
109 id = cmp->cm_tmap[id].cmt_map; in ctf_merge_gettype()
111 VERIFY(cmp->cm_tmap[id].cmt_map != 0); in ctf_merge_gettype()
112 return (cmp->cm_tmap[id].cmt_map); in ctf_merge_gettype()
119 ctf_merge_types_t *cmp = arg; in ctf_merge_diffcb() local
120 ctf_merge_tinfo_t *cmt = cmp->cm_tmap; in ctf_merge_diffcb()
138 if (cmp->cm_unique == B_TRUE) { in ctf_merge_diffcb()
159 } else if (ifp == cmp->cm_src) { in ctf_merge_diffcb()
167 ctf_merge_add_number(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_number() argument
174 if (ctf_type_encoding(cmp->cm_src, id, &en) != 0) in ctf_merge_add_number()
177 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_number()
178 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_number()
184 ret = ctf_add_encoded(cmp->cm_out, flags, name, &en, in ctf_merge_add_number()
185 ctf_type_kind(cmp->cm_src, id)); in ctf_merge_add_number()
190 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_number()
191 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_number()
196 ctf_merge_add_array(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_array() argument
202 if (ctf_array_info(cmp->cm_src, id, &ar) == CTF_ERR) in ctf_merge_add_array()
205 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_array()
211 if (cmp->cm_tmap[ar.ctr_contents].cmt_map == 0) { in ctf_merge_add_array()
212 ret = ctf_merge_add_type(cmp, ar.ctr_contents); in ctf_merge_add_array()
215 ASSERT(cmp->cm_tmap[ar.ctr_contents].cmt_map != 0); in ctf_merge_add_array()
217 ar.ctr_contents = ctf_merge_gettype(cmp, ar.ctr_contents); in ctf_merge_add_array()
219 if (cmp->cm_tmap[ar.ctr_index].cmt_map == 0) { in ctf_merge_add_array()
220 ret = ctf_merge_add_type(cmp, ar.ctr_index); in ctf_merge_add_array()
223 ASSERT(cmp->cm_tmap[ar.ctr_index].cmt_map != 0); in ctf_merge_add_array()
225 ar.ctr_index = ctf_merge_gettype(cmp, ar.ctr_index); in ctf_merge_add_array()
227 ret = ctf_add_array(cmp->cm_out, flags, &ar); in ctf_merge_add_array()
231 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_array()
232 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_array()
238 ctf_merge_add_reftype(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_reftype() argument
245 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_reftype()
246 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_reftype()
252 reftype = ctf_type_reference(cmp->cm_src, id); in ctf_merge_add_reftype()
254 return (ctf_set_errno(cmp->cm_out, ctf_errno(cmp->cm_src))); in ctf_merge_add_reftype()
256 if (cmp->cm_tmap[reftype].cmt_map == 0) { in ctf_merge_add_reftype()
257 ret = ctf_merge_add_type(cmp, reftype); in ctf_merge_add_reftype()
260 ASSERT(cmp->cm_tmap[reftype].cmt_map != 0); in ctf_merge_add_reftype()
262 reftype = ctf_merge_gettype(cmp, reftype); in ctf_merge_add_reftype()
264 ret = ctf_add_reftype(cmp->cm_out, flags, name, reftype, in ctf_merge_add_reftype()
265 ctf_type_kind(cmp->cm_src, id)); in ctf_merge_add_reftype()
269 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_reftype()
270 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_reftype()
275 ctf_merge_add_typedef(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_typedef() argument
282 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_typedef()
283 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_typedef()
289 reftype = ctf_type_reference(cmp->cm_src, id); in ctf_merge_add_typedef()
291 return (ctf_set_errno(cmp->cm_out, ctf_errno(cmp->cm_src))); in ctf_merge_add_typedef()
293 if (cmp->cm_tmap[reftype].cmt_map == 0) { in ctf_merge_add_typedef()
294 ret = ctf_merge_add_type(cmp, reftype); in ctf_merge_add_typedef()
297 ASSERT(cmp->cm_tmap[reftype].cmt_map != 0); in ctf_merge_add_typedef()
299 reftype = ctf_merge_gettype(cmp, reftype); in ctf_merge_add_typedef()
301 ret = ctf_add_typedef(cmp->cm_out, flags, name, reftype); in ctf_merge_add_typedef()
305 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_typedef()
306 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_typedef()
325 ctf_merge_add_enum(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_enum() argument
333 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_enum()
334 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_enum()
340 enumid = ctf_add_enum(cmp->cm_out, flags, name); in ctf_merge_add_enum()
344 cme.cme_fp = cmp->cm_out; in ctf_merge_add_enum()
346 if (ctf_enum_iter(cmp->cm_src, id, ctf_merge_add_enumerator, in ctf_merge_add_enum()
350 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_enum()
351 cmp->cm_tmap[id].cmt_map = enumid; in ctf_merge_add_enum()
356 ctf_merge_add_func(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_func() argument
363 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_func()
369 if (ctf_func_info_by_id(cmp->cm_src, id, &ctc) == CTF_ERR) in ctf_merge_add_func()
370 return (ctf_set_errno(cmp->cm_out, ctf_errno(cmp->cm_src))); in ctf_merge_add_func()
374 return (ctf_set_errno(cmp->cm_out, ENOMEM)); in ctf_merge_add_func()
375 if (ctf_func_args_by_id(cmp->cm_src, id, ctc.ctc_argc, argv) == in ctf_merge_add_func()
378 return (ctf_set_errno(cmp->cm_out, ctf_errno(cmp->cm_src))); in ctf_merge_add_func()
381 if (cmp->cm_tmap[ctc.ctc_return].cmt_map == 0) { in ctf_merge_add_func()
382 ret = ctf_merge_add_type(cmp, ctc.ctc_return); in ctf_merge_add_func()
385 ASSERT(cmp->cm_tmap[ctc.ctc_return].cmt_map != 0); in ctf_merge_add_func()
387 ctc.ctc_return = ctf_merge_gettype(cmp, ctc.ctc_return); in ctf_merge_add_func()
390 if (cmp->cm_tmap[argv[i]].cmt_map == 0) { in ctf_merge_add_func()
391 ret = ctf_merge_add_type(cmp, argv[i]); in ctf_merge_add_func()
394 ASSERT(cmp->cm_tmap[argv[i]].cmt_map != 0); in ctf_merge_add_func()
396 argv[i] = ctf_merge_gettype(cmp, argv[i]); in ctf_merge_add_func()
399 ret = ctf_add_funcptr(cmp->cm_out, flags, &ctc, argv); in ctf_merge_add_func()
404 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_func()
405 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_func()
410 ctf_merge_add_forward(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_forward() argument
416 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_forward()
417 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_forward()
430 ret = ctf_add_forward(cmp->cm_out, flags, name, CTF_K_STRUCT); in ctf_merge_add_forward()
434 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_forward()
435 cmp->cm_tmap[id].cmt_map = ret; in ctf_merge_add_forward()
463 ctf_merge_add_sou(ctf_merge_types_t *cmp, ctf_id_t id, boolean_t forward) in ctf_merge_add_sou() argument
470 tp = LCTF_INDEX_TO_TYPEPTR(cmp->cm_src, id); in ctf_merge_add_sou()
471 name = ctf_strraw(cmp->cm_src, tp->ctt_name); in ctf_merge_add_sou()
476 kind = ctf_type_kind(cmp->cm_src, id); in ctf_merge_add_sou()
479 suid = ctf_add_struct(cmp->cm_out, flags, name); in ctf_merge_add_sou()
481 suid = ctf_add_union(cmp->cm_out, flags, name); in ctf_merge_add_sou()
491 VERIFY(cmp->cm_tmap[id].cmt_map == 0); in ctf_merge_add_sou()
492 cmp->cm_tmap[id].cmt_map = suid; in ctf_merge_add_sou()
496 VERIFY(cmp->cm_tmap[id].cmt_map == suid); in ctf_merge_add_sou()
498 cmp->cm_tmap[id].cmt_fixup = B_TRUE; in ctf_merge_add_sou()
504 ctf_merge_add_type(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_add_type() argument
513 if (cmp->cm_tmap[id].cmt_map != 0) in ctf_merge_add_type()
516 kind = ctf_type_kind(cmp->cm_src, id); in ctf_merge_add_type()
520 ret = ctf_merge_add_number(cmp, id); in ctf_merge_add_type()
523 ret = ctf_merge_add_array(cmp, id); in ctf_merge_add_type()
529 ret = ctf_merge_add_reftype(cmp, id); in ctf_merge_add_type()
532 ret = ctf_merge_add_typedef(cmp, id); in ctf_merge_add_type()
535 ret = ctf_merge_add_enum(cmp, id); in ctf_merge_add_type()
538 ret = ctf_merge_add_func(cmp, id); in ctf_merge_add_type()
541 ret = ctf_merge_add_forward(cmp, id); in ctf_merge_add_type()
545 ret = ctf_merge_add_sou(cmp, id, B_FALSE); in ctf_merge_add_type()
561 ctf_merge_fixup_sou(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_fixup_sou() argument
568 mapid = cmp->cm_tmap[id].cmt_map; in ctf_merge_fixup_sou()
570 dtd = ctf_dtd_lookup(cmp->cm_out, mapid); in ctf_merge_fixup_sou()
574 cms.cms_cm = cmp; in ctf_merge_fixup_sou()
576 if (ctf_member_iter(cmp->cm_src, id, ctf_merge_add_member, &cms) != 0) in ctf_merge_fixup_sou()
579 if ((size = ctf_type_size(cmp->cm_src, id)) == CTF_ERR) in ctf_merge_fixup_sou()
581 if (ctf_set_size(cmp->cm_out, mapid, size) == CTF_ERR) in ctf_merge_fixup_sou()
588 ctf_merge_fixup_type(ctf_merge_types_t *cmp, ctf_id_t id) in ctf_merge_fixup_type() argument
592 kind = ctf_type_kind(cmp->cm_src, id); in ctf_merge_fixup_type()
596 ret = ctf_merge_fixup_sou(cmp, id); in ctf_merge_fixup_type()
615 ctf_merge_fixup_dedup_map(ctf_merge_types_t *cmp) in ctf_merge_fixup_dedup_map() argument
619 for (i = 1; i < cmp->cm_src->ctf_typemax + 1; i++) { in ctf_merge_fixup_dedup_map()
626 if (cmp->cm_tmap[i].cmt_missing == B_TRUE) { in ctf_merge_fixup_dedup_map()
627 VERIFY(cmp->cm_tmap[i].cmt_map != 0); in ctf_merge_fixup_dedup_map()
632 while (cmp->cm_tmap[tid].cmt_missing == B_FALSE) { in ctf_merge_fixup_dedup_map()
633 VERIFY(cmp->cm_tmap[tid].cmt_map != 0); in ctf_merge_fixup_dedup_map()
634 tid = cmp->cm_tmap[tid].cmt_map; in ctf_merge_fixup_dedup_map()
636 VERIFY(cmp->cm_tmap[tid].cmt_map != 0); in ctf_merge_fixup_dedup_map()
637 cmp->cm_tmap[i].cmt_map = cmp->cm_tmap[tid].cmt_map; in ctf_merge_fixup_dedup_map()
660 ctf_merge_common(ctf_merge_types_t *cmp) in ctf_merge_common() argument
664 ctf_phase_dump(cmp->cm_src, "merge-common-src"); in ctf_merge_common()
665 ctf_phase_dump(cmp->cm_out, "merge-common-dest"); in ctf_merge_common()
668 for (i = 1; i <= cmp->cm_src->ctf_typemax; i++) { in ctf_merge_common()
669 if (cmp->cm_tmap[i].cmt_forward == B_TRUE) { in ctf_merge_common()
670 ret = ctf_merge_add_sou(cmp, i, B_TRUE); in ctf_merge_common()
678 for (i = 1; i <= cmp->cm_src->ctf_typemax; i++) { in ctf_merge_common()
679 if (cmp->cm_tmap[i].cmt_missing == B_TRUE) { in ctf_merge_common()
680 ret = ctf_merge_add_type(cmp, i); in ctf_merge_common()
688 ret = ctf_update(cmp->cm_out); in ctf_merge_common()
692 if (cmp->cm_dedup == B_TRUE) { in ctf_merge_common()
693 ctf_merge_fixup_dedup_map(cmp); in ctf_merge_common()
698 for (i = 1; i <= cmp->cm_src->ctf_typemax; i++) { in ctf_merge_common()
699 if (cmp->cm_tmap[i].cmt_fixup == B_TRUE) { in ctf_merge_common()
700 ret = ctf_merge_fixup_type(cmp, i); in ctf_merge_common()
706 if (cmp->cm_dedup == B_TRUE) { in ctf_merge_common()
707 ctf_merge_fixup_dedup_map(cmp); in ctf_merge_common()
720 ctf_merge_uniquify_types(ctf_merge_types_t *cmp) in ctf_merge_uniquify_types() argument
724 for (i = 1; i <= cmp->cm_src->ctf_typemax; i++) { in ctf_merge_uniquify_types()
725 if (cmp->cm_tmap[i].cmt_missing == B_FALSE) in ctf_merge_uniquify_types()
727 ret = ctf_merge_add_type(cmp, i); in ctf_merge_uniquify_types()
732 ret = ctf_update(cmp->cm_out); in ctf_merge_uniquify_types()
736 for (i = 1; i <= cmp->cm_src->ctf_typemax; i++) { in ctf_merge_uniquify_types()
737 if (cmp->cm_tmap[i].cmt_fixup == B_FALSE) in ctf_merge_uniquify_types()
739 ret = ctf_merge_fixup_type(cmp, i); in ctf_merge_uniquify_types()
748 ctf_merge_types_init(ctf_merge_types_t *cmp) in ctf_merge_types_init() argument
750 cmp->cm_tmap = ctf_alloc(sizeof (ctf_merge_tinfo_t) * in ctf_merge_types_init()
751 (cmp->cm_src->ctf_typemax + 1)); in ctf_merge_types_init()
752 if (cmp->cm_tmap == NULL) in ctf_merge_types_init()
753 return (ctf_set_errno(cmp->cm_out, ENOMEM)); in ctf_merge_types_init()
754 bzero(cmp->cm_tmap, sizeof (ctf_merge_tinfo_t) * in ctf_merge_types_init()
755 (cmp->cm_src->ctf_typemax + 1)); in ctf_merge_types_init()
760 ctf_merge_types_fini(ctf_merge_types_t *cmp) in ctf_merge_types_fini() argument
762 ctf_free(cmp->cm_tmap, sizeof (ctf_merge_tinfo_t) * in ctf_merge_types_fini()
763 (cmp->cm_src->ctf_typemax + 1)); in ctf_merge_types_fini()
863 ctf_merge_fixup_nontypes(ctf_merge_types_t *cmp, ctf_merge_input_t *cmi) in ctf_merge_fixup_nontypes() argument
872 VERIFY(cmp->cm_tmap[cmo->cmo_tid].cmt_map != 0); in ctf_merge_fixup_nontypes()
873 cmo->cmo_tid = cmp->cm_tmap[cmo->cmo_tid].cmt_map; in ctf_merge_fixup_nontypes()
880 VERIFY(cmp->cm_tmap[cmf->cmf_rtid].cmt_map != 0); in ctf_merge_fixup_nontypes()
881 cmf->cmf_rtid = cmp->cm_tmap[cmf->cmf_rtid].cmt_map; in ctf_merge_fixup_nontypes()
883 VERIFY(cmp->cm_tmap[cmf->cmf_args[i]].cmt_map != in ctf_merge_fixup_nontypes()
886 cmp->cm_tmap[cmf->cmf_args[i]].cmt_map; in ctf_merge_fixup_nontypes()
1423 ctf_merge_types_t *cmp = arg; in ctf_dedup_cb() local
1424 ctf_merge_tinfo_t *cmt = cmp->cm_tmap; in ctf_dedup_cb()
1458 ctf_merge_dedup(ctf_merge_t *cmp, ctf_file_t **outp) in ctf_merge_dedup() argument
1466 if (cmp == NULL || outp == NULL) in ctf_merge_dedup()
1469 ctf_dprintf("encountered %d inputs\n", cmp->cmh_ninputs); in ctf_merge_dedup()
1470 if (cmp->cmh_ninputs != 2) in ctf_merge_dedup()
1475 cmi = list_head(&cmp->cmh_inputs); in ctf_merge_dedup()
1477 cmc = list_next(&cmp->cmh_inputs, cmi); in ctf_merge_dedup()
1515 if (cmp->cmh_msyms == B_TRUE) { in ctf_merge_dedup()
1516 ret = ctf_merge_symbols(cmp, cm.cm_out); in ctf_merge_dedup()
1524 ret = ctf_merge_functions(cmp, cm.cm_out); in ctf_merge_dedup()
1545 ctf_merge_set_nthreads(ctf_merge_t *cmp, const uint_t nthrs) in ctf_merge_set_nthreads() argument
1549 cmp->cmh_nthreads = nthrs; in ctf_merge_set_nthreads()