Introduce common-regcache.h

This introduces common-regcache.h.  This contains two functions that
allow nat/linux-btrace.c to be simplified.  A better long term
solution would be unify the regcache code, but this is sufficient for
now.

gdb/ChangeLog:

	* common/common-regcache.h: New file.
	* Makefile.in (HFILES_NO_SRCDIR): Add common/common-regcache.h.
	* regcache.h: Include common-regcache.h.
	(regcache_read_pc): Don't declare.
	* regcache.c (get_thread_regcache_for_ptid): New function.
	* nat/linux-btrace.c: Don't include regcache.h.
	Include common-regcache.h.
	(perf_event_read_bts): Use get_thread_regcache_for_ptid.

gdb/gdbserver/ChangeLog:

	* regcache.h: Include common-regcache.h.
	(regcache_read_pc): Don't declare.
	* regcache.c (get_thread_regcache_for_ptid): New function.
This commit is contained in:
Gary Benson 2014-09-12 10:11:42 +01:00
parent ac4eb73652
commit 361c8ade9c
9 changed files with 80 additions and 9 deletions

View File

@ -1,3 +1,15 @@
2014-09-12 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* common/common-regcache.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add common/common-regcache.h.
* regcache.h: Include common-regcache.h.
(regcache_read_pc): Don't declare.
* regcache.c (get_thread_regcache_for_ptid): New function.
* nat/linux-btrace.c: Don't include regcache.h.
Include common-regcache.h.
(perf_event_read_bts): Use get_thread_regcache_for_ptid.
2014-09-11 Thomas Schwinge <thomas@codesourcery.com>
* regcache.h (struct regset): Declare.

View File

@ -938,7 +938,8 @@ target/wait.h target/waitstatus.h nat/linux-nat.h nat/linux-waitpid.h \
common/print-utils.h common/rsp-low.h nat/x86-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 common/cleanups.h common/gdb_setjmp.h \
common/common-exceptions.h target/target.h common/symbol.h
common/common-exceptions.h target/target.h common/symbol.h \
common/common-regcache.h
# Header files that already have srcdir in them, or which are in objdir.

View File

@ -0,0 +1,36 @@
/* Cache and manage the values of registers
Copyright (C) 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 <http://www.gnu.org/licenses/>. */
#ifndef COMMON_REGCACHE_H
#define COMMON_REGCACHE_H
/* This header is a stopgap until we have an independent regcache. */
/* Return a pointer to the register cache associated with the
thread specified by PTID. This function must be provided by
the client. */
extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid);
/* Read the PC register. This function must be provided by the
client. */
extern CORE_ADDR regcache_read_pc (struct regcache *regcache);
#endif /* COMMON_REGCACHE_H */

View File

@ -1,3 +1,10 @@
2014-09-12 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* regcache.h: Include common-regcache.h.
(regcache_read_pc): Don't declare.
* regcache.c (get_thread_regcache_for_ptid): New function.
2014-09-11 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>

View File

@ -60,6 +60,14 @@ get_thread_regcache (struct thread_info *thread, int fetch)
return regcache;
}
/* See common/common-regcache.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)
{

View File

@ -19,6 +19,8 @@
#ifndef REGCACHE_H
#define REGCACHE_H
#include "common-regcache.h"
struct thread_info;
struct target_desc;
@ -91,7 +93,7 @@ void registers_to_string (struct regcache *regcache, char *buf);
void registers_from_string (struct regcache *regcache, char *buf);
CORE_ADDR regcache_read_pc (struct regcache *regcache);
/* For regcache_read_pc see common/common-regcache.h. */
void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);

View File

@ -26,7 +26,7 @@
#endif
#include "linux-btrace.h"
#include "regcache.h"
#include "common-regcache.h"
#include "gdbthread.h"
#include "gdb_wait.h"
#include "x86-cpuid.h"
@ -180,11 +180,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

View File

@ -536,6 +536,13 @@ get_current_regcache (void)
return get_thread_regcache (inferior_ptid);
}
/* See common/common-regcache.h. */
struct regcache *
get_thread_regcache_for_ptid (ptid_t ptid)
{
return get_thread_regcache (ptid);
}
/* Observer for the target_changed event. */

View File

@ -20,6 +20,8 @@
#ifndef REGCACHE_H
#define REGCACHE_H
#include "common-regcache.h"
struct regcache;
struct regset;
struct gdbarch;
@ -136,7 +138,7 @@ void regcache_cooked_write_part (struct regcache *regcache, int regnum,
/* Special routines to read/write the PC. */
extern CORE_ADDR regcache_read_pc (struct regcache *regcache);
/* For regcache_read_pc see common/common-regcache.h. */
extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
/* Transfer a raw register [0..NUM_REGS) between the regcache and the