Blame nptl_db/thread_db.h

Packit 6c4009
/* thread_db.h -- interface to libthread_db.so library for debugging -lpthread
Packit 6c4009
   Copyright (C) 1999-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef _THREAD_DB_H
Packit 6c4009
#define _THREAD_DB_H	1
Packit 6c4009
Packit 6c4009
/* This is the debugger interface for the NPTL library.  It is
Packit 6c4009
   modelled closely after the interface with same names in Solaris
Packit 6c4009
   with the goal to share the same code in the debugger.  */
Packit 6c4009
#include <pthread.h>
Packit 6c4009
#include <stdint.h>
Packit 6c4009
#include <sys/types.h>
Packit 6c4009
#include <sys/procfs.h>
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Error codes of the library.  */
Packit 6c4009
typedef enum
Packit 6c4009
{
Packit 6c4009
  TD_OK,	  /* No error.  */
Packit 6c4009
  TD_ERR,	  /* No further specified error.  */
Packit 6c4009
  TD_NOTHR,	  /* No matching thread found.  */
Packit 6c4009
  TD_NOSV,	  /* No matching synchronization handle found.  */
Packit 6c4009
  TD_NOLWP,	  /* No matching light-weighted process found.  */
Packit 6c4009
  TD_BADPH,	  /* Invalid process handle.  */
Packit 6c4009
  TD_BADTH,	  /* Invalid thread handle.  */
Packit 6c4009
  TD_BADSH,	  /* Invalid synchronization handle.  */
Packit 6c4009
  TD_BADTA,	  /* Invalid thread agent.  */
Packit 6c4009
  TD_BADKEY,	  /* Invalid key.  */
Packit 6c4009
  TD_NOMSG,	  /* No event available.  */
Packit 6c4009
  TD_NOFPREGS,	  /* No floating-point register content available.  */
Packit 6c4009
  TD_NOLIBTHREAD, /* Application not linked with thread library.  */
Packit 6c4009
  TD_NOEVENT,	  /* Requested event is not supported.  */
Packit 6c4009
  TD_NOCAPAB,	  /* Capability not available.  */
Packit 6c4009
  TD_DBERR,	  /* Internal debug library error.  */
Packit 6c4009
  TD_NOAPLIC,	  /* Operation is not applicable.  */
Packit 6c4009
  TD_NOTSD,	  /* No thread-specific data available.  */
Packit 6c4009
  TD_MALLOC,	  /* Out of memory.  */
Packit 6c4009
  TD_PARTIALREG,  /* Not entire register set was read or written.  */
Packit 6c4009
  TD_NOXREGS,	  /* X register set not available for given thread.  */
Packit 6c4009
  TD_TLSDEFER,	  /* Thread has not yet allocated TLS for given module.  */
Packit 6c4009
  TD_NOTALLOC = TD_TLSDEFER,
Packit 6c4009
  TD_VERSION,	  /* Version if libpthread and libthread_db do not match.  */
Packit 6c4009
  TD_NOTLS	  /* There is no TLS segment in the given module.  */
Packit 6c4009
} td_err_e;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Possible thread states.  TD_THR_ANY_STATE is a pseudo-state used to
Packit 6c4009
   select threads regardless of state in td_ta_thr_iter().  */
Packit 6c4009
typedef enum
Packit 6c4009
{
Packit 6c4009
  TD_THR_ANY_STATE,
Packit 6c4009
  TD_THR_UNKNOWN,
Packit 6c4009
  TD_THR_STOPPED,
Packit 6c4009
  TD_THR_RUN,
Packit 6c4009
  TD_THR_ACTIVE,
Packit 6c4009
  TD_THR_ZOMBIE,
Packit 6c4009
  TD_THR_SLEEP,
Packit 6c4009
  TD_THR_STOPPED_ASLEEP
Packit 6c4009
} td_thr_state_e;
Packit 6c4009
Packit 6c4009
/* Thread type: user or system.  TD_THR_ANY_TYPE is a pseudo-type used
Packit 6c4009
   to select threads regardless of type in td_ta_thr_iter().  */
Packit 6c4009
typedef enum
Packit 6c4009
{
Packit 6c4009
  TD_THR_ANY_TYPE,
Packit 6c4009
  TD_THR_USER,
Packit 6c4009
  TD_THR_SYSTEM
Packit 6c4009
} td_thr_type_e;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Types of the debugging library.  */
Packit 6c4009
Packit 6c4009
/* Handle for a process.  This type is opaque.  */
Packit 6c4009
typedef struct td_thragent td_thragent_t;
Packit 6c4009
Packit 6c4009
/* The actual thread handle type.  This is also opaque.  */
Packit 6c4009
typedef struct td_thrhandle
Packit 6c4009
{
Packit 6c4009
  td_thragent_t *th_ta_p;
Packit 6c4009
  psaddr_t th_unique;
Packit 6c4009
} td_thrhandle_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Forward declaration of a type defined by and for the dynamic linker.  */
Packit 6c4009
struct link_map;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Flags for `td_ta_thr_iter'.  */
Packit 6c4009
#define TD_THR_ANY_USER_FLAGS	0xffffffff
Packit 6c4009
#define TD_THR_LOWEST_PRIORITY	-20
Packit 6c4009
#define TD_SIGNO_MASK		NULL
Packit 6c4009
Packit 6c4009
Packit 6c4009
#define TD_EVENTSIZE	2
Packit 6c4009
#define BT_UISHIFT	5 /* log base 2 of BT_NBIPUI, to extract word index */
Packit 6c4009
#define BT_NBIPUI	(1 << BT_UISHIFT)       /* n bits per unsigned int */
Packit 6c4009
#define BT_UIMASK	(BT_NBIPUI - 1)         /* to extract bit index */
Packit 6c4009
Packit 6c4009
/* Bitmask of enabled events. */
Packit 6c4009
typedef struct td_thr_events
Packit 6c4009
{
Packit 6c4009
  uint32_t event_bits[TD_EVENTSIZE];
Packit 6c4009
} td_thr_events_t;
Packit 6c4009
Packit 6c4009
/* Event set manipulation macros. */
Packit 6c4009
#define __td_eventmask(n) \
Packit 6c4009
  (UINT32_C (1) << (((n) - 1) & BT_UIMASK))
Packit 6c4009
#define __td_eventword(n) \
Packit 6c4009
  ((UINT32_C ((n) - 1)) >> BT_UISHIFT)
Packit 6c4009
Packit 6c4009
#define td_event_emptyset(setp) \
Packit 6c4009
  do {									      \
Packit 6c4009
    int __i;								      \
Packit 6c4009
    for (__i = TD_EVENTSIZE; __i > 0; --__i)				      \
Packit 6c4009
      (setp)->event_bits[__i - 1] = 0;					      \
Packit 6c4009
  } while (0)
Packit 6c4009
Packit 6c4009
#define td_event_fillset(setp) \
Packit 6c4009
  do {									      \
Packit 6c4009
    int __i;								      \
Packit 6c4009
    for (__i = TD_EVENTSIZE; __i > 0; --__i)				      \
Packit 6c4009
      (setp)->event_bits[__i - 1] = UINT32_C (0xffffffff);		      \
Packit 6c4009
  } while (0)
Packit 6c4009
Packit 6c4009
#define td_event_addset(setp, n) \
Packit 6c4009
  (((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n))
Packit 6c4009
#define td_event_delset(setp, n) \
Packit 6c4009
  (((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n))
Packit 6c4009
#define td_eventismember(setp, n) \
Packit 6c4009
  (__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)]))
Packit 6c4009
#if TD_EVENTSIZE == 2
Packit 6c4009
# define td_eventisempty(setp) \
Packit 6c4009
  (!((setp)->event_bits[0]) && !((setp)->event_bits[1]))
Packit 6c4009
#else
Packit 6c4009
# error "td_eventisempty must be changed to match TD_EVENTSIZE"
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Events reportable by the thread implementation.  */
Packit 6c4009
typedef enum
Packit 6c4009
{
Packit 6c4009
  TD_ALL_EVENTS,		 /* Pseudo-event number.  */
Packit 6c4009
  TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context.  */
Packit 6c4009
  TD_READY,			 /* Is executable now. */
Packit 6c4009
  TD_SLEEP,			 /* Blocked in a synchronization obj.  */
Packit 6c4009
  TD_SWITCHTO,			 /* Now assigned to a process.  */
Packit 6c4009
  TD_SWITCHFROM,		 /* Not anymore assigned to a process.  */
Packit 6c4009
  TD_LOCK_TRY,			 /* Trying to get an unavailable lock.  */
Packit 6c4009
  TD_CATCHSIG,			 /* Signal posted to the thread.  */
Packit 6c4009
  TD_IDLE,			 /* Process getting idle.  */
Packit 6c4009
  TD_CREATE,			 /* New thread created.  */
Packit 6c4009
  TD_DEATH,			 /* Thread terminated.  */
Packit 6c4009
  TD_PREEMPT,			 /* Preempted.  */
Packit 6c4009
  TD_PRI_INHERIT,		 /* Inherited elevated priority.  */
Packit 6c4009
  TD_REAP,			 /* Reaped.  */
Packit 6c4009
  TD_CONCURRENCY,		 /* Number of processes changing.  */
Packit 6c4009
  TD_TIMEOUT,			 /* Conditional variable wait timed out.  */
Packit 6c4009
  TD_MIN_EVENT_NUM = TD_READY,
Packit 6c4009
  TD_MAX_EVENT_NUM = TD_TIMEOUT,
Packit 6c4009
  TD_EVENTS_ENABLE = 31		/* Event reporting enabled.  */
Packit 6c4009
} td_event_e;
Packit 6c4009
Packit 6c4009
/* Values representing the different ways events are reported.  */
Packit 6c4009
typedef enum
Packit 6c4009
{
Packit 6c4009
  NOTIFY_BPT,			/* User must insert breakpoint at u.bptaddr. */
Packit 6c4009
  NOTIFY_AUTOBPT,		/* Breakpoint at u.bptaddr is automatically
Packit 6c4009
				   inserted.  */
Packit 6c4009
  NOTIFY_SYSCALL		/* System call u.syscallno will be invoked.  */
Packit 6c4009
} td_notify_e;
Packit 6c4009
Packit 6c4009
/* Description how event type is reported.  */
Packit 6c4009
typedef struct td_notify
Packit 6c4009
{
Packit 6c4009
  td_notify_e type;		/* Way the event is reported.  */
Packit 6c4009
  union
Packit 6c4009
  {
Packit 6c4009
    psaddr_t bptaddr;		/* Address of breakpoint.  */
Packit 6c4009
    int syscallno;		/* Number of system call used.  */
Packit 6c4009
  } u;
Packit 6c4009
} td_notify_t;
Packit 6c4009
Packit 6c4009
/* Structure used to report event.  */
Packit 6c4009
typedef struct td_event_msg
Packit 6c4009
{
Packit 6c4009
  td_event_e event;		/* Event type being reported.  */
Packit 6c4009
  const td_thrhandle_t *th_p;	/* Thread reporting the event.  */
Packit 6c4009
  union
Packit 6c4009
  {
Packit 6c4009
# if 0
Packit 6c4009
    td_synchandle_t *sh;	/* Handle of synchronization object.  */
Packit 6c4009
#endif
Packit 6c4009
    uintptr_t data;		/* Event specific data.  */
Packit 6c4009
  } msg;
Packit 6c4009
} td_event_msg_t;
Packit 6c4009
Packit 6c4009
/* Structure containing event data available in each thread structure.  */
Packit 6c4009
typedef struct
Packit 6c4009
{
Packit 6c4009
  td_thr_events_t eventmask;	/* Mask of enabled events.  */
Packit 6c4009
  td_event_e eventnum;		/* Number of last event.  */
Packit 6c4009
  void *eventdata;		/* Data associated with event.  */
Packit 6c4009
} td_eventbuf_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Gathered statistics about the process.  */
Packit 6c4009
typedef struct td_ta_stats
Packit 6c4009
{
Packit 6c4009
  int nthreads;       		/* Total number of threads in use.  */
Packit 6c4009
  int r_concurrency;		/* Concurrency level requested by user.  */
Packit 6c4009
  int nrunnable_num;		/* Average runnable threads, numerator.  */
Packit 6c4009
  int nrunnable_den;		/* Average runnable threads, denominator.  */
Packit 6c4009
  int a_concurrency_num;	/* Achieved concurrency level, numerator.  */
Packit 6c4009
  int a_concurrency_den;	/* Achieved concurrency level, denominator.  */
Packit 6c4009
  int nlwps_num;		/* Average number of processes in use,
Packit 6c4009
				   numerator.  */
Packit 6c4009
  int nlwps_den;		/* Average number of processes in use,
Packit 6c4009
				   denominator.  */
Packit 6c4009
  int nidle_num;		/* Average number of idling processes,
Packit 6c4009
				   numerator.  */
Packit 6c4009
  int nidle_den;		/* Average number of idling processes,
Packit 6c4009
				   denominator.  */
Packit 6c4009
} td_ta_stats_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Since Sun's library is based on Solaris threads we have to define a few
Packit 6c4009
   types to map them to POSIX threads.  */
Packit 6c4009
typedef pthread_t thread_t;
Packit 6c4009
typedef pthread_key_t thread_key_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Callback for iteration over threads.  */
Packit 6c4009
typedef int td_thr_iter_f (const td_thrhandle_t *, void *);
Packit 6c4009
Packit 6c4009
/* Callback for iteration over thread local data.  */
Packit 6c4009
typedef int td_key_iter_f (thread_key_t, void (*) (void *), void *);
Packit 6c4009
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Forward declaration.  This has to be defined by the user.  */
Packit 6c4009
struct ps_prochandle;
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Information about the thread.  */
Packit 6c4009
typedef struct td_thrinfo
Packit 6c4009
{
Packit 6c4009
  td_thragent_t *ti_ta_p;		/* Process handle.  */
Packit 6c4009
  unsigned int ti_user_flags;		/* Unused.  */
Packit 6c4009
  thread_t ti_tid;			/* Thread ID returned by
Packit 6c4009
					   pthread_create().  */
Packit 6c4009
  char *ti_tls;				/* Pointer to thread-local data.  */
Packit 6c4009
  psaddr_t ti_startfunc;		/* Start function passed to
Packit 6c4009
					   pthread_create().  */
Packit 6c4009
  psaddr_t ti_stkbase;			/* Base of thread's stack.  */
Packit 6c4009
  long int ti_stksize;			/* Size of thread's stack.  */
Packit 6c4009
  psaddr_t ti_ro_area;			/* Unused.  */
Packit 6c4009
  int ti_ro_size;			/* Unused.  */
Packit 6c4009
  td_thr_state_e ti_state;		/* Thread state.  */
Packit 6c4009
  unsigned char ti_db_suspended;	/* Nonzero if suspended by debugger. */
Packit 6c4009
  td_thr_type_e ti_type;		/* Type of the thread (system vs
Packit 6c4009
					   user thread).  */
Packit 6c4009
  intptr_t ti_pc;			/* Unused.  */
Packit 6c4009
  intptr_t ti_sp;			/* Unused.  */
Packit 6c4009
  short int ti_flags;			/* Unused.  */
Packit 6c4009
  int ti_pri;				/* Thread priority.  */
Packit 6c4009
  lwpid_t ti_lid;			/* Kernel PID for this thread.  */
Packit 6c4009
  sigset_t ti_sigmask;			/* Signal mask.  */
Packit 6c4009
  unsigned char ti_traceme;		/* Nonzero if event reporting
Packit 6c4009
					   enabled.  */
Packit 6c4009
  unsigned char ti_preemptflag;		/* Unused.  */
Packit 6c4009
  unsigned char ti_pirecflag;		/* Unused.  */
Packit 6c4009
  sigset_t ti_pending;			/* Set of pending signals.  */
Packit 6c4009
  td_thr_events_t ti_events;		/* Set of enabled events.  */
Packit 6c4009
} td_thrinfo_t;
Packit 6c4009
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Prototypes for exported library functions.  */
Packit 6c4009
Packit 6c4009
/* Initialize the thread debug support library.  */
Packit 6c4009
extern td_err_e td_init (void);
Packit 6c4009
Packit 6c4009
/* Historical relict.  Should not be used anymore.  */
Packit 6c4009
extern td_err_e td_log (void);
Packit 6c4009
Packit 6c4009
/* Return list of symbols the library can request.  */
Packit 6c4009
extern const char **td_symbol_list (void);
Packit 6c4009
Packit 6c4009
/* Generate new thread debug library handle for process PS.  */
Packit 6c4009
extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
Packit 6c4009
Packit 6c4009
/* Free resources allocated for TA.  */
Packit 6c4009
extern td_err_e td_ta_delete (td_thragent_t *__ta);
Packit 6c4009
Packit 6c4009
/* Get number of currently running threads in process associated with TA.  */
Packit 6c4009
extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np);
Packit 6c4009
Packit 6c4009
/* Return process handle passed in `td_ta_new' for process associated with
Packit 6c4009
   TA.  */
Packit 6c4009
extern td_err_e td_ta_get_ph (const td_thragent_t *__ta,
Packit 6c4009
			      struct ps_prochandle **__ph);
Packit 6c4009
Packit 6c4009
/* Map thread library handle PT to thread debug library handle for process
Packit 6c4009
   associated with TA and store result in *TH.  */
Packit 6c4009
extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt,
Packit 6c4009
				  td_thrhandle_t *__th);
Packit 6c4009
Packit 6c4009
/* Map process ID LWPID to thread debug library handle for process
Packit 6c4009
   associated with TA and store result in *TH.  */
Packit 6c4009
extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
Packit 6c4009
				   td_thrhandle_t *__th);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Call for each thread in a process associated with TA the callback function
Packit 6c4009
   CALLBACK.  */
Packit 6c4009
extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
Packit 6c4009
				td_thr_iter_f *__callback, void *__cbdata_p,
Packit 6c4009
				td_thr_state_e __state, int __ti_pri,
Packit 6c4009
				sigset_t *__ti_sigmask_p,
Packit 6c4009
				unsigned int __ti_user_flags);
Packit 6c4009
Packit 6c4009
/* Call for each defined thread local data entry the callback function KI.  */
Packit 6c4009
extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki,
Packit 6c4009
				void *__p);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Get event address for EVENT.  */
Packit 6c4009
extern td_err_e td_ta_event_addr (const td_thragent_t *__ta,
Packit 6c4009
				  td_event_e __event, td_notify_t *__ptr);
Packit 6c4009
Packit 6c4009
/* Enable EVENT in global mask.  */
Packit 6c4009
extern td_err_e td_ta_set_event (const td_thragent_t *__ta,
Packit 6c4009
				 td_thr_events_t *__event);
Packit 6c4009
Packit 6c4009
/* Disable EVENT in global mask.  */
Packit 6c4009
extern td_err_e td_ta_clear_event (const td_thragent_t *__ta,
Packit 6c4009
				   td_thr_events_t *__event);
Packit 6c4009
Packit 6c4009
/* Return information about last event.  */
Packit 6c4009
extern td_err_e td_ta_event_getmsg (const td_thragent_t *__ta,
Packit 6c4009
				    td_event_msg_t *__msg);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Set suggested concurrency level for process associated with TA.  */
Packit 6c4009
extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Enable collecting statistics for process associated with TA.  */
Packit 6c4009
extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
Packit 6c4009
Packit 6c4009
/* Reset statistics.  */
Packit 6c4009
extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
Packit 6c4009
Packit 6c4009
/* Retrieve statistics from process associated with TA.  */
Packit 6c4009
extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
Packit 6c4009
				 td_ta_stats_t *__statsp);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Validate that TH is a thread handle.  */
Packit 6c4009
extern td_err_e td_thr_validate (const td_thrhandle_t *__th);
Packit 6c4009
Packit 6c4009
/* Return information about thread TH.  */
Packit 6c4009
extern td_err_e td_thr_get_info (const td_thrhandle_t *__th,
Packit 6c4009
				 td_thrinfo_t *__infop);
Packit 6c4009
Packit 6c4009
/* Retrieve floating-point register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th,
Packit 6c4009
				  prfpregset_t *__regset);
Packit 6c4009
Packit 6c4009
/* Retrieve general register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th,
Packit 6c4009
				 prgregset_t __gregs);
Packit 6c4009
Packit 6c4009
/* Retrieve extended register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs);
Packit 6c4009
Packit 6c4009
/* Get size of extended register set of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep);
Packit 6c4009
Packit 6c4009
/* Set floating-point register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th,
Packit 6c4009
				  const prfpregset_t *__fpregs);
Packit 6c4009
Packit 6c4009
/* Set general register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th,
Packit 6c4009
				 prgregset_t __gregs);
Packit 6c4009
Packit 6c4009
/* Set extended register contents of process running thread TH.  */
Packit 6c4009
extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th,
Packit 6c4009
				 const void *__addr);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Get address of the given module's TLS storage area for the given thread.  */
Packit 6c4009
extern td_err_e td_thr_tlsbase (const td_thrhandle_t *__th,
Packit 6c4009
				unsigned long int __modid,
Packit 6c4009
				psaddr_t *__base);
Packit 6c4009
Packit 6c4009
/* Get address of thread local variable.  */
Packit 6c4009
extern td_err_e td_thr_tls_get_addr (const td_thrhandle_t *__th,
Packit 6c4009
				     psaddr_t __map_address, size_t __offset,
Packit 6c4009
				     psaddr_t *__address);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Enable reporting for EVENT for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event);
Packit 6c4009
Packit 6c4009
/* Enable EVENT for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_set_event (const td_thrhandle_t *__th,
Packit 6c4009
				  td_thr_events_t *__event);
Packit 6c4009
Packit 6c4009
/* Disable EVENT for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th,
Packit 6c4009
				    td_thr_events_t *__event);
Packit 6c4009
Packit 6c4009
/* Get event message for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th,
Packit 6c4009
				     td_event_msg_t *__msg);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Set priority of thread TH.  */
Packit 6c4009
extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Set pending signals for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th,
Packit 6c4009
				      unsigned char __n, const sigset_t *__ss);
Packit 6c4009
Packit 6c4009
/* Set signal mask for thread TH.  */
Packit 6c4009
extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th,
Packit 6c4009
				   const sigset_t *__ss);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Return thread local data associated with key TK in thread TH.  */
Packit 6c4009
extern td_err_e td_thr_tsd (const td_thrhandle_t *__th,
Packit 6c4009
			    const thread_key_t __tk, void **__data);
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Suspend execution of thread TH.  */
Packit 6c4009
extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th);
Packit 6c4009
Packit 6c4009
/* Resume execution of thread TH.  */
Packit 6c4009
extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th);
Packit 6c4009
Packit 6c4009
#endif	/* thread_db.h */