From e1e46622ac0fce73d802fa4a8a2e83cc25cd9e7a Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 14 Feb 2015 23:04:02 -0600 Subject: Revert "resolve merge" This reverts commit 6b6ede3d15f04fe825cfa9f697507457e3640344. --- libpthread/linuxthreads_db/ChangeLog | 467 +++++++++++++++++++++++ libpthread/linuxthreads_db/Makefile.in | 16 +- libpthread/linuxthreads_db/Makefile.old | 56 +++ libpthread/linuxthreads_db/shlib-versions | 2 + libpthread/linuxthreads_db/td_init.c | 3 +- libpthread/linuxthreads_db/td_ta_clear_event.c | 2 +- libpthread/linuxthreads_db/td_ta_event_getmsg.c | 1 + libpthread/linuxthreads_db/td_ta_map_id2thr.c | 1 + libpthread/linuxthreads_db/td_ta_map_lwp2thr.c | 1 + libpthread/linuxthreads_db/td_ta_set_event.c | 2 +- libpthread/linuxthreads_db/td_ta_thr_iter.c | 5 +- libpthread/linuxthreads_db/td_ta_tsd_iter.c | 1 + libpthread/linuxthreads_db/td_thr_clear_event.c | 2 +- libpthread/linuxthreads_db/td_thr_tls_get_addr.c | 36 +- libpthread/linuxthreads_db/td_thr_tlsbase.c | 70 ++++ libpthread/linuxthreads_db/td_thr_tsd.c | 1 + libpthread/linuxthreads_db/td_thr_validate.c | 1 + libpthread/linuxthreads_db/thread_dbP.h | 2 +- 18 files changed, 625 insertions(+), 44 deletions(-) create mode 100644 libpthread/linuxthreads_db/ChangeLog create mode 100644 libpthread/linuxthreads_db/Makefile.old create mode 100644 libpthread/linuxthreads_db/shlib-versions create mode 100644 libpthread/linuxthreads_db/td_thr_tlsbase.c (limited to 'libpthread/linuxthreads_db') diff --git a/libpthread/linuxthreads_db/ChangeLog b/libpthread/linuxthreads_db/ChangeLog new file mode 100644 index 000000000..9964b4dd4 --- /dev/null +++ b/libpthread/linuxthreads_db/ChangeLog @@ -0,0 +1,467 @@ +2006-04-25 Bernhard Fischer + + * td_init.c (__td_debug): Only declare when NDEBUG is undefined. + +2006-04-25 Bernhard Fischer + + * thread_dbP.h: Fix Indices typo in comment. + +2005-11-02 Daniel Jacobowitz + + * td_ta_clear_event.c (td_ta_clear_event): Correct arguments to + sizeof. + * td_ta_set_event.c (td_ta_set_event): Likewise. + * td_thr_clear_event.c (td_thr_clear_event): Likewise. + * td_thr_set_event.c (td_thr_set_event): Likewise. + +2005-01-09 Andreas Jaeger + + * td_thr_tlsbase.c (td_thr_tlsbase): Adjust for dtv change. + +2004-05-01 Jakub Jelinek + + * thread_dbP.h (LOG): Use write instead of __libc_write. + +2004-03-13 Jakub Jelinek + + * td_thr_tlsbase.c: Remove dl-tls.h include. Don't use + TLS_TP_OFFSET in the #if, but TLS_TCB_SIZE == 0 ?:. + +2004-03-12 Roland McGrath + + * td_thr_tlsbase.c [TLS_DTV_AT_TP && TLS_TP_OFFSET > 0]: Handle this + case (PowerPC) differently. + +2003-11-25 Roland McGrath + + * td_symbol_list.c (symbol_list_arr) [HAVE_ASM_GLOBAL_DOT_NAME]: + Prepend "." to symbol names for functions. + +2003-08-18 Daniel Jacobowitz + + * td_thr_getfpregs.c (td_thr_getfpregs): Use the main thread if + the descriptor is uninitialized. + * td_thr_getgregs.c (td_thr_getgregs): Likewise. + +2003-03-15 Roland McGrath + + * thread_db.h (td_err_e): Add TD_NOTLS and TD_TLSDEFER. + (td_thr_tlsbase): Declare it. + * td_thr_tlsbase.c: New file. + * Makefile (libthread_db-routines): Add it. + * Versions (libthread_db: GLIBC_2.3.3): New set, add td_thr_tlsbase. + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Use td_thr_tlsbase. + +2003-02-27 Roland McGrath + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Handle TLS_DTV_AT_TP. + + * td_ta_thr_iter.c (handle_descr) [!defined USE_TLS || !TLS_DTV_AT_TP]: + Conditionalize p_header use on this. + +2003-01-29 Roland McGrath + + * td_ta_new.c (td_ta_new): Cap the `sizeof_descr' value read from the + inferior at `sizeof (struct _pthread_descr_struct)', since we use it + as a length in copies to our own structures. + +2003-01-05 Ulrich Drepper + + * Makefile (libthread_db.so-no-z-defs): Define. + +2002-09-29 Ulrich Drepper + + * td_thr_tsd.c (td_thr_tsd): Read correct entry from pthread_keys + array. + +2002-09-28 Andreas Jaeger + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Fix reference to dtv. + +2002-09-24 Roland McGrath + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Fetch just the + individual members we need, not the whole structures. + +2002-09-24 Ulrich Drepper + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Change second + parameter to be the address of the link map in the inferior process. + * thread_db.h: Update prototype for td_thr_tls_get_addr. + +2002-08-23 Ulrich Drepper + + * thread_dbP.h: Define LINUXTHREADS_VERSION. + * td_symbol_list.c (symbol_list_arr): Add LINUXTHREADS_VERSION string. + * td_ta_new.c (td_ta_new): After verifying the thread library is + there check version. + * thread_db.h: Add new error TD_VERSION. + +2002-08-21 Roland McGrath + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): __attribute_used__ -> + __attribute__ ((unused)) for arguments. + +2002-08-07 Ulrich Drepper + + * thread_dbP.h: Define LINUXTHREADS_INITIAL_REPORT_EVENTS. + * td_thr_event_enable.c (td_thr_event_enable): If th->th_unique is + null write to __linuxthreads_initial_report_events. + * td_symbol_list.c (symbol_list_arr): Add + __linuxthreads_initial_report_events. + +2002-07-16 Ulrich Drepper + + * td_thr_clear_event.c: Yet more changes to help with TLS-enabled + libpthread. + * td_thr_event_enable.c: Likewise. + * td_thr_event_getmsg.c: Likewise. + * td_thr_set_event.c: Likewise. + * td_thr_setfpregs.c: Likewise. + * td_thr_setgregs.c: Likewise. + * td_thr_tsd.c: Likewise. + * td_thr_validate.c: Likewise. + +2002-07-15 Ulrich Drepper + + * td_ta_thr_iter.c: Some more changes to enable using TLS-enabled + libpthread. + * td_thr_event_enable.c: Likewise. + * td_thr_getfpregs.c: Likewise. + * td_thr_getgregs.c: Likewise. + +2002-07-14 Ulrich Drepper + + * td_ta_map_id2thr.c: Begin fixing implementation for libpthread with + TLS support. + * td_ta_map_lwp2thr.c: Likewise. + * td_ta_thr_iter.c: Likewise. + * td_thr_get_info.c: Likewise. + +2002-07-10 Ulrich Drepper + + * Versions [libthread_db] (GLIBC_2.3): Add td_thr_tls_get_addr. + +2002-06-14 H.J. Lu + + * td_thr_tls_get_addr.c (td_thr_tls_get_addr): Don't include + "tls.h". Return TD_ERR if USE_TLS is not defined. + +2002-06-12 Ulrich Drepper + + * td_thr_tls_get_addr.c: New file. + * thread_db.h: Add prototype for td_thr_tls_get_addr. + * Makefile (libthread_db-routines): Add td_thr_tls_get_addr. + +2002-03-03 Andreas Jaeger + + * thread_dbP.h: Include for prototypes of __libc_write. + +2002-02-04 Ulrich Drepper + + * thread_dbP.h: Include descr.h instead of internals.h. + * td_ta_event_getmsg.c: Also include . + * td_ta_map_id2thr.c: Likewise. + * td_ta_map_lwp2thr.c: Likewise. + * td_ta_thr_iter.c: Likewise. + * td_ta_tsd_iter.c: Likewise. + * td_thr_tsd.c: Likewise. + * td_thr_validate.c: Likewise. + +2001-12-28 Andreas Jaeger + + * td_init.c (td_init): Don't use __FUNCTION__ as literal. + * td_log.c (td_log): Likewise. + * td_ta_delete.c (td_ta_delete): Likewise. + * td_ta_get_nthreads.c (td_ta_get_nthreads): Likewise. + * td_ta_get_ph.c (td_ta_get_ph): Likewise. + * td_ta_map_id2thr.c (td_ta_map_id2thr): Likewise. + * td_ta_map_lwp2thr.c (td_ta_map_lwp2thr): Likewise. + * td_ta_new.c (td_ta_new): Likewise. + * td_ta_clear_event.c (td_ta_clear_event): Likewise. + * td_ta_enable_stats.c (td_ta_enable_stats): Likewise. + * td_ta_event_addr.c (td_ta_event_addr): Likewise. + * td_ta_event_getmsg.c (td_ta_event_getmsg): Likewise. + * td_ta_get_stats.c (td_ta_get_stats): Likewise. + * td_ta_reset_stats.c (td_ta_reset_stats): Likewise. + * td_ta_set_event.c (td_ta_set_event): Likewise. + * td_ta_setconcurrency.c (td_ta_setconcurrency): Likewise. + * td_ta_thr_iter.c (td_ta_thr_iter): Likewise. + * td_ta_tsd_iter.c (td_ta_tsd_iter): Likewise. + * td_thr_clear_event.c (td_thr_clear_event): Likewise. + * td_thr_dbresume.c (td_thr_dbresume): Likewise. + * td_thr_dbsuspend.c (td_thr_dbsuspend): Likewise. + * td_thr_event_enable.c (td_thr_event_enable): Likewise. + * td_thr_event_getmsg.c (td_thr_event_getmsg): Likewise. + * td_thr_get_info.c (td_thr_get_info): Likewise. + * td_thr_getfpregs.c (td_thr_getfpregs): Likewise. + * td_thr_getgregs.c (td_thr_getgregs): Likewise. + * td_thr_getxregs.c (td_thr_getxregs): Likewise. + * td_thr_getxregsize.c (td_thr_getxregsize): Likewise. + * td_thr_set_event.c (td_thr_set_event): Likewise. + * td_thr_setfpregs.c (td_thr_setfpregs): Likewise. + * td_thr_setgregs.c (td_thr_setgregs): Likewise. + * td_thr_setprio.c (td_thr_setprio): Likewise. + * td_thr_setsigpending.c (td_thr_setsigpending): Likewise. + * td_thr_setxregs.c (td_thr_setxregs): Likewise. + * td_thr_sigsetmask.c (td_thr_sigsetmask): Likewise. + * td_thr_tsd.c (td_thr_tsd): Likewise. + * td_thr_validate.c (td_thr_validate): Likewise. + +2001-04-12 Ulrich Drepper + + * td_ta_map_id2thr.c: If thread terminated return TD_NOTHR. + * td_thr_validate.c: Likewise. + +2001-04-04 Ulrich Drepper + + * td_thr_getfpregs.c: If p_pid is zero use ps_getpid(). + * td_thr_getgregs.c: Likewise. + * td_thr_setfpregs.c: Likewise. + * td_thr_setgregs.c: Likewise. + +2001-03-20 Ulrich Drepper + + * Makefile (libthread_db-routines): Add td_symbol_list. + * Versions [libthread_db] (GLIBC_2.2.3): Add td_symbol_list. + * td_symbol_list.c: New file. + * thread_db.h: Add prototype for td_symbol_list. + * thread_dbP.h: Define symbol name indices. + Add prototype for td_lookup. + * td_ta_event_addr.c: Use td_lookup instead of directly using + ps_pglobal_lookup to find symbol address. + * td_ta_get_nthreads.c: Likewise. + * td_ta_new.c: Likewise. + +2001-03-18 Ulrich Drepper + + * Makefile: When generating DSO link with libc_nonshared.a. + +2000-08-01 Andreas Jaeger + + * Makefile (distribute): Add missing files. + +2000-04-24 Mark Kettenis + + * td_thr_get_info.c (td_thr_get_info): Set ti_state to + TD_THR_ACTIVE instead of TD_THR_RUN. If the thread is no longer + running but is still joinable, set it to TD_THR_ZOMBIE. Otherwise + set it to TD_THR_UNKNOWN. + +2000-02-25 Andreas Jaeger + + * td_ta_thr_iter.c: Include for prototype declaration. + * td_ta_tsd_iter.c: Likewise. + +2000-01-20 Andreas Jaeger + + * td_thr_getgregs.c (td_thr_getgregs): Fix typo. + +2000-01-19 Ulrich Drepper + + * td_thr_getgregs.c: Correct size parameter of memset call. + +1999-12-02 Ulrich Drepper + + * proc_service.h: Fix typos in last added declaractions. + +1999-12-01 Ulrich Drepper + + * proc_service.h: Add ps_pstop, ps_pcontinue, ps_lstop, and + ps_lcontinue prototypes. + +1999-11-23 Ulrich Drepper + + * Makefile: Correct dependency for shared object. + +1999-11-22 Ulrich Drepper + + * td_ta_map_lwp2thr.c: Add missing brace in comparison. + + * thread_dbP.h (LOG): Only print message if __td_debug is nonzero. + * td_init.c: Add __td_debug. + +1999-11-12 Ulrich Drepper + + * td_ta_thr_iter.c: Start copying list of descriptors from right + position in target process. + + * td_ta_thr_iter.c: Fix loop starting point over all but main and + manager thread. + + * td_ta_thr_iter.c: Read descriptors for main and manager thread + special since after this we can assume that no new threads will be + created anymore (at least in the gdb implementation). + + * Makefile: Define version correctly. + +1999-11-10 Ulrich Drepper + + * td_ta_map_lwp2thr.c: If p_pid field is zero, this is before the + thread library is initialized and we get the PID from the + debugger. + +1999-11-08 Ulrich Drepper + + * td_thr_get_info.c: Make sure ti_lid is never zero. + + * proc_service.h: Add ps_getpid prototype. + +1999-11-03 Ulrich Drepper + + * thread_dbP.h (ta_ok): New function. + * td_ta_new.c: Add new handle to list. + * td_ta_delete.c: Remove handle from list. + * td_ta_clear_event.c: Use ta_ok to check for correct ta parameter. + * td_ta_enable_stats.c: Likewise. + * td_ta_event_addr.c: Likewise. + * td_ta_event_getmsg.c: Likewise. + * td_ta_get_nthreads.c: Likewise. + * td_ta_get_ph.c: Likewise. + * td_ta_get_stats.c: Likewise. + * td_ta_map_id2thr.c: Likewise. + * td_ta_map_lwp2thr.c: Likewise. + * td_ta_reset_stats.c: Likewise. + * td_ta_set_event.c: Likewise. + * td_ta_setconcurrency.c: Likewise. + * td_ta_thr_iter.c: Likewise. + + * td_ta_tsd_iter.c: Optimize memory retrieving. + + * Versions: New file. + + * td_thr_get_info.c (td_thr_get_info): Initialize ti_traceme. + +1999-11-02 Ulrich Drepper + + * td_ta_thr_iter.c (td_ta_thr_iter): Optimize a bit. Read all + handles at once. + + * thread_dbP.h (struct th_thragent): Add pthread_handle_num. + * td_ta_new.c: Initialize pthread_handle_num. + * td_ta_event_getmsg.c: If last event was already reported search + for another unreported event. + + * td_thr_get_info.c (td_thr_get_info): Initialize ti_events. + + * Makefile (libthread_db-routines): Add td_ta_set_event, + td_ta_event_getmsg, and td_ta_clear_event. + * td_ta_clear_event.c: New file. + * td_ta_event_getmsg.c: New file. + * td_ta_new.c: Get address of __pthread_last_event in target. + * td_ta_set_event.c: Don't overwrite old mask, set additional bits. + * td_thr_set_event.c: Likewise. + * td_thr_clear_event.c: Implement. + * thread_db.h: Declare td_ta_clear_event and td_ta_event_getmsg. + * thread_dbP.h (struct td_thragent): Add pthread_last_event. + + * td_ta_new.c: Don't test for __pthread_threads_debug. Get address + of __pthread_threads_events and fail if this is not possible. + * td_ta_event_addr.c: Implement. + * td_thr_event_enable.c: Implement. + * td_thr_event_getmsg.c: Implement. + * td_thr_set_event.c: Implement. + * td_ta_set_event.c: New file. + * thread_db.h (td_eventbuf_t): Define. + Declare td_ta_set_event. + * thread_dbP.h (struct td_thragent): Add pthread_threads_eventsp. + + * td_thr_getfpregs.c: For terminated threads return empty structure. + * td_thr_getgregs.c: Likewise. + * td_thr_setfpregs.c: Likewise. + * td_thr_setgregs.c: Likewise. + +1999-11-01 Ulrich Drepper + + * thread_db.h: Shuffle types around to make things work for gdb. + * thread_dbP.h: Include proc_service.h before thread_db.h. + + * thread_db.h: It's TD_NOLIBTHREAD, not TD_LIBTHREAD. + * td_ta_new.c: Likewise. + +1999-10-14 Ulrich Drepper + + * td_ta_new.c: p_startfct does not exist anymore. + + * td_thr_get_info.c: Always initialize start function. + + * td_ta_thr_iter.c: Don't return threads which exited (but are not + joined). + + * td_thr_validate.c: Don't skip manager thread. + +1999-10-13 Ulrich Drepper + + * td_ta_thr_iter.c: Use size of descriptor from *TA. + Don't return manager thread before it's actually running. + Actually use state parameter to distingusih at least a few states. + + * td_thr_get_info.c: Handle manager thread special. Fill in ti_lid, + ti_state, and ti_startfunc fields. + +1999-10-12 Andreas Jaeger + + * thread_dbP.h: Include for strlen declaration. Remove + __libc_write prototype since this is already declared in + linuxthreads/internals.h. + +1999-10-11 Ulrich Drepper + + * thread_db.h: Fix comment for ti_type. + + * td_thr_get_info.c: Initialize ti_type field. + + * td_ta_thr_iter.c: Also report the manager thread. + +1999-10-08 Andreas Jaeger + + * thread_db.h: Fix typos in comments. + + * td_ta_get_nthreads.c (td_ta_get_nthreads): Don't hardcode + libpthread library name, get it from instead. + * td_ta_new.c (td_ta_new): Likewise. + +1999-10-08 Ulrich Drepper + + * shlib-versions: New file. + +1999-10-07 Ulrich Drepper + + * Makefile: New file. + * proc_service.h: New file. + * td_init.c: New file. + * td_log.c: New file. + * td_ta_delete.c: New file. + * td_ta_enable_stats.c: New file. + * td_ta_event_addr.c: New file. + * td_ta_get_nthreads.c: New file. + * td_ta_get_ph.c: New file. + * td_ta_get_stats.c: New file. + * td_ta_map_id2thr.c: New file. + * td_ta_map_lwp2thr.c: New file. + * td_ta_new.c: New file. + * td_ta_reset_stats.c: New file. + * td_ta_setconcurrency.c: New file. + * td_ta_thr_iter.c: New file. + * td_ta_tsd_iter.c: New file. + * td_thr_clear_event.c: New file. + * td_thr_dbresume.c: New file. + * td_thr_dbsuspend.c: New file. + * td_thr_event_enable.c: New file. + * td_thr_event_getmsg.c: New file. + * td_thr_get_info.c: New file. + * td_thr_getfpregs.c: New file. + * td_thr_getgregs.c: New file. + * td_thr_getxregs.c: New file. + * td_thr_getxregsize.c: New file. + * td_thr_set_event.c: New file. + * td_thr_setfpregs.c: New file. + * td_thr_setgregs.c: New file. + * td_thr_setprio.c: New file. + * td_thr_setsigpending.c: New file. + * td_thr_setxregs.c: New file. + * td_thr_sigsetmask.c: New file. + * td_thr_tsd.c: New file. + * td_thr_validate.c: New file. + * thread_db.h: New file. + * thread_dbP.h: New file. diff --git a/libpthread/linuxthreads_db/Makefile.in b/libpthread/linuxthreads_db/Makefile.in index cf0ceb394..52cc7c838 100644 --- a/libpthread/linuxthreads_db/Makefile.in +++ b/libpthread/linuxthreads_db/Makefile.in @@ -5,10 +5,10 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -subdirs += libpthread/linuxthreads.old_db +subdirs += libpthread/linuxthreads_db # Get the thread include dependencies and shared object name -CFLAGS-libpthread/linuxthreads.old_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\"" +CFLAGS-libpthread/linuxthreads_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\"" LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols) ifeq ($(DOSTRIP),y) @@ -19,8 +19,8 @@ LIBS-libthread_db.so := $(LIBS) libthread_db_FULL_NAME := libthread_db-$(VERSION).so -libthread_db_DIR := $(top_srcdir)libpthread/linuxthreads.old_db -libthread_db_OUT := $(top_builddir)libpthread/linuxthreads.old_db +libthread_db_DIR := $(top_srcdir)libpthread/linuxthreads_db +libthread_db_OUT := $(top_builddir)libpthread/linuxthreads_db libthread_db_SRC := $(wildcard $(libthread_db_DIR)/*.c) @@ -68,11 +68,11 @@ linuxthreads_db_headers := $(top_builddir)include/thread_db.h $(linuxthreads_db_headers): $(wildcard $(addprefix $(top_builddir)include/config/linuxthreads/,old.h new.h)) headers-$(PTHREADS_DEBUG_SUPPORT) += $(linuxthreads_db_headers) -objclean-y += CLEAN_libpthread/linuxthreads.old_db -headers_clean-y += HEADERCLEAN_libpthread/linuxthreads.old_db +objclean-y += CLEAN_libpthread/linuxthreads_db +headers_clean-y += HEADERCLEAN_libpthread/linuxthreads_db -HEADERCLEAN_libpthread/linuxthreads.old_db: +HEADERCLEAN_libpthread/linuxthreads_db: $(do_rm) $(linuxthreads_db_headers) -CLEAN_libpthread/linuxthreads.old_db: +CLEAN_libpthread/linuxthreads_db: $(do_rm) $(addprefix $(libthread_db_OUT)/*., o os oS a) diff --git a/libpthread/linuxthreads_db/Makefile.old b/libpthread/linuxthreads_db/Makefile.old new file mode 100644 index 000000000..014ddf835 --- /dev/null +++ b/libpthread/linuxthreads_db/Makefile.old @@ -0,0 +1,56 @@ +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; see the file COPYING.LIB. If +# not, see . + +# Makefile for linuxthreads debug library subdirectory of GNU C Library. + +subdir := linuxthreads_db + +linuxthreads_db-version = 1.0 + +extra-libs = libthread_db +extra-libs-others := $(extra-libs) + +headers = thread_db.h +libthread_db-routines = td_init td_log td_ta_delete td_ta_get_nthreads \ + td_ta_get_ph td_ta_map_id2thr td_ta_map_lwp2thr \ + td_ta_new td_ta_thr_iter td_ta_tsd_iter \ + td_thr_get_info td_thr_getfpregs td_thr_getgregs \ + td_thr_getxregs td_thr_getxregsize td_thr_setfpregs \ + td_thr_setgregs td_thr_setprio td_thr_setsigpending \ + td_thr_setxregs td_thr_sigsetmask td_thr_tsd \ + td_thr_validate td_thr_dbsuspend td_thr_dbresume \ + td_ta_setconcurrency td_ta_enable_stats \ + td_ta_reset_stats td_ta_get_stats td_ta_event_addr \ + td_thr_event_enable td_thr_set_event \ + td_thr_clear_event td_thr_event_getmsg \ + td_ta_set_event td_ta_event_getmsg \ + td_ta_clear_event td_symbol_list \ + td_thr_tlsbase td_thr_tls_get_addr + +libthread_db-inhibit-o = $(filter-out .os,$(object-suffixes)) + +# The ps_* callback functions are not defined. +libthread_db.so-no-z-defs = yes + +distribute = thread_dbP.h shlib-versions proc_service.h +include ../Rules + +# Depend on libc.so so a DT_NEEDED is generated in the shared objects. +# This ensures they will load libc.so for needed symbols if loaded by +# a statically-linked program that hasn't already loaded it. +$(objpfx)libthread_db.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff --git a/libpthread/linuxthreads_db/shlib-versions b/libpthread/linuxthreads_db/shlib-versions new file mode 100644 index 000000000..592f7fa28 --- /dev/null +++ b/libpthread/linuxthreads_db/shlib-versions @@ -0,0 +1,2 @@ +# The thread debug library +.*-.*-linux.* libthread_db=1 diff --git a/libpthread/linuxthreads_db/td_init.c b/libpthread/linuxthreads_db/td_init.c index ecb0d3de2..1edf53d3a 100644 --- a/libpthread/linuxthreads_db/td_init.c +++ b/libpthread/linuxthreads_db/td_init.c @@ -1,5 +1,5 @@ /* Initialization function of thread debugger support library. - Copyright (C) 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1999. @@ -23,6 +23,7 @@ int __td_debug; #endif + td_err_e td_init (void) { diff --git a/libpthread/linuxthreads_db/td_ta_clear_event.c b/libpthread/linuxthreads_db/td_ta_clear_event.c index e827b46ae..d912e4478 100644 --- a/libpthread/linuxthreads_db/td_ta_clear_event.c +++ b/libpthread/linuxthreads_db/td_ta_clear_event.c @@ -21,7 +21,7 @@ td_err_e -td_ta_clear_event(const td_thragent_t *ta,td_thr_events_t *event) +td_ta_clear_event(const td_thragent_t *ta, td_thr_events_t *event) { td_thr_events_t old_event; int i; diff --git a/libpthread/linuxthreads_db/td_ta_event_getmsg.c b/libpthread/linuxthreads_db/td_ta_event_getmsg.c index b7c2fcd72..c23d9264f 100644 --- a/libpthread/linuxthreads_db/td_ta_event_getmsg.c +++ b/libpthread/linuxthreads_db/td_ta_event_getmsg.c @@ -21,6 +21,7 @@ #include #include "thread_dbP.h" +#include td_err_e diff --git a/libpthread/linuxthreads_db/td_ta_map_id2thr.c b/libpthread/linuxthreads_db/td_ta_map_id2thr.c index dc24533b8..a90286865 100644 --- a/libpthread/linuxthreads_db/td_ta_map_id2thr.c +++ b/libpthread/linuxthreads_db/td_ta_map_id2thr.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include td_err_e diff --git a/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c b/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c index 00efc43d6..d8f2254fe 100644 --- a/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c +++ b/libpthread/linuxthreads_db/td_ta_map_lwp2thr.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include td_err_e diff --git a/libpthread/linuxthreads_db/td_ta_set_event.c b/libpthread/linuxthreads_db/td_ta_set_event.c index 3a75e7b7f..25330b952 100644 --- a/libpthread/linuxthreads_db/td_ta_set_event.c +++ b/libpthread/linuxthreads_db/td_ta_set_event.c @@ -21,7 +21,7 @@ td_err_e -td_ta_set_event(const td_thragent_t *ta,td_thr_events_t *event) +td_ta_set_event(const td_thragent_t *ta, td_thr_events_t *event) { td_thr_events_t old_event; int i; diff --git a/libpthread/linuxthreads_db/td_ta_thr_iter.c b/libpthread/linuxthreads_db/td_ta_thr_iter.c index da230096f..35a2e7834 100644 --- a/libpthread/linuxthreads_db/td_ta_thr_iter.c +++ b/libpthread/linuxthreads_db/td_ta_thr_iter.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include #include static int @@ -38,7 +39,9 @@ handle_descr (const td_thragent_t *ta, td_thr_iter_f *callback, memset (&pds, '\0', sizeof (pds)); /* Empty thread descriptor the thread library would create. */ - pds.p_self = &pds; +#if !defined __UCLIBC_HAS_TLS__ || !TLS_DTV_AT_TP + pds.p_header.data.self = &pds; +#endif pds.p_nextlive = pds.p_prevlive = &pds; pds.p_tid = PTHREAD_THREADS_MAX; /* The init code also sets up p_lock, p_errnop, p_herrnop, and diff --git a/libpthread/linuxthreads_db/td_ta_tsd_iter.c b/libpthread/linuxthreads_db/td_ta_tsd_iter.c index 758222cd7..eb428bf12 100644 --- a/libpthread/linuxthreads_db/td_ta_tsd_iter.c +++ b/libpthread/linuxthreads_db/td_ta_tsd_iter.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include #include td_err_e diff --git a/libpthread/linuxthreads_db/td_thr_clear_event.c b/libpthread/linuxthreads_db/td_thr_clear_event.c index 67a592a10..9674f9f0f 100644 --- a/libpthread/linuxthreads_db/td_thr_clear_event.c +++ b/libpthread/linuxthreads_db/td_thr_clear_event.c @@ -23,7 +23,7 @@ td_err_e -td_thr_clear_event(const td_thrhandle_t *th,td_thr_events_t *event) +td_thr_clear_event(const td_thrhandle_t *th, td_thr_events_t *event) { td_thr_events_t old_event; int i; diff --git a/libpthread/linuxthreads_db/td_thr_tls_get_addr.c b/libpthread/linuxthreads_db/td_thr_tls_get_addr.c index ac4d706c4..892acba6b 100644 --- a/libpthread/linuxthreads_db/td_thr_tls_get_addr.c +++ b/libpthread/linuxthreads_db/td_thr_tls_get_addr.c @@ -20,48 +20,24 @@ #include #include "thread_dbP.h" -/* Value used for dtv entries for which the allocation is delayed. */ -# define TLS_DTV_UNALLOCATED ((void *) -1l) - - td_err_e td_thr_tls_get_addr (const td_thrhandle_t *th __attribute__ ((unused)), void *map_address __attribute__ ((unused)), size_t offset __attribute__ ((unused)), void **address __attribute__ ((unused))) { -#if defined(USE_TLS) && USE_TLS - size_t modid; - union dtv pdtv, *dtvp; - - LOG ("td_thr_tls_get_addr"); - - /* Get the DTV pointer from the thread descriptor. */ - if (ps_pdread (th->th_ta_p->ph, - &((struct _pthread_descr_struct *) th->th_unique)->p_header.data.dtvp, - &dtvp, sizeof dtvp) != PS_OK) - return TD_ERR; /* XXX Other error value? */ - +#ifdef __UCLIBC_HAS_TLS__ /* Read the module ID from the link_map. */ + size_t modid; if (ps_pdread (th->th_ta_p->ph, &((struct link_map *) map_address)->l_tls_modid, &modid, sizeof modid) != PS_OK) return TD_ERR; /* XXX Other error value? */ - /* Get the corresponding entry in the DTV. */ - if (ps_pdread (th->th_ta_p->ph, dtvp + modid, - &pdtv, sizeof (union dtv)) != PS_OK) - return TD_ERR; /* XXX Other error value? */ - - /* It could be that the memory for this module is not allocated for - the given thread. */ - if (pdtv.pointer == TLS_DTV_UNALLOCATED) - /* There is not much we can do. */ - return TD_NOTALLOC; - - *address = (char *) pdtv.pointer + offset; - - return TD_OK; + td_err_e result = td_thr_tlsbase (th, modid, address); + if (result == TD_OK) + *address += offset; + return result; #else return TD_ERR; #endif diff --git a/libpthread/linuxthreads_db/td_thr_tlsbase.c b/libpthread/linuxthreads_db/td_thr_tlsbase.c new file mode 100644 index 000000000..ac86c42fe --- /dev/null +++ b/libpthread/linuxthreads_db/td_thr_tlsbase.c @@ -0,0 +1,70 @@ +/* Locate TLS data for a thread. + Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include "thread_dbP.h" + +/* Value used for dtv entries for which the allocation is delayed. */ +# define TLS_DTV_UNALLOCATED ((void *) -1l) + +td_err_e +td_thr_tlsbase (const td_thrhandle_t *th, + unsigned long int modid, + psaddr_t *base) +{ + if (modid < 1) + return TD_NOTLS; + +#ifdef __UCLIBC_HAS_TLS__ + union dtv pdtv, *dtvp; + + LOG ("td_thr_tlsbase"); + + psaddr_t dtvpp = th->th_unique; +#if defined(TLS_TCB_AT_TP) + dtvpp += offsetof (struct _pthread_descr_struct, p_header.data.dtvp); +#elif defined(TLS_DTV_AT_TP) +/* Special case hack. If TLS_TCB_SIZE == 0 (on PowerPC), there is no TCB + containing the DTV at the TP, but actually the TCB lies behind the TP, + i.e. at the very end of the area covered by TLS_PRE_TCB_SIZE. */ + dtvpp += TLS_PRE_TCB_SIZE + offsetof (tcbhead_t, dtv) + - (TLS_TCB_SIZE == 0 ? sizeof (tcbhead_t) : 0); +#else +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined." +#endif + + /* Get the DTV pointer from the thread descriptor. */ + if (ps_pdread (th->th_ta_p->ph, dtvpp, &dtvp, sizeof dtvp) != PS_OK) + return TD_ERR; /* XXX Other error value? */ + + /* Get the corresponding entry in the DTV. */ + if (ps_pdread (th->th_ta_p->ph, dtvp + modid, + &pdtv, sizeof (union dtv)) != PS_OK) + return TD_ERR; /* XXX Other error value? */ + + /* It could be that the memory for this module is not allocated for + the given thread. */ + if (pdtv.pointer.val == TLS_DTV_UNALLOCATED) + return TD_TLSDEFER; + + *base = (char *) pdtv.pointer.val; + + return TD_OK; +#else + return TD_ERR; +#endif +} diff --git a/libpthread/linuxthreads_db/td_thr_tsd.c b/libpthread/linuxthreads_db/td_thr_tsd.c index f18832f46..7b0db6b9d 100644 --- a/libpthread/linuxthreads_db/td_thr_tsd.c +++ b/libpthread/linuxthreads_db/td_thr_tsd.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include td_err_e diff --git a/libpthread/linuxthreads_db/td_thr_validate.c b/libpthread/linuxthreads_db/td_thr_validate.c index ca82637b9..5108ea97d 100644 --- a/libpthread/linuxthreads_db/td_thr_validate.c +++ b/libpthread/linuxthreads_db/td_thr_validate.c @@ -18,6 +18,7 @@ . */ #include "thread_dbP.h" +#include td_err_e diff --git a/libpthread/linuxthreads_db/thread_dbP.h b/libpthread/linuxthreads_db/thread_dbP.h index 64fd2e511..407f30634 100644 --- a/libpthread/linuxthreads_db/thread_dbP.h +++ b/libpthread/linuxthreads_db/thread_dbP.h @@ -6,7 +6,7 @@ #include #include "proc_service.h" #include "thread_db.h" -#include "internals.h" +#include "../linuxthreads/descr.h" /* Indices for the symbol names. */ -- cgit v1.2.3