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 | 4dace1d04af5f8356edad4187ca0da620476a534 (patch) | |
tree | 30bed4c030f96cca2f4fd291c1a3cec34d767f8e /gdb/alphabsd-tdep.c | |
parent | 0f422eeedb753cf6806efc7183540c1d59aa748d (diff) | |
download | gdb-4dace1d04af5f8356edad4187ca0da620476a534.tar.gz |
* 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 00000000000..39a9b1ae77e --- /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)); +} |