Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Apr 2005 03:38:37 GMT
From:      David Xu <davidxu@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 74828 for review
Message-ID:  <200504100338.j3A3cbGT005268@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=74828

Change 74828 by davidxu@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504100338.j3A3cbGT005268>