diff options
author | Jason Thorpe <thorpej@netbsd.org> | 2002-05-11 16:21:16 +0000 |
---|---|---|
committer | Jason Thorpe <thorpej@netbsd.org> | 2002-05-11 16:21:16 +0000 |
commit | 12bcb0fe6dec61c540012f469c4cb0a56d6b6ea4 (patch) | |
tree | 95a605240f8bdc2bafce763190e2b8f07ce1051d /gdb/alphabsd-tdep.c | |
parent | 361d1df04393ac0e921d52e9bd158fbceffb0c0f (diff) | |
download | gdb-12bcb0fe6dec61c540012f469c4cb0a56d6b6ea4.zip gdb-12bcb0fe6dec61c540012f469c4cb0a56d6b6ea4.tar.gz gdb-12bcb0fe6dec61c540012f469c4cb0a56d6b6ea4.tar.bz2 |
* Makefile.in (ALLDEPFILES): Add alphabsd-tdep.c.
(alphabsd-nat.o): Depend on alphabsd-tdep.h.
(alphanbsd-nat.o): Likewise.
(alphabsd-tdep.o): New dependency list.
* alphabsd-nat.c (supply_gregset): Use alphabsd_supply_reg.
(fill_gregset): Use alphabsd_fill_reg.
(supply_fpregset): Use alphabsd_supply_fpreg.
(fill_fpregset): Use alphabsd_fill_fpreg.
(fetch_inferior_registers): Use struct reg and struct fpreg
rather than gregset_t and fpregset_t. Use alphabsd_supply_reg
and alphabsd_supply_fpreg.
(store_inferior_registers): Use struct reg and struct fpreg
rather than gregset_t and fpregset_t. Use alphabsd_fill_reg
and alphabsd_fill_fpreg.
* alphabsd-tdep.c: New file.
* alphabsd-tdep.h: New file.
* alphanbsd-nat.c (fetch_core_registers): Use alphabsd_supply_fpreg.
(fetch_elfcore_registers): Use alphabsd_supply_reg and
alphabsd_supply_fpreg.
* config/alpha/fbsd.mt (TDEPFILES): Add alphabsd-tdep.o.
* config/alpha/nbsd.mt (TDEPFILES): Likewise.
Diffstat (limited to 'gdb/alphabsd-tdep.c')
-rw-r--r-- | gdb/alphabsd-tdep.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gdb/alphabsd-tdep.c b/gdb/alphabsd-tdep.c new file mode 100644 index 0000000..39a9b1a --- /dev/null +++ b/gdb/alphabsd-tdep.c @@ -0,0 +1,102 @@ +/* Common target dependent code for GDB on Alpha systems running BSD. + Copyright 2000, 2001, 2002 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "regcache.h" + +#include "alpha-tdep.h" +#include "alphabsd-tdep.h" + +/* Number of general-purpose registers. */ +#define NUM_GREGS 32 + +/* Number of floating-point registers. */ +#define NUM_FPREGS 31 + +/* Conviently, GDB uses the same register numbering as the + ptrace register structure used by BSD on Alpha. */ + +void +alphabsd_supply_reg (char *regs, int regno) +{ + int i; + + for (i = 0; i < NUM_GREGS; i++) + { + if (i == regno || regno == -1) + { + if (CANNOT_FETCH_REGISTER (i)) + supply_register (i, NULL); + else + supply_register (i, regs + (i * 8)); + } + } + + /* The PC travels in the ZERO slot. */ + if (regno == PC_REGNUM || regno == -1) + supply_register (PC_REGNUM, regs + (31 * 8)); +} + +void +alphabsd_fill_reg (char *regs, int regno) +{ + int i; + + for (i = 0; i < NUM_GREGS; i++) + if ((regno == i || regno == -1) && ! CANNOT_STORE_REGISTER (i)) + regcache_collect (i, regs + (i * 8)); + + /* The PC travels in the ZERO slot. */ + if (regno == PC_REGNUM || regno == -1) + regcache_collect (PC_REGNUM, regs + (31 * 8)); +} + +void +alphabsd_supply_fpreg (char *fpregs, int regno) +{ + int i; + + for (i = FP0_REGNUM; i < FP0_REGNUM + NUM_FPREGS; i++) + { + if (i == regno || regno == -1) + { + if (CANNOT_FETCH_REGISTER (i)) + supply_register (i, NULL); + else + supply_register (i, fpregs + ((i - FP0_REGNUM) * 8)); + } + } + + if (regno == ALPHA_FPCR_REGNUM || regno == -1) + supply_register (ALPHA_FPCR_REGNUM, fpregs + (32 * 8)); +} + +void +alphabsd_fill_fpreg (char *fpregs, int regno) +{ + int i; + + for (i = FP0_REGNUM; i < FP0_REGNUM + NUM_FPREGS; i++) + if ((regno == i || regno == -1) && ! CANNOT_STORE_REGISTER (i)) + regcache_collect (i, fpregs + ((i - FP0_REGNUM) * 8)); + + if (regno == ALPHA_FPCR_REGNUM || regno == -1) + regcache_collect (ALPHA_FPCR_REGNUM, fpregs + (32 * 8)); +} |