From patchwork Thu Mar 30 01:49:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Durigan Junior X-Patchwork-Id: 19765 Received: (qmail 107576 invoked by alias); 30 Mar 2017 01:50:06 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 101697 invoked by uid 89); 30 Mar 2017 01:49:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=ling, H*MI:sk:2017033, junior, sergio X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 30 Mar 2017 01:49:24 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 92599C05490B for ; Thu, 30 Mar 2017 01:49:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 92599C05490B Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=sergiodj@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 92599C05490B Received: from psique.yyz.redhat.com (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by smtp.corp.redhat.com (Postfix) with ESMTP id 368B65C545; Thu, 30 Mar 2017 01:49:24 +0000 (UTC) From: Sergio Durigan Junior To: GDB Patches Cc: Pedro Alves , Sergio Durigan Junior Subject: [PATCH v5 2/5] Share parts of gdb/gdbthread.h with gdbserver Date: Wed, 29 Mar 2017 21:49:12 -0400 Message-Id: <20170330014915.4894-3-sergiodj@redhat.com> In-Reply-To: <20170330014915.4894-1-sergiodj@redhat.com> References: <1482464361-4068-1-git-send-email-sergiodj@redhat.com> <20170330014915.4894-1-sergiodj@redhat.com> X-IsSubscribed: yes Again, it was necessary to share a few functions declared on gdb/gdbthread.h with gdbserver, because they are needed by fork_inferior. I decided to implement them on gdb/gdbserver/inferiors.c because that's where the thread functions are also implemented on gdbserver. Some of these functions do not need to be implemented on gdbserver, or don't make sense there, so they are left blank and commented properly. gdb/ChangeLog: yyyy-mm-dd Sergio Durigan Junior * Makefile.in (HFILES_NO_SRCDIR): Add "common/common-gdbthread.h". * common/common-gdbthread.h: New file, with parts from "gdb/gdbthread.h". * gdbthread.h: Include "common-gdbthread.h". (init_thread_list): Moved to "common/common-gdbthread.h". (add_thread_silent): Likewise. (switch_to_thread): Likewise. gdb/gdbserver/ChangeLog: yyyy-mm-dd Sergio Durigan Junior * inferiors.c (init_thread_list): New function. (switch_to_thread): Likewise. (add_thread_silent): Likewise. --- gdb/Makefile.in | 1 + gdb/common/common-gdbthread.h | 32 ++++++++++++++++++++++++++++++++ gdb/gdbserver/inferiors.c | 23 +++++++++++++++++++++++ gdb/gdbthread.h | 9 +-------- 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 gdb/common/common-gdbthread.h diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 6ad03d7..e5b0363 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1482,6 +1482,7 @@ HFILES_NO_SRCDIR = \ common/common-debug.h \ common/common-defs.h \ common/common-exceptions.h \ + common/common-gdbthread.h \ common/common-regcache.h \ common/common-types.h \ common/common-utils.h \ diff --git a/gdb/common/common-gdbthread.h b/gdb/common/common-gdbthread.h new file mode 100644 index 0000000..8a1dfaa --- /dev/null +++ b/gdb/common/common-gdbthread.h @@ -0,0 +1,32 @@ +/* Common multi-process/thread control defs for GDB and gdbserver. + Copyright (C) 1987-2017 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 . */ + +#ifndef COMMON_GDBTHREAD_H +#define COMMON_GDBTHREAD_H + +struct target_waitstatus; + +/* Switch from one thread to another. */ +extern void switch_to_thread (ptid_t ptid); + +/* Add a thread to the thread list and return the pointer to the new + thread. Caller may use this pointer to initialize the private + thread data. */ +extern struct thread_info *add_thread_silent (ptid_t ptid); + +#endif /* ! COMMON_GDBTHREAD_H */ diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c index b65a726..4ed5e00 100644 --- a/gdb/gdbserver/inferiors.c +++ b/gdb/gdbserver/inferiors.c @@ -468,3 +468,26 @@ make_cleanup_restore_current_thread (void) { return make_cleanup (do_restore_current_thread_cleanup, current_thread); } + +/* See common/common-gdbthread.h. */ + +void +switch_to_thread (ptid_t ptid) +{ + if (!ptid_equal (ptid, minus_one_ptid)) + current_thread = find_thread_ptid (ptid); +} + +/* See common/common-gdbthread.h. */ + +struct thread_info * +add_thread_silent (ptid_t ptid) +{ + pid_t pid = ptid_get_pid (ptid); + + /* Check if there is a process already. */ + if (find_process_pid (pid) == NULL) + add_process (pid, 0); + + return add_thread (ptid_build (pid, pid, 0), NULL); +} diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 9a16fe6..1fd73ea 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -31,6 +31,7 @@ struct symtab; #include "common/vec.h" #include "target/waitstatus.h" #include "cli/cli-utils.h" +#include "common-gdbthread.h" /* Frontend view of the thread state. Possible extensions: stepping, finishing, until(ling),... */ @@ -357,10 +358,6 @@ extern void init_thread_list (void); initialize the private thread data. */ extern struct thread_info *add_thread (ptid_t ptid); -/* Same as add_thread, but does not print a message - about new thread. */ -extern struct thread_info *add_thread_silent (ptid_t ptid); - /* Same as add_thread, and sets the private info. */ extern struct thread_info *add_thread_with_info (ptid_t ptid, struct private_thread_info *); @@ -473,10 +470,6 @@ extern struct thread_info *iterate_over_threads (thread_callback_func, void *); extern int thread_count (void); -/* Switch from one thread to another. Also sets the STOP_PC - global. */ -extern void switch_to_thread (ptid_t ptid); - /* Switch from one thread to another. Does not read registers and sets STOP_PC to -1. */ extern void switch_to_thread_no_regs (struct thread_info *thread);