From 361c8ade9c3c88cf7f0111fdab3ceb03028842bc Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Fri, 12 Sep 2014 10:11:42 +0100 Subject: [PATCH] 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. --- gdb/ChangeLog | 12 ++++++++++++ gdb/Makefile.in | 3 ++- gdb/common/common-regcache.h | 36 ++++++++++++++++++++++++++++++++++++ gdb/gdbserver/ChangeLog | 7 +++++++ gdb/gdbserver/regcache.c | 8 ++++++++ gdb/gdbserver/regcache.h | 4 +++- gdb/nat/linux-btrace.c | 8 ++------ gdb/regcache.c | 7 +++++++ gdb/regcache.h | 4 +++- 9 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 gdb/common/common-regcache.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 30112cb..96d65ae 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2014-09-12 Tom Tromey + Gary Benson + + * 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 * regcache.h (struct regset): Declare. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index f6b9176..cbec0d2 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -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. diff --git a/gdb/common/common-regcache.h b/gdb/common/common-regcache.h new file mode 100644 index 0000000..2825c7f --- /dev/null +++ b/gdb/common/common-regcache.h @@ -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 . */ + +#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 */ diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 0ea5a42..f88eb31 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2014-09-12 Tom Tromey + Gary Benson + + * 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 Gary Benson diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c index fda2069..ad66ff7 100644 --- a/gdb/gdbserver/regcache.c +++ b/gdb/gdbserver/regcache.c @@ -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) { diff --git a/gdb/gdbserver/regcache.h b/gdb/gdbserver/regcache.h index 891fead..bf2e51f 100644 --- a/gdb/gdbserver/regcache.h +++ b/gdb/gdbserver/regcache.h @@ -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); diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c index e0106fa..385ca4e 100644 --- a/gdb/nat/linux-btrace.c +++ b/gdb/nat/linux-btrace.c @@ -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 diff --git a/gdb/regcache.c b/gdb/regcache.c index 05b8fb9..9b6c794 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -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. */ diff --git a/gdb/regcache.h b/gdb/regcache.h index 0e0b84b..c00da84 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -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 -- 2.7.4