Lines Matching refs:ta
46 static void pt_unmap_lwp(const td_thragent_t *ta, lwpid_t lwp);
75 td_thragent_t *ta = __DECONST(td_thragent_t *, const_ta); in pt_map_thread() local
81 for (i = 1; i < ta->map_len; ++i) { in pt_map_thread()
82 if (ta->map[i].type == PT_NONE) { in pt_map_thread()
85 } else if (ta->map[i].type == type && ta->map[i].thr == pt) { in pt_map_thread()
91 if (ta->map_len == 0) { in pt_map_thread()
92 ta->map = calloc(20, sizeof(struct pt_map)); in pt_map_thread()
93 if (ta->map == NULL) in pt_map_thread()
95 ta->map_len = 20; in pt_map_thread()
98 new = reallocarray(ta->map, ta->map_len, in pt_map_thread()
102 memset(new + ta->map_len, '\0', ta->map_len * in pt_map_thread()
104 first = ta->map_len; in pt_map_thread()
105 ta->map = new; in pt_map_thread()
106 ta->map_len *= 2; in pt_map_thread()
110 ta->map[first].type = type; in pt_map_thread()
111 ta->map[first].thr = pt; in pt_map_thread()
147 td_thragent_t *ta; in pt_ta_new() local
154 ta = malloc(sizeof(td_thragent_t)); in pt_ta_new()
155 if (ta == NULL) in pt_ta_new()
158 ta->ph = ph; in pt_ta_new()
159 ta->thread_activated = 0; in pt_ta_new()
160 ta->map = NULL; in pt_ta_new()
161 ta->map_len = 0; in pt_ta_new()
163 LOOKUP_SYM(ph, "_libkse_debug", &ta->libkse_debug_addr); in pt_ta_new()
164 LOOKUP_SYM(ph, "_thread_list", &ta->thread_list_addr); in pt_ta_new()
165 LOOKUP_SYM(ph, "_thread_activated", &ta->thread_activated_addr); in pt_ta_new()
166 LOOKUP_SYM(ph, "_thread_active_threads",&ta->thread_active_threads_addr); in pt_ta_new()
167 LOOKUP_SYM(ph, "_thread_keytable", &ta->thread_keytable_addr); in pt_ta_new()
168 LOOKUP_VAL(ph, "_thread_off_dtv", &ta->thread_off_dtv); in pt_ta_new()
169 LOOKUP_VAL(ph, "_thread_off_kse_locklevel", &ta->thread_off_kse_locklevel); in pt_ta_new()
170 LOOKUP_VAL(ph, "_thread_off_kse", &ta->thread_off_kse); in pt_ta_new()
171 LOOKUP_VAL(ph, "_thread_off_tlsindex", &ta->thread_off_tlsindex); in pt_ta_new()
172 LOOKUP_VAL(ph, "_thread_off_attr_flags", &ta->thread_off_attr_flags); in pt_ta_new()
173 LOOKUP_VAL(ph, "_thread_size_key", &ta->thread_size_key); in pt_ta_new()
174 LOOKUP_VAL(ph, "_thread_off_tcb", &ta->thread_off_tcb); in pt_ta_new()
175 LOOKUP_VAL(ph, "_thread_off_linkmap", &ta->thread_off_linkmap); in pt_ta_new()
176 LOOKUP_VAL(ph, "_thread_off_tmbx", &ta->thread_off_tmbx); in pt_ta_new()
177 LOOKUP_VAL(ph, "_thread_off_thr_locklevel", &ta->thread_off_thr_locklevel); in pt_ta_new()
178 LOOKUP_VAL(ph, "_thread_off_next", &ta->thread_off_next); in pt_ta_new()
179 LOOKUP_VAL(ph, "_thread_off_state", &ta->thread_off_state); in pt_ta_new()
180 LOOKUP_VAL(ph, "_thread_max_keys", &ta->thread_max_keys); in pt_ta_new()
181 LOOKUP_VAL(ph, "_thread_off_key_allocated", &ta->thread_off_key_allocated); in pt_ta_new()
182 LOOKUP_VAL(ph, "_thread_off_key_destructor", &ta->thread_off_key_destructor); in pt_ta_new()
183 LOOKUP_VAL(ph, "_thread_state_running", &ta->thread_state_running); in pt_ta_new()
184 LOOKUP_VAL(ph, "_thread_state_zoombie", &ta->thread_state_zoombie); in pt_ta_new()
185 LOOKUP_VAL(ph, "_thread_off_sigmask", &ta->thread_off_sigmask); in pt_ta_new()
186 LOOKUP_VAL(ph, "_thread_off_sigpend", &ta->thread_off_sigpend); in pt_ta_new()
192 ps_pwrite(ph, ta->libkse_debug_addr, &dbg, sizeof(int)); in pt_ta_new()
193 *pta = ta; in pt_ta_new()
197 free(ta); in pt_ta_new()
202 pt_ta_delete(td_thragent_t *ta) in pt_ta_delete() argument
213 ps_pwrite(ta->ph, ta->libkse_debug_addr, &dbg, sizeof(int)); in pt_ta_delete()
214 if (ta->map) in pt_ta_delete()
215 free(ta->map); in pt_ta_delete()
216 free(ta); in pt_ta_delete()
221 pt_ta_map_id2thr(const td_thragent_t *ta, thread_t id, td_thrhandle_t *th) in pt_ta_map_id2thr() argument
230 if (id < 0 || id >= (long)ta->map_len || ta->map[id].type == PT_NONE) in pt_ta_map_id2thr()
233 ret = thr_pread_ptr(ta, ta->thread_list_addr, &pt); in pt_ta_map_id2thr()
236 if (ta->map[id].type == PT_LWP) { in pt_ta_map_id2thr()
242 ret = thr_pread_ptr(ta, pt + ta->thread_off_tcb, in pt_ta_map_id2thr()
246 ret = thr_pread_int(ta, tcb_addr + ta->thread_off_tmbx + in pt_ta_map_id2thr()
254 if (lwp == ta->map[id].lwp) { in pt_ta_map_id2thr()
255 ta->map[id].type = PT_NONE; in pt_ta_map_id2thr()
259 ret = thr_pread_ptr(ta, pt + ta->thread_off_next, &pt); in pt_ta_map_id2thr()
264 ret = ps_lgetregs(ta->ph, ta->map[id].lwp, gregs); in pt_ta_map_id2thr()
267 ta->map[id].type = PT_NONE; in pt_ta_map_id2thr()
271 while (pt != 0 && ta->map[id].thr != pt) { in pt_ta_map_id2thr()
272 ret = thr_pread_ptr(ta, pt + ta->thread_off_tcb, in pt_ta_map_id2thr()
277 ret = thr_pread_ptr(ta, pt + ta->thread_off_next, &pt); in pt_ta_map_id2thr()
284 ta->map[id].type = PT_NONE; in pt_ta_map_id2thr()
288 th->th_ta = ta; in pt_ta_map_id2thr()
295 pt_ta_map_lwp2thr(const td_thragent_t *ta, lwpid_t lwp, td_thrhandle_t *th) in pt_ta_map_lwp2thr() argument
303 ret = thr_pread_ptr(ta, ta->thread_list_addr, &pt); in pt_ta_map_lwp2thr()
307 ret = thr_pread_ptr(ta, pt + ta->thread_off_tcb, &tcb_addr); in pt_ta_map_lwp2thr()
310 ret = thr_pread_int(ta, tcb_addr + ta->thread_off_tmbx + in pt_ta_map_lwp2thr()
315 th->th_ta = ta; in pt_ta_map_lwp2thr()
316 th->th_tid = pt_map_thread(ta, pt, PT_USER); in pt_ta_map_lwp2thr()
319 pt_unmap_lwp(ta, lwp); in pt_ta_map_lwp2thr()
325 ret = thr_pread_ptr(ta, pt + ta->thread_off_next, &pt); in pt_ta_map_lwp2thr()
334 pt_ta_thr_iter(const td_thragent_t *ta, td_thr_iter_f *callback, in pt_ta_thr_iter() argument
345 pserr = ps_pread(ta->ph, ta->thread_activated_addr, &activated, in pt_ta_thr_iter()
352 ret = thr_pread_ptr(ta, ta->thread_list_addr, &pt); in pt_ta_thr_iter()
356 th.th_ta = ta; in pt_ta_thr_iter()
357 th.th_tid = pt_map_thread(ta, pt, PT_USER); in pt_ta_thr_iter()
365 ret = thr_pread_ptr(ta, pt + ta->thread_off_next, &pt); in pt_ta_thr_iter()
373 pt_ta_tsd_iter(const td_thragent_t *ta, td_key_iter_f *ki, void *arg) in pt_ta_tsd_iter() argument
381 keytable = malloc(ta->thread_max_keys * ta->thread_size_key); in pt_ta_tsd_iter()
384 ret = ps_pread(ta->ph, (psaddr_t)ta->thread_keytable_addr, keytable, in pt_ta_tsd_iter()
385 ta->thread_max_keys * ta->thread_size_key); in pt_ta_tsd_iter()
390 for (i = 0; i < ta->thread_max_keys; i++) { in pt_ta_tsd_iter()
392 i * ta->thread_size_key + ta->thread_off_key_allocated); in pt_ta_tsd_iter()
394 i * ta->thread_size_key + ta->thread_off_key_destructor); in pt_ta_tsd_iter()
408 pt_ta_event_addr(const td_thragent_t *ta __unused, td_event_e event __unused, in pt_ta_event_addr()
416 pt_ta_set_event(const td_thragent_t *ta __unused, in pt_ta_set_event()
424 pt_ta_clear_event(const td_thragent_t *ta __unused, in pt_ta_clear_event()
432 pt_ta_event_getmsg(const td_thragent_t *ta __unused, in pt_ta_event_getmsg()
442 const td_thragent_t *ta = th->th_ta; in pt_dbsuspend() local
454 if (ta->map[th->th_tid].type == PT_LWP) { in pt_dbsuspend()
456 ret = ps_lstop(ta->ph, ta->map[th->th_tid].lwp); in pt_dbsuspend()
458 ret = ps_lcontinue(ta->ph, ta->map[th->th_tid].lwp); in pt_dbsuspend()
462 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_dbsuspend()
463 ta->thread_off_attr_flags, in pt_dbsuspend()
467 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_dbsuspend()
468 ta->thread_off_tcb, in pt_dbsuspend()
472 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_dbsuspend()
474 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_dbsuspend()
487 ptr = ta->map[th->th_tid].thr + ta->thread_off_kse; in pt_dbsuspend()
488 ret = ps_pread(ta->ph, ptr, &ptr, sizeof(ptr)); in pt_dbsuspend()
491 ret = ps_pread(ta->ph, ptr + ta->thread_off_kse_locklevel, in pt_dbsuspend()
496 ptr = ta->map[th->th_tid].thr + in pt_dbsuspend()
497 ta->thread_off_thr_locklevel; in pt_dbsuspend()
498 ret = ps_pread(ta->ph, ptr, &locklevel, in pt_dbsuspend()
505 ret = ps_lstop(ta->ph, lwp); in pt_dbsuspend()
507 ret = ps_lcontinue(ta->ph, lwp); in pt_dbsuspend()
515 if (ps_linfo(ta->ph, lwp, (caddr_t)&pl)) in pt_dbsuspend()
519 ret = ps_lstop(ta->ph, lwp); in pt_dbsuspend()
521 ret = ps_lcontinue(ta->ph, lwp); in pt_dbsuspend()
529 ret = ps_pread(ta->ph, in pt_dbsuspend()
538 ret = ps_pwrite(ta->ph, in pt_dbsuspend()
576 const td_thragent_t *ta = th->th_ta; in pt_thr_old_get_info() local
593 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_old_get_info()
595 info->ti_lid = ta->map[th->th_tid].lwp; in pt_thr_old_get_info()
602 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_old_get_info()
603 ta->thread_off_attr_flags, in pt_thr_old_get_info()
607 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + ta->thread_off_tcb, in pt_thr_old_get_info()
611 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + ta->thread_off_state, in pt_thr_old_get_info()
613 ret = ps_pread(ta->ph, in pt_thr_old_get_info()
614 tcb_addr + ta->thread_off_tmbx + in pt_thr_old_get_info()
619 ret = ps_pread(ta->ph, in pt_thr_old_get_info()
620 tcb_addr + ta->thread_off_tmbx + in pt_thr_old_get_info()
625 ret = ps_pread(ta->ph, tcb_addr + ta->thread_off_tmbx + in pt_thr_old_get_info()
633 ret = ps_linfo(ta->ph, lwp, &linfo); in pt_thr_old_get_info()
640 ret = ps_pread(ta->ph, in pt_thr_old_get_info()
641 ta->map[th->th_tid].thr + ta->thread_off_sigmask, in pt_thr_old_get_info()
645 ret = ps_pread(ta->ph, in pt_thr_old_get_info()
646 ta->map[th->th_tid].thr + ta->thread_off_sigpend, in pt_thr_old_get_info()
652 if (state == ta->thread_state_running) in pt_thr_old_get_info()
654 else if (state == ta->thread_state_zoombie) in pt_thr_old_get_info()
677 const td_thragent_t *ta = th->th_ta; in pt_thr_getxmmregs() local
691 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_getxmmregs()
692 ret = ps_lgetxmmregs(ta->ph, ta->map[th->th_tid].lwp, fxsave); in pt_thr_getxmmregs()
696 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + ta->thread_off_tcb, in pt_thr_getxmmregs()
700 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_getxmmregs()
702 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_getxmmregs()
706 ret = ps_lgetxmmregs(ta->ph, lwp, fxsave); in pt_thr_getxmmregs()
710 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_getxmmregs()
721 const td_thragent_t *ta = th->th_ta; in pt_thr_getfpregs() local
733 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_getfpregs()
734 ret = ps_lgetfpregs(ta->ph, ta->map[th->th_tid].lwp, fpregs); in pt_thr_getfpregs()
738 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + ta->thread_off_tcb, in pt_thr_getfpregs()
742 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_getfpregs()
744 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_getfpregs()
748 ret = ps_lgetfpregs(ta->ph, lwp, fpregs); in pt_thr_getfpregs()
752 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_getfpregs()
762 const td_thragent_t *ta = th->th_ta; in pt_thr_getgregs() local
774 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_getgregs()
775 ret = ps_lgetregs(ta->ph, in pt_thr_getgregs()
776 ta->map[th->th_tid].lwp, gregs); in pt_thr_getgregs()
780 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + ta->thread_off_tcb, in pt_thr_getgregs()
784 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_getgregs()
786 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_getgregs()
790 ret = ps_lgetregs(ta->ph, lwp, gregs); in pt_thr_getgregs()
793 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_getgregs()
804 const td_thragent_t *ta = th->th_ta; in pt_thr_setxmmregs() local
818 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_setxmmregs()
819 ret = ps_lsetxmmregs(ta->ph, ta->map[th->th_tid].lwp, fxsave); in pt_thr_setxmmregs()
823 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_setxmmregs()
824 ta->thread_off_tcb, in pt_thr_setxmmregs()
828 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_setxmmregs()
830 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_setxmmregs()
834 ret = ps_lsetxmmregs(ta->ph, lwp, fxsave); in pt_thr_setxmmregs()
841 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setxmmregs()
846 ret = ps_pwrite(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setxmmregs()
854 const td_thragent_t *ta = th->th_ta; in pt_thr_setfpregs() local
866 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_setfpregs()
867 ret = ps_lsetfpregs(ta->ph, ta->map[th->th_tid].lwp, fpregs); in pt_thr_setfpregs()
871 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_setfpregs()
872 ta->thread_off_tcb, in pt_thr_setfpregs()
876 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_setfpregs()
878 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_setfpregs()
882 ret = ps_lsetfpregs(ta->ph, lwp, fpregs); in pt_thr_setfpregs()
889 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setfpregs()
894 ret = ps_pwrite(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setfpregs()
901 const td_thragent_t *ta = th->th_ta; in pt_thr_setgregs() local
913 if (ta->map[th->th_tid].type == PT_LWP) { in pt_thr_setgregs()
914 ret = ps_lsetregs(ta->ph, ta->map[th->th_tid].lwp, gregs); in pt_thr_setgregs()
918 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_setgregs()
919 ta->thread_off_tcb, in pt_thr_setgregs()
923 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_setgregs()
925 ret = ps_pread(ta->ph, ptr, &lwp, sizeof(lwpid_t)); in pt_thr_setgregs()
929 ret = ps_lsetregs(ta->ph, lwp, gregs); in pt_thr_setgregs()
937 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setgregs()
941 ret = ps_pwrite(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_setgregs()
979 const td_thragent_t *ta = th->th_ta; in pt_thr_sstep() local
993 if (ta->map[th->th_tid].type == PT_LWP) in pt_thr_sstep()
996 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_sstep()
997 ta->thread_off_tcb, in pt_thr_sstep()
1003 ret = ps_pread(ta->ph, in pt_thr_sstep()
1004 tcb_addr + ta->thread_off_tmbx + in pt_thr_sstep()
1013 ret = ps_pwrite(ta->ph, in pt_thr_sstep()
1014 tcb_addr + ta->thread_off_tmbx + in pt_thr_sstep()
1020 ret = ps_pread(ta->ph, in pt_thr_sstep()
1021 tcb_addr + ta->thread_off_tmbx + in pt_thr_sstep()
1029 tmbx_addr = tcb_addr + ta->thread_off_tmbx; in pt_thr_sstep()
1035 ret = ps_pread(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx)); in pt_thr_sstep()
1041 ret = ps_pwrite(ta->ph, tmbx_addr, &tmbx, in pt_thr_sstep()
1049 pt_unmap_lwp(const td_thragent_t *ta, lwpid_t lwp) in pt_unmap_lwp() argument
1053 for (i = 0; i < ta->map_len; ++i) { in pt_unmap_lwp()
1054 if (ta->map[i].type == PT_LWP && ta->map[i].lwp == lwp) { in pt_unmap_lwp()
1055 ta->map[i].type = PT_NONE; in pt_unmap_lwp()
1075 const td_thragent_t *ta = th->th_ta; in pt_thr_tls_get_addr() local
1080 obj_entry = _linkmap - ta->thread_off_linkmap; in pt_thr_tls_get_addr()
1083 ret = ps_pread(ta->ph, in pt_thr_tls_get_addr()
1084 obj_entry + ta->thread_off_tlsindex, in pt_thr_tls_get_addr()
1090 ret = ps_pread(ta->ph, ta->map[th->th_tid].thr + in pt_thr_tls_get_addr()
1091 ta->thread_off_tcb, in pt_thr_tls_get_addr()
1097 ret = ps_pread(ta->ph, tcb_addr + ta->thread_off_dtv, in pt_thr_tls_get_addr()
1102 ret = ps_pread(ta->ph, dtv_addr + sizeof(void *) * (tls_index + 1), in pt_thr_tls_get_addr()