Deleted Added
sdiff udiff text old ( 181059 ) new ( 181341 )
full compact
1/*
2 * Copyright (c) 2004 David Xu <davidxu@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/lib/libthread_db/libpthread_db.c 181059 2008-07-31 16:26:58Z marcel $");
29
30#include <stddef.h>
31#include <stdlib.h>
32#include <string.h>
33#include <unistd.h>
34#include <pthread.h>
35#include <sys/types.h>
36#include <sys/linker_set.h>

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

341 if (ret != 0)
342 return (P2T(ret));
343 }
344
345 return (TD_NOTHR);
346}
347
348static td_err_e
349pt_ta_thr_iter(const td_thragent_t *ta,
350 td_thr_iter_f *callback, void *cbdata_p,
351 td_thr_state_e state, int ti_pri,
352 sigset_t *ti_sigmask_p,
353 unsigned int ti_user_flags)
354{
355 TAILQ_HEAD(, pthread) thread_list;
356 td_thrhandle_t th;
357 psaddr_t pt;
358 ps_err_e pserr;
359 int activated;
360
361 TDBG_FUNC();

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

389 return (P2T(pserr));
390 }
391 return (TD_OK);
392}
393
394static td_err_e
395pt_ta_tsd_iter(const td_thragent_t *ta, td_key_iter_f *ki, void *arg)
396{
397 char *keytable;
398 void *destructor;
399 int i, ret, allocated;
400
401 TDBG_FUNC();
402
403 keytable = malloc(ta->thread_max_keys * ta->thread_size_key);
404 if (keytable == NULL)
405 return (TD_MALLOC);
406 ret = ps_pread(ta->ph, (psaddr_t)ta->thread_keytable_addr, keytable,
407 ta->thread_max_keys * ta->thread_size_key);
408 if (ret != 0) {
409 free(keytable);
410 return (P2T(ret));
411 }
412 for (i = 0; i < ta->thread_max_keys; i++) {
413 allocated = *(int *)(keytable + i * ta->thread_size_key +
414 ta->thread_off_key_allocated);
415 destructor = *(void **)(keytable + i * ta->thread_size_key +
416 ta->thread_off_key_destructor);
417 if (allocated) {
418 ret = (ki)(i, destructor, arg);
419 if (ret != 0) {
420 free(keytable);
421 return (TD_DBERR);
422 }
423 }
424 }
425 free(keytable);
426 return (TD_OK);
427}
428
429static td_err_e
430pt_ta_event_addr(const td_thragent_t *ta, td_event_e event, td_notify_t *ptr)
431{
432 TDBG_FUNC();
433 return (TD_ERR);
434}
435
436static td_err_e
437pt_ta_set_event(const td_thragent_t *ta, td_thr_events_t *events)
438{
439 TDBG_FUNC();
440 return (0);
441}
442
443static td_err_e
444pt_ta_clear_event(const td_thragent_t *ta, td_thr_events_t *events)
445{
446 TDBG_FUNC();
447 return (0);
448}
449
450static td_err_e
451pt_ta_event_getmsg(const td_thragent_t *ta, td_event_msg_t *msg)
452{
453 TDBG_FUNC();
454 return (TD_NOMSG);
455}
456
457static td_err_e
458pt_dbsuspend(const td_thrhandle_t *th, int suspend)
459{
460 td_thragent_t *ta = (td_thragent_t *)th->th_ta;
461 psaddr_t tcb_addr, tmbx_addr, ptr;
462 lwpid_t lwp;
463 uint32_t dflags;
464 int attrflags, locklevel, ret;
465
466 TDBG_FUNC();
467
468 ret = pt_validate(th);

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

946 if (ret != 0)
947 return (P2T(ret));
948 pt_reg_to_ucontext(gregs, &tmbx.tm_context);
949 ret = ps_pwrite(ta->ph, tmbx_addr, &tmbx, sizeof(tmbx));
950 return (P2T(ret));
951}
952
953static td_err_e
954pt_thr_event_enable(const td_thrhandle_t *th, int en)
955{
956 TDBG_FUNC();
957 return (0);
958}
959
960static td_err_e
961pt_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *setp)
962{
963 TDBG_FUNC();
964 return (0);
965}
966
967static td_err_e
968pt_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *setp)
969{
970 TDBG_FUNC();
971 return (0);
972}
973
974static td_err_e
975pt_thr_event_getmsg(const td_thrhandle_t *th, td_event_msg_t *msg)
976{
977 TDBG_FUNC();
978 return (TD_NOMSG);
979}
980
981static td_err_e
982pt_thr_sstep(const td_thrhandle_t *th, int step)
983{

--- 167 unchanged lines hidden ---