Deleted Added
full compact
libthr_db.c (180982) libthr_db.c (181341)
1/*
2 * Copyright (c) 2004 Marcel Moolenaar
3 * Copyright (c) 2005 David Xu
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
1/*
2 * Copyright (c) 2004 Marcel Moolenaar
3 * Copyright (c) 2005 David Xu
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD: head/lib/libthread_db/libthr_db.c 180982 2008-07-30 00:59:19Z marcel $");
29__FBSDID("$FreeBSD: head/lib/libthread_db/libthr_db.c 181341 2008-08-06 03:14:18Z marcel $");
30
31#include <proc_service.h>
32#include <stddef.h>
33#include <stdlib.h>
34#include <string.h>
35#include <sys/types.h>
36#include <sys/linker_set.h>
37#include <sys/ptrace.h>

--- 202 unchanged lines hidden (view full) ---

240
241static td_err_e
242pt_ta_map_lwp2thr(const td_thragent_t *ta, lwpid_t lwp, td_thrhandle_t *th)
243{
244 return (pt_ta_map_id2thr(ta, lwp, th));
245}
246
247static td_err_e
30
31#include <proc_service.h>
32#include <stddef.h>
33#include <stdlib.h>
34#include <string.h>
35#include <sys/types.h>
36#include <sys/linker_set.h>
37#include <sys/ptrace.h>

--- 202 unchanged lines hidden (view full) ---

240
241static td_err_e
242pt_ta_map_lwp2thr(const td_thragent_t *ta, lwpid_t lwp, td_thrhandle_t *th)
243{
244 return (pt_ta_map_id2thr(ta, lwp, th));
245}
246
247static td_err_e
248pt_ta_thr_iter(const td_thragent_t *ta,
249 td_thr_iter_f *callback, void *cbdata_p,
250 td_thr_state_e state, int ti_pri,
251 sigset_t *ti_sigmask_p,
252 unsigned int ti_user_flags)
248pt_ta_thr_iter(const td_thragent_t *ta, td_thr_iter_f *callback,
249 void *cbdata_p, td_thr_state_e state __unused, int ti_pri __unused,
250 sigset_t *ti_sigmask_p __unused, unsigned int ti_user_flags __unused)
253{
254 TAILQ_HEAD(, pthread) thread_list;
255 td_thrhandle_t th;
256 psaddr_t pt;
257 long lwp;
258 int ret;
259
260 TDBG_FUNC();

--- 22 unchanged lines hidden (view full) ---

283 return (P2T(ret));
284 }
285 return (TD_OK);
286}
287
288static td_err_e
289pt_ta_tsd_iter(const td_thragent_t *ta, td_key_iter_f *ki, void *arg)
290{
251{
252 TAILQ_HEAD(, pthread) thread_list;
253 td_thrhandle_t th;
254 psaddr_t pt;
255 long lwp;
256 int ret;
257
258 TDBG_FUNC();

--- 22 unchanged lines hidden (view full) ---

281 return (P2T(ret));
282 }
283 return (TD_OK);
284}
285
286static td_err_e
287pt_ta_tsd_iter(const td_thragent_t *ta, td_key_iter_f *ki, void *arg)
288{
291 char *keytable;
289 void *keytable;
292 void *destructor;
293 int i, ret, allocated;
294
295 TDBG_FUNC();
296
297 keytable = malloc(ta->thread_max_keys * ta->thread_size_key);
298 if (keytable == NULL)
299 return (TD_MALLOC);
300 ret = ps_pread(ta->ph, (psaddr_t)ta->thread_keytable_addr, keytable,
301 ta->thread_max_keys * ta->thread_size_key);
302 if (ret != 0) {
303 free(keytable);
304 return (P2T(ret));
305 }
306 for (i = 0; i < ta->thread_max_keys; i++) {
290 void *destructor;
291 int i, ret, allocated;
292
293 TDBG_FUNC();
294
295 keytable = malloc(ta->thread_max_keys * ta->thread_size_key);
296 if (keytable == NULL)
297 return (TD_MALLOC);
298 ret = ps_pread(ta->ph, (psaddr_t)ta->thread_keytable_addr, keytable,
299 ta->thread_max_keys * ta->thread_size_key);
300 if (ret != 0) {
301 free(keytable);
302 return (P2T(ret));
303 }
304 for (i = 0; i < ta->thread_max_keys; i++) {
307 allocated = *(int *)(keytable + i * ta->thread_size_key +
308 ta->thread_off_key_allocated);
309 destructor = *(void **)(keytable + i * ta->thread_size_key +
310 ta->thread_off_key_destructor);
305 allocated = *(int *)(void *)((uintptr_t)keytable +
306 i * ta->thread_size_key + ta->thread_off_key_allocated);
307 destructor = *(void **)(void *)((uintptr_t)keytable +
308 i * ta->thread_size_key + ta->thread_off_key_destructor);
311 if (allocated) {
312 ret = (ki)(i, destructor, arg);
313 if (ret != 0) {
314 free(keytable);
315 return (TD_DBERR);
316 }
317 }
318 }

--- 98 unchanged lines hidden (view full) ---

417 handle.th_thread = pt;
418 msg->th_p = &handle;
419 return (0);
420}
421
422static td_err_e
423pt_dbsuspend(const td_thrhandle_t *th, int suspend)
424{
309 if (allocated) {
310 ret = (ki)(i, destructor, arg);
311 if (ret != 0) {
312 free(keytable);
313 return (TD_DBERR);
314 }
315 }
316 }

--- 98 unchanged lines hidden (view full) ---

415 handle.th_thread = pt;
416 msg->th_p = &handle;
417 return (0);
418}
419
420static td_err_e
421pt_dbsuspend(const td_thrhandle_t *th, int suspend)
422{
425 td_thragent_t *ta = (td_thragent_t *)th->th_ta;
423 const td_thragent_t *ta = th->th_ta;
426 int ret;
427
428 TDBG_FUNC();
429
430 ret = pt_validate(th);
431 if (ret)
432 return (ret);
433

--- 223 unchanged lines hidden (view full) ---

657 &mask, sizeof(mask));
658 return (P2T(ret));
659}
660
661static td_err_e
662pt_thr_event_getmsg(const td_thrhandle_t *th, td_event_msg_t *msg)
663{
664 static td_thrhandle_t handle;
424 int ret;
425
426 TDBG_FUNC();
427
428 ret = pt_validate(th);
429 if (ret)
430 return (ret);
431

--- 223 unchanged lines hidden (view full) ---

655 &mask, sizeof(mask));
656 return (P2T(ret));
657}
658
659static td_err_e
660pt_thr_event_getmsg(const td_thrhandle_t *th, td_event_msg_t *msg)
661{
662 static td_thrhandle_t handle;
665 td_thragent_t *ta = (td_thragent_t *)th->th_ta;
663 const td_thragent_t *ta = th->th_ta;
666 psaddr_t pt, pt_temp;
667 long lwp;
668 int ret;
669 td_thr_events_e tmp;
670
671 TDBG_FUNC();
672 pt = th->th_thread;
673 ret = ps_pread(ta->ph, ta->thread_last_event_addr, &pt_temp, sizeof(pt_temp));

--- 24 unchanged lines hidden (view full) ---

698 handle.th_ta = ta;
699 handle.th_tid = lwp;
700 handle.th_thread = pt;
701 msg->th_p = &handle;
702 return (0);
703}
704
705static td_err_e
664 psaddr_t pt, pt_temp;
665 long lwp;
666 int ret;
667 td_thr_events_e tmp;
668
669 TDBG_FUNC();
670 pt = th->th_thread;
671 ret = ps_pread(ta->ph, ta->thread_last_event_addr, &pt_temp, sizeof(pt_temp));

--- 24 unchanged lines hidden (view full) ---

696 handle.th_ta = ta;
697 handle.th_tid = lwp;
698 handle.th_thread = pt;
699 msg->th_p = &handle;
700 return (0);
701}
702
703static td_err_e
706pt_thr_sstep(const td_thrhandle_t *th, int step)
704pt_thr_sstep(const td_thrhandle_t *th, int step __unused)
707{
708 TDBG_FUNC();
709
710 return pt_validate(th);
711}
712
713static int
714pt_validate(const td_thrhandle_t *th)

--- 81 unchanged lines hidden ---
705{
706 TDBG_FUNC();
707
708 return pt_validate(th);
709}
710
711static int
712pt_validate(const td_thrhandle_t *th)

--- 81 unchanged lines hidden ---