summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-09-22 20:26:21 +0000
committermidipix <writeonce@midipix.org>2019-09-22 20:26:21 +0000
commitaeca9174293ad20ee772e0f485996a9ebe7c059c (patch)
tree45fed325fa5baffba072795d53af3bf9222d11a3
parent896cb3d36665afbb113b410325a61f8e95ec300c (diff)
downloadchainport-aeca9174293ad20ee772e0f485996a9ebe7c059c.tar.bz2
chainport-aeca9174293ad20ee772e0f485996a9ebe7c059c.tar.xz
mgdb: added winnt_supports_multi_process(), winnt_resume_process().
-rw-r--r--overlay/mgdb/gdb/winnt-nat.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/overlay/mgdb/gdb/winnt-nat.c b/overlay/mgdb/gdb/winnt-nat.c
index 4a27c40..3637c4e 100644
--- a/overlay/mgdb/gdb/winnt-nat.c
+++ b/overlay/mgdb/gdb/winnt-nat.c
@@ -1105,6 +1105,26 @@ static void winnt_resume_one(ptid_t ptid, int step, enum gdb_signal sig)
}
}
+static void winnt_resume_process(pid_t pid, int step, enum gdb_signal sig)
+{
+ struct winnt_process * pdbg;
+ struct winnt_thread * thread;
+ ptid_t ptid;
+
+ if (!(pdbg = winnt_process_record(pid)))
+ return;
+
+ for (thread=pdbg->threads; thread; thread=thread->next) {
+ ptid.pid = pdbg->syspid;
+ ptid.tid = thread->tid;
+ ptid.lwp = 0;
+
+ (thread->tid == inferior_ptid.tid)
+ ? winnt_resume_one(ptid,step,sig)
+ : winnt_resume_one(ptid,0,sig);
+ }
+}
+
static void winnt_resume_all(int step, enum gdb_signal sig)
{
struct winnt_process * pdbg;
@@ -1136,7 +1156,9 @@ static void winnt_resume (
{
ptid_equal(ptid,minus_one_ptid)
? winnt_resume_all(step,sig)
- : winnt_resume_one(ptid,step,sig);
+ : ptid.tid
+ ? winnt_resume_one(ptid,step,sig)
+ : winnt_resume_process(ptid.pid,step,sig);
}
static void winnt_kill (struct target_ops * t)
@@ -1228,6 +1250,11 @@ static char * winnt_pid_to_str (struct target_ops * t, ptid_t ptid)
return outbuf;
}
+static int winnt_supports_multi_process(struct target_ops * t)
+{
+ return 1;
+}
+
static int winnt_perk_init(void)
{
char * argv[2];
@@ -1329,6 +1356,8 @@ static target_ops * winnt_target_alloc (void)
t->to_interrupt = winnt_interrupt;
t->to_get_ada_task_ptid = winnt_get_ada_task_ptid;
+ t->to_supports_multi_process = winnt_supports_multi_process;
+
x86_use_watchpoints(t);
winnt_init_dr_low();