diff options
Diffstat (limited to 'gdb/procfs.c')
-rw-r--r-- | gdb/procfs.c | 63 |
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 + } + } +} /* |