PERFORCE change 74828 for review
David Xu
davidxu at FreeBSD.org
Sat Apr 9 20:38:39 PDT 2005
http://perforce.freebsd.org/chv.cgi?CH=74828
Change 74828 by davidxu at davidxu_tiger on 2005/04/10 03:38:01
allow libpthread debugger and libc_r debugger to continue.
sync with libthr debugging code.
Affected files ...
.. //depot/projects/davidxu_thread/src/lib/libthread_db/libc_r_db.c#2 edit
.. //depot/projects/davidxu_thread/src/lib/libthread_db/libpthread_db.c#7 edit
.. //depot/projects/davidxu_thread/src/lib/libthread_db/libthr_db.c#10 edit
Differences ...
==== //depot/projects/davidxu_thread/src/lib/libthread_db/libc_r_db.c#2 (text+ko) ====
@@ -58,7 +58,7 @@
static td_err_e
libc_r_db_ta_clear_event(const td_thragent_t *ta, td_thr_events_t *ev)
{
- return (TD_ERR);
+ return (0);
}
static td_err_e
@@ -160,7 +160,7 @@
static td_err_e
libc_r_db_ta_set_event(const td_thragent_t *ta, td_thr_events_t *ev)
{
- return (TD_ERR);
+ return (0);
}
static td_err_e
@@ -192,13 +192,13 @@
static td_err_e
libc_r_db_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *ev)
{
- return (TD_ERR);
+ return (0);
}
static td_err_e
libc_r_db_thr_event_enable(const td_thrhandle_t *th, int oo)
{
- return (TD_ERR);
+ return (0);
}
static td_err_e
@@ -281,7 +281,7 @@
static td_err_e
libc_r_db_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *ev)
{
- return (TD_ERR);
+ return (0);
}
static td_err_e
==== //depot/projects/davidxu_thread/src/lib/libthread_db/libpthread_db.c#7 (text+ko) ====
@@ -428,7 +428,7 @@
pt_ta_event_addr(const td_thragent_t *ta, td_event_e event, td_notify_t *ptr)
{
TDBG_FUNC();
- return (TD_NOEVENT);
+ return (TD_ERR);
}
static td_err_e
@@ -821,21 +821,21 @@
pt_thr_event_enable(const td_thrhandle_t *th, int en)
{
TDBG_FUNC();
- return (TD_ERR);
+ return (0);
}
static td_err_e
pt_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *setp)
{
TDBG_FUNC();
- return (TD_ERR);
+ return (0);
}
static td_err_e
pt_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *setp)
{
TDBG_FUNC();
- return (TD_ERR);
+ return (0);
}
static td_err_e
==== //depot/projects/davidxu_thread/src/lib/libthread_db/libthr_db.c#10 (text+ko) ====
@@ -70,9 +70,10 @@
int thread_max_keys;
int thread_off_key_allocated;
int thread_off_key_destructor;
+ int thread_off_report_events;
+ int thread_off_event_mask;
int thread_state_zoombie;
int thread_state_running;
- int thread_off_enable_event;
struct pt_map *map;
int map_len;
};
@@ -217,7 +218,9 @@
LOOKUP_VAL(ph, "_thread_off_key_destructor", &ta->thread_off_key_destructor);
LOOKUP_VAL(ph, "_thread_state_running", &ta->thread_state_running);
LOOKUP_VAL(ph, "_thread_state_zoombie", &ta->thread_state_zoombie);
- LOOKUP_VAL(ph, "_thread_off_enable_event", &ta->thread_off_enable_event);
+ LOOKUP_VAL(ph, "_thread_off_report_events",
+ &ta->thread_off_report_events);
+ LOOKUP_VAL(ph, "_thread_off_event_mask", &ta->thread_off_event_mask);
dbg = getpid();
/*
* If this fails it probably means we're debugging a core file and
@@ -450,16 +453,16 @@
pt_ta_set_event(const td_thragent_t *ta, td_thr_events_t *events)
{
int ret;
- int mask;
+ td_thr_events_t mask;
TDBG_FUNC();
ret = ps_pread(ta->ph, ta->thread_event_mask_addr, &mask,
- sizeof(int));
+ sizeof(mask));
if (ret != 0)
return (P2T(ret));
mask |= *events;
ret = ps_pwrite(ta->ph, ta->thread_event_mask_addr, &mask,
- sizeof(int));
+ sizeof(mask));
return (P2T(ret));
}
@@ -467,16 +470,16 @@
pt_ta_clear_event(const td_thragent_t *ta, td_thr_events_t *events)
{
int ret;
- int mask;
+ td_thr_events_t mask;
TDBG_FUNC();
ret = ps_pread(ta->ph, ta->thread_event_mask_addr, &mask,
- sizeof(int));
+ sizeof(mask));
if (ret != 0)
return (P2T(ret));
mask &= ~*events;
ret = ps_pwrite(ta->ph, ta->thread_event_mask_addr, &mask,
- sizeof(int));
+ sizeof(mask));
return (P2T(ret));
}
@@ -672,7 +675,7 @@
int ret;
TDBG_FUNC();
- ret = ps_pwrite(ta->ph, th->th_thread + ta->thread_off_enable_event,
+ ret = ps_pwrite(ta->ph, th->th_thread + ta->thread_off_report_events,
&en, sizeof(int));
return (P2T(ret));
}
@@ -680,15 +683,33 @@
static td_err_e
pt_thr_set_event(const td_thrhandle_t *th, td_thr_events_t *setp)
{
+ const td_thragent_t *ta = th->th_ta;
+ td_thr_events_t mask;
+ int ret;
+
TDBG_FUNC();
- return (TD_ERR);
+ ret = ps_pread(ta->ph, th->th_thread + ta->thread_off_event_mask,
+ &mask, sizeof(mask));
+ mask |= *setp;
+ ret = ps_pwrite(ta->ph, th->th_thread + ta->thread_off_event_mask,
+ &mask, sizeof(mask));
+ return (P2T(ret));
}
static td_err_e
pt_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *setp)
{
+ const td_thragent_t *ta = th->th_ta;
+ td_thr_events_t mask;
+ int ret;
+
TDBG_FUNC();
- return (TD_ERR);
+ ret = ps_pread(ta->ph, th->th_thread + ta->thread_off_event_mask,
+ &mask, sizeof(mask));
+ mask &= ~*setp;
+ ret = ps_pwrite(ta->ph, th->th_thread + ta->thread_off_event_mask,
+ &mask, sizeof(mask));
+ return (P2T(ret));
}
static td_err_e
More information about the p4-projects
mailing list