From patchwork Fri Aug 1 10:19:33 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gary Benson X-Patchwork-Id: 2274 Received: (qmail 20538 invoked by alias); 1 Aug 2014 10:22:17 -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 20457 invoked by uid 89); 1 Aug 2014 10:22:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 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 (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 01 Aug 2014 10:22:15 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s71AJmef025746 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 1 Aug 2014 06:19:48 -0400 Received: from blade.nx (ovpn-116-104.ams2.redhat.com [10.36.116.104]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s71AJkLg026191; Fri, 1 Aug 2014 06:19:46 -0400 Received: from blade.nx (localhost [127.0.0.1]) by blade.nx (Postfix) with ESMTP id BC0502640DC; Fri, 1 Aug 2014 11:19:44 +0100 (BST) From: Gary Benson To: gdb-patches@sourceware.org Cc: Doug Evans , Pedro Alves , Tom Tromey Subject: [PATCH 07/11 v5] Introduce get_thread_regcache_for_ptid Date: Fri, 1 Aug 2014 11:19:33 +0100 Message-Id: <1406888377-25795-8-git-send-email-gbenson@redhat.com> In-Reply-To: <1406888377-25795-1-git-send-email-gbenson@redhat.com> References: <1406888377-25795-1-git-send-email-gbenson@redhat.com> X-IsSubscribed: yes This introduces get_thread_regcache_for_ptid so that we can simplify nat/linux-btrace.c. A better long term solution would be unify the regcache code, but this is sufficient for now. gdb/ 2014-08-01 Tom Tromey Gary Benson * common/common-regcache.h: New file. * Makefile.in (HFILES_NO_SRCDIR): Add common/common-regcache.h. * regcache.c: Include the above. (get_thread_regcache_for_ptid): New function. * nat/linux-btrace.c: Include common-regcache.h. (perf_event_read_bts): Use get_thread_regcache_for_ptid. gdb/gdbserver/ 2014-08-01 Tom Tromey Gary Benson * regcache.c: Include common-regcache.h. (get_thread_regcache_for_ptid): New function. --- gdb/ChangeLog | 10 ++++++++++ gdb/Makefile.in | 2 +- gdb/common/common-regcache.h | 28 ++++++++++++++++++++++++++++ gdb/gdbserver/ChangeLog | 6 ++++++ gdb/gdbserver/regcache.c | 10 ++++++++++ gdb/nat/linux-btrace.c | 7 ++----- gdb/regcache.c | 8 ++++++++ 7 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 gdb/common/common-regcache.h diff --git a/gdb/Makefile.in b/gdb/Makefile.in index fea7550..c5f2854 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -936,7 +936,7 @@ ctf.h nat/i386-cpuid.h nat/i386-gcc-cpuid.h target/resume.h \ target/wait.h target/waitstatus.h nat/linux-nat.h nat/linux-waitpid.h \ common/print-utils.h common/rsp-low.h nat/i386-dregs.h x86-linux-nat.h \ i386-linux-nat.h common/common-defs.h common/errors.h common/common-types.h \ -common/common-debug.h target/target.h target/symbol.h +common/common-debug.h target/target.h target/symbol.h common/common-regcache.h # Header files that already have srcdir in them, or which are in objdir. diff --git a/gdb/common/common-regcache.h b/gdb/common/common-regcache.h new file mode 100644 index 0000000..2ef7cb1 --- /dev/null +++ b/gdb/common/common-regcache.h @@ -0,0 +1,28 @@ +/* Cache and manage the values of registers + + Copyright (C) 1986-2014 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_REGCACHE_H +#define COMMON_REGCACHE_H + +/* A hack until we have an independent regcache. This must be + provided by the user. */ + +extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid); + +#endif /* COMMON_REGCACHE_H */ diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c index db9dad9..ec4f6c7 100644 --- a/gdb/gdbserver/regcache.c +++ b/gdb/gdbserver/regcache.c @@ -21,6 +21,8 @@ #include "gdbthread.h" #include "tdesc.h" #include "rsp-low.h" +#include "common-regcache.h" + #ifndef IN_PROCESS_AGENT struct regcache * @@ -61,6 +63,14 @@ get_thread_regcache (struct thread_info *thread, int fetch) return regcache; } +/* See common/linux-btrace.h. */ + +struct regcache * +get_thread_regcache_for_ptid (ptid_t ptid) +{ + return get_thread_regcache (find_thread_ptid (ptid), 1); +} + void regcache_invalidate_thread (struct thread_info *thread) { diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c index f6fdbda..b32d04c 100644 --- a/gdb/nat/linux-btrace.c +++ b/gdb/nat/linux-btrace.c @@ -30,6 +30,7 @@ #include "gdbthread.h" #include "gdb_wait.h" #include "i386-cpuid.h" +#include "common-regcache.h" #ifdef HAVE_SYS_SYSCALL_H #include @@ -180,11 +181,7 @@ perf_event_read_bts (struct btrace_target_info* tinfo, const uint8_t *begin, gdb_assert (start <= end); /* The first block ends at the current pc. */ -#ifdef GDBSERVER - regcache = get_thread_regcache (find_thread_ptid (tinfo->ptid), 1); -#else - regcache = get_thread_regcache (tinfo->ptid); -#endif + regcache = get_thread_regcache_for_ptid (tinfo->ptid); block.end = regcache_read_pc (regcache); /* The buffer may contain a partial record as its last entry (i.e. when the diff --git a/gdb/regcache.c b/gdb/regcache.c index f410dc2..2ffc121 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -28,6 +28,7 @@ #include "exceptions.h" #include "remote.h" #include "valprint.h" +#include "common-regcache.h" /* * DATA STRUCTURE @@ -535,6 +536,13 @@ get_current_regcache (void) return get_thread_regcache (inferior_ptid); } +/* See common/linux-btrace.h. */ + +struct regcache * +get_thread_regcache_for_ptid (ptid_t ptid) +{ + return get_thread_regcache (ptid); +} /* Observer for the target_changed event. */