Date: Mon, 11 Apr 2005 23:33:49 GMT From: David Xu <davidxu@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 74939 for review Message-ID: <200504112333.j3BNXnaD032996@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=74939 Change 74939 by davidxu@davidxu_tiger on 2005/04/11 23:32:56 Use thread_db.h in libthr. Rename some symbols. Affected files ... .. //depot/projects/davidxu_thread/src/lib/libthr/Makefile#4 edit .. //depot/projects/davidxu_thread/src/lib/libthr/pthread.map#9 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_event.c#11 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_private.h#16 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_symbols.c#8 edit .. //depot/projects/davidxu_thread/src/lib/libthread_db/libthr_db.c#11 edit .. //depot/projects/davidxu_thread/src/lib/libthread_db/thread_db.h#4 edit Differences ... ==== //depot/projects/davidxu_thread/src/lib/libthr/Makefile#4 (text+ko) ==== @@ -16,6 +16,7 @@ CFLAGS+=-I${.CURDIR}/sys CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf/${MACHINE_ARCH} +CFLAGS+=-I${.CURDIR}/../libthread_db CFLAGS+=-Winline # CFLAGS+=-DSYSTEM_SCOPE_ONLY ==== //depot/projects/davidxu_thread/src/lib/libthr/pthread.map#9 (text+ko) ==== @@ -344,28 +344,29 @@ # Debugger needs these. _libthr_debug; _thread_active_threads; + _thread_bp_create; + _thread_bp_death; + _thread_event_mask; _thread_keytable; + _thread_last_event; _thread_list; _thread_max_keys; _thread_off_attr_flags; _thread_off_dtv; + _thread_off_event_mask; + _thread_off_event_buf; + _thread_off_key_allocated; + _thread_off_key_destructor; _thread_off_linkmap; _thread_off_next; + _thread_off_report_events; + _thread_off_state; _thread_off_tcb; _thread_off_tid; - _thread_off_key_allocated; - _thread_off_key_destructor; - _thread_off_state; _thread_off_tlsindex; - _thread_off_report_events; - _thread_off_event_mask; _thread_size_key; _thread_state_running; _thread_state_zoombie; - _thread_event; - _thread_event_mask; - _thread_create_bp; - _thread_death_bp; local: *; }; ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_event.c#11 (text+ko) ==== @@ -29,33 +29,37 @@ #include "thr_private.h" void -_thread_create_bp(void) +_thread_bp_create(void) { } void -_thread_death_bp(void) +_thread_bp_death(void) { } void _thr_report_creation(struct pthread *curthread, struct pthread *newthread) { + curthread->event_buf.event = TD_CREATE; + curthread->event_buf.th_p = (td_thrhandle_t *)newthread; + curthread->event_buf.data = 0; THR_UMTX_LOCK(curthread, &_thr_event_lock); - _thread_event.event = TD_CREATE; - _thread_event.thread = newthread; - _thread_event.data = 0; - _thread_create_bp(); + _thread_last_event = curthread; + _thread_bp_create(); + _thread_last_event = NULL; THR_UMTX_UNLOCK(curthread, &_thr_event_lock); } void _thr_report_death(struct pthread *curthread) { + curthread->event_buf.event = TD_DEATH; + curthread->event_buf.th_p = (td_thrhandle_t *)curthread; + curthread->event_buf.data = 0; THR_UMTX_LOCK(curthread, &_thr_event_lock); - _thread_event.event = TD_DEATH; - _thread_event.thread = curthread; - _thread_event.data = 0; - _thread_death_bp(); + _thread_last_event = curthread; + _thread_bp_death(); + _thread_last_event = NULL; THR_UMTX_UNLOCK(curthread, &_thr_event_lock); } ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_private.h#16 (text+ko) ==== @@ -56,6 +56,7 @@ #include "pthread_md.h" #include "thr_umtx.h" +#include "thread_db.h" /* * Evaluate the storage class specifier. @@ -490,9 +491,14 @@ /* Cleanup handlers Link List */ struct pthread_cleanup *cleanup; - /* Event reporting masks */ + /* Enable event reporting */ int report_events; + + /* Event mask */ int event_mask; + + /* Event */ + td_event_msg_t event_buf; }; #define THR_UMTX_TRYLOCK(thrd, lck) \ @@ -575,16 +581,6 @@ #define THR_IN_SYNCQ(thrd) (((thrd)->sflags & THR_FLAGS_IN_SYNCQ) != 0) -struct pthread_event -{ - int event; - struct pthread *thread; - void *data; -}; - -/* XXX this must match thread_db.h */ -#define TD_CREATE 0x0004 -#define TD_DEATH 0x0008 #define SHOULD_REPORT_EVENT(curthr, e) \ (curthr->report_events && \ (((curthr)->event_mask | _thread_event_mask ) & e) != 0) @@ -602,7 +598,7 @@ /* For debugger */ SCLASS int _libthr_debug SCLASS_PRESET(0); SCLASS int _thread_event_mask SCLASS_PRESET(0); -SCLASS struct pthread_event _thread_event; +SCLASS struct pthread *_thread_last_event; /* List of all threads: */ SCLASS TAILQ_HEAD(, pthread) _thread_list @@ -743,8 +739,8 @@ void _thr_report_creation(struct pthread *curthread, struct pthread *newthread); void _thr_report_death(struct pthread *curthread); -void _thread_create_bp(void); -void _thread_death_bp(void); +void _thread_bp_create(void); +void _thread_bp_death(void); /* #include <sys/aio.h> */ #ifdef _SYS_AIO_H_ ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_symbols.c#8 (text+ko) ==== @@ -49,6 +49,7 @@ int _thread_off_tlsindex = offsetof(Obj_Entry, tlsindex); int _thread_off_report_events = offsetof(struct pthread, report_events); int _thread_off_event_mask = offsetof(struct pthread, event_mask); +int _thread_off_event_buf = offsetof(struct pthread, event_buf); int _thread_size_key = sizeof(struct pthread_key); int _thread_off_key_allocated = offsetof(struct pthread_key, allocated); int _thread_off_key_destructor = offsetof(struct pthread_key, destructor); ==== //depot/projects/davidxu_thread/src/lib/libthread_db/libthr_db.c#11 (text+ko) ==== @@ -53,10 +53,10 @@ psaddr_t thread_list_addr; psaddr_t thread_active_threads_addr; psaddr_t thread_keytable_addr; - psaddr_t thread_event_addr; + psaddr_t thread_last_event_addr; psaddr_t thread_event_mask_addr; - psaddr_t thread_create_bp_addr; - psaddr_t thread_death_bp_addr; + psaddr_t thread_bp_create_addr; + psaddr_t thread_bp_death_addr; int thread_inited; int thread_off_dtv; int thread_off_tlsindex; @@ -200,10 +200,10 @@ LOOKUP_SYM(ph, "_thread_list", &ta->thread_list_addr); LOOKUP_SYM(ph, "_thread_active_threads",&ta->thread_active_threads_addr); LOOKUP_SYM(ph, "_thread_keytable", &ta->thread_keytable_addr); - LOOKUP_SYM(ph, "_thread_event", &ta->thread_event_addr); + LOOKUP_SYM(ph, "_thread_last_event", &ta->thread_last_event_addr); LOOKUP_SYM(ph, "_thread_event_mask", &ta->thread_event_mask_addr); - LOOKUP_SYM(ph, "_thread_create_bp", &ta->thread_create_bp_addr); - LOOKUP_SYM(ph, "_thread_death_bp", &ta->thread_death_bp_addr); + LOOKUP_SYM(ph, "_thread_bp_create", &ta->thread_bp_create_addr); + LOOKUP_SYM(ph, "_thread_bp_death", &ta->thread_bp_death_addr); LOOKUP_VAL(ph, "_thread_off_dtv", &ta->thread_off_dtv); LOOKUP_VAL(ph, "_thread_off_tlsindex", &ta->thread_off_tlsindex); LOOKUP_VAL(ph, "_thread_off_attr_flags", &ta->thread_off_attr_flags); @@ -438,11 +438,11 @@ switch (event) { case TD_CREATE: ptr->type = NOTIFY_BPT; - ptr->u.bptaddr = ta->thread_create_bp_addr; + ptr->u.bptaddr = ta->thread_bp_create_addr; return (0); case TD_DEATH: ptr->type = NOTIFY_BPT; - ptr->u.bptaddr = ta->thread_death_bp_addr; + ptr->u.bptaddr = ta->thread_bp_death_addr; return (0); default: return (TD_ERR); ==== //depot/projects/davidxu_thread/src/lib/libthread_db/thread_db.h#4 (text+ko) ==== @@ -57,6 +57,7 @@ TD_PARTIALREG } td_err_e; +struct ps_prochandle; typedef struct td_thragent td_thragent_t; typedef long thread_t; /* Must be an integral type. */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504112333.j3BNXnaD032996>