[14/15] Introduce common_get_thread_regcache
Commit Message
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
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.
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
@@ -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)
{
@@ -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
@@ -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
{
@@ -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. */
@@ -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,