aboutsummaryrefslogtreecommitdiff
path: root/gdb/procfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/procfs.c')
-rw-r--r--gdb/procfs.c63
1 files changed, 62 insertions, 1 deletions
diff --git a/gdb/procfs.c b/gdb/procfs.c
index a277369..c745997 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -634,6 +634,8 @@ DEFUN(detach, (signal),
attach_flag = 0;
}
+#endif /* ATTACH_DETACH */
+
/*
GLOBAL FUNCTION
@@ -873,7 +875,66 @@ DEFUN_VOID(fetch_inferior_registers)
#endif
}
-#endif /* ATTACH_DETACH */
+/*
+
+GLOBAL FUNCTION
+
+ fetch_core_registers -- fetch current registers from core file data
+
+SYNOPSIS
+
+ void fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
+ int which)
+
+DESCRIPTION
+
+ Read the values of either the general register set (WHICH equals 0)
+ or the floating point register set (WHICH equals 2) from the core
+ file data (pointed to by CORE_REG_SECT), and update gdb's idea of
+ their current values. The CORE_REG_SIZE parameter is ignored.
+
+NOTES
+
+ Use the indicated sizes to validate the gregset and fpregset
+ structures.
+*/
+
+void
+fetch_core_registers (core_reg_sect, core_reg_size, which)
+ char *core_reg_sect;
+ unsigned core_reg_size;
+ int which;
+{
+
+ if (which == 0)
+ {
+ if (core_reg_size != sizeof (pi.gregset))
+ {
+ warning ("wrong size gregset struct in core file");
+ }
+ else
+ {
+ (void) memcpy ((char *) &pi.gregset, core_reg_sect,
+ sizeof (pi.gregset));
+ supply_gregset (&pi.gregset);
+ }
+ }
+ else if (which == 2)
+ {
+ if (core_reg_size != sizeof (pi.fpregset))
+ {
+ warning ("wrong size fpregset struct in core file");
+ }
+ else
+ {
+ (void) memcpy ((char *) &pi.fpregset, core_reg_sect,
+ sizeof (pi.fpregset));
+#if defined (FP0_REGNUM)
+ supply_fpregset (&pi.fpregset);
+#endif
+ }
+ }
+}
/*