mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 19:53:32 +08:00
Update.
1999-10-07 Ulrich Drepper <drepper@cygnus.com> * Implies: New file. * internals.h (struct _pthread_descr_struct): Add p_startfct. * manager.c (pthread_handle_create): Initialize p_startfct. * pthread.c: Define __linuxthread_pthread_sizeof_descr variable.
This commit is contained in:
parent
10507e5595
commit
9640bbe1c1
@ -1,3 +1,10 @@
|
||||
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Implies: New file.
|
||||
* internals.h (struct _pthread_descr_struct): Add p_startfct.
|
||||
* manager.c (pthread_handle_create): Initialize p_startfct.
|
||||
* pthread.c: Define __linuxthread_pthread_sizeof_descr variable.
|
||||
|
||||
1999-09-25 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* manager.c (__linuxthreads_pthread_threads_max): New variable.
|
||||
|
1
linuxthreads/Implies
Normal file
1
linuxthreads/Implies
Normal file
@ -0,0 +1 @@
|
||||
linuxthreads_db
|
@ -113,6 +113,7 @@ struct _pthread_descr_struct {
|
||||
size_t p_guardsize; /* size of guard area */
|
||||
pthread_descr p_self; /* Pointer to this structure */
|
||||
int p_nr; /* Index of descriptor in __pthread_handles */
|
||||
void *(*p_startfct) (void *); /* The startup function of this thread. */
|
||||
} __attribute__ ((aligned(32))); /* We need to align the structure so that
|
||||
doubles are aligned properly. This is 8
|
||||
bytes on MIPS and 16 bytes on MIPS64.
|
||||
|
@ -342,6 +342,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||
new_thread->p_guardsize = guardsize;
|
||||
new_thread->p_self = new_thread;
|
||||
new_thread->p_nr = sseg;
|
||||
new_thread->p_startfct = start_routine;
|
||||
/* Initialize the thread handle */
|
||||
__pthread_init_lock(&__pthread_handles[sseg].h_lock);
|
||||
__pthread_handles[sseg].h_descr = new_thread;
|
||||
|
@ -150,6 +150,8 @@ const int __pthread_offsetof_descr = offsetof(struct pthread_handle_struct,
|
||||
h_descr);
|
||||
const int __pthread_offsetof_pid = offsetof(struct _pthread_descr_struct,
|
||||
p_pid);
|
||||
const int __linuxthread_pthread_sizeof_descr
|
||||
= sizeof(struct _pthread_descr_struct);
|
||||
|
||||
/* These variables are used by the setup code. */
|
||||
extern int _errno;
|
||||
|
41
linuxthreads_db/ChangeLog
Normal file
41
linuxthreads_db/ChangeLog
Normal file
@ -0,0 +1,41 @@
|
||||
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile: New file.
|
||||
* proc_service.h: New file.
|
||||
* shlib-versions: 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.
|
49
linuxthreads_db/Makefile
Normal file
49
linuxthreads_db/Makefile
Normal file
@ -0,0 +1,49 @@
|
||||
# Copyright (C) 1999 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 Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 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
|
||||
# Library General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
# Makefile for linuxthreads debug library subdirectory of GNU C Library.
|
||||
|
||||
subdir := linuxthreads_db
|
||||
|
||||
libthread_db-version = 1
|
||||
|
||||
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
|
||||
|
||||
libthread_db-inhibit-o = $(filter-out .os,$(object-suffixes))
|
||||
|
||||
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)libpthread.so: $(common-objpfx)libc.so
|
44
linuxthreads_db/proc_service.h
Normal file
44
linuxthreads_db/proc_service.h
Normal file
@ -0,0 +1,44 @@
|
||||
typedef enum {
|
||||
PS_OK, /* generic "call succeeded" */
|
||||
PS_ERR, /* generic. */
|
||||
PS_BADPID, /* bad process handle */
|
||||
PS_BADLID, /* bad lwp identifier */
|
||||
PS_BADADDR, /* bad address */
|
||||
PS_NOSYM, /* p_lookup() could not find given symbol */
|
||||
PS_NOFREGS
|
||||
/*
|
||||
* FPU register set not available for given
|
||||
* lwp
|
||||
*/
|
||||
} ps_err_e;
|
||||
|
||||
typedef unsigned long paddr_t;
|
||||
|
||||
|
||||
|
||||
|
||||
struct ps_prochandle; /* user defined. */
|
||||
|
||||
|
||||
extern ps_err_e ps_pdread(struct ps_prochandle *,
|
||||
psaddr_t, void *, size_t);
|
||||
extern ps_err_e ps_pdwrite(struct ps_prochandle *,
|
||||
psaddr_t, const void *, size_t);
|
||||
extern ps_err_e ps_ptread(struct ps_prochandle *,
|
||||
psaddr_t, void *, size_t);
|
||||
extern ps_err_e ps_ptwrite(struct ps_prochandle *,
|
||||
psaddr_t, const void *, size_t);
|
||||
|
||||
extern ps_err_e ps_pglobal_lookup(struct ps_prochandle *,
|
||||
const char *object_name, const char *sym_name, psaddr_t *sym_addr);
|
||||
|
||||
|
||||
extern ps_err_e ps_lgetregs(struct ps_prochandle *,
|
||||
lwpid_t, prgregset_t);
|
||||
extern ps_err_e ps_lsetregs(struct ps_prochandle *,
|
||||
lwpid_t, const prgregset_t);
|
||||
extern ps_err_e ps_lgetfpregs(struct ps_prochandle *,
|
||||
lwpid_t, prfpregset_t *);
|
||||
extern ps_err_e ps_lsetfpregs(struct ps_prochandle *,
|
||||
lwpid_t, const prfpregset_t *);
|
||||
|
30
linuxthreads_db/td_init.c
Normal file
30
linuxthreads_db/td_init.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Initialization function of thread debugger support library.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_init (void)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
32
linuxthreads_db/td_log.c
Normal file
32
linuxthreads_db/td_log.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Noop, left for historical reasons.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_log (void)
|
||||
{
|
||||
/* This interface is deprecated in the Sun interface. We provide it
|
||||
for compatibility but don't do anyhting ourself. We might in
|
||||
future do some logging if this seems reasonable. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
35
linuxthreads_db/td_ta_delete.c
Normal file
35
linuxthreads_db/td_ta_delete.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* Detach to target process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_delete (td_thragent_t *ta)
|
||||
{
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* The handle was allocated in `td_ta_new'. */
|
||||
free (ta);
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_ta_enable_stats.c
Normal file
30
linuxthreads_db/td_ta_enable_stats.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Enable collection of statistics for process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_enable_stats (const td_thragent_t *ta, int enable)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_ta_event_addr.c
Normal file
30
linuxthreads_db/td_ta_event_addr.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Get event address.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_event_addr (const td_thragent_t *ta, td_event_e event, td_notify_t *addr)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
40
linuxthreads_db/td_ta_get_nthreads.c
Normal file
40
linuxthreads_db/td_ta_get_nthreads.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Get the number of threads in the process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_get_nthreads (const td_thragent_t *ta, int *np)
|
||||
{
|
||||
psaddr_t addr;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Access the variable `__pthread_handles_num'. */
|
||||
if (ps_pglobal_lookup (ta->ph, "libpthread.so.0", "__pthread_handles_num",
|
||||
&addr) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (ps_pdread (ta->ph, addr, np, sizeof (int)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
return TD_OK;
|
||||
}
|
32
linuxthreads_db/td_ta_get_ph.c
Normal file
32
linuxthreads_db/td_ta_get_ph.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Get external process handle.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_get_ph (const td_thragent_t *ta, struct ps_prochandle **ph)
|
||||
{
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
*ph = ta->ph;
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_ta_get_stats.c
Normal file
30
linuxthreads_db/td_ta_get_stats.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Retrieve statistics for process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_get_stats (const td_thragent_t *ta, td_ta_stats_t *statsp)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
47
linuxthreads_db/td_ta_map_id2thr.c
Normal file
47
linuxthreads_db/td_ta_map_id2thr.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* Map thread ID to thread handle.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_map_id2thr (const td_thragent_t *ta, pthread_t pt, td_thrhandle_t *th)
|
||||
{
|
||||
struct pthread_handle_struct *handles = ta->handles;
|
||||
struct pthread_handle_struct phc;
|
||||
int pthread_threads_max = ta->pthread_threads_max;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* We can compute the entry in the handle array we want. */
|
||||
if (ps_pdread (ta->ph, handles + pt % pthread_threads_max, &phc,
|
||||
sizeof (struct pthread_handle_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
/* Test whether this entry is in use. */
|
||||
if (phc.h_descr == NULL)
|
||||
return TD_BADTH;
|
||||
|
||||
/* Create the `td_thrhandle_t' object. */
|
||||
th->th_ta_p = (td_thragent_t *) ta;
|
||||
th->th_unique = phc.h_descr;
|
||||
|
||||
return TD_OK;
|
||||
}
|
62
linuxthreads_db/td_ta_map_lwp2thr.c
Normal file
62
linuxthreads_db/td_ta_map_lwp2thr.c
Normal file
@ -0,0 +1,62 @@
|
||||
/* Which thread is running on an lwp?
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
|
||||
{
|
||||
struct pthread_handle_struct *handles = ta->handles;
|
||||
int pthread_threads_max = ta->pthread_threads_max;
|
||||
size_t cnt;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Get the entries one after the other and find out whether the ID
|
||||
matches. */
|
||||
for (cnt = 0; cnt < pthread_threads_max; ++cnt, ++handles)
|
||||
{
|
||||
struct pthread_handle_struct phc;
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
if (ps_pdread (ta->ph, handles, &phc,
|
||||
sizeof (struct pthread_handle_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (phc.h_descr != NULL)
|
||||
{
|
||||
if (ps_pdread (ta->ph, phc.h_descr, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (pds.p_pid == lwpid)
|
||||
{
|
||||
/* Found it. Now fill in the `td_thrhandle_t' object. */
|
||||
th->th_ta_p = (td_thragent_t *) ta;
|
||||
th->th_unique = phc.h_descr;
|
||||
|
||||
return TD_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TD_NOLWP;
|
||||
}
|
115
linuxthreads_db/td_ta_new.c
Normal file
115
linuxthreads_db/td_ta_new.c
Normal file
@ -0,0 +1,115 @@
|
||||
/* Attach to target process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
|
||||
{
|
||||
psaddr_t addr;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* See whether the library contains the necessary symbols. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_threads_debug",
|
||||
&addr) != PS_OK)
|
||||
return TD_LIBTHREAD;
|
||||
|
||||
/* Fill in the appropriate information. */
|
||||
*ta = (td_thragent_t *) malloc (sizeof (td_thragent_t));
|
||||
if (*ta == NULL)
|
||||
return TD_MALLOC;
|
||||
|
||||
/* Store the proc handle which we will pass to the callback functions
|
||||
back into the debugger. */
|
||||
(*ta)->ph = ps;
|
||||
|
||||
/* See whether the library contains the necessary symbols. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_handles",
|
||||
&addr) != PS_OK)
|
||||
{
|
||||
free_return:
|
||||
free (*ta);
|
||||
return TD_ERR;
|
||||
}
|
||||
|
||||
(*ta)->handles = (struct pthread_handle_struct *) addr;
|
||||
|
||||
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0", "pthread_keys",
|
||||
&addr) != PS_OK)
|
||||
goto free_return;
|
||||
|
||||
/* Cast to the right type. */
|
||||
(*ta)->keys = (struct pthread_key_struct *) addr;
|
||||
|
||||
/* Find out about the maximum number of threads. Old implementations
|
||||
don't provide this information. In this case we assume that the
|
||||
debug library is compiled with the same values. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0",
|
||||
"__linuxthreads_pthread_threads_max", &addr) != PS_OK)
|
||||
(*ta)->pthread_threads_max = PTHREAD_THREADS_MAX;
|
||||
else
|
||||
{
|
||||
if (ps_pdread (ps, addr, &(*ta)->pthread_threads_max, sizeof (int))
|
||||
!= PS_OK)
|
||||
goto free_return;
|
||||
}
|
||||
|
||||
/* Similar for the maximum number of thread local data keys. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0",
|
||||
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
|
||||
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
|
||||
else
|
||||
{
|
||||
if (ps_pdread (ps, addr, &(*ta)->pthread_keys_max, sizeof (int))
|
||||
!= PS_OK)
|
||||
goto free_return;
|
||||
}
|
||||
|
||||
/* And for the size of the second level arrays for the keys. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0",
|
||||
"__linuxthreads_pthread_sizeof_descr", &addr)
|
||||
!= PS_OK)
|
||||
(*ta)->sizeof_descr = offsetof (struct _pthread_descr_struct, p_startfct);
|
||||
else
|
||||
{
|
||||
if (ps_pdread (ps, addr, &(*ta)->sizeof_descr, sizeof (int)) != PS_OK)
|
||||
goto free_return;
|
||||
}
|
||||
|
||||
/* Similar for the maximum number of thread local data keys. */
|
||||
if (ps_pglobal_lookup (ps, "libpthread.so.0",
|
||||
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
|
||||
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
|
||||
else
|
||||
{
|
||||
if (ps_pdread (ps, addr, &(*ta)->pthread_keys_max, sizeof (int))
|
||||
!= PS_OK)
|
||||
goto free_return;
|
||||
}
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_ta_reset_stats.c
Normal file
30
linuxthreads_db/td_ta_reset_stats.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Reset statistics.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_reset_stats (const td_thragent_t *ta)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_ta_setconcurrency.c
Normal file
30
linuxthreads_db/td_ta_setconcurrency.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Set suggested concurrency level for process.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_setconcurrency (const td_thragent_t *ta, int level)
|
||||
{
|
||||
/* This is something LinuxThreads does not support. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
73
linuxthreads_db/td_ta_thr_iter.c
Normal file
73
linuxthreads_db/td_ta_thr_iter.c
Normal file
@ -0,0 +1,73 @@
|
||||
/* Iterate over a process's threads.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
|
||||
void *cbdata_p, td_thr_state_e state, int ti_pri,
|
||||
sigset_t *ti_sigmask_p, unsigned int ti_user_flags)
|
||||
{
|
||||
struct pthread_handle_struct *handles = ta->handles;
|
||||
int pthread_threads_max = ta->pthread_threads_max;
|
||||
int cnt;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Now get all descriptors, one after the other. */
|
||||
for (cnt = 0; cnt < pthread_threads_max; ++cnt, ++handles)
|
||||
{
|
||||
struct pthread_handle_struct phc;
|
||||
|
||||
if (cnt == 1)
|
||||
/* Skip the manager thread. */
|
||||
continue;
|
||||
|
||||
if (ps_pdread (ta->ph, handles, &phc,
|
||||
sizeof (struct pthread_handle_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (phc.h_descr != NULL)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
td_thrhandle_t th;
|
||||
|
||||
if (ps_pdread (ta->ph, phc.h_descr, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
/* Now test whether this thread matches the specified
|
||||
conditions. */
|
||||
|
||||
/* Only if the priority level is as high or higher. */
|
||||
if (pds.p_priority < ti_pri)
|
||||
continue;
|
||||
|
||||
/* Yep, it matches. Call the callback function. */
|
||||
th.th_ta_p = (td_thragent_t *) ta;
|
||||
th.th_unique = phc.h_descr;
|
||||
if (callback (&th, cbdata_p) != 0)
|
||||
return TD_DBERR;
|
||||
}
|
||||
}
|
||||
|
||||
return TD_OK;
|
||||
}
|
51
linuxthreads_db/td_ta_tsd_iter.c
Normal file
51
linuxthreads_db/td_ta_tsd_iter.c
Normal file
@ -0,0 +1,51 @@
|
||||
/* Iterate over a process's thread-specific data.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_ta_tsd_iter (const td_thragent_t *ta, td_key_iter_f *callback,
|
||||
void *cbdata_p)
|
||||
{
|
||||
struct pthread_key_struct *keys = ta->keys;
|
||||
int pthread_keys_max = ta->pthread_keys_max;
|
||||
int cnt;
|
||||
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Now get all descriptors, one after the other. */
|
||||
for (cnt = 0; cnt < pthread_keys_max; ++cnt, ++keys)
|
||||
{
|
||||
struct pthread_key_struct key;
|
||||
|
||||
if (ps_pdread (ta->ph, keys, &key,
|
||||
sizeof (struct pthread_key_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (key.in_use
|
||||
/* Return with an error if the callback returns a nonzero value. */
|
||||
&& callback (cnt, key.destr, cbdata_p) != 0)
|
||||
return TD_DBERR;
|
||||
}
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_thr_clear_event.c
Normal file
30
linuxthreads_db/td_thr_clear_event.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Disable specific event.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_clear_event (const td_thrhandle_t *th, td_thr_events_t *event)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
30
linuxthreads_db/td_thr_dbresume.c
Normal file
30
linuxthreads_db/td_thr_dbresume.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Resume execution of given thread.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_dbresume (const td_thrhandle_t *th)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
30
linuxthreads_db/td_thr_dbsuspend.c
Normal file
30
linuxthreads_db/td_thr_dbsuspend.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Suspend execution of given thread.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_dbsuspend (const td_thrhandle_t *th)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
30
linuxthreads_db/td_thr_event_enable.c
Normal file
30
linuxthreads_db/td_thr_event_enable.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Enable event reporting.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_event_enable (const td_thrhandle_t *th, int event)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
30
linuxthreads_db/td_thr_event_getmsg.c
Normal file
30
linuxthreads_db/td_thr_event_getmsg.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Retrieve event.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_event_getmsg (const td_thrhandle_t *th, td_event_msg_t *msg)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
55
linuxthreads_db/td_thr_get_info.c
Normal file
55
linuxthreads_db/td_thr_get_info.c
Normal file
@ -0,0 +1,55 @@
|
||||
/* Get thread information.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_get_info (const td_thrhandle_t *th, td_thrinfo_t *infop)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Get the thread descriptor. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
th->th_ta_p->sizeof_descr) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
/* Fill in information. Clear first to provide reproducable
|
||||
results for the fields we do not fill in. */
|
||||
memset (infop, '\0', sizeof (td_thrinfo_t));
|
||||
|
||||
infop->ti_ta_p = th->th_ta_p;
|
||||
infop->ti_tid = pds.p_tid;
|
||||
infop->ti_tls = (char *) pds.p_specific;
|
||||
infop->ti_pri = pds.p_priority;
|
||||
|
||||
/* We can get the following information only if the thread descriptor
|
||||
in the target processor is large enough, i.e., comes from a recent
|
||||
enough library. */
|
||||
if (offsetof (struct _pthread_descr_struct, p_startfct)
|
||||
< th->th_ta_p->sizeof_descr)
|
||||
infop->ti_startfunc = pds.p_startfct;
|
||||
|
||||
return TD_OK;
|
||||
}
|
40
linuxthreads_db/td_thr_getfpregs.c
Normal file
40
linuxthreads_db/td_thr_getfpregs.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Get a thread's floating-point register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_getfpregs (const td_thrhandle_t *th, prfpregset_t *regset)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* We have to get the PID for this thread. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
if (ps_lgetfpregs (th->th_ta_p->ph, pds.p_pid, regset) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
return TD_OK;
|
||||
}
|
40
linuxthreads_db/td_thr_getgregs.c
Normal file
40
linuxthreads_db/td_thr_getgregs.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Get a thread's general register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_getgregs (const td_thrhandle_t *th, prgregset_t gregs)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* We have to get the PID for this thread. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
if (ps_lgetregs (th->th_ta_p->ph, pds.p_pid, gregs) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_thr_getxregs.c
Normal file
30
linuxthreads_db/td_thr_getxregs.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Get a thread's extra state register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_getxregs (const td_thrhandle_t *th, void *xregs)
|
||||
{
|
||||
/* XXX This might be platform specific. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOXREGS;
|
||||
}
|
30
linuxthreads_db/td_thr_getxregsize.c
Normal file
30
linuxthreads_db/td_thr_getxregsize.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Get the size of the extra state register set for this architecture.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_getxregsize (const td_thrhandle_t *th, int *sizep)
|
||||
{
|
||||
/* XXX This might be platform specific. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOXREGS;
|
||||
}
|
30
linuxthreads_db/td_thr_set_event.c
Normal file
30
linuxthreads_db/td_thr_set_event.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Enable specific event for thread.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_set_event (const td_thrhandle_t *th, td_thr_events_t *event)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOCAPAB;
|
||||
}
|
40
linuxthreads_db/td_thr_setfpregs.c
Normal file
40
linuxthreads_db/td_thr_setfpregs.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Set a thread's floating-point register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_setfpregs (const td_thrhandle_t *th, const prfpregset_t *fpregs)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* We have to get the PID for this thread. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
if (ps_lsetfpregs (th->th_ta_p->ph, pds.p_pid, fpregs) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
return TD_OK;
|
||||
}
|
40
linuxthreads_db/td_thr_setgregs.c
Normal file
40
linuxthreads_db/td_thr_setgregs.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Set a thread's general register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_setgregs (const td_thrhandle_t *th, prgregset_t gregs)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* We have to get the PID for this thread. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
if (ps_lsetregs (th->th_ta_p->ph, pds.p_pid, gregs) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_thr_setprio.c
Normal file
30
linuxthreads_db/td_thr_setprio.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Set a thread's priority.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_setprio (const td_thrhandle_t *th, int prio)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
31
linuxthreads_db/td_thr_setsigpending.c
Normal file
31
linuxthreads_db/td_thr_setsigpending.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Raise a signal for a thread.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_setsigpending (const td_thrhandle_t *th, unsigned char n,
|
||||
const sigset_t *ss)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
30
linuxthreads_db/td_thr_setxregs.c
Normal file
30
linuxthreads_db/td_thr_setxregs.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Set a thread's extra state register set.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_setxregs (const td_thrhandle_t *ta, const void *addr)
|
||||
{
|
||||
/* XXX This might have to be platform specific. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_NOXREGS;
|
||||
}
|
30
linuxthreads_db/td_thr_sigsetmask.c
Normal file
30
linuxthreads_db/td_thr_sigsetmask.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* Set a thread's signal mask.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_sigsetmask (const td_thrhandle_t *th, const sigset_t *ss)
|
||||
{
|
||||
/* XXX We have to figure out what has to be done. */
|
||||
LOG (__FUNCTION__);
|
||||
return TD_OK;
|
||||
}
|
76
linuxthreads_db/td_thr_tsd.c
Normal file
76
linuxthreads_db/td_thr_tsd.c
Normal file
@ -0,0 +1,76 @@
|
||||
/* Get a thread-specific data pointer for a thread.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_tsd (const td_thrhandle_t *th, const thread_key_t tk, void **data)
|
||||
{
|
||||
struct _pthread_descr_struct pds;
|
||||
struct pthread_key_struct *keys = th->th_ta_p->keys;
|
||||
struct pthread_key_struct key;
|
||||
int pthread_keys_max = th->th_ta_p->pthread_keys_max;
|
||||
int pthread_key_2ndlevel_size = th->th_ta_p->pthread_key_2ndlevel_size;
|
||||
unsigned int idx1st;
|
||||
unsigned int idx2nd;
|
||||
void *p;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Get the thread descriptor. */
|
||||
if (ps_pdread (th->th_ta_p->ph, th->th_unique, &pds,
|
||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
/* Check correct value of key. */
|
||||
if (tk >= pthread_keys_max)
|
||||
return TD_BADKEY;
|
||||
|
||||
/* Get the key entry. */
|
||||
if (ps_pdread (th->th_ta_p->ph, keys, &key,
|
||||
sizeof (struct pthread_key_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
/* Fail if this key is not at all used. */
|
||||
if (! key.in_use)
|
||||
return TD_BADKEY;
|
||||
|
||||
/* Compute the indeces. */
|
||||
idx1st = tk / pthread_key_2ndlevel_size;
|
||||
idx2nd = tk % pthread_key_2ndlevel_size;
|
||||
|
||||
/* Check the pointer to the second level array. */
|
||||
if (pds.p_specific[idx1st] == NULL)
|
||||
return TD_NOTSD;
|
||||
|
||||
/* Now get the real key.
|
||||
XXX I don't know whether it's correct but there is currently no
|
||||
easy way to determine whether a key was never set or the value
|
||||
is NULL. We return an error whenever the value is NULL. */
|
||||
if (ps_pdread (th->th_ta_p->ph, &pds.p_specific[idx1st][idx2nd], &p,
|
||||
sizeof (void *)) != PS_OK)
|
||||
return TD_ERR;
|
||||
|
||||
if (p != NULL)
|
||||
*data = p;
|
||||
|
||||
return p != NULL ? TD_OK : TD_NOTSD;
|
||||
}
|
55
linuxthreads_db/td_thr_validate.c
Normal file
55
linuxthreads_db/td_thr_validate.c
Normal file
@ -0,0 +1,55 @@
|
||||
/* Validate a thread handle.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "thread_dbP.h"
|
||||
|
||||
|
||||
td_err_e
|
||||
td_thr_validate (const td_thrhandle_t *th)
|
||||
{
|
||||
struct pthread_handle_struct *handles = th->th_ta_p->handles;
|
||||
int pthread_threads_max = th->th_ta_p->pthread_threads_max;
|
||||
int cnt;
|
||||
|
||||
LOG (__FUNCTION__);
|
||||
|
||||
/* Now get all descriptors, one after the other. */
|
||||
for (cnt = 0; cnt < pthread_threads_max; ++cnt, ++handles)
|
||||
{
|
||||
struct pthread_handle_struct phc;
|
||||
|
||||
if (cnt == 1)
|
||||
/* Skip the manager thread. */
|
||||
continue;
|
||||
|
||||
if (ps_pdread (th->th_ta_p->ph, handles, &phc,
|
||||
sizeof (struct pthread_handle_struct)) != PS_OK)
|
||||
return TD_ERR; /* XXX Other error value? */
|
||||
|
||||
if (phc.h_descr != NULL && phc.h_descr == th->th_unique)
|
||||
{
|
||||
/* XXX There should be another test using the TID but this is
|
||||
currently not available. */
|
||||
return TD_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return TD_ERR;
|
||||
}
|
426
linuxthreads_db/thread_db.h
Normal file
426
linuxthreads_db/thread_db.h
Normal file
@ -0,0 +1,426 @@
|
||||
/* Copyright (C) 1999 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 Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _THREAD_DB_H
|
||||
#define _THREAD_DB_H 1
|
||||
|
||||
/* This is the debugger interface for the LinuxThreads library. It is
|
||||
modelled closely after the interface with same names in Solaris with
|
||||
the goal to share the same code in the debugger. */
|
||||
#include <pthread.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ucontext.h>
|
||||
|
||||
|
||||
/* Error codes of the library. */
|
||||
typedef enum
|
||||
{
|
||||
TD_OK, /* No error. */
|
||||
TD_ERR, /* No further specified error. */
|
||||
TD_NOTHR, /* No matching thread found. */
|
||||
TD_NOSV, /* No matching synchronization handle found. */
|
||||
TD_NOLWP, /* No matching light-weighted process found. */
|
||||
TD_BADPH, /* Invalid process handle. */
|
||||
TD_BADTH, /* Invalid thread handle. */
|
||||
TD_BADSH, /* Invalid synchronization handle. */
|
||||
TD_BADTA, /* Invalid thread agent. */
|
||||
TD_BADKEY, /* Invalid key. */
|
||||
TD_NOMSG, /* No event available. */
|
||||
TD_NOFPREGS, /* No floating-point register content available. */
|
||||
TD_LIBTHREAD, /* Application not linked with thread library. */
|
||||
TD_NOEVENT, /* Requested event is not supported. */
|
||||
TD_NOCAPAB, /* Capability not available. */
|
||||
TD_DBERR, /* Internal debug library error. */
|
||||
TD_NOAPLIC, /* Operation is not applicable. */
|
||||
TD_NOTSD, /* No thread-specific data available. */
|
||||
TD_MALLOC, /* Out of memory. */
|
||||
TD_PARTIALREG,/* Not entire register set was read or written. */
|
||||
TD_NOXREGS /* X register set not available for given thread. */
|
||||
} td_err_e;
|
||||
|
||||
|
||||
/* Possible thread states. TD_THR_ANY_STATE is a pseudo-state used to
|
||||
select threads regardless of state in td_ta_thr_iter(). */
|
||||
typedef enum
|
||||
{
|
||||
TD_THR_ANY_STATE,
|
||||
TD_THR_UNKNOWN,
|
||||
TD_THR_STOPPED,
|
||||
TD_THR_RUN,
|
||||
TD_THR_ACTIVE,
|
||||
TD_THR_ZOMBIE,
|
||||
TD_THR_SLEEP,
|
||||
TD_THR_STOPPED_ASLEEP
|
||||
} td_thr_state_e;
|
||||
|
||||
/* Thread type: user or system. TD_THR_ANY_TYPE is a pseudo-type used
|
||||
to select threads regardless of type in td_ta_thr_iter(). */
|
||||
typedef enum
|
||||
{
|
||||
TD_THR_ANY_TYPE,
|
||||
TD_THR_USER,
|
||||
TD_THR_SYSTEM
|
||||
} td_thr_type_e;
|
||||
|
||||
|
||||
/* Types of the debugging library. */
|
||||
|
||||
/* Addresses. */
|
||||
typedef void *psaddr_t;
|
||||
|
||||
/* Handle for a process. This type is opaque. */
|
||||
typedef struct td_thragent td_thragent_t;
|
||||
|
||||
/* The actual thread handle type. This is also opaque. */
|
||||
typedef struct td_thrhandle
|
||||
{
|
||||
td_thragent_t *th_ta_p;
|
||||
psaddr_t th_unique;
|
||||
} td_thrhandle_t;
|
||||
|
||||
|
||||
/* Flags for `td_ta_thr_iter'. */
|
||||
#define TD_THR_ANY_USER_FLAGS 0xffffffff
|
||||
#define TD_THR_LOWEST_PRIORITY -20
|
||||
#define TD_SIGNO_MASK NULL
|
||||
|
||||
|
||||
#define TD_EVENTSIZE 2
|
||||
#define BT_UISHIFT 5 /* log base 2 of BT_NBIPUI, to extract word index */
|
||||
#define BT_NBIPUI (1 << BT_UISHIFT) /* n bits per uint */
|
||||
#define BT_UIMASK (BT_NBIPUI - 1) /* to extract bit index */
|
||||
|
||||
/* Bitmask of enabled events. */
|
||||
typedef struct td_thr_events
|
||||
{
|
||||
uint32_t event_bits[TD_EVENTSIZE];
|
||||
} td_thr_events_t;
|
||||
|
||||
/* Event set manipulation macros. */
|
||||
#define __td_eventmask(n) \
|
||||
(UINT32_C (1) << (((n) - 1) & BT_UIMASK))
|
||||
#define __td_eventword(n) \
|
||||
((UINT32_C ((n) - 1)) >> BT_UISHIFT)
|
||||
|
||||
#define td_event_emptyset(setp) \
|
||||
do { \
|
||||
int __i; \
|
||||
for (__i = TD_EVENTSIZE; __i > 0; --__i) \
|
||||
(setp)->event_bits[__i - 1] = 0; \
|
||||
} while (0)
|
||||
|
||||
#define td_event_fillset(setp) \
|
||||
do { \
|
||||
int __i; \
|
||||
for (__i = TD_EVENTSIZE; __i > 0; --__i) \
|
||||
(setp)->event_bits[__i - 1] = UINT32_C (0xffffffff); \
|
||||
} while (0)
|
||||
|
||||
#define td_event_addset(setp, n) \
|
||||
(((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n))
|
||||
#define td_event_delset(setp, n) \
|
||||
(((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n))
|
||||
#define td_eventismember(setp, n) \
|
||||
(__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)]))
|
||||
#if TD_EVENTSIZE == 2
|
||||
# define td_eventisempty(setp) \
|
||||
(!((setp)->event_bits[0]) && !((setp)->event_bits[1]))
|
||||
#else
|
||||
# error "td_eventisempty must be changed to match TD_EVENTSIZE"
|
||||
#endif
|
||||
|
||||
/* Events reportable by the thread implementation. */
|
||||
typedef enum
|
||||
{
|
||||
TD_ALL_EVENTS, /* Pseudo-event number. */
|
||||
TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context. */
|
||||
TD_READY, /* Is executable now. */
|
||||
TD_SLEEP, /* Blocked in a synchronization obj. */
|
||||
TD_SWITCHTO, /* Now assigned to a process. */
|
||||
TD_SWITCHFROM, /* Not anymore assigned to a process. */
|
||||
TD_LOCK_TRY, /* Trying to get an unavailable lock. */
|
||||
TD_CATCHSIG, /* Signal posted to the thread. */
|
||||
TD_IDLE, /* Process getting idle. */
|
||||
TD_CREATE, /* New thread created. */
|
||||
TD_DEATH, /* Thread terminated. */
|
||||
TD_PREEMPT, /* Preempted. */
|
||||
TD_PRI_INHERIT, /* Inherited elevated priority. */
|
||||
TD_REAP, /* Reaped. */
|
||||
TD_CONCURRENCY, /* Number of processes changing. */
|
||||
TD_TIMEOUT, /* Conditional variable wait timed out. */
|
||||
TD_MIN_EVENT_NUM = TD_READY,
|
||||
TD_MAX_EVENT_NUM = TD_TIMEOUT,
|
||||
TD_EVENTS_ENABLE = 31 /* Event reporting enabled. */
|
||||
} td_event_e;
|
||||
|
||||
/* Values representing the different ways events are reported. */
|
||||
typedef enum
|
||||
{
|
||||
NOTIFY_BPT, /* User must insert breakpoint at u.bptaddr. */
|
||||
NOTIFY_AUTOBPT, /* Breakpoint at u.bptaddr is automatically
|
||||
inserted. */
|
||||
NOTIFY_SYSCALL /* System call u.syscallno will be invoked. */
|
||||
} td_notify_e;
|
||||
|
||||
/* Description how event type is reported. */
|
||||
typedef struct td_notify
|
||||
{
|
||||
td_notify_e type; /* Way the event is reported. */
|
||||
union
|
||||
{
|
||||
psaddr_t bptaddr; /* Address of breakpoint. */
|
||||
int syscallno; /* Number of system call used. */
|
||||
} u;
|
||||
} td_notify_t;
|
||||
|
||||
/* Structure used to report event. */
|
||||
typedef struct td_event_msg
|
||||
{
|
||||
td_event_e event; /* Event type being reported. */
|
||||
const td_thrhandle_t *th_p; /* Thread reporting the event. */
|
||||
union
|
||||
{
|
||||
# if 0
|
||||
td_synchandle_t *sh; /* Handle of synchronization object. */
|
||||
#endif
|
||||
uintptr_t data; /* Event specific data. */
|
||||
} msg;
|
||||
} td_event_msg_t;
|
||||
|
||||
|
||||
/* Gathered statistics about the process. */
|
||||
typedef struct td_ta_stats
|
||||
{
|
||||
int nthreads; /* Total number of threads in use. */
|
||||
int r_concurrency; /* Concurrency level requested by user. */
|
||||
int nrunnable_num; /* Average runnable threads, numerator. */
|
||||
int nrunnable_den; /* Average runnable threads, denominator. */
|
||||
int a_concurrency_num; /* Achieved concurrency level, numerator. */
|
||||
int a_concurrency_den; /* Achieved concurrency level, denominator. */
|
||||
int nlwps_num; /* Average number of processes in use,
|
||||
numerator. */
|
||||
int nlwps_den; /* Average number of processes in use,
|
||||
denominator. */
|
||||
int nidle_num; /* Average number of idling processes,
|
||||
numerator. */
|
||||
int nidle_den; /* Average number of idling processes,
|
||||
denominator. */
|
||||
} td_ta_stats_t;
|
||||
|
||||
|
||||
/* Since Sun's library is based on Solaris threads we have to define a few
|
||||
types to map them to POSIX threads. */
|
||||
typedef pthread_t thread_t;
|
||||
typedef pthread_key_t thread_key_t;
|
||||
|
||||
/* Linux has different names for the register set types. */
|
||||
typedef gregset_t prgregset_t;
|
||||
typedef fpregset_t prfpregset_t;
|
||||
|
||||
|
||||
/* Callback for iteration over threads. */
|
||||
typedef int td_thr_iter_f __P ((const td_thrhandle_t *, void *));
|
||||
|
||||
/* Callback for iteration over thread local data. */
|
||||
typedef int td_key_iter_f __P ((thread_key_t, void (*) (void *), void *));
|
||||
|
||||
|
||||
|
||||
/* Forward declaration. This has to be defined by the user. */
|
||||
struct ps_prochandle;
|
||||
|
||||
/* We don't have any differences between processes and threads, therefore
|
||||
have only one PID type. */
|
||||
typedef pid_t lwpid_t;
|
||||
|
||||
|
||||
/* Information about the thread. */
|
||||
typedef struct td_thrinfo
|
||||
{
|
||||
td_thragent_t *ti_ta_p; /* Process handle. */
|
||||
unsigned int ti_user_flags; /* Unused. */
|
||||
thread_t ti_tid; /* Thread ID returned by
|
||||
pthread_create(). */
|
||||
char *ti_tls; /* Pointer to thread-local data. */
|
||||
psaddr_t ti_startfunc; /* Start function passed to
|
||||
pthread_create(). */
|
||||
psaddr_t ti_stkbase; /* Base of thread's stack. */
|
||||
long int ti_stksize; /* Size of thread's stack. */
|
||||
psaddr_t ti_ro_area; /* Unused. */
|
||||
int ti_ro_size; /* Unused. */
|
||||
td_thr_state_e ti_state; /* Thread state. */
|
||||
unsigned char ti_db_suspended; /* Nonzero if suspended by debugger. */
|
||||
td_thr_type_e ti_type; /* Unused. */
|
||||
intptr_t ti_pc; /* Unused. */
|
||||
intptr_t ti_sp; /* Unused. */
|
||||
short int ti_flags; /* Unused. */
|
||||
int ti_pri; /* Thread priority. */
|
||||
lwpid_t ti_lid; /* Unused. */
|
||||
sigset_t ti_sigmask; /* Signal mask. */
|
||||
unsigned char ti_traceme; /* Nonzero if event reporting
|
||||
enabled. */
|
||||
unsigned char ti_preemptflag; /* Unused. */
|
||||
unsigned char ti_pirecflag; /* Unused. */
|
||||
sigset_t ti_pending; /* Set of pending signals. */
|
||||
td_thr_events_t ti_events; /* Set of enabled events. */
|
||||
} td_thrinfo_t;
|
||||
|
||||
|
||||
|
||||
/* Prototypes for exported library functions. */
|
||||
|
||||
/* Initialize the thread debug support library. */
|
||||
extern td_err_e td_init (void);
|
||||
|
||||
/* Historical relict. Should not be used anymore. */
|
||||
extern td_err_e td_log (void);
|
||||
|
||||
/* Generate new thread debu librarz handle for process PS. */
|
||||
extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
|
||||
|
||||
/* Free resources allocated for TA. */
|
||||
extern td_err_e td_ta_delete (td_thragent_t *__ta);
|
||||
|
||||
/* Get number of currently running threads in process associated with TA. */
|
||||
extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np);
|
||||
|
||||
/* Return process handle passed in `td_ta_new' for process associated with
|
||||
TA. */
|
||||
extern td_err_e td_ta_get_ph (const td_thragent_t *__ta,
|
||||
struct ps_prochandle **__ph);
|
||||
|
||||
/* Map thread library handle PT to thread debug library handle for process
|
||||
associated with TA and store result in *TH. */
|
||||
extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt,
|
||||
td_thrhandle_t *__th);
|
||||
|
||||
/* Map process ID LWPID to thread debug library handle for process
|
||||
associated with TA and store result in *TH. */
|
||||
extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
|
||||
td_thrhandle_t *__th);
|
||||
|
||||
|
||||
/* Call for each thread is process associated with TA the callback function
|
||||
CALLBACK. */
|
||||
extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
|
||||
td_thr_iter_f *__callback, void *__cbdata_p,
|
||||
td_thr_state_e __state, int __ti_pri,
|
||||
sigset_t *__ti_sigmask_p,
|
||||
unsigned int __ti_user_flags);
|
||||
|
||||
/* Call for each defined thread local data entry the callback function KI. */
|
||||
extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki,
|
||||
void *__p);
|
||||
|
||||
|
||||
/* Get event address for EVENT. */
|
||||
extern td_err_e td_ta_event_addr (const td_thragent_t *__ta,
|
||||
td_event_e __event, td_notify_t *__ptr);
|
||||
|
||||
|
||||
/* Set suggested concurrency level for process associated with TA. */
|
||||
extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level);
|
||||
|
||||
|
||||
/* Enable collecting statistics for process associated with TA. */
|
||||
extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
|
||||
|
||||
/* Reset statistics. */
|
||||
extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
|
||||
|
||||
/* Retrieve statitics from process associated with TA. */
|
||||
extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
|
||||
td_ta_stats_t *__statsp);
|
||||
|
||||
|
||||
/* Validate that TH is a thread handle. */
|
||||
extern td_err_e td_thr_validate (const td_thrhandle_t *__th);
|
||||
|
||||
/* Return information about thread TH. */
|
||||
extern td_err_e td_thr_get_info (const td_thrhandle_t *__th,
|
||||
td_thrinfo_t *__infop);
|
||||
|
||||
/* Retrieve floating-point register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th,
|
||||
prfpregset_t *__regset);
|
||||
|
||||
/* Retrieve general register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th,
|
||||
prgregset_t __gregs);
|
||||
|
||||
/* Retrieve extended register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs);
|
||||
|
||||
/* Get size of extended register set of process running thread TH. */
|
||||
extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep);
|
||||
|
||||
/* Set floating-point register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th,
|
||||
const prfpregset_t *__fpregs);
|
||||
|
||||
/* Set general register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th,
|
||||
prgregset_t __gregs);
|
||||
|
||||
/* Set extended register contents of process running thread TH. */
|
||||
extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th,
|
||||
const void *__addr);
|
||||
|
||||
|
||||
/* Enable reporting for EVENT for thread TH. */
|
||||
extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event);
|
||||
|
||||
/* Enable EVENT for thread TH. */
|
||||
extern td_err_e td_thr_set_event (const td_thrhandle_t *__th,
|
||||
td_thr_events_t *__event);
|
||||
|
||||
/* Disable EVENT for thread TH. */
|
||||
extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th,
|
||||
td_thr_events_t *__event);
|
||||
|
||||
/* Get event message for thread TH. */
|
||||
extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th,
|
||||
td_event_msg_t *__msg);
|
||||
|
||||
|
||||
/* Set priority of thread TH. */
|
||||
extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio);
|
||||
|
||||
|
||||
/* Set pending signals for thread TH. */
|
||||
extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th,
|
||||
unsigned char __n, const sigset_t *__ss);
|
||||
|
||||
/* Set signal mask for thread TH. */
|
||||
extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th,
|
||||
const sigset_t *__ss);
|
||||
|
||||
|
||||
/* Return thread local data associated with key TK in thread TH. */
|
||||
extern td_err_e td_thr_tsd (const td_thrhandle_t *__th,
|
||||
const thread_key_t __tk, void **__data);
|
||||
|
||||
|
||||
/* Suspend execution of thread TH. */
|
||||
extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th);
|
||||
|
||||
/* Resume execution of thread TH. */
|
||||
extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th);
|
||||
|
||||
#endif /* thread_db.h */
|
46
linuxthreads_db/thread_dbP.h
Normal file
46
linuxthreads_db/thread_dbP.h
Normal file
@ -0,0 +1,46 @@
|
||||
/* Private header for thread debug library. */
|
||||
#ifndef _THREAD_DBP_H
|
||||
#define _THREAD_DBP_H 1
|
||||
|
||||
#include "thread_db.h"
|
||||
#include "../linuxthreads/internals.h"
|
||||
|
||||
#include "proc_service.h"
|
||||
|
||||
|
||||
/* Comment out the following for less verbose output. */
|
||||
#define LOG(c) __libc_write (2, c "\n", strlen (c "\n"))
|
||||
extern ssize_t __libc_write (int, const void *, size_t);
|
||||
|
||||
|
||||
|
||||
/* 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;
|
||||
};
|
||||
|
||||
|
||||
#endif /* thread_dbP.h */
|
Loading…
Reference in New Issue
Block a user