/* Cache and manage the values of registers for GDB, the GNU debugger.
- Copyright (C) 1986-2018 Free Software Foundation, Inc.
+ Copyright (C) 1986-2020 Free Software Foundation, Inc.
This file is part of GDB.
#ifndef REGCACHE_H
#define REGCACHE_H
-#include "common-regcache.h"
+#include "gdbsupport/common-regcache.h"
+#include "gdbsupport/function-view.h"
#include <forward_list>
struct regcache;
struct regset;
struct gdbarch;
struct address_space;
+class thread_info;
+struct process_stratum_target;
extern struct regcache *get_current_regcache (void);
-extern struct regcache *get_thread_regcache (ptid_t ptid);
+extern struct regcache *get_thread_regcache (process_stratum_target *target,
+ ptid_t ptid);
/* Get the regcache of THREAD. */
extern struct regcache *get_thread_regcache (thread_info *thread);
-extern struct regcache *get_thread_arch_regcache (ptid_t, struct gdbarch *);
-extern struct regcache *get_thread_arch_aspace_regcache (ptid_t,
- struct gdbarch *,
- struct address_space *);
+extern struct regcache *get_thread_arch_regcache
+ (process_stratum_target *targ, ptid_t, struct gdbarch *);
+extern struct regcache *get_thread_arch_aspace_regcache
+ (process_stratum_target *target, ptid_t,
+ struct gdbarch *, struct address_space *);
extern enum register_status
regcache_raw_read_signed (struct regcache *regcache,
/* Special routines to read/write the PC. */
-/* For regcache_read_pc see common/common-regcache.h. */
+/* For regcache_read_pc see gdbsupport/common-regcache.h. */
extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
/* Mapping between register numbers and offsets in a buffer, for use
/* Return regcache's architecture. */
gdbarch *arch () const;
- /* See common/common-regcache.h. */
+ /* See gdbsupport/common-regcache.h. */
enum register_status get_register_status (int regnum) const override;
- /* See common/common-regcache.h. */
+ /* See gdbsupport/common-regcache.h. */
void raw_collect (int regnum, void *buf) const override;
/* Collect register REGNUM from REGCACHE. Store collected value as an integer
reading only LEN. */
void raw_collect_part (int regnum, int offset, int len, gdb_byte *out) const;
- /* See common/common-regcache.h. */
+ /* See gdbsupport/common-regcache.h. */
void raw_supply (int regnum, const void *buf) override;
void raw_supply (int regnum, const reg_buffer &src)
virtual ~reg_buffer () = default;
- /* See common/common-regcache.h. */
+ /* See gdbsupport/common-regcache.h. */
bool raw_compare (int regnum, const void *buf, int offset) const override;
protected:
this->m_ptid = ptid;
}
+ process_stratum_target *target () const
+ {
+ return m_target;
+ }
+
/* Dump the contents of a register from the register cache to the target
debug. */
void debug_print_register (const char *func, int regno);
static void regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid);
protected:
- regcache (gdbarch *gdbarch, const address_space *aspace_);
+ regcache (process_stratum_target *target, gdbarch *gdbarch,
+ const address_space *aspace);
static std::forward_list<regcache *> current_regcache;
/* If this is a read-write cache, which thread's registers is
it connected to? */
+ process_stratum_target *m_target;
ptid_t m_ptid;
friend struct regcache *
- get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch,
+ get_thread_arch_aspace_regcache (process_stratum_target *target, ptid_t ptid,
+ struct gdbarch *gdbarch,
struct address_space *aspace);
friend void
- registers_changed_ptid (ptid_t ptid);
+ registers_changed_ptid (process_stratum_target *target, ptid_t ptid);
};
class readonly_detached_regcache : public readable_regcache
};
extern void registers_changed (void);
-extern void registers_changed_ptid (ptid_t);
+extern void registers_changed_ptid (process_stratum_target *target,
+ ptid_t ptid);
/* Indicate that registers of THREAD may have changed, so invalidate
the cache. */