X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Falpha-nat.c;h=4c48892d28b6042bc6e0a972e679f3ecd9e793f4;hb=41270571562fe1b32a38ba7a49dac8a9e416d1c8;hp=a0c53991f4d9dec42be9febdd0a7282e43c781e3;hpb=cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/alpha-nat.c b/gdb/alpha-nat.c index a0c53991f4..4c48892d28 100644 --- a/gdb/alpha-nat.c +++ b/gdb/alpha-nat.c @@ -1,5 +1,5 @@ /* Low level Alpha interface, for GDB when running native. - Copyright 1993 Free Software Foundation, Inc. + Copyright 1993, 1995 Free Software Foundation, Inc. This file is part of GDB. @@ -142,3 +142,79 @@ register_addr (regno, blockend) { return REGISTER_PTRACE_ADDR (regno); } + +#ifdef USE_PROC_FS +#include + +/* + * See the comment in m68k-tdep.c regarding the utility of these functions. + */ + +void +supply_gregset (gregsetp) + gregset_t *gregsetp; +{ + register int regi; + register long *regp = gregsetp->regs; + static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0}; + + for (regi = 0; regi < 31; regi++) + supply_register (regi, (char *)(regp + regi)); + + supply_register (PC_REGNUM, (char *)(regp + 31)); + + /* Fill inaccessible registers with zero. */ + supply_register (ZERO_REGNUM, zerobuf); + supply_register (FP_REGNUM, zerobuf); +} + +void +fill_gregset (gregsetp, regno) + gregset_t *gregsetp; + int regno; +{ + int regi; + register long *regp = gregsetp->regs; + + for (regi = 0; regi < 31; regi++) + if ((regno == -1) || (regno == regi)) + *(regp + regi) = *(long *) ®isters[REGISTER_BYTE (regi)]; + + if ((regno == -1) || (regno == PC_REGNUM)) + *(regp + 31) = *(long *) ®isters[REGISTER_BYTE (PC_REGNUM)]; +} + +/* + * Now we do the same thing for floating-point registers. + * Again, see the comments in m68k-tdep.c. + */ + +void +supply_fpregset (fpregsetp) + fpregset_t *fpregsetp; +{ + register int regi; + register long *regp = fpregsetp->regs; + + for (regi = 0; regi < 32; regi++) + supply_register (regi + FP0_REGNUM, (char *)(regp + regi)); +} + +void +fill_fpregset (fpregsetp, regno) + fpregset_t *fpregsetp; + int regno; +{ + int regi; + register long *regp = fpregsetp->regs; + + for (regi = FP0_REGNUM; regi < FP0_REGNUM + 32; regi++) + { + if ((regno == -1) || (regno == regi)) + { + *(regp + regi - FP0_REGNUM) = + *(long *) ®isters[REGISTER_BYTE (regi)]; + } + } +} +#endif