Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
glibc/linuxthreads_db/thread_dbP.h
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
108 lines (81 sloc)
2.49 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Private header for thread debug library. */ | |
#ifndef _THREAD_DBP_H | |
#define _THREAD_DBP_H 1 | |
#include <string.h> | |
#include <unistd.h> | |
#include "proc_service.h" | |
#include "thread_db.h" | |
#include "../linuxthreads/descr.h" | |
/* Indeces for the symbol names. */ | |
enum | |
{ | |
PTHREAD_THREADS_EVENTS = 0, | |
PTHREAD_LAST_EVENT, | |
PTHREAD_HANDLES_NUM, | |
PTHREAD_HANDLES, | |
PTHREAD_KEYS, | |
LINUXTHREADS_PTHREAD_THREADS_MAX, | |
LINUXTHREADS_PTHREAD_KEYS_MAX, | |
LINUXTHREADS_PTHREAD_SIZEOF_DESCR, | |
LINUXTHREADS_CREATE_EVENT, | |
LINUXTHREADS_DEATH_EVENT, | |
LINUXTHREADS_REAP_EVENT, | |
LINUXTHREADS_INITIAL_REPORT_EVENTS, | |
LINUXTHREADS_VERSION, | |
NUM_MESSAGES | |
}; | |
/* Comment out the following for less verbose output. */ | |
#ifndef NDEBUG | |
# define LOG(c) if (__td_debug) write (2, c "\n", strlen (c "\n")) | |
extern int __td_debug; | |
#else | |
# define LOG(c) | |
#endif | |
/* Handle for a process. This type is opaque. */ | |
struct td_thragent | |
{ | |
/* Delivered by the debugger and we have to pass it back in the | |
proc callbacks. */ | |
struct ps_prochandle *ph; | |
/* Some cached information. */ | |
/* Address of the `__pthread_handles' array. */ | |
struct pthread_handle_struct *handles; | |
/* Address of the `pthread_kyes' array. */ | |
struct pthread_key_struct *keys; | |
/* Maximum number of threads. */ | |
int pthread_threads_max; | |
/* Maximum number of thread-local data keys. */ | |
int pthread_keys_max; | |
/* Size of 2nd level array for thread-local data keys. */ | |
int pthread_key_2ndlevel_size; | |
/* Sizeof struct _pthread_descr_struct. */ | |
int sizeof_descr; | |
/* Pointer to the `__pthread_threads_events' variable in the target. */ | |
psaddr_t pthread_threads_eventsp; | |
/* Pointer to the `__pthread_last_event' variable in the target. */ | |
psaddr_t pthread_last_event; | |
/* Pointer to the `__pthread_handles_num' variable. */ | |
psaddr_t pthread_handles_num; | |
}; | |
/* Type used internally to keep track of thread agent descriptors. */ | |
struct agent_list | |
{ | |
td_thragent_t *ta; | |
struct agent_list *next; | |
}; | |
/* List of all known descriptors. */ | |
extern struct agent_list *__td_agent_list; | |
/* Function used to test for correct thread agent pointer. */ | |
static inline int | |
ta_ok (const td_thragent_t *ta) | |
{ | |
struct agent_list *runp = __td_agent_list; | |
if (ta == NULL) | |
return 0; | |
while (runp != NULL && runp->ta != ta) | |
runp = runp->next; | |
return runp != NULL; | |
} | |
/* Internal wrapper around ps_pglobal_lookup. */ | |
extern int td_lookup (struct ps_prochandle *ps, int idx, psaddr_t *sym_addr); | |
#endif /* thread_dbP.h */ |