[14/15] Introduce common_get_thread_regcache

Message ID 1404902255-11101-15-git-send-email-gbenson@redhat.com
State Changes Requested, archived
Headers

Commit Message

Gary Benson July 9, 2014, 10:37 a.m. UTC
  This introduces common_get_thread_regcache 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-07-09  Tom Tromey  <tromey@redhat.com>
	    Gary Benson  <gbenson@redhat.com>

	* regcache.h (common_get_thread_regcache): Declare.
	* regcache.c (common_get_thread_regcache): New function.
	* nat/linux-btrace.h (common_get_thread_regcache): Declare.
	* nat/linux-btrace.c (perf_event_read_bts): Use
	common_get_thread_regcache.

gdb/gdbserver/
2014-07-09  Tom Tromey  <tromey@redhat.com>

	* regcache.c (common_get_thread_regcache): New function.
---
 gdb/ChangeLog            |    9 +++++++++
 gdb/gdbserver/ChangeLog  |    4 ++++
 gdb/gdbserver/regcache.c |    8 ++++++++
 gdb/nat/linux-btrace.c   |    6 +-----
 gdb/nat/linux-btrace.h   |    5 +++++
 gdb/regcache.c           |    7 +++++++
 gdb/regcache.h           |    1 +
 7 files changed, 35 insertions(+), 5 deletions(-)
  

Comments

Doug Evans July 14, 2014, 7:34 p.m. UTC | #1
Gary Benson writes:
 > This introduces common_get_thread_regcache 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-07-09  Tom Tromey  <tromey@redhat.com>
 > 	    Gary Benson  <gbenson@redhat.com>
 > 
 > 	* regcache.h (common_get_thread_regcache): Declare.
 > 	* regcache.c (common_get_thread_regcache): New function.
 > 	* nat/linux-btrace.h (common_get_thread_regcache): Declare.
 > 	* nat/linux-btrace.c (perf_event_read_bts): Use
 > 	common_get_thread_regcache.

When I think of "btrace" I don't think of "regcache".
Can common_get_thread_regcache go some place other than linux-btrace.h?

Also, why declare the function in two places?
I would expect it to be declared once in a common header.

Lastly, common_get_thread_regcache feels a bit weird as the name for
this function.  get_thread_regcache_for_ptid, or some such, feels better.

Cheers.
  
Gary Benson July 16, 2014, 1:29 p.m. UTC | #2
Doug Evans wrote:
> Gary Benson writes:
> > This introduces common_get_thread_regcache 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-07-09  Tom Tromey  <tromey@redhat.com>
> > 	    Gary Benson  <gbenson@redhat.com>
> > 
> > 	* regcache.h (common_get_thread_regcache): Declare.
> > 	* regcache.c (common_get_thread_regcache): New function.
> > 	* nat/linux-btrace.h (common_get_thread_regcache): Declare.
> > 	* nat/linux-btrace.c (perf_event_read_bts): Use
> > 	common_get_thread_regcache.
> 
> When I think of "btrace" I don't think of "regcache".  Can
> common_get_thread_regcache go some place other than linux-btrace.h?
> 
> Also, why declare the function in two places?  I would expect it to
> be declared once in a common header.
> 
> Lastly, common_get_thread_regcache feels a bit weird as the name for
> this function.  get_thread_regcache_for_ptid, or some such, feels
> better.

I renamed it get_thread_regcache_for_ptid and put it in its own
header, common/common-regcache.h.

Thanks,
Gary
  

Patch

diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index bed10b4..6f1cb39 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -65,6 +65,14 @@  get_thread_regcache (struct thread_info *thread, int fetch)
   return regcache;
 }
 
+/* See common/linux-btrace.h.  */
+
+struct regcache *
+common_get_thread_regcache (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 188220b..dd7744b 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -184,11 +184,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 = common_get_thread_regcache (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/nat/linux-btrace.h b/gdb/nat/linux-btrace.h
index 12e9b60..85cd88b 100644
--- a/gdb/nat/linux-btrace.h
+++ b/gdb/nat/linux-btrace.h
@@ -33,6 +33,11 @@ 
 #  include <linux/perf_event.h>
 #endif
 
+/* A hack until we have an independent regcache.  This must be
+   provided by the user.  */
+
+extern struct regcache *common_get_thread_regcache (ptid_t ptid);
+
 /* Branch trace target information per thread.  */
 struct btrace_target_info
 {
diff --git a/gdb/regcache.c b/gdb/regcache.c
index 5ee90b0..047f8f4 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -537,6 +537,13 @@  get_current_regcache (void)
   return get_thread_regcache (inferior_ptid);
 }
 
+/* See common/linux-btrace.h.  */
+
+struct regcache *
+common_get_thread_regcache (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 8423f57..9679691 100644
--- a/gdb/regcache.h
+++ b/gdb/regcache.h
@@ -25,6 +25,7 @@  struct gdbarch;
 struct address_space;
 
 extern struct regcache *get_current_regcache (void);
+extern struct regcache *common_get_thread_regcache (ptid_t ptid);
 extern struct regcache *get_thread_regcache (ptid_t ptid);
 extern struct regcache *get_thread_arch_regcache (ptid_t, struct gdbarch *);
 extern struct regcache *get_thread_arch_aspace_regcache (ptid_t,