diff options
author | Daniel Jacobowitz <drow@false.org> | 2002-02-14 06:21:24 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2002-02-14 06:21:24 +0000 |
commit | 0a30fbc4cfd38f7966ea783b292031986645c6ce (patch) | |
tree | d4bc0d4810c3e91c3f12e9db9af9e81c099b38ea /gdb/gdbserver/linux-mips-low.c | |
parent | 4cc841d043e50739f0f98baaec7ed806984805be (diff) | |
download | gdb-0a30fbc4cfd38f7966ea783b292031986645c6ce.zip gdb-0a30fbc4cfd38f7966ea783b292031986645c6ce.tar.gz gdb-0a30fbc4cfd38f7966ea783b292031986645c6ce.tar.bz2 |
2002-02-14 Daniel Jacobowitz <drow@mvista.com>
* gdbserver/Makefile.in: Add regformats directory to INCLUDE_CFLAGS,
and remove unused $(INCLUDE_DIR).
Add regcache.c to OBS.
Add generated register protocol files to clean target.
Update dependencies for new objects, obsolete old target code.
* gdbserver/linux-low.c: Remove all platform-specific code to
new files. Remove various dead code. Update to use regcache
functionality.
* gdbserver/remote-utils.c (fromhex): Add return statement
to quiet warning.
(putpkt): Dynamically allocate buf2 because PBUFSIZ is no longer
constant.
(input_interrupt): Add integer parameter to match prototype
of a signal handler.
(outreg): Use register_data ().
(prepare_resume_reply): Use gdbserver_expedite_regs.
* gdbserver/server.c (main): Dynamically allocate own_buf because
PBUFSIZ is no longer constant. Use registers_to_string () and
registers_from_string ().
* gdbserver/server.h: No longer include "defs.h". Add prototypes
for error (), fatal (), and warning (). Update definition of
PBUFSIZ to use regcache functionality. Add include guard.
* gdbserver/utils.c (fatal): Add missing ``const''.
(warning): New function.
* regformats/regdat.sh: Include "regcache.h" in generated files.
Provide init_registers () function.
* regformats/regdef.h: Add prototype for set_register_cache ().
Add include guard.
* gdbserver/linux-arm-low.c: New file.
* gdbserver/linux-i386-low.c: New file.
* gdbserver/linux-ia64-low.c: New file.
* gdbserver/linux-m68k-low.c: New file.
* gdbserver/linux-mips-low.c: New file.
* gdbserver/linux-ppc-low.c: New file.
* gdbserver/linux-sh-low.c: New file.
* gdbserver/regcache.c: New file.
* gdbserver/regcache.h: New file.
* gdbserver/low-linux.c: Removed obsolete file.
Diffstat (limited to 'gdb/gdbserver/linux-mips-low.c')
-rw-r--r-- | gdb/gdbserver/linux-mips-low.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c new file mode 100644 index 0000000..ef14c6a --- /dev/null +++ b/gdb/gdbserver/linux-mips-low.c @@ -0,0 +1,104 @@ +/* GNU/Linux/MIPS specific low level interface, for the remote server for GDB. + Copyright 1995, 1996, 1998, 1999, 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 "server.h" + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +int num_regs = 90; + +#include <asm/ptrace.h> + +/* Return the ptrace ``address'' of register REGNO. */ + +/* Matches mips_generic32_regs */ +int regmap[] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + + -1, MMLO, MMHI, BADVADDR, CAUSE, PC, + + FPR_BASE, FPR_BASE + 1, FPR_BASE + 2, FPR_BASE + 3, + FPR_BASE + 4, FPR_BASE + 5, FPR_BASE + 6, FPR_BASE + 7, + FPR_BASE + 8, FPR_BASE + 8, FPR_BASE + 10, FPR_BASE + 11, + FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15, + FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19, + FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23, + FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27, + FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31, + FPC_CSR, FPC_EIR, + + -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +/* From mips-linux-nat.c. */ + +/* Pseudo registers can not be read. ptrace does not provide a way to + read (or set) PS_REGNUM, and there's no point in reading or setting + ZERO_REGNUM. We also can not set BADVADDR, CAUSE, or FCRIR via + ptrace(). */ + +int +cannot_fetch_register (int regno) +{ + struct reg *reg; + + if (regmap[regno] == -1) + return 1; + + reg = find_register_by_number (regno); + + if (strcmp (reg->name, "zero") == 0) + return 1; + + return 0; +} + +int +cannot_store_register (int regno) +{ + struct reg *reg; + + if (regmap[regno] == -1) + return 1; + + reg = find_register_by_number (regno); + + if (strcmp (reg->name, "zero") == 0) + return 1; + + if (strcmp (reg->name, "cause") == 0) + return 1; + + if (strcmp (reg->name, "bad") == 0) + return 1; + + if (strcmp (reg->name, "fir") == 0) + return 1; + + return 0; +} |