]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
fbsd-nat: Add a have_register_set helper function.
authorJohn Baldwin <jhb@FreeBSD.org>
Tue, 2 Aug 2022 17:46:01 +0000 (10:46 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Thu, 1 Sep 2022 23:47:42 +0000 (16:47 -0700)
This is similar to have_regset but is used for older register sets that
pre-date PT_GETREGSET and use separate fetch and store ptrace operations.

gdb/fbsd-nat.c
gdb/fbsd-nat.h

index 32e8f77ead735cbd3a4099419ea8ef0686720cb0..9b2a7eda6478a45a865ff7bbbe5dbdea92394db6 100644 (file)
@@ -1953,6 +1953,16 @@ fbsd_nat_target::supports_disable_randomization ()
 #endif
 }
 
+/* See fbsd-nat.h.  */
+bool
+fbsd_nat_target::have_register_set (ptid_t ptid, int fetch_op, void *regs,
+                                   size_t size)
+{
+  pid_t pid = get_ptrace_pid (ptid);
+
+  return ptrace (fetch_op, pid, (PTRACE_TYPE_ARG3) regs, 0) == 0;
+}
+
 /* See fbsd-nat.h.  */
 
 bool
index c0ab1be5d58874cb7ee12cee69d291376eb28a85..b74be75d66c50278a89f1827ff42e427338602a8 100644 (file)
@@ -130,6 +130,13 @@ protected:
 private:
   ptid_t wait_1 (ptid_t, struct target_waitstatus *, target_wait_flags);
 
+  /* Helper routine for use in read_description in subclasses.  This
+     routine checks if the register set fetched via FETCH_OP is
+     present for a given PTID and returns a bool indicating success or
+     failure.  */
+
+  bool have_register_set (ptid_t ptid, int fetch_op, void *regs, size_t size);
+
   /* Helper routines for use in fetch_registers and store_registers in
      subclasses.  These routines fetch and store a single set of
      registers described by REGSET.  The REGSET's 'regmap' field must
@@ -170,6 +177,13 @@ protected:
   /* Wrapper versions of the above helpers which accept a register set
      type such as 'struct reg' or 'struct fpreg'.  */
 
+  template <class Regset>
+  bool have_register_set (ptid_t ptid, int fetch_op)
+  {
+    Regset regs;
+    return have_register_set (ptid, fetch_op, &regs, sizeof (regs));
+  }
+
   template <class Regset>
   bool fetch_register_set (struct regcache *regcache, int regnum, int fetch_op,
                           const struct regset *regset, int regbase = 0)