diff options
author | Yao Qi <yao@codesourcery.com> | 2012-04-29 06:28:30 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2012-04-29 06:28:30 +0000 |
commit | 623b6bdf12dec583722ca6615e5ff26581597d6c (patch) | |
tree | cda858c70fbcf6b473aae8c1782730d7783a527c /gdb/gdbserver/gdbthread.h | |
parent | 5ca6f161fae88f037bbea4c45aae471529cec786 (diff) | |
download | gdb-623b6bdf12dec583722ca6615e5ff26581597d6c.zip gdb-623b6bdf12dec583722ca6615e5ff26581597d6c.tar.gz gdb-623b6bdf12dec583722ca6615e5ff26581597d6c.tar.bz2 |
gdb/gdbserver:
* server.h: Move some code to ...
* gdbthread.h: ... here. New.
* Makefile.in (inferiors.o, regcache.o): Depends on gdbthread.h
(remote-utils.o, server.o, target.o tracepoint.o): Likewise.
(nto-low.o, win32-low.o): Likewise.
* inferiors.c, linux-low.h, nto-low.c: Include gdbthread.h.
* regcache.c, remote-utils.c, server.c: Likewise.
* target.c, tracepoint.c, win32-low.c: Likewise.
Diffstat (limited to 'gdb/gdbserver/gdbthread.h')
-rw-r--r-- | gdb/gdbserver/gdbthread.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h new file mode 100644 index 0000000..d863ec0 --- /dev/null +++ b/gdb/gdbserver/gdbthread.h @@ -0,0 +1,71 @@ +/* Multi-thread control defs for remote server for GDB. + Copyright (C) 1993, 1995, 1997-2000, 2002-2012 Free Software + Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_THREAD_H +#define GDB_THREAD_H + +#include "server.h" + +struct thread_info +{ + struct inferior_list_entry entry; + void *target_data; + void *regcache_data; + + /* The last resume GDB requested on this thread. */ + enum resume_kind last_resume_kind; + + /* The last wait status reported for this thread. */ + struct target_waitstatus last_status; + + /* Given `while-stepping', a thread may be collecting data for more + than one tracepoint simultaneously. E.g.: + + ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs + ff0002 INSN2 + ff0003 INSN3 <-- TP2, collect $regs + ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs + ff0005 INSN5 + + Notice that when instruction INSN5 is reached, the while-stepping + actions of both TP1 and TP3 are still being collected, and that TP2 + had been collected meanwhile. The whole range of ff0001-ff0005 + should be single-stepped, due to at least TP1's while-stepping + action covering the whole range. + + On the other hand, the same tracepoint with a while-stepping action + may be hit by more than one thread simultaneously, hence we can't + keep the current step count in the tracepoint itself. + + This is the head of the list of the states of `while-stepping' + tracepoint actions this thread is now collecting; NULL if empty. + Each item in the list holds the current step of the while-stepping + action. */ + struct wstep_state *while_stepping; +}; + +extern struct inferior_list all_threads; + +void remove_thread (struct thread_info *thread); +void add_thread (ptid_t ptid, void *target_data); + +struct thread_info *find_thread_ptid (ptid_t ptid); +struct thread_info *gdb_id_to_thread (unsigned int); + +#endif /* GDB_THREAD_H */ |