* [rfa] gdbserver overhaul
@ 2001-10-11 13:15 Daniel Jacobowitz
2001-10-14 18:13 ` Andrew Cagney
2001-10-16 21:09 ` Andrew Cagney
0 siblings, 2 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-11 13:15 UTC (permalink / raw)
To: gdb-patches
I'd like to commit the attached. It's just the first stage in what will
probably change a few more times; among other highlights it removes the
gdbserver dependency on "defs.h" (we still use a few other GDB headers, like
terminal.h, but those will be easy to deal with down the lines). We lose
the xm-/tm-/nm- files at the same time, so to know what the target registers
are we have to hard-code them. This also makes us independent (at last) of
the GDB register cache layout. GDB does not yet have a corresponding
independence, but now that the protocols are clearly and compactly described
in gdbserver, that too can come soon.
I've added preprocessor gunk to make this compile on other non-Linux
gdbserver targets, since I only had the Linux ones available to test on. I
tested on Linux/{ARM,i386,mips,ppc,sh}; the SH bits require some patches
available from the SH community but not yet in mainstream GDB, but I'm
including the gdbserver parts anyway. I'm fairly sure that ia64 and m68k
will continue to work if they did beforehand. Note that the "compile" at the
beginning of this paragraph is really "compile iff it already did". I tried
to find a non-Linux target to test; I tried mips64vr5000-unknown-elf
(low-sim.c) and sparc-sun-solaris2.8 (low-solaris.c). Neither built. It
would be nice if someone tried, say, the NetBSD port before I committed
this, but I'm not really insisting on it. I'd rather that every time
someone notices that such a port is broken, we convert it to the new scheme.
At the same time as committing this, I would like to become the maintainer
for gdbserver. With threads code hopefully showing up soon, I'd like to
have someone actively caring for the server code, and right now nobody is.
Is this OK? Comments?
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
2001-10-11 Daniel Jacobowitz <drow@mvista.com>
* gdbserver/regdef.c: New file.
* gdbserver/regdef.h: New file.
* gdbserver/lnx-arm.c: New file.
* gdbserver/lnx-i386.c: New file.
* gdbserver/lnx-ia64.c: New file.
* gdbserver/lnx-m68k.c: New file.
* gdbserver/lnx-mips.c: New file.
* gdbserver/lnx-ppc.c: New file.
* gdbserver/lnx-sh.c: New file.
* gdbserver/reg-arm.c: New file.
* gdbserver/reg-i386.c: New file.
* gdbserver/reg-ia64.c: New file.
* gdbserver/reg-m68k.c: New file.
* gdbserver/reg-mips.c: New file.
* gdbserver/reg-ppc.c: New file.
* gdbserver/reg-sh.c: New file.
* gdbserver/Makefile.in: Update copyright date.
Use $(GDBSERVER_CFLAGS). Add regdef.o to $(OBS). Add dependencies
for regdef.o.
* gdbserver/low-linux.c: Update to use target-specific modules and
new register cache. Remove dead code and incorrect comments.
(read_inferior_memory): Cast argument to PTRACE_ARG3_TYPE.
(write_inferior_memory): Likewise.
* gdbserver/remote-utils.c (putpkt): Use malloc for buf2 as PBUFSIZ
is no longer constant.
(convert_ascii_to_int): Use register_size instead of
REGISTER_RAW_SIZE.
(outreg): Use register_data instead of REGISTER_BYTE and
registers[].
(prepare_resume_reply): Add GDBSERVER_NEW case using the new
register protocol files.
* gdbserver/server.c (main): Use malloc for own_buf as PBUFSIZ
is no longer constant. Use registers_to_string and
registers_from_string.
* gdbserver/server.h: If GDBSERVER_NEW, do not include "defs.h".
Include "regdef.h". Call registers_length () instead of checking
REGISTER_BYTES.
* gdbserver/utils.c (fatal): Constify argument.
(warning): New function.
* config/arm/linux.mt: Add GDBSERVER_CFLAGS; add reg-arm.o and
lnx-arm.o to GDBSERVER_DEPFILES.
* config/i386/linux.mt: Add GDBSERVER_CFLAGS; add reg-i386.o and
lnx-i386.o to GDBSERVER_DEPFILES.
* config/ia64/linux.mt: Add GDBSERVER_CFLAGS; add reg-ia64.o and
lnx-ia64.o to GDBSERVER_DEPFILES.
* config/m68k/linux.mh: Add GDBSERVER_CFLAGS; add reg-m68k.o and
lnx-m68k.o to GDBSERVER_DEPFILES.
* config/mips/linux.mt: Add GDBSERVER_CFLAGS; add reg-mips.o and
lnx-mips.o to GDBSERVER_DEPFILES.
* config/powerpc/linux.mt: Add GDBSERVER_CFLAGS; add reg-ppc.o and
lnx-ppc.o to GDBSERVER_DEPFILES.
* config/sh/linux.mt: Add GDBSERVER_CFLAGS and GDBSERVER_DEPFILES.
Index: gdb/gdbserver/lnx-arm.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-arm.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-arm.c Thu Oct 11 15:58:55 2001
@@ -0,0 +1,46 @@
+/* Linux/ARM specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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 = 16;
+
+int regmap[] = {
+ 0, 4, 8, 12, 16, 20, 24, 28,
+ 32, 36, 40, 44, 48, 52, 56, 60,
+};
+
+int
+cannot_store_register (int regno)
+{
+ return (regno >= num_regs);
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return (regno >= num_regs);
+}
+
Index: gdb/gdbserver/lnx-i386.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-i386.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-i386.c Wed Oct 10 13:56:11 2001
@@ -0,0 +1,59 @@
+/* Linux/i386 specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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
+
+/* This module only supports access to the general purpose registers.
+ Adjust the relevant constants accordingly.
+
+ FIXME: kettenis/2001-03-28: We should really use PTRACE_GETREGS to
+ get at the registers. Better yet, we should try to share code with
+ i386-linux-nat.c. */
+
+int num_regs = 16;
+
+/* This stuff comes from i386-linux-nat.c. */
+
+/* Mapping between the general-purpose registers in `struct user'
+ format and GDB's register array layout. */
+int regmap[] =
+{
+ EAX * 4, ECX * 4, EDX * 4, EBX * 4,
+ UESP * 4, EBP * 4, ESI * 4, EDI * 4,
+ EIP * 4, EFL * 4, CS * 4, SS * 4,
+ DS * 4, ES * 4, FS * 4, GS * 4
+};
+
+int
+cannot_store_register (int regno)
+{
+ return (regno >= num_regs);
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return (regno >= num_regs);
+}
Index: gdb/gdbserver/lnx-ia64.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-ia64.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-ia64.c Thu Oct 11 15:58:51 2001
@@ -0,0 +1,296 @@
+/* Linux/IA64 specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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 = 590;
+
+#include <asm/ptrace_offsets.h>
+
+int regmap[] =
+ {
+ /* general registers */
+ -1, /* gr0 not available; i.e, it's always zero */
+ PT_R1,
+ PT_R2,
+ PT_R3,
+ PT_R4,
+ PT_R5,
+ PT_R6,
+ PT_R7,
+ PT_R8,
+ PT_R9,
+ PT_R10,
+ PT_R11,
+ PT_R12,
+ PT_R13,
+ PT_R14,
+ PT_R15,
+ PT_R16,
+ PT_R17,
+ PT_R18,
+ PT_R19,
+ PT_R20,
+ PT_R21,
+ PT_R22,
+ PT_R23,
+ PT_R24,
+ PT_R25,
+ PT_R26,
+ PT_R27,
+ PT_R28,
+ PT_R29,
+ PT_R30,
+ PT_R31,
+ /* gr32 through gr127 not directly available via the ptrace interface */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ /* Floating point registers */
+ -1, -1, /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
+ PT_F2,
+ PT_F3,
+ PT_F4,
+ PT_F5,
+ PT_F6,
+ PT_F7,
+ PT_F8,
+ PT_F9,
+ PT_F10,
+ PT_F11,
+ PT_F12,
+ PT_F13,
+ PT_F14,
+ PT_F15,
+ PT_F16,
+ PT_F17,
+ PT_F18,
+ PT_F19,
+ PT_F20,
+ PT_F21,
+ PT_F22,
+ PT_F23,
+ PT_F24,
+ PT_F25,
+ PT_F26,
+ PT_F27,
+ PT_F28,
+ PT_F29,
+ PT_F30,
+ PT_F31,
+ PT_F32,
+ PT_F33,
+ PT_F34,
+ PT_F35,
+ PT_F36,
+ PT_F37,
+ PT_F38,
+ PT_F39,
+ PT_F40,
+ PT_F41,
+ PT_F42,
+ PT_F43,
+ PT_F44,
+ PT_F45,
+ PT_F46,
+ PT_F47,
+ PT_F48,
+ PT_F49,
+ PT_F50,
+ PT_F51,
+ PT_F52,
+ PT_F53,
+ PT_F54,
+ PT_F55,
+ PT_F56,
+ PT_F57,
+ PT_F58,
+ PT_F59,
+ PT_F60,
+ PT_F61,
+ PT_F62,
+ PT_F63,
+ PT_F64,
+ PT_F65,
+ PT_F66,
+ PT_F67,
+ PT_F68,
+ PT_F69,
+ PT_F70,
+ PT_F71,
+ PT_F72,
+ PT_F73,
+ PT_F74,
+ PT_F75,
+ PT_F76,
+ PT_F77,
+ PT_F78,
+ PT_F79,
+ PT_F80,
+ PT_F81,
+ PT_F82,
+ PT_F83,
+ PT_F84,
+ PT_F85,
+ PT_F86,
+ PT_F87,
+ PT_F88,
+ PT_F89,
+ PT_F90,
+ PT_F91,
+ PT_F92,
+ PT_F93,
+ PT_F94,
+ PT_F95,
+ PT_F96,
+ PT_F97,
+ PT_F98,
+ PT_F99,
+ PT_F100,
+ PT_F101,
+ PT_F102,
+ PT_F103,
+ PT_F104,
+ PT_F105,
+ PT_F106,
+ PT_F107,
+ PT_F108,
+ PT_F109,
+ PT_F110,
+ PT_F111,
+ PT_F112,
+ PT_F113,
+ PT_F114,
+ PT_F115,
+ PT_F116,
+ PT_F117,
+ PT_F118,
+ PT_F119,
+ PT_F120,
+ PT_F121,
+ PT_F122,
+ PT_F123,
+ PT_F124,
+ PT_F125,
+ PT_F126,
+ PT_F127,
+ /* predicate registers - we don't fetch these individually */
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ /* branch registers */
+ PT_B0,
+ PT_B1,
+ PT_B2,
+ PT_B3,
+ PT_B4,
+ PT_B5,
+ PT_B6,
+ PT_B7,
+ /* virtual frame pointer and virtual return address pointer */
+ -1, -1,
+ /* other registers */
+ PT_PR,
+ PT_CR_IIP, /* ip */
+ PT_CR_IPSR, /* psr */
+ PT_CFM, /* cfm */
+ /* kernel registers not visible via ptrace interface (?) */
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ /* hole */
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ PT_AR_RSC,
+ PT_AR_BSP,
+ PT_AR_BSPSTORE,
+ PT_AR_RNAT,
+ -1,
+ -1, /* Not available: FCR, IA32 floating control register */
+ -1, -1,
+ -1, /* Not available: EFLAG */
+ -1, /* Not available: CSD */
+ -1, /* Not available: SSD */
+ -1, /* Not available: CFLG */
+ -1, /* Not available: FSR */
+ -1, /* Not available: FIR */
+ -1, /* Not available: FDR */
+ -1,
+ PT_AR_CCV,
+ -1, -1, -1,
+ PT_AR_UNAT,
+ -1, -1, -1,
+ PT_AR_FPSR,
+ -1, -1, -1,
+ -1, /* Not available: ITC */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ PT_AR_PFS,
+ PT_AR_LC,
+ -1, /* Not available: EC, the Epilog Count register */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,
+ /* nat bits - not fetched directly; instead we obtain these bits from
+ either rnat or unat or from memory. */
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ };
+
+int
+cannot_store_register (int regno)
+{
+ return 0;
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return 0;
+}
+
Index: gdb/gdbserver/lnx-m68k.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-m68k.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-m68k.c Thu Oct 11 15:58:42 2001
@@ -0,0 +1,64 @@
+/* Linux/m68k specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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 = 31;
+
+/* This table must line up with REGISTER_NAMES in tm-m68k.h */
+int regmap[] =
+{
+#ifdef PT_D0
+ PT_D0 * 4, PT_D1 * 4, PT_D2 * 4, PT_D3 * 4,
+ PT_D4 * 4, PT_D5 * 4, PT_D6 * 4, PT_D7 * 4,
+ PT_A0 * 4, PT_A1 * 4, PT_A2 * 4, PT_A3 * 4,
+ PT_A4 * 4, PT_A5 * 4, PT_A6 * 4, PT_USP * 4,
+ PT_SR * 4, PT_PC * 4,
+#else
+ 14 * 4, 0 * 4, 1 * 4, 2 * 4, 3 * 4, 4 * 4, 5 * 4, 6 * 4,
+ 7 * 4, 8 * 4, 9 * 4, 10 * 4, 11 * 4, 12 * 4, 13 * 4, 15 * 4,
+ 17 * 4, 18 * 4,
+#endif
+#ifdef PT_FP0
+ PT_FP0 * 4, PT_FP1 * 4, PT_FP2 * 4, PT_FP3 * 4,
+ PT_FP4 * 4, PT_FP5 * 4, PT_FP6 * 4, PT_FP7 * 4,
+ PT_FPCR * 4, PT_FPSR * 4, PT_FPIAR * 4
+#else
+ 21 * 4, 24 * 4, 27 * 4, 30 * 4, 33 * 4, 36 * 4,
+ 39 * 4, 42 * 4, 45 * 4, 46 * 4, 47 * 4
+#endif
+};
+
+int
+cannot_store_register (int regno)
+{
+ return (regno >= num_regs);
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return (regno >= num_regs);
+}
Index: gdb/gdbserver/lnx-mips.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-mips.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-mips.c Thu Oct 11 15:58:46 2001
@@ -0,0 +1,104 @@
+/* Linux/MIPS specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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;
+}
Index: gdb/gdbserver/lnx-ppc.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-ppc.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-ppc.c Wed Oct 10 13:56:11 2001
@@ -0,0 +1,60 @@
+/* Linux/PowerPC specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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"
+
+#include <asm/ptrace.h>
+
+int num_regs = 71;
+
+/* Currently, don't check/send MQ. */
+int regmap[] =
+ {PT_R0 * 4, PT_R1 * 4, PT_R2 * 4, PT_R3 * 4,
+ PT_R4 * 4, PT_R5 * 4, PT_R6 * 4, PT_R7 * 4,
+ PT_R8 * 4, PT_R9 * 4, PT_R10 * 4, PT_R11 * 4,
+ PT_R12 * 4, PT_R13 * 4, PT_R14 * 4, PT_R15 * 4,
+ PT_R16 * 4, PT_R17 * 4, PT_R18 * 4, PT_R19 * 4,
+ PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4,
+ PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4,
+ PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4,
+ PT_FPR0*4, PT_FPR0*4 + 8, PT_FPR0*4+16, PT_FPR0*4+24,
+ PT_FPR0*4+32, PT_FPR0*4+40, PT_FPR0*4+48, PT_FPR0*4+56,
+ PT_FPR0*4+64, PT_FPR0*4+72, PT_FPR0*4+80, PT_FPR0*4+88,
+ PT_FPR0*4+96, PT_FPR0*4+104, PT_FPR0*4+112, PT_FPR0*4+120,
+ PT_FPR0*4+128, PT_FPR0*4+136, PT_FPR0*4+144, PT_FPR0*4+152,
+ PT_FPR0*4+160, PT_FPR0*4+168, PT_FPR0*4+176, PT_FPR0*4+184,
+ PT_FPR0*4+192, PT_FPR0*4+200, PT_FPR0*4+208, PT_FPR0*4+216,
+ PT_FPR0*4+224, PT_FPR0*4+232, PT_FPR0*4+240, PT_FPR0*4+248,
+ PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4,
+ PT_CTR * 4, PT_XER * 4, -1, };
+
+int
+cannot_store_register (int regno)
+{
+ return 0;
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return 0;
+}
+
Index: gdb/gdbserver/lnx-sh.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/lnx-sh.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/lnx-sh.c Wed Oct 10 13:56:11 2001
@@ -0,0 +1,58 @@
+/* Linux/SH specific low level interface, for the remote server for GDB.
+ Copyright 1995, 1996, 1998, 1999, 2000, 2001
+ 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
+
+#include <asm/ptrace.h>
+
+int num_regs = 41;
+
+/* Currently, don't check/send MQ. */
+int regmap[] = {
+ 0, 4, 8, 12, 16, 20, 24, 28,
+ 32, 36, 40, 44, 48, 52, 56, 60,
+
+ REG_PC*4, REG_PR*4, REG_GBR*4, -1,
+ REG_MACH*4, REG_MACL*4, REG_SR*4,
+ REG_FPUL*4, REG_FPSCR*4,
+
+ REG_FPREG0+0, REG_FPREG0+4, REG_FPREG0+8, REG_FPREG0+12,
+ REG_FPREG0+16, REG_FPREG0+20, REG_FPREG0+24, REG_FPREG0+28,
+ REG_FPREG0+32, REG_FPREG0+36, REG_FPREG0+40, REG_FPREG0+44,
+ REG_FPREG0+48, REG_FPREG0+52, REG_FPREG0+56, REG_FPREG0+60,
+};
+
+int
+cannot_store_register (int regno)
+{
+ return 0;
+}
+
+int
+cannot_fetch_register (int regno)
+{
+ return 0;
+}
+
Index: gdb/gdbserver/reg-arm.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-arm.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-arm.c Thu Oct 11 10:00:15 2001
@@ -0,0 +1,41 @@
+/* Register protocol for ARM, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+struct reg arm_regs[] = {
+ R4("r0"), R4("r1"), R4("r2"), R4("r3"),
+ R4("r4"), R4("r5"), R4("r6"), R4("r7"),
+ R4("r8"), R4("r9"), R4("r10"), R4("r11"),
+ R4("r12"), R4("sp"), R4("lr"), R4("pc"),
+ R12("f0"), R12("f1"), R12("f2"), R12("f3"),
+ R12("f4"), R12("f5"), R12("f6"), R12("f7"),
+ R4("fps"), R4("cpsr"),
+};
+
+const char *gdbserver_resume_regs[] = { "r11", "sp", "pc", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (arm_regs,
+ sizeof (arm_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-i386.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-i386.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-i386.c Thu Oct 11 10:00:30 2001
@@ -0,0 +1,45 @@
+/* Register protocol for i386, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+struct reg i386_regs[] = {
+ R4("eax"), R4("ecx"), R4("edx"), R4("ebx"),
+ R4("esp"), R4("ebp"), R4("esi"), R4("edi"),
+ R4("eip"), R4("eflags"), R4("cs"), R4("ss"),
+ R4("ds"), R4("es"), R4("fs"), R4("gs"),
+ R10("st0"), R10("st1"), R10("st2"), R10("st3"),
+ R10("st4"), R10("st5"), R10("st6"), R10("st7"),
+ R4("fctrl"), R4("fstat"), R4("ftag"), R4("fiseg"),
+ R4("fioff"), R4("foseg"), R4("fooff"), R4("fop"),
+ R16("xmm0"), R16("xmm1"), R16("xmm2"), R16("xmm3"),
+ R16("xmm4"), R16("xmm5"), R16("xmm6"), R16("xmm7"),
+ R4("mxcsr")
+};
+
+const char *gdbserver_resume_regs[] = { "ebp", "esp", "eip", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (i386_regs,
+ sizeof (i386_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-ia64.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-ia64.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-ia64.c Thu Oct 11 10:00:53 2001
@@ -0,0 +1,190 @@
+/* Register protocol for IA64, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+static struct ia64_regs[] = {
+ R8("r0"), R8("r1"), R8("r2"), R8("r3"),
+ R8("r4"), R8("r5"), R8("r6"), R8("r7"),
+ R8("r8"), R8("r9"), R8("r10"), R8("r11"),
+ R8("r12"), R8("r13"), R8("r14"), R8("r15"),
+ R8("r16"), R8("r17"), R8("r18"), R8("r19"),
+ R8("r20"), R8("r21"), R8("r22"), R8("r23"),
+ R8("r24"), R8("r25"), R8("r26"), R8("r27"),
+ R8("r28"), R8("r29"), R8("r30"), R8("r31"),
+ R8("r32"), R8("r33"), R8("r34"), R8("r35"),
+ R8("r36"), R8("r37"), R8("r38"), R8("r39"),
+ R8("r40"), R8("r41"), R8("r42"), R8("r43"),
+ R8("r44"), R8("r45"), R8("r46"), R8("r47"),
+ R8("r48"), R8("r49"), R8("r50"), R8("r51"),
+ R8("r52"), R8("r53"), R8("r54"), R8("r55"),
+ R8("r56"), R8("r57"), R8("r58"), R8("r59"),
+ R8("r60"), R8("r61"), R8("r62"), R8("r63"),
+ R8("r64"), R8("r65"), R8("r66"), R8("r67"),
+ R8("r68"), R8("r69"), R8("r70"), R8("r71"),
+ R8("r72"), R8("r73"), R8("r74"), R8("r75"),
+ R8("r76"), R8("r77"), R8("r78"), R8("r79"),
+ R8("r80"), R8("r81"), R8("r82"), R8("r83"),
+ R8("r84"), R8("r85"), R8("r86"), R8("r87"),
+ R8("r88"), R8("r89"), R8("r90"), R8("r91"),
+ R8("r92"), R8("r93"), R8("r94"), R8("r95"),
+ R8("r96"), R8("r97"), R8("r98"), R8("r99"),
+ R8("r100"), R8("r101"), R8("r102"), R8("r103"),
+ R8("r104"), R8("r105"), R8("r106"), R8("r107"),
+ R8("r108"), R8("r109"), R8("r110"), R8("r111"),
+ R8("r112"), R8("r113"), R8("r114"), R8("r115"),
+ R8("r116"), R8("r117"), R8("r118"), R8("r119"),
+ R8("r120"), R8("r121"), R8("r122"), R8("r123"),
+ R8("r124"), R8("r125"), R8("r126"), R8("r127"),
+
+ R16("f0"), R16("f1"), R16("f2"), R16("f3"),
+ R16("f4"), R16("f5"), R16("f6"), R16("f7"),
+ R16("f8"), R16("f9"), R16("f10"), R16("f11"),
+ R16("f12"), R16("f13"), R16("f14"), R16("f15"),
+ R16("f16"), R16("f17"), R16("f18"), R16("f19"),
+ R16("f20"), R16("f21"), R16("f22"), R16("f23"),
+ R16("f24"), R16("f25"), R16("f26"), R16("f27"),
+ R16("f28"), R16("f29"), R16("f30"), R16("f31"),
+ R16("f32"), R16("f33"), R16("f34"), R16("f35"),
+ R16("f36"), R16("f37"), R16("f38"), R16("f39"),
+ R16("f40"), R16("f41"), R16("f42"), R16("f43"),
+ R16("f44"), R16("f45"), R16("f46"), R16("f47"),
+ R16("f48"), R16("f49"), R16("f50"), R16("f51"),
+ R16("f52"), R16("f53"), R16("f54"), R16("f55"),
+ R16("f56"), R16("f57"), R16("f58"), R16("f59"),
+ R16("f60"), R16("f61"), R16("f62"), R16("f63"),
+ R16("f64"), R16("f65"), R16("f66"), R16("f67"),
+ R16("f68"), R16("f69"), R16("f70"), R16("f71"),
+ R16("f72"), R16("f73"), R16("f74"), R16("f75"),
+ R16("f76"), R16("f77"), R16("f78"), R16("f79"),
+ R16("f80"), R16("f81"), R16("f82"), R16("f83"),
+ R16("f84"), R16("f85"), R16("f86"), R16("f87"),
+ R16("f88"), R16("f89"), R16("f90"), R16("f91"),
+ R16("f92"), R16("f93"), R16("f94"), R16("f95"),
+ R16("f96"), R16("f97"), R16("f98"), R16("f99"),
+ R16("f100"), R16("f101"), R16("f102"), R16("f103"),
+ R16("f104"), R16("f105"), R16("f106"), R16("f107"),
+ R16("f108"), R16("f109"), R16("f110"), R16("f111"),
+ R16("f112"), R16("f113"), R16("f114"), R16("f115"),
+ R16("f116"), R16("f117"), R16("f118"), R16("f119"),
+ R16("f120"), R16("f121"), R16("f122"), R16("f123"),
+ R16("f124"), R16("f125"), R16("f126"), R16("f127"),
+
+ R8("p0"), R8("p1"), R8("p2"), R8("p3"),
+ R8("p4"), R8("p5"), R8("p6"), R8("p7"),
+ R8("p8"), R8("p9"), R8("p10"), R8("p11"),
+ R8("p12"), R8("p13"), R8("p14"), R8("p15"),
+ R8("p16"), R8("p17"), R8("p18"), R8("p19"),
+ R8("p20"), R8("p21"), R8("p22"), R8("p23"),
+ R8("p24"), R8("p25"), R8("p26"), R8("p27"),
+ R8("p28"), R8("p29"), R8("p30"), R8("p31"),
+ R8("p32"), R8("p33"), R8("p34"), R8("p35"),
+ R8("p36"), R8("p37"), R8("p38"), R8("p39"),
+ R8("p40"), R8("p41"), R8("p42"), R8("p43"),
+ R8("p44"), R8("p45"), R8("p46"), R8("p47"),
+ R8("p48"), R8("p49"), R8("p50"), R8("p51"),
+ R8("p52"), R8("p53"), R8("p54"), R8("p55"),
+ R8("p56"), R8("p57"), R8("p58"), R8("p59"),
+ R8("p60"), R8("p61"), R8("p62"), R8("p63"),
+
+ R8("b0"), R8("b1"), R8("b2"), R8("b3"),
+ R8("b4"), R8("b5"), R8("b6"), R8("b7"),
+
+ R8("vfp"), R8("vrap"),
+
+ R8("pr"), R8("ip"), R8("psr"), R8("cfm"),
+
+ R8("kr0"), R8("kr1"), R8("kr2"), R8("kr3"),
+ R8("kr4"), R8("kr5"), R8("kr6"), R8("kr7"),
+
+ R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""),
+
+ R8("rsc"), R8("bsp"), R8("bspstore"), R8("rnat"),
+
+ R8(""), R8("fcr"), R8(""), R8(""),
+
+ R8("eflag"), R8("csd"), R8("ssd"), R8("cflg"),
+ R8("fsr"), R8("fir"), R8("fdr"), R8(""),
+ R8("ccv"), R8(""), R8(""), R8(""),
+ R8("unat"), R8(""), R8(""), R8(""),
+ R8("fpsr"), R8(""), R8(""), R8(""),
+ R8("itc"),
+
+ R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8("pfs"), R8("lc"), R8("ec"),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""), R8(""), R8(""), R8(""), R8(""),
+ R8(""),
+ R8("nat0"), R8("nat1"), R8("nat2"), R8("nat3"),
+ R8("nat4"), R8("nat5"), R8("nat6"), R8("nat7"),
+ R8("nat8"), R8("nat9"), R8("nat10"), R8("nat11"),
+ R8("nat12"), R8("nat13"), R8("nat14"), R8("nat15"),
+ R8("nat16"), R8("nat17"), R8("nat18"), R8("nat19"),
+ R8("nat20"), R8("nat21"), R8("nat22"), R8("nat23"),
+ R8("nat24"), R8("nat25"), R8("nat26"), R8("nat27"),
+ R8("nat28"), R8("nat29"), R8("nat30"), R8("nat31"),
+ R8("nat32"), R8("nat33"), R8("nat34"), R8("nat35"),
+ R8("nat36"), R8("nat37"), R8("nat38"), R8("nat39"),
+ R8("nat40"), R8("nat41"), R8("nat42"), R8("nat43"),
+ R8("nat44"), R8("nat45"), R8("nat46"), R8("nat47"),
+ R8("nat48"), R8("nat49"), R8("nat50"), R8("nat51"),
+ R8("nat52"), R8("nat53"), R8("nat54"), R8("nat55"),
+ R8("nat56"), R8("nat57"), R8("nat58"), R8("nat59"),
+ R8("nat60"), R8("nat61"), R8("nat62"), R8("nat63"),
+ R8("nat64"), R8("nat65"), R8("nat66"), R8("nat67"),
+ R8("nat68"), R8("nat69"), R8("nat70"), R8("nat71"),
+ R8("nat72"), R8("nat73"), R8("nat74"), R8("nat75"),
+ R8("nat76"), R8("nat77"), R8("nat78"), R8("nat79"),
+ R8("nat80"), R8("nat81"), R8("nat82"), R8("nat83"),
+ R8("nat84"), R8("nat85"), R8("nat86"), R8("nat87"),
+ R8("nat88"), R8("nat89"), R8("nat90"), R8("nat91"),
+ R8("nat92"), R8("nat93"), R8("nat94"), R8("nat95"),
+ R8("nat96"), R8("nat97"), R8("nat98"), R8("nat99"),
+ R8("nat100"), R8("nat101"), R8("nat102"), R8("nat103"),
+ R8("nat104"), R8("nat105"), R8("nat106"), R8("nat107"),
+ R8("nat108"), R8("nat109"), R8("nat110"), R8("nat111"),
+ R8("nat112"), R8("nat113"), R8("nat114"), R8("nat115"),
+ R8("nat116"), R8("nat117"), R8("nat118"), R8("nat119"),
+ R8("nat120"), R8("nat121"), R8("nat122"), R8("nat123"),
+ R8("nat124"), R8("nat125"), R8("nat126"), R8("nat127"),
+};
+
+const char *gdbserver_resume_regs[] = { "ip", "psr", "r12", "bsp", "cfm", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (ia64_regs,
+ sizeof (ia64_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-m68k.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-m68k.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-m68k.c Thu Oct 11 10:01:08 2001
@@ -0,0 +1,45 @@
+/* Register protocol for m68k, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+struct m68k_regs[] = {
+ R4("d0"), R4("d1"), R4("d2"), R4("d3"),
+ R4("d4"), R4("d5"), R4("d6"), R4("d7"),
+ R4("a0"), R4("a1"), R4("a2"), R4("a3"),
+ R4("a4"), R4("a5"), R4("fp"), R4("sp"),
+ R4("ps"), R4("pc"),
+
+ R12("fp0"), R12("fp1"), R12("fp2"), R12("fp3"),
+ R12("fp4"), R12("fp5"), R12("fp6"), R12("fp7"),
+
+ R4("fpcontrol"), R4("fpstatus"), R4("fpiaddr"),
+ R4("fpcode"), R4("fpflags")
+};
+
+const char *gdbserver_resume_regs[] = { "sp", "fp", "pc", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (m68k_regs,
+ sizeof (m68k_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-mips.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-mips.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-mips.c Thu Oct 11 10:01:19 2001
@@ -0,0 +1,69 @@
+/* Register protocol for MIPS, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+#define MIPS_GENERIC32_GPRS \
+ R4("zero"), R4("at"), R4("v0"), R4("v1"), \
+ R4("a0"), R4("a1"), R4("a2"), R4("a3"), \
+ R4("t0"), R4("t1"), R4("t2"), R4("t3"), \
+ R4("t4"), R4("t5"), R4("t6"), R4("t7"), \
+ R4("s0"), R4("s1"), R4("s2"), R4("s3"), \
+ R4("s4"), R4("s5"), R4("s6"), R4("s7"), \
+ R4("t8"), R4("t9"), R4("k0"), R4("k1"), \
+ R4("gp"), R4("sp"), R4("s8"), R4("ra")
+
+#define MIPS_GENERIC32_SPRS \
+ R4("sr"), R4("lo"), R4("hi"), R4("bad"), \
+ R4("cause"),R4("pc")
+
+#define MIPS_GENERIC32_FPU \
+ R4("f0"), R4("f1"), R4("f2"), R4("f3"), \
+ R4("f4"), R4("f5"), R4("f6"), R4("f7"), \
+ R4("f8"), R4("f9"), R4("f10"), R4("f11"), \
+ R4("f12"), R4("f13"), R4("f14"), R4("f15"), \
+ R4("f16"), R4("f17"), R4("f18"), R4("f19"), \
+ R4("f20"), R4("f21"), R4("f22"), R4("f23"), \
+ R4("f24"), R4("f25"), R4("f26"), R4("f27"), \
+ R4("f28"), R4("f29"), R4("f30"), R4("f31"), \
+ R4("fsr"), R4("fir")
+
+struct reg mips_generic32_regs[] = {
+ MIPS_GENERIC32_GPRS,
+ MIPS_GENERIC32_SPRS,
+ MIPS_GENERIC32_FPU,
+
+ R4("fp"), R4(""),
+
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+};
+
+const char *gdbserver_resume_regs[] = { "pc", "sp", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (mips_generic32_regs,
+ sizeof (mips_generic32_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-ppc.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-ppc.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-ppc.c Thu Oct 11 10:01:26 2001
@@ -0,0 +1,58 @@
+/* Register protocol for PPC, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+#define COMMON_UISA_REGS \
+ R4("r0"), R4("r1"), R4("r2"), R4("r3"), \
+ R4("r4"), R4("r5"), R4("r6"), R4("r7"), \
+ R4("r8"), R4("r9"), R4("r10"),R4("r11"), \
+ R4("r12"),R4("r13"),R4("r14"),R4("r15"), \
+ R4("r16"),R4("r17"),R4("r18"),R4("r19"), \
+ R4("r20"),R4("r21"),R4("r22"),R4("r23"), \
+ R4("r24"),R4("r25"),R4("r26"),R4("r27"), \
+ R4("r28"),R4("r29"),R4("r30"),R4("r31"), \
+ R8("f0"), R8("f1"), R8("f2"), R8("f3"), \
+ R8("f4"), R8("f5"), R8("f6"), R8("f7"), \
+ R8("f8"), R8("f9"), R8("f10"),R8("f11"), \
+ R8("f12"),R8("f13"),R8("f14"),R8("f15"), \
+ R8("f16"),R8("f17"),R8("f18"),R8("f19"), \
+ R8("f20"),R8("f21"),R8("f22"),R8("f23"), \
+ R8("f24"),R8("f25"),R8("f26"),R8("f27"), \
+ R8("f28"),R8("f29"),R8("f30"),R8("f31"), \
+ R4("pc"), R4("ps")
+
+#define COMMON_UISA_SPRS \
+ R4("cr"), R4("lr"), R4("ctr"), R4("xer"), R0
+
+struct reg powerpc_regs[] = {
+ COMMON_UISA_REGS,
+ COMMON_UISA_SPRS
+};
+
+const char *gdbserver_resume_regs[] = { "r1", "pc", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (powerpc_regs,
+ sizeof (powerpc_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/reg-sh.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/reg-sh.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-sh.c Thu Oct 11 10:00:06 2001
@@ -0,0 +1,51 @@
+/* Register protocol for SH, for the remote server for GDB.
+ Copyright 2001
+ 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 "regdef.h"
+
+struct reg sh_regs[] = {
+ R4("r0"), R4("r1"), R4("r2"), R4("r3"),
+ R4("r4"), R4("r5"), R4("r6"), R4("r7"),
+ R4("r8"), R4("r9"), R4("r10"), R4("r11"),
+ R4("r12"), R4("r13"), R4("r14"), R4("r15"),
+ R4("pc"), R4("pr"), R4("gbr"), R4("vbr"),
+ R4("mach"), R4("macl"), R4("sr"),
+ R4("fpul"), R4("fpscr"),
+ R4("fr0"), R4("fr1"), R4("fr2"), R4("fr3"),
+ R4("fr4"), R4("fr5"), R4("fr6"), R4("fr7"),
+ R4("fr8"), R4("fr9"), R4("fr10"), R4("fr11"),
+ R4("fr12"), R4("fr13"), R4("fr14"), R4("fr15"),
+
+ R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+ R4(""), R4(""), R4(""), R4(""),
+};
+
+const char *gdbserver_resume_regs[] = { "pc", "r14", "r15", 0 };
+
+void
+init_registers (void)
+{
+ set_register_cache (sh_regs,
+ sizeof (sh_regs) / sizeof (struct reg));
+}
Index: gdb/gdbserver/regdef.c
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/regdef.c
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/regdef.c Thu Oct 11 09:58:44 2001
@@ -0,0 +1,140 @@
+/* Register support routines for the remote server for GDB.
+ Copyright 2001
+ 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"
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef GDBSERVER_NEW
+int
+registers_length (void)
+{
+ return 2 * REGISTER_BYTES;
+}
+
+char *
+register_data (int regno)
+{
+ return ®isters[REGISTER_BYTE (regno)];
+}
+
+int
+register_size (int regno)
+{
+ return REGISTER_RAW_SIZE (regno);
+}
+#else
+static char *registers;
+static int register_bytes;
+
+static struct reg *reg_defs;
+static int num_registers;
+
+int
+registers_length (void)
+{
+ return 2 * register_bytes;
+}
+
+void
+set_register_cache (struct reg *regs, int n)
+{
+ int offset, i;
+
+ reg_defs = regs;
+ num_registers = n;
+
+ offset = 0;
+ for (i = 0; i < n; i++)
+ {
+ regs[i].offset = offset;
+ offset += regs[i].size;
+ }
+
+ register_bytes = offset;
+ registers = malloc (offset);
+ if (!registers)
+ fatal ("Could not allocate register cache.");
+}
+
+void
+registers_to_string (char *buf)
+{
+ convert_int_to_ascii (registers, buf, register_bytes);
+}
+
+void
+registers_from_string (char *buf)
+{
+ int len = strlen (buf);
+
+ if (len != register_bytes * 2)
+ {
+ warning ("Wrong sized register packet (expected %d bytes, got %d)", 2*register_bytes, len);
+ if (len > register_bytes * 2)
+ len = register_bytes * 2;
+ }
+ convert_ascii_to_int (buf, registers, len / 2);
+}
+
+struct reg *
+find_register_by_name (const char *name)
+{
+ int i;
+
+ for (i = 0; i < num_registers; i++)
+ if (!strcmp (name, reg_defs[i].name))
+ return ®_defs[i];
+ fatal ("Unknown register %s requested", name);
+ return 0;
+}
+
+int
+find_regno (const char *name)
+{
+ int i;
+
+ for (i = 0; i < num_registers; i++)
+ if (!strcmp (name, reg_defs[i].name))
+ return i;
+ fatal ("Unknown register %s requested", name);
+ return -1;
+}
+
+struct reg *
+find_register_by_number (int n)
+{
+ return ®_defs[n];
+}
+
+int
+register_size (int n)
+{
+ return reg_defs[n].size;
+}
+
+char *
+register_data (int n)
+{
+ return registers + reg_defs[n].offset;
+}
+#endif
Index: gdb/gdbserver/regdef.h
===================================================================
RCS file: N/A
diff -u /dev/null gdb/gdbserver/regdef.h
--- /dev/null Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/regdef.h Thu Oct 11 09:58:37 2001
@@ -0,0 +1,65 @@
+/* Register support routines for the remote server for GDB.
+ Copyright 2001
+ 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. */
+
+struct reg
+{
+ const char *name;
+ int offset;
+ int size;
+};
+
+#define R0 {"", 0, 0}
+#define R4(name) {(name), 0, 4}
+#define R8(name) {(name), 0, 8}
+#define R10(name) {(name), 0, 10}
+#define R12(name) {(name), 0, 10}
+#define R16(name) {(name), 0, 16}
+
+/* Convert all registers to a string in the currently specified remote
+ format. */
+
+void registers_to_string (char *buf);
+
+/* Convert a string to register values and fill our register cache. */
+
+void registers_from_string (char *buf);
+
+/* Return the size in bytes of a string-encoded register packet. */
+
+int registers_length (void);
+
+/* Set the current remote protocol and register cache according to the array
+ ``regs'', with ``n'' elements. */
+
+void set_register_cache (struct reg *regs, int n);
+
+/* Return a pointer to the description of register ``n''. */
+
+struct reg *find_register_by_number (int n);
+
+char *register_data (int n);
+
+int register_size (int n);
+
+int find_regno (const char *name);
+
+
+extern const char *gdbserver_resume_regs[];
Index: gdb/config/arm/linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/arm/linux.mt,v
retrieving revision 1.4
diff -u -p -r1.4 linux.mt
--- gdb/config/arm/linux.mt 2001/03/10 06:17:21 1.4
+++ gdb/config/arm/linux.mt 2001/10/11 19:59:10
@@ -2,4 +2,5 @@
TM_FILE= tm-linux.h
TDEPFILES= arm-tdep.o arm-linux-tdep.o solib.o solib-svr4.o solib-legacy.o
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-arm.o reg-arm.o
Index: gdb/config/i386/linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/linux.mt,v
retrieving revision 1.4
diff -u -p -r1.4 linux.mt
--- gdb/config/i386/linux.mt 2001/03/10 06:17:21 1.4
+++ gdb/config/i386/linux.mt 2001/10/11 19:59:10
@@ -3,4 +3,5 @@ TDEPFILES= i386-tdep.o i386-linux-tdep.o
solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-i386.o reg-i386.o
Index: gdb/config/ia64/linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/ia64/linux.mt,v
retrieving revision 1.5
diff -u -p -r1.5 linux.mt
--- gdb/config/ia64/linux.mt 2001/03/10 06:17:22 1.5
+++ gdb/config/ia64/linux.mt 2001/10/11 19:59:10
@@ -3,5 +3,6 @@ TDEPFILES= ia64-tdep.o ia64-aix-tdep.o i
solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-ia64.o reg-ia64.o
GDBSERVER_LIBS= -lc -lnss_dns -lnss_files -lresolv -lc
Index: gdb/config/m68k/linux.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/m68k/linux.mh,v
retrieving revision 1.5
diff -u -p -r1.5 linux.mh
--- gdb/config/m68k/linux.mh 2001/07/11 18:39:12 1.5
+++ gdb/config/m68k/linux.mh 2001/10/11 19:59:10
@@ -7,4 +7,5 @@ NAT_FILE= nm-linux.h
NATDEPFILES= infptrace.o inftarg.o fork-child.o \
corelow.o core-aout.o m68klinux-nat.o linux-thread.o
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-m68k.o reg-m68k.o
Index: gdb/config/mips/linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/mips/linux.mt,v
retrieving revision 1.1
diff -u -p -r1.1 linux.mt
--- gdb/config/mips/linux.mt 2001/07/10 20:41:54 1.1
+++ gdb/config/mips/linux.mt 2001/10/11 19:59:10
@@ -3,7 +3,8 @@ TDEPFILES= mips-tdep.o mips-linux-tdep.o
solib.o solib-svr4.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-mips.o reg-mips.o
SIM_OBS = remote-sim.o
SIM = ../sim/mips/libsim.a
Index: gdb/config/powerpc/linux.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/powerpc/linux.mh,v
retrieving revision 1.6
diff -u -p -r1.6 linux.mh
--- gdb/config/powerpc/linux.mh 2000/10/30 22:33:32 1.6
+++ gdb/config/powerpc/linux.mh 2001/10/11 19:59:10
@@ -10,4 +10,5 @@ core-aout.o core-regset.o ppc-linux-nat.
LOADLIBES = -ldl -rdynamic
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_CFLAGS=-DGDBSERVER_NEW
+GDBSERVER_DEPFILES= low-linux.o lnx-ppc.o reg-ppc.o
Index: gdb/config/sh/linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/sh/linux.mt,v
retrieving revision 1.2
diff -u -p -r1.2 linux.mt
--- gdb/config/sh/linux.mt 2001/03/10 06:17:23 1.2
+++ gdb/config/sh/linux.mt 2001/10/11 19:59:10
@@ -4,3 +4,6 @@ TM_FILE= tm-linux.h
SIM_OBS = remote-sim.o
SIM = ../sim/sh/libsim.a
+
+GDBSERVER_CFLAGS = -DGDBSERVER_NEW
+GDBSERVER_DEPFILES = low-linux.o lnx-sh.o reg-sh.o
Index: gdb/gdbserver/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile.in
--- gdb/gdbserver/Makefile.in 2001/03/06 08:21:43 1.3
+++ gdb/gdbserver/Makefile.in 2001/10/11 19:59:11
@@ -1,5 +1,5 @@
#Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-#1999, 2000
+#1999, 2000, 2001
#Free Software Foundation, Inc.
# This file is part of GDB.
@@ -108,7 +108,7 @@ GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS
CFLAGS = -g
# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
INTERNAL_CFLAGS = ${CFLAGS} ${GLOBAL_CFLAGS} ${PROFILE_CFLAGS} \
- ${INCLUDE_CFLAGS} ${BFD_CFLAGS} -DGDBSERVER
+ ${INCLUDE_CFLAGS} ${BFD_CFLAGS} -DGDBSERVER ${GDBSERVER_CFLAGS}
# LDFLAGS is specifically reserved for setting from the command line
# when running make.
@@ -137,7 +137,7 @@ DEPFILES = $(GDBSERVER_DEPFILES)
SOURCES = $(SFILES) $(ALLDEPFILES)
TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
-OBS = utils.o $(GDBSERVER_DEPFILES) server.o remote-utils.o
+OBS = utils.o $(GDBSERVER_DEPFILES) server.o remote-utils.o regdef.o
# Prevent Sun make from putting in the machine type. Setting
# TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
@@ -247,5 +247,6 @@ low-sparc.o : $(srcdir)/low-sparc.c $(sr
low-sun3.o : $(srcdir)/low-sun3.c $(srcdir)/server.h
low-hppabsd.o : $(srcdir)/low-hppabsd.c $(srcdir)/server.h
utils.o : ${srcdir}/utils.c ${srcdir}/server.h
+regdef.o : ${srcdir}/regdef.c ${srcdir}/server.h
# This is the end of "Makefile.in".
Index: gdb/gdbserver/low-linux.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/low-linux.c,v
retrieving revision 1.11
diff -u -p -r1.11 low-linux.c
--- gdb/gdbserver/low-linux.c 2001/07/26 02:23:58 1.11
+++ gdb/gdbserver/low-linux.c 2001/10/11 19:59:11
@@ -21,8 +21,6 @@
#include "server.h"
#include <sys/wait.h>
-#include "frame.h"
-#include "inferior.h"
#include <stdio.h>
#include <sys/param.h>
@@ -32,25 +30,21 @@
#include <signal.h>
#include <sys/ioctl.h>
#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
-/***************Begin MY defs*********************/
-static char my_registers[REGISTER_BYTES];
-char *registers = my_registers;
-/***************End MY defs*********************/
-
#ifdef HAVE_SYS_REG_H
#include <sys/reg.h>
#endif
-/* Default the type of the ptrace transfer to int. */
-#ifndef PTRACE_XFER_TYPE
+#define PTRACE_ARG3_TYPE long
#define PTRACE_XFER_TYPE int
-#endif
extern int errno;
+extern int num_regs;
+extern int regmap[];
-static void initialize_arch (void);
-
/* Start an inferior process and returns its pid.
ALLARGS is a vector of program-name and args. */
@@ -70,7 +64,7 @@ create_inferior (char *program, char **a
execv (program, allargs);
fprintf (stderr, "Cannot exec %s: %s.\n", program,
- errno < sys_nerr ? sys_errlist[errno] : "unknown error");
+ strerror (errno));
fflush (stderr);
_exit (0177);
}
@@ -87,7 +81,6 @@ kill_inferior (void)
return;
ptrace (PTRACE_KILL, inferior_pid, 0, 0);
wait (0);
-/*************inferior_died ();****VK**************/
}
/* Return nonzero if the given thread is still alive. */
@@ -106,7 +99,7 @@ mywait (char *status)
union wait w;
enable_async_io ();
- pid = waitpid (inferior_pid, &w, 0);
+ pid = waitpid (inferior_pid, (int *)&w, 0);
disable_async_io ();
if (pid != inferior_pid)
perror_with_name ("wait");
@@ -143,419 +136,24 @@ myresume (int step, int signal)
perror_with_name ("ptrace");
}
-
-#if !defined (offsetof)
-#define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
-#endif
-
-/* U_REGS_OFFSET is the offset of the registers within the u area. */
-#if !defined (U_REGS_OFFSET)
-#define U_REGS_OFFSET \
- ptrace (PT_READ_U, inferior_pid, \
- (PTRACE_ARG3_TYPE) (offsetof (struct user, u_ar0)), 0) \
- - KERNEL_U_ADDR
-#endif
-
-#ifdef I386_GNULINUX_TARGET
-/* This module only supports access to the general purpose registers.
- Adjust the relevant constants accordingly.
-
- FIXME: kettenis/2001-03-28: We should really use PTRACE_GETREGS to
- get at the registers. Better yet, we should try to share code with
- i386-linux-nat.c. */
-#undef NUM_FREGS
-#define NUM_FREGS 0
-#undef NUM_REGS
-#define NUM_REGS NUM_GREGS
-
-/* This stuff comes from i386-tdep.c. */
-
-/* i386_register_byte[i] is the offset into the register file of the
- start of register number i. We initialize this from
- i386_register_raw_size. */
-int i386_register_byte[MAX_NUM_REGS];
-
-/* i386_register_raw_size[i] is the number of bytes of storage in
- GDB's register array occupied by register i. */
-int i386_register_raw_size[MAX_NUM_REGS] = {
- 4, 4, 4, 4,
- 4, 4, 4, 4,
- 4, 4, 4, 4,
- 4, 4, 4, 4,
- 10, 10, 10, 10,
- 10, 10, 10, 10,
- 4, 4, 4, 4,
- 4, 4, 4, 4,
- 16, 16, 16, 16,
- 16, 16, 16, 16,
- 4
-};
-
-static void
-initialize_arch (void)
-{
- /* Initialize the table saying where each register starts in the
- register file. */
- {
- int i, offset;
-
- offset = 0;
- for (i = 0; i < MAX_NUM_REGS; i++)
- {
- i386_register_byte[i] = offset;
- offset += i386_register_raw_size[i];
- }
- }
-}
-
-/* This stuff comes from i386-linux-nat.c. */
-
-/* Mapping between the general-purpose registers in `struct user'
- format and GDB's register array layout. */
-static int regmap[] =
-{
- EAX, ECX, EDX, EBX,
- UESP, EBP, ESI, EDI,
- EIP, EFL, CS, SS,
- DS, ES, FS, GS
-};
-
-/* Return the address of register REGNUM. BLOCKEND is the value of
- u.u_ar0, which should point to the registers. */
-
-CORE_ADDR
-register_u_addr (CORE_ADDR blockend, int regnum)
-{
- return (blockend + 4 * regmap[regnum]);
-}
-#elif defined(TARGET_M68K)
-static void
-initialize_arch (void)
-{
- return;
-}
-
-/* This table must line up with REGISTER_NAMES in tm-m68k.h */
-static int regmap[] =
-{
-#ifdef PT_D0
- PT_D0, PT_D1, PT_D2, PT_D3, PT_D4, PT_D5, PT_D6, PT_D7,
- PT_A0, PT_A1, PT_A2, PT_A3, PT_A4, PT_A5, PT_A6, PT_USP,
- PT_SR, PT_PC,
-#else
- 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15,
- 17, 18,
-#endif
-#ifdef PT_FP0
- PT_FP0, PT_FP1, PT_FP2, PT_FP3, PT_FP4, PT_FP5, PT_FP6, PT_FP7,
- PT_FPCR, PT_FPSR, PT_FPIAR
-#else
- 21, 24, 27, 30, 33, 36, 39, 42, 45, 46, 47
-#endif
-};
-/* BLOCKEND is the value of u.u_ar0, and points to the place where GS
- is stored. */
+#define REGISTER_RAW_SIZE(regno) register_size((regno))
int
-m68k_linux_register_u_addr (int blockend, int regnum)
+register_addr (int regnum, CORE_ADDR blockend)
{
- return (blockend + 4 * regmap[regnum]);
-}
-#elif defined(IA64_GNULINUX_TARGET)
-#undef NUM_FREGS
-#define NUM_FREGS 0
-
-#include <asm/ptrace_offsets.h>
-
-static int u_offsets[] =
- {
- /* general registers */
- -1, /* gr0 not available; i.e, it's always zero */
- PT_R1,
- PT_R2,
- PT_R3,
- PT_R4,
- PT_R5,
- PT_R6,
- PT_R7,
- PT_R8,
- PT_R9,
- PT_R10,
- PT_R11,
- PT_R12,
- PT_R13,
- PT_R14,
- PT_R15,
- PT_R16,
- PT_R17,
- PT_R18,
- PT_R19,
- PT_R20,
- PT_R21,
- PT_R22,
- PT_R23,
- PT_R24,
- PT_R25,
- PT_R26,
- PT_R27,
- PT_R28,
- PT_R29,
- PT_R30,
- PT_R31,
- /* gr32 through gr127 not directly available via the ptrace interface */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- /* Floating point registers */
- -1, -1, /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
- PT_F2,
- PT_F3,
- PT_F4,
- PT_F5,
- PT_F6,
- PT_F7,
- PT_F8,
- PT_F9,
- PT_F10,
- PT_F11,
- PT_F12,
- PT_F13,
- PT_F14,
- PT_F15,
- PT_F16,
- PT_F17,
- PT_F18,
- PT_F19,
- PT_F20,
- PT_F21,
- PT_F22,
- PT_F23,
- PT_F24,
- PT_F25,
- PT_F26,
- PT_F27,
- PT_F28,
- PT_F29,
- PT_F30,
- PT_F31,
- PT_F32,
- PT_F33,
- PT_F34,
- PT_F35,
- PT_F36,
- PT_F37,
- PT_F38,
- PT_F39,
- PT_F40,
- PT_F41,
- PT_F42,
- PT_F43,
- PT_F44,
- PT_F45,
- PT_F46,
- PT_F47,
- PT_F48,
- PT_F49,
- PT_F50,
- PT_F51,
- PT_F52,
- PT_F53,
- PT_F54,
- PT_F55,
- PT_F56,
- PT_F57,
- PT_F58,
- PT_F59,
- PT_F60,
- PT_F61,
- PT_F62,
- PT_F63,
- PT_F64,
- PT_F65,
- PT_F66,
- PT_F67,
- PT_F68,
- PT_F69,
- PT_F70,
- PT_F71,
- PT_F72,
- PT_F73,
- PT_F74,
- PT_F75,
- PT_F76,
- PT_F77,
- PT_F78,
- PT_F79,
- PT_F80,
- PT_F81,
- PT_F82,
- PT_F83,
- PT_F84,
- PT_F85,
- PT_F86,
- PT_F87,
- PT_F88,
- PT_F89,
- PT_F90,
- PT_F91,
- PT_F92,
- PT_F93,
- PT_F94,
- PT_F95,
- PT_F96,
- PT_F97,
- PT_F98,
- PT_F99,
- PT_F100,
- PT_F101,
- PT_F102,
- PT_F103,
- PT_F104,
- PT_F105,
- PT_F106,
- PT_F107,
- PT_F108,
- PT_F109,
- PT_F110,
- PT_F111,
- PT_F112,
- PT_F113,
- PT_F114,
- PT_F115,
- PT_F116,
- PT_F117,
- PT_F118,
- PT_F119,
- PT_F120,
- PT_F121,
- PT_F122,
- PT_F123,
- PT_F124,
- PT_F125,
- PT_F126,
- PT_F127,
- /* predicate registers - we don't fetch these individually */
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- /* branch registers */
- PT_B0,
- PT_B1,
- PT_B2,
- PT_B3,
- PT_B4,
- PT_B5,
- PT_B6,
- PT_B7,
- /* virtual frame pointer and virtual return address pointer */
- -1, -1,
- /* other registers */
- PT_PR,
- PT_CR_IIP, /* ip */
- PT_CR_IPSR, /* psr */
- PT_CFM, /* cfm */
- /* kernel registers not visible via ptrace interface (?) */
- -1, -1, -1, -1, -1, -1, -1, -1,
- /* hole */
- -1, -1, -1, -1, -1, -1, -1, -1,
- PT_AR_RSC,
- PT_AR_BSP,
- PT_AR_BSPSTORE,
- PT_AR_RNAT,
- -1,
- -1, /* Not available: FCR, IA32 floating control register */
- -1, -1,
- -1, /* Not available: EFLAG */
- -1, /* Not available: CSD */
- -1, /* Not available: SSD */
- -1, /* Not available: CFLG */
- -1, /* Not available: FSR */
- -1, /* Not available: FIR */
- -1, /* Not available: FDR */
- -1,
- PT_AR_CCV,
- -1, -1, -1,
- PT_AR_UNAT,
- -1, -1, -1,
- PT_AR_FPSR,
- -1, -1, -1,
- -1, /* Not available: ITC */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1,
- PT_AR_PFS,
- PT_AR_LC,
- -1, /* Not available: EC, the Epilog Count register */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1,
- /* nat bits - not fetched directly; instead we obtain these bits from
- either rnat or unat or from memory. */
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- };
-
-int
-ia64_register_u_addr (int blockend, int regnum)
-{
int addr;
- if (regnum < 0 || regnum >= NUM_REGS)
+ if (regnum < 0 || regnum >= num_regs)
error ("Invalid register number %d.", regnum);
- addr = u_offsets[regnum];
+ addr = regmap[regnum];
if (addr == -1)
addr = 0;
return addr;
}
-static void
-initialize_arch (void)
-{
- return;
-}
-#endif
-
-CORE_ADDR
-register_addr (int regno, CORE_ADDR blockend)
-{
- CORE_ADDR addr;
-
- if (regno < 0 || regno >= NUM_REGS)
- error ("Invalid register number %d.", regno);
-
- REGISTER_U_ADDR (addr, blockend, regno);
-
- return addr;
-}
-
/* Fetch one register. */
static void
@@ -564,16 +162,19 @@ fetch_register (int regno)
CORE_ADDR regaddr;
register int i;
- /* Offset of registers within the u area. */
- unsigned int offset;
+ if (regno >= num_regs)
+ return;
- offset = U_REGS_OFFSET;
+ if (cannot_fetch_register (regno))
+ return;
- regaddr = register_addr (regno, offset);
+ regaddr = register_addr (regno, 0);
+ if (regaddr == -1)
+ return;
for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
{
errno = 0;
- *(PTRACE_XFER_TYPE *) ®isters[REGISTER_BYTE (regno) + i] =
+ *(PTRACE_XFER_TYPE *) (register_data (regno) + i) =
ptrace (PTRACE_PEEKUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, 0);
regaddr += sizeof (PTRACE_XFER_TYPE);
if (errno != 0)
@@ -596,7 +197,7 @@ void
fetch_inferior_registers (int regno)
{
if (regno == -1 || regno == 0)
- for (regno = 0; regno < NUM_REGS - NUM_FREGS; regno++)
+ for (regno = 0; regno < num_regs; regno++)
fetch_register (regno);
else
fetch_register (regno);
@@ -611,62 +212,43 @@ store_inferior_registers (int regno)
{
CORE_ADDR regaddr;
int i;
- unsigned int offset = U_REGS_OFFSET;
if (regno >= 0)
{
-#if 0
- if (CANNOT_STORE_REGISTER (regno))
+ if (regno >= num_regs)
return;
-#endif
- regaddr = register_addr (regno, offset);
+
+ if (cannot_store_register (regno))
+ return;
+
+ regaddr = register_addr (regno, 0);
+ if (regaddr == -1)
+ return;
errno = 0;
-#if 0
- if (regno == PCOQ_HEAD_REGNUM || regno == PCOQ_TAIL_REGNUM)
+ for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int))
{
- scratch = *(int *) ®isters[REGISTER_BYTE (regno)] | 0x3;
- ptrace (PT_WUREGS, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
- scratch, 0);
+ errno = 0;
+ ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
+ *(int *) (register_data (regno) + i));
if (errno != 0)
{
- /* Error, even if attached. Failing to write these two
- registers is pretty serious. */
- sprintf (buf, "writing register number %d", regno);
- perror_with_name (buf);
+ /* Warning, not error, in case we are attached; sometimes the
+ kernel doesn't let us at the registers. */
+ char *err = strerror (errno);
+ char *msg = alloca (strlen (err) + 128);
+ sprintf (msg, "writing register %d: %s",
+ regno, err);
+ error (msg);
+ return;
}
+ regaddr += sizeof (int);
}
- else
-#endif
- for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int))
- {
- errno = 0;
- ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
- *(int *) ®isters[REGISTER_BYTE (regno) + i]);
- if (errno != 0)
- {
- /* Warning, not error, in case we are attached; sometimes the
- kernel doesn't let us at the registers. */
- char *err = strerror (errno);
- char *msg = alloca (strlen (err) + 128);
- sprintf (msg, "writing register %d: %s",
- regno, err);
- error (msg);
- return;
- }
- regaddr += sizeof (int);
- }
}
else
- for (regno = 0; regno < NUM_REGS - NUM_FREGS; regno++)
+ for (regno = 0; regno < num_regs; regno++)
store_inferior_registers (regno);
}
-/* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory
- in the NEW_SUN_PTRACE case.
- It ought to be straightforward. But it appears that writing did
- not write the data that I specified. I cannot understand where
- it got the data that it actually did write. */
-
/* Copy LEN bytes from inferior's memory starting at MEMADDR
to debugger memory starting at MYADDR. */
@@ -687,7 +269,7 @@ read_inferior_memory (CORE_ADDR memaddr,
/* Read all the longwords */
for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
{
- buffer[i] = ptrace (PTRACE_PEEKTEXT, inferior_pid, addr, 0);
+ buffer[i] = ptrace (PTRACE_PEEKTEXT, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0);
}
/* Copy appropriate bytes out of the buffer. */
@@ -714,13 +296,13 @@ write_inferior_memory (CORE_ADDR memaddr
/* Fill start and end extra bytes of buffer with existing memory data. */
- buffer[0] = ptrace (PTRACE_PEEKTEXT, inferior_pid, addr, 0);
+ buffer[0] = ptrace (PTRACE_PEEKTEXT, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0);
if (count > 1)
{
buffer[count - 1]
= ptrace (PTRACE_PEEKTEXT, inferior_pid,
- addr + (count - 1) * sizeof (PTRACE_XFER_TYPE), 0);
+ (PTRACE_ARG3_TYPE) (addr + (count - 1) * sizeof (PTRACE_XFER_TYPE)), 0);
}
/* Copy data to be written over corresponding part of buffer */
@@ -732,7 +314,7 @@ write_inferior_memory (CORE_ADDR memaddr
for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
{
errno = 0;
- ptrace (PTRACE_POKETEXT, inferior_pid, addr, buffer[i]);
+ ptrace (PTRACE_POKETEXT, inferior_pid, (PTRACE_ARG3_TYPE) addr, buffer[i]);
if (errno)
return errno;
}
@@ -743,5 +325,5 @@ write_inferior_memory (CORE_ADDR memaddr
void
initialize_low (void)
{
- initialize_arch ();
+ init_registers ();
}
Index: gdb/gdbserver/remote-utils.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/remote-utils.c,v
retrieving revision 1.7
diff -u -p -r1.7 remote-utils.c
--- gdb/gdbserver/remote-utils.c 2001/07/12 21:04:35 1.7
+++ gdb/gdbserver/remote-utils.c 2001/10/11 19:59:11
@@ -34,6 +34,7 @@
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
+#include <stdlib.h>
int remote_debug = 0;
struct ui_file *gdb_stdlog;
@@ -183,6 +184,7 @@ fromhex (int a)
return a - 'a' + 10;
else
error ("Reply contains invalid hex digit");
+ return 0;
}
/* Convert number NIB to a hex digit. */
@@ -204,7 +206,7 @@ putpkt (char *buf)
{
int i;
unsigned char csum = 0;
- char buf2[PBUFSIZ];
+ char *buf2;
char buf3[1];
int cnt = strlen (buf);
char *p;
@@ -212,6 +214,7 @@ putpkt (char *buf)
/* Copy the packet into buffer BUF2, encapsulating it
and giving it a checksum. */
+ buf2 = malloc (PBUFSIZ);
p = buf2;
*p++ = '$';
@@ -250,11 +253,13 @@ putpkt (char *buf)
else
perror ("putpkt(read)");
+ free (buf2);
return -1;
}
}
while (buf3[0] != '+');
+ free (buf2);
return 1; /* Success! */
}
@@ -440,7 +445,7 @@ convert_ascii_to_int (char *from, char *
static char *
outreg (int regno, char *buf)
{
- int regsize = REGISTER_RAW_SIZE (regno);
+ int regsize = register_size (regno);
if ((regno >> 12) != 0)
*buf++ = tohex ((regno >> 12) & 0xf);
@@ -449,7 +454,7 @@ outreg (int regno, char *buf)
*buf++ = tohex ((regno >> 4) & 0xf);
*buf++ = tohex (regno & 0xf);
*buf++ = ':';
- convert_int_to_ascii (®isters[REGISTER_BYTE (regno)], buf, regsize);
+ convert_int_to_ascii (register_data (regno), buf, regsize);
buf += 2 * regsize;
*buf++ = ';';
@@ -474,27 +479,37 @@ prepare_resume_reply (char *buf, char st
if (status == 'T')
{
-#ifdef GDBSERVER_RESUME_REGS
+#ifdef GDBSERVER_NEW
+ char **regp = gdbserver_resume_regs;
+
+ while (*regp)
+ {
+ buf = outreg (find_regno (*regp), buf);
+ regp++;
+ }
+#else
+# ifdef GDBSERVER_RESUME_REGS
static int gdbserver_resume_regs[] = GDBSERVER_RESUME_REGS ;
int i;
for (i = 0;
- i < sizeof (gdbserver_resume_regs)
+ i < sizeof (gdbserver_resume_regs)
/ sizeof (gdbserver_resume_regs[0]);
- i++)
+ i++)
{
int regnum = gdbserver_resume_regs[i];
buf = outreg (regnum, buf);
}
-#else /* !defined(GDBSERVER_RESUME_REGS) */
+# else /* !defined(GDBSERVER_RESUME_REGS) */
buf = outreg (PC_REGNUM, buf);
buf = outreg (FP_REGNUM, buf);
buf = outreg (SP_REGNUM, buf);
if (NPC_REGNUM >= 0)
buf = outreg (NPC_REGNUM, buf);
-#ifdef O7_REGNUM
+# ifdef O7_REGNUM
buf = outreg (O7_REGNUM, buf);
-#endif
-#endif /* GDBSERVER_RESUME_REGS */
+# endif
+# endif /* GDBSERVER_RESUME_REGS */
+#endif /* GDBSERVER_NEW */
/* If the debugger hasn't used any thread features, don't burden it with
threads. If we didn't check this, GDB 4.13 and older would choke. */
Index: gdb/gdbserver/server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.3
diff -u -p -r1.3 server.c
--- gdb/gdbserver/server.c 2001/03/06 08:21:44 1.3
+++ gdb/gdbserver/server.c 2001/10/11 19:59:11
@@ -44,12 +44,14 @@ extern int remote_debug;
int
main (int argc, char *argv[])
{
- char ch, status, own_buf[PBUFSIZ], mem_buf[2000];
+ char ch, status, *own_buf, mem_buf[2000];
int i = 0;
unsigned char signal;
unsigned int len;
CORE_ADDR mem_addr;
+ own_buf = malloc (PBUFSIZ);
+
if (setjmp (toplevel))
{
fprintf (stderr, "Exiting\n");
@@ -109,10 +111,10 @@ main (int argc, char *argv[])
}
break;
case 'g':
- convert_int_to_ascii (registers, own_buf, REGISTER_BYTES);
+ registers_to_string (own_buf);
break;
case 'G':
- convert_ascii_to_int (&own_buf[1], registers, REGISTER_BYTES);
+ registers_from_string (&own_buf[1]);
store_inferior_registers (-1);
write_ok (own_buf);
break;
Index: gdb/gdbserver/server.h
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.h,v
retrieving revision 1.3
diff -u -p -r1.3 server.h
--- gdb/gdbserver/server.h 2001/03/06 08:21:44 1.3
+++ gdb/gdbserver/server.h 2001/10/11 19:59:11
@@ -19,8 +19,24 @@
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include "defs.h"
+#ifndef GDBSERVER_NEW
+# include "defs.h"
+#else
+# include "config.h"
+# include "bfd.h"
+# include <stdarg.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <errno.h>
+# define NORETURN
+ typedef bfd_vma CORE_ADDR;
+ void error (const char *string,...);
+ void fatal (const char *string,...);
+ void warning (const char *string,...);
+#endif
+
#include <setjmp.h>
+#include "regdef.h"
/* Target-specific functions */
@@ -81,6 +97,6 @@ void perror_with_name (char *string);
/* Buffer sizes for transferring memory, registers, etc. Round up PBUFSIZ to
hold all the registers, at least. */
-#define PBUFSIZ ((REGISTER_BYTES > MAXBUFBYTES (2000)) \
- ? (REGISTER_BYTES * 2 + 32) \
+#define PBUFSIZ ((registers_length () + 32 > 2000) \
+ ? (registers_length () + 32) \
: 2000)
Index: gdb/gdbserver/utils.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/utils.c,v
retrieving revision 1.4
diff -u -p -r1.4 utils.c
--- gdb/gdbserver/utils.c 2001/03/06 08:21:44 1.4
+++ gdb/gdbserver/utils.c 2001/10/11 19:59:11
@@ -75,7 +75,7 @@ error (const char *string,...)
/* VARARGS */
NORETURN void
-fatal (char *string,...)
+fatal (const char *string,...)
{
va_list args;
va_start (args, string);
@@ -84,4 +84,15 @@ fatal (char *string,...)
fprintf (stderr, "\n");
va_end (args);
exit (1);
+}
+
+void
+warning (const char *string,...)
+{
+ va_list args;
+ va_start (args, string);
+ fprintf (stderr, "gdb: ");
+ vfprintf (stderr, string, args);
+ fprintf (stderr, "\n");
+ va_end (args);
}
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-11 13:15 [rfa] gdbserver overhaul Daniel Jacobowitz
@ 2001-10-14 18:13 ` Andrew Cagney
2001-10-14 18:44 ` Daniel Jacobowitz
2001-10-16 21:09 ` Andrew Cagney
1 sibling, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-14 18:13 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
> I've added preprocessor gunk to make this compile on other non-Linux
> gdbserver targets, since I only had the Linux ones available to test on. I
> tested on Linux/{ARM,i386,mips,ppc,sh}; the SH bits require some patches
> available from the SH community but not yet in mainstream GDB, but I'm
> including the gdbserver parts anyway. I'm fairly sure that ia64 and m68k
> will continue to work if they did beforehand. Note that the "compile" at the
> beginning of this paragraph is really "compile iff it already did". I tried
> to find a non-Linux target to test; I tried mips64vr5000-unknown-elf
> (low-sim.c) and sparc-sun-solaris2.8 (low-solaris.c). Neither built.
I'm confused. What exacactly did you try here - what was the configure
and CC?
enjoy,
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-14 18:13 ` Andrew Cagney
@ 2001-10-14 18:44 ` Daniel Jacobowitz
2001-10-16 21:12 ` Andrew Cagney
0 siblings, 1 reply; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-14 18:44 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Sun, Oct 14, 2001 at 09:13:17PM -0400, Andrew Cagney wrote:
> >I've added preprocessor gunk to make this compile on other non-Linux
> >gdbserver targets, since I only had the Linux ones available to test on. I
> >tested on Linux/{ARM,i386,mips,ppc,sh}; the SH bits require some patches
> >available from the SH community but not yet in mainstream GDB, but I'm
> >including the gdbserver parts anyway. I'm fairly sure that ia64 and m68k
> >will continue to work if they did beforehand. Note that the "compile" at
> >the
> >beginning of this paragraph is really "compile iff it already did". I
> >tried
> >to find a non-Linux target to test; I tried mips64vr5000-unknown-elf
> >(low-sim.c) and sparc-sun-solaris2.8 (low-solaris.c). Neither built.
>
> I'm confused. What exacactly did you try here - what was the configure
> and CC?
More accurately, neither built gdbserver.
I didn't set CC to anything special. Because mips64vr5000-unknown-elf
is a simulator target, the cross-debugger build includes gdbserver. It
didn't link, because MIPS has been multi-arched, and gdb_arch stuff is
scattered all over the headers. For solaris, I got lots of
prototype-related errors trying to build in the gdbserver directory; I
don't remember offhand what they were.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-11 13:15 [rfa] gdbserver overhaul Daniel Jacobowitz
2001-10-14 18:13 ` Andrew Cagney
@ 2001-10-16 21:09 ` Andrew Cagney
2001-10-16 21:23 ` Daniel Jacobowitz
2001-10-17 15:17 ` Daniel Jacobowitz
1 sibling, 2 replies; 24+ messages in thread
From: Andrew Cagney @ 2001-10-16 21:09 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
> I'd like to commit the attached. It's just the first stage in what will
> probably change a few more times; among other highlights it removes the
> gdbserver dependency on "defs.h" (we still use a few other GDB headers, like
> terminal.h, but those will be easy to deal with down the lines). We lose
> the xm-/tm-/nm- files at the same time, so to know what the target registers
> are we have to hard-code them. This also makes us independent (at last) of
> the GDB register cache layout. GDB does not yet have a corresponding
> independence, but now that the protocols are clearly and compactly described
> in gdbserver, that too can come soon.
Dan, if I'm reading this right there are two changes involved.
Break low-linux.c down into separate files.
Introduce and use regdef.[hc].
With regard to breaking down low-linux.c into CPU specific files. The
actual process doesn't worry me (probably a good move). You would need
to do the other platforms at the same time so that gdbserver doesn't end
up with two different schema. My one concern is the file name choice, I
would definitly use linux in preference to lnx since the former is used
every else in GDB. I'd also consider adding a suffix/prefix - there is
low-* already. (Unless you're proposing we change the other files to lnx.)
Regarding regdef:
> +struct reg arm_regs[] = {
> + R4("r0"), R4("r1"), R4("r2"), R4("r3"),
> + R4("r4"), R4("r5"), R4("r6"), R4("r7"),
> + R4("r8"), R4("r9"), R4("r10"), R4("r11"),
> + R4("r12"), R4("sp"), R4("lr"), R4("pc"),
> + R12("f0"), R12("f1"), R12("f2"), R12("f3"),
> + R12("f4"), R12("f5"), R12("f6"), R12("f7"),
> + R4("fps"), R4("cpsr"),
Have you thought about using something like a colon delimited file:
4:r0
8:r1
to generate these? A definition for a textual form will be needed
eventually. While crude it would allow the sharing of this information
between GDB and gdbserver.
Andrew
> I've added preprocessor gunk to make this compile on other non-Linux
> gdbserver targets, since I only had the Linux ones available to test on. I
> tested on Linux/{ARM,i386,mips,ppc,sh}; the SH bits require some patches
> available from the SH community but not yet in mainstream GDB, but I'm
> including the gdbserver parts anyway. I'm fairly sure that ia64 and m68k
> will continue to work if they did beforehand. Note that the "compile" at the
> beginning of this paragraph is really "compile iff it already did". I tried
> to find a non-Linux target to test; I tried mips64vr5000-unknown-elf
> (low-sim.c) and sparc-sun-solaris2.8 (low-solaris.c). Neither built. It
> would be nice if someone tried, say, the NetBSD port before I committed
> this, but I'm not really insisting on it. I'd rather that every time
> someone notices that such a port is broken, we convert it to the new scheme.
>
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-14 18:44 ` Daniel Jacobowitz
@ 2001-10-16 21:12 ` Andrew Cagney
2001-10-16 21:24 ` Daniel Jacobowitz
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-16 21:12 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
> I'm confused. What exacactly did you try here - what was the configure
>> and CC?
>
>
> More accurately, neither built gdbserver.
>
> I didn't set CC to anything special. Because mips64vr5000-unknown-elf
> is a simulator target, the cross-debugger build includes gdbserver. It
> didn't link, because MIPS has been multi-arched, and gdb_arch stuff is
> scattered all over the headers. For solaris, I got lots of
> prototype-related errors trying to build in the gdbserver directory; I
> don't remember offhand what they were.
Ah, ok. I'd not be too worried about the sim target. Did solaris build
without the changes?
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-16 21:09 ` Andrew Cagney
@ 2001-10-16 21:23 ` Daniel Jacobowitz
2001-10-17 4:45 ` Eli Zaretskii
` (2 more replies)
2001-10-17 15:17 ` Daniel Jacobowitz
1 sibling, 3 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-16 21:23 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Wed, Oct 17, 2001 at 12:08:59AM -0400, Andrew Cagney wrote:
> >I'd like to commit the attached. It's just the first stage in what will
> >probably change a few more times; among other highlights it removes the
> >gdbserver dependency on "defs.h" (we still use a few other GDB headers,
> >like
> >terminal.h, but those will be easy to deal with down the lines). We lose
> >the xm-/tm-/nm- files at the same time, so to know what the target
> >registers
> >are we have to hard-code them. This also makes us independent (at last) of
> >the GDB register cache layout. GDB does not yet have a corresponding
> >independence, but now that the protocols are clearly and compactly
> >described
> >in gdbserver, that too can come soon.
>
>
> Dan, if I'm reading this right there are two changes involved.
>
> Break low-linux.c down into separate files.
> Introduce and use regdef.[hc].
>
> With regard to breaking down low-linux.c into CPU specific files. The
> actual process doesn't worry me (probably a good move). You would need
> to do the other platforms at the same time so that gdbserver doesn't end
> up with two different schema. My one concern is the file name choice, I
> would definitly use linux in preference to lnx since the former is used
> every else in GDB. I'd also consider adding a suffix/prefix - there is
> low-* already. (Unless you're proposing we change the other files to lnx.)
As far as that goes, I can't reliably break the others apart. It's
very tricky to do without a platform to compile them on. That changes
interfaces only within low-linux itself, though, so I'm not terribly
concerned. And, as I've mentioned, most of those other targets are
really just myths nowadays.
I used lnx-, because they needed to be 8.3 unique - isn't that
preferred to an entry in fnmatch.* (?)? They were originally
low-linux-*.c instead, which was much more logical to me. I'll go back
to that if the 8.3 conflicts are not a concern.
> Regarding regdef:
>
> >+struct reg arm_regs[] = {
> >+ R4("r0"), R4("r1"), R4("r2"), R4("r3"),
> >+ R4("r4"), R4("r5"), R4("r6"), R4("r7"),
> >+ R4("r8"), R4("r9"), R4("r10"), R4("r11"),
> >+ R4("r12"), R4("sp"), R4("lr"), R4("pc"),
> >+ R12("f0"), R12("f1"), R12("f2"), R12("f3"),
> >+ R12("f4"), R12("f5"), R12("f6"), R12("f7"),
> >+ R4("fps"), R4("cpsr"),
>
> Have you thought about using something like a colon delimited file:
>
> 4:r0
> 8:r1
>
> to generate these? A definition for a textual form will be needed
> eventually. While crude it would allow the sharing of this information
> between GDB and gdbserver.
I've thought about it. The text file would also need to specify
registers to be sent in a resume packet, or those could be moved to the
low* files without too much pain (although they're really per-cpu
rather than per-target, which is why I put them where they are).
This bears some more consideration, but if the patch is otherwise OK I
would like to postpone it a little bit. I'd like to factor out code
and information useful for communicating between gdb and gdbserver into
its own area; I'd also like to factor out code for control of native
targets (ideally extending as far as the linux threads control
package!) into something that could be shared. I've got a couple of
developing ideas for how to do this, but I'd prefer not to mix it with
this much-needed (IMHO) breath of life.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-16 21:12 ` Andrew Cagney
@ 2001-10-16 21:24 ` Daniel Jacobowitz
0 siblings, 0 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-16 21:24 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Wed, Oct 17, 2001 at 12:11:52AM -0400, Andrew Cagney wrote:
> >I'm confused. What exacactly did you try here - what was the configure
> >>and CC?
> >
> >
> >More accurately, neither built gdbserver.
> >
> >I didn't set CC to anything special. Because mips64vr5000-unknown-elf
> >is a simulator target, the cross-debugger build includes gdbserver. It
> >didn't link, because MIPS has been multi-arched, and gdb_arch stuff is
> >scattered all over the headers. For solaris, I got lots of
> >prototype-related errors trying to build in the gdbserver directory; I
> >don't remember offhand what they were.
>
> Ah, ok. I'd not be too worried about the sim target. Did solaris build
> without the changes?
Nope, I couldn't get gdbserver to build at all.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-16 21:23 ` Daniel Jacobowitz
@ 2001-10-17 4:45 ` Eli Zaretskii
2001-10-17 9:06 ` Andrew Cagney
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
2 siblings, 0 replies; 24+ messages in thread
From: Eli Zaretskii @ 2001-10-17 4:45 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: Andrew Cagney, gdb-patches
On Wed, 17 Oct 2001, Daniel Jacobowitz wrote:
> I used lnx-, because they needed to be 8.3 unique - isn't that
> preferred to an entry in fnmatch.* (?)?
It's preferable, unless it conflicts with other, more important
goals.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-16 21:23 ` Daniel Jacobowitz
2001-10-17 4:45 ` Eli Zaretskii
@ 2001-10-17 9:06 ` Andrew Cagney
2001-10-17 10:57 ` Daniel Jacobowitz
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
2 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-17 9:06 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
>
> I've thought about it. The text file would also need to specify
> registers to be sent in a resume packet, or those could be moved to the
> low* files without too much pain (although they're really per-cpu
> rather than per-target, which is why I put them where they are).
Do you mean the registers sent target->host with a T packet? The
contents of that list isn't part of the protocol.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-17 9:06 ` Andrew Cagney
@ 2001-10-17 10:57 ` Daniel Jacobowitz
0 siblings, 0 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-17 10:57 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Wed, Oct 17, 2001 at 12:06:00PM -0400, Andrew Cagney wrote:
> >
> >I've thought about it. The text file would also need to specify
> >registers to be sent in a resume packet, or those could be moved to the
> >low* files without too much pain (although they're really per-cpu
> >rather than per-target, which is why I put them where they are).
>
> Do you mean the registers sent target->host with a T packet? The
> contents of that list isn't part of the protocol.
Indeed, but per-CPU (with the protocol) seemed the logical way to
specify it. It's not part of the protocol, but it strikes me as a sort
of recommended corollary to it.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-16 21:23 ` Daniel Jacobowitz
2001-10-17 4:45 ` Eli Zaretskii
2001-10-17 9:06 ` Andrew Cagney
@ 2001-10-17 12:34 ` Andrew Cagney
2001-10-17 13:39 ` Daniel Jacobowitz
` (2 more replies)
2 siblings, 3 replies; 24+ messages in thread
From: Andrew Cagney @ 2001-10-17 12:34 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
>
> As far as that goes, I can't reliably break the others apart. It's
> very tricky to do without a platform to compile them on. That changes
> interfaces only within low-linux itself, though, so I'm not terribly
> concerned. And, as I've mentioned, most of those other targets are
> really just myths nowadays.
There is a trade off here.
On the right we have ``fix'' linux and ignore everything else; while on
the left we have ``fix'' and have ``working'' all targets.
I am reluctant to approve the option on the right since this that would
result in a gdbserver with N different ways of implementing the same
thing. Since gdbserver is a small program there shouldn't be a need for
this. The GDB sources hopefully illustrate how leaving old code around
can so easily comes back and bite you.
As for the option on the left, real world experience suggests this just
isn't practical.
That leaves the usual pragmatic compromise: ``fix'' all targets knowing
that some of the fixes probably didn't ``work''. People motivated in
advancing gdbserver for their target (and hence GDB) will soon step
forward and help with the task of testing patches.
> I used lnx-, because they needed to be 8.3 unique - isn't that
> preferred to an entry in fnmatch.* (?)? They were originally
> low-linux-*.c instead, which was much more logical to me. I'll go back
> to that if the 8.3 conflicts are not a concern.
I think the ``keep it consistent and call it linux'' concern overrides
the 8.3 concern.
A s/linux/lnx/ change is separate and independant. Per the above, it
should be done all at once.
Hmm, just one thing on the naming schema. gdbserver can't be made to
work on dos or if it did it couldn't use any of these low-* files right?
--
Can I suggest posting a patch that does just this part of the
re-structuring. People so motivated can then apply/test it. For targets
that don't get tested will bit rot :-/
Can I also suggest posting a separate patch that deletes the sim target.
That has what I would consider a technical flaw. The libsim.a
interface doesn't specify the layout and consequently there is an
incorrect assumptioin that GDB / gdbserver / libsim.a have a common
layout. Once your re-structure has gone through I think it will be
possible to fix this.
With respect to sparc, if it really doesn't even build, then well, how
motivated are you? :-) You could fix it, obsolete it or transform it
(still broken).
enjoy,
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
@ 2001-10-17 13:39 ` Daniel Jacobowitz
2002-09-27 15:35 ` Andrew Cagney
2001-10-18 1:11 ` Eli Zaretskii
2001-10-21 4:02 ` Mark Kettenis
2 siblings, 1 reply; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-17 13:39 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Wed, Oct 17, 2001 at 03:34:31PM -0400, Andrew Cagney wrote:
> >
> >As far as that goes, I can't reliably break the others apart. It's
> >very tricky to do without a platform to compile them on. That changes
> >interfaces only within low-linux itself, though, so I'm not terribly
> >concerned. And, as I've mentioned, most of those other targets are
> >really just myths nowadays.
>
> There is a trade off here.
>
> On the right we have ``fix'' linux and ignore everything else; while on
> the left we have ``fix'' and have ``working'' all targets.
>
> I am reluctant to approve the option on the right since this that would
> result in a gdbserver with N different ways of implementing the same
> thing. Since gdbserver is a small program there shouldn't be a need for
> this. The GDB sources hopefully illustrate how leaving old code around
> can so easily comes back and bite you.
>
> As for the option on the left, real world experience suggests this just
> isn't practical.
>
> That leaves the usual pragmatic compromise: ``fix'' all targets knowing
> that some of the fixes probably didn't ``work''. People motivated in
> advancing gdbserver for their target (and hence GDB) will soon step
> forward and help with the task of testing patches.
Well, I don't really consider this to be a ``fix''; it does not change
interfaces at all. The only functions exported by low-linux-* are
used only directly by low-linux.c; they are num_regs (specifically,
number readable by ptrace), regmap, and cannot_{fetch,store}_register.
In other words, it doesn't leave any old code around.
Note that there is an "old code left around" problem here - but it's
with the register cache code rather than the low-linux-* breakup. I
can convert the other targets to that without much difficulty, I think;
just a little well-earned tedium.
> >I used lnx-, because they needed to be 8.3 unique - isn't that
> >preferred to an entry in fnmatch.* (?)? They were originally
> >low-linux-*.c instead, which was much more logical to me. I'll go back
> >to that if the 8.3 conflicts are not a concern.
>
> I think the ``keep it consistent and call it linux'' concern overrides
> the 8.3 concern.
>
> A s/linux/lnx/ change is separate and independant. Per the above, it
> should be done all at once.
>
> Hmm, just one thing on the naming schema. gdbserver can't be made to
> work on dos or if it did it couldn't use any of these low-* files right?
Right. Each of these low-* files is only compiled on the native
architecture for which it is written. I'll scrap the lnx-* stuff.
> Can I suggest posting a patch that does just this part of the
> re-structuring. People so motivated can then apply/test it. For targets
> that don't get tested will bit rot :-/
Which part are you referring to? The low-linux.c breakup? I can do
that; I can also test it on 80% of the affected targets, and I'd
consider such a patch ``obvious''.
> Can I also suggest posting a separate patch that deletes the sim target.
> That has what I would consider a technical flaw. The libsim.a
> interface doesn't specify the layout and consequently there is an
> incorrect assumptioin that GDB / gdbserver / libsim.a have a common
> layout. Once your re-structure has gone through I think it will be
> possible to fix this.
I don't really see the point. It's no more (in fact probably less)
broken than all the other targets, which make the same or worse
assumptions. I'm trying to fix them, not delete them :) I'm open to
marking it obsolete, certainly.
> With respect to sparc, if it really doesn't even build, then well, how
> motivated are you? :-) You could fix it, obsolete it or transform it
> (still broken).
For Solaris? I'm not motivated in the slightest. In fact, I'm tempted
to mark all non-Linux gdbserver targets as obsolete, and repair them
one at a time as volunteers, or at least testers, pop their heads up.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-16 21:09 ` Andrew Cagney
2001-10-16 21:23 ` Daniel Jacobowitz
@ 2001-10-17 15:17 ` Daniel Jacobowitz
2001-10-18 14:28 ` Andrew Cagney
1 sibling, 1 reply; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-17 15:17 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Wed, Oct 17, 2001 at 12:08:59AM -0400, Andrew Cagney wrote:
> Have you thought about using something like a colon delimited file:
>
> 4:r0
> 8:r1
>
> to generate these? A definition for a textual form will be needed
> eventually. While crude it would allow the sharing of this information
> between GDB and gdbserver.
Upon reflection, I've implemented this as well.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
2001-10-17 13:39 ` Daniel Jacobowitz
@ 2001-10-18 1:11 ` Eli Zaretskii
2001-10-18 9:30 ` Andrew Cagney
2001-10-21 4:02 ` Mark Kettenis
2 siblings, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2001-10-18 1:11 UTC (permalink / raw)
To: Andrew Cagney; +Cc: Daniel Jacobowitz, gdb-patches
On Wed, 17 Oct 2001, Andrew Cagney wrote:
> Hmm, just one thing on the naming schema. gdbserver can't be made to
> work on dos
Yes, it can.
> or if it did it couldn't use any of these low-* files right?
Sorry, I don't understand this. How is the DJGPP port different from
any other port in this respect?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-18 1:11 ` Eli Zaretskii
@ 2001-10-18 9:30 ` Andrew Cagney
2001-10-18 12:36 ` Eli Zaretskii
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-18 9:30 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Daniel Jacobowitz, gdb-patches
> On Wed, 17 Oct 2001, Andrew Cagney wrote:
>
>
>> Hmm, just one thing on the naming schema. gdbserver can't be made to
>> work on dos
>
>
> Yes, it can.
>
>
>> or if it did it couldn't use any of these low-* files right?
>
>
> Sorry, I don't understand this. How is the DJGPP port different from
> any other port in this respect?
I don't think DJGPP's low/nat interface looks like UNIX's ptrace() or
/procfs so much of the existing low-* code wouldn't be used.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-18 12:36 ` Eli Zaretskii
@ 2001-10-18 11:59 ` Andrew Cagney
2001-10-18 12:08 ` Daniel Jacobowitz
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-18 11:59 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: drow, gdb-patches
>> Date: Thu, 18 Oct 2001 11:57:40 -0400
>> From: Andrew Cagney <ac131313@cygnus.com>
>
>> >
>
>> >> or if it did it couldn't use any of these low-* files right?
>
>> >
>> >
>> > Sorry, I don't understand this. How is the DJGPP port different from
>> > any other port in this respect?
>
>>
>> I don't think DJGPP's low/nat interface looks like UNIX's ptrace() or
>> /procfs so much of the existing low-* code wouldn't be used.
>
>
> That's true, but the low-* files are supposed to be compiled on the
> target system, not on the host, right? If so, all but one of these
> low-* files is irrelevant for other platforms as well, right?
Yes. My understanding of DanielJ's cleanup is that it better structures
(separate os/cpu specific and generic files) the unix low code.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-18 11:59 ` Andrew Cagney
@ 2001-10-18 12:08 ` Daniel Jacobowitz
0 siblings, 0 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-18 12:08 UTC (permalink / raw)
To: Andrew Cagney; +Cc: Eli Zaretskii, gdb-patches
On Thu, Oct 18, 2001 at 02:58:41PM -0400, Andrew Cagney wrote:
> >>Date: Thu, 18 Oct 2001 11:57:40 -0400
> >>From: Andrew Cagney <ac131313@cygnus.com>
> >
> >>>
> >
> >>>> or if it did it couldn't use any of these low-* files right?
> >
> >>>
> >>>
> >>> Sorry, I don't understand this. How is the DJGPP port different from
> >>> any other port in this respect?
> >
> >>
> >>I don't think DJGPP's low/nat interface looks like UNIX's ptrace() or
> >>/procfs so much of the existing low-* code wouldn't be used.
> >
> >
> >That's true, but the low-* files are supposed to be compiled on the
> >target system, not on the host, right? If so, all but one of these
> >low-* files is irrelevant for other platforms as well, right?
>
> Yes. My understanding of DanielJ's cleanup is that it better structures
> (separate os/cpu specific and generic files) the unix low code.
Yes, that's right. Well, more specifically:
- I create a file for each CPU supported, ideally - there may be
multiple variants of this for different OS targets, and I haven't
checked any besides Linux, but I don't think there should be...
- I create a new file, broken out of the monstrous linux target file,
for each supported linux target.
There is little common Unix support code, but there looks as if there
should be more. After some more factoring of architecture-specific
bits, perhaps there will be.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-18 9:30 ` Andrew Cagney
@ 2001-10-18 12:36 ` Eli Zaretskii
2001-10-18 11:59 ` Andrew Cagney
0 siblings, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2001-10-18 12:36 UTC (permalink / raw)
To: ac131313; +Cc: drow, gdb-patches
> Date: Thu, 18 Oct 2001 11:57:40 -0400
> From: Andrew Cagney <ac131313@cygnus.com>
> >
> >> or if it did it couldn't use any of these low-* files right?
> >
> >
> > Sorry, I don't understand this. How is the DJGPP port different from
> > any other port in this respect?
>
> I don't think DJGPP's low/nat interface looks like UNIX's ptrace() or
> /procfs so much of the existing low-* code wouldn't be used.
That's true, but the low-* files are supposed to be compiled on the
target system, not on the host, right? If so, all but one of these
low-* files is irrelevant for other platforms as well, right?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-17 15:17 ` Daniel Jacobowitz
@ 2001-10-18 14:28 ` Andrew Cagney
2001-10-18 17:06 ` Daniel Jacobowitz
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2001-10-18 14:28 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
>> Have you thought about using something like a colon delimited file:
>>
>> 4:r0
>> 8:r1
>>
>> to generate these? A definition for a textual form will be needed
>> eventually. While crude it would allow the sharing of this information
>> between GDB and gdbserver.
>
>
> Upon reflection, I've implemented this as well.
Dam! I'll have to go and implement:
set remote G-packet 4:r0;8:r1;...
(thanks)
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [rfa] gdbserver overhaul
2001-10-18 14:28 ` Andrew Cagney
@ 2001-10-18 17:06 ` Daniel Jacobowitz
0 siblings, 0 replies; 24+ messages in thread
From: Daniel Jacobowitz @ 2001-10-18 17:06 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Thu, Oct 18, 2001 at 05:13:29PM -0400, Andrew Cagney wrote:
> >>Have you thought about using something like a colon delimited file:
> >>
> >>4:r0
> >>8:r1
> >>
> >>to generate these? A definition for a textual form will be needed
> >>eventually. While crude it would allow the sharing of this information
> >>between GDB and gdbserver.
> >
> >
> >Upon reflection, I've implemented this as well.
>
> Dam! I'll have to go and implement:
>
> set remote G-packet 4:r0;8:r1;...
Wait till these go in first :) They should have most of the necessary
framework. I'll revisit this patch in a couple of days.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
2001-10-17 13:39 ` Daniel Jacobowitz
2001-10-18 1:11 ` Eli Zaretskii
@ 2001-10-21 4:02 ` Mark Kettenis
2001-10-21 9:15 ` Andrew Cagney
2 siblings, 1 reply; 24+ messages in thread
From: Mark Kettenis @ 2001-10-21 4:02 UTC (permalink / raw)
To: Andrew Cagney; +Cc: Daniel Jacobowitz, gdb-patches
Andrew Cagney <ac131313@cygnus.com> writes:
> > I used lnx-, because they needed to be 8.3 unique - isn't that
> > preferred to an entry in fnmatch.* (?)? They were originally
> > low-linux-*.c instead, which was much more logical to me. I'll go back
> > to that if the 8.3 conflicts are not a concern.
>
> I think the ``keep it consistent and call it linux'' concern overrides
> the 8.3 concern.
It just occured to me that if we really want to use a consistent
naming scheme, we should probably use CPU-OS-low.c
(i.e. i386-linux-low.c) just like we have CPU-OS-tdep.c and
CPU-OS-nat.c.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-21 4:02 ` Mark Kettenis
@ 2001-10-21 9:15 ` Andrew Cagney
0 siblings, 0 replies; 24+ messages in thread
From: Andrew Cagney @ 2001-10-21 9:15 UTC (permalink / raw)
To: Mark Kettenis; +Cc: Daniel Jacobowitz, gdb-patches
>
> It just occured to me that if we really want to use a consistent
> naming scheme, we should probably use CPU-OS-low.c
> (i.e. i386-linux-low.c) just like we have CPU-OS-tdep.c and
> CPU-OS-nat.c.
Yes, obvious? :-)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2001-10-17 13:39 ` Daniel Jacobowitz
@ 2002-09-27 15:35 ` Andrew Cagney
2002-09-27 15:49 ` Andrew Cagney
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Cagney @ 2002-09-27 15:35 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
> Which part are you referring to? The low-linux.c breakup? I can do
> that; I can also test it on 80% of the affected targets, and I'd
> consider such a patch ``obvious''.
Yes the split.
Check the guideline for obvious. Your patch will knowingly break
something. Hmm, will someone object?
> I don't really see the point. It's no more (in fact probably less)
> broken than all the other targets, which make the same or worse
> assumptions. I'm trying to fix them, not delete them [:)] I'm open to
> marking it obsolete, certainly.
The MIPS gbserver sim is very broken. GDB has code to carefully map
between a simulator and its internal register numbering. It was
originally added for the mips-gdb <-> sim interface.
>> With respect to sparc, if it really doesn't even build, then well, how
>> motivated are you? [:-)] You could fix it, obsolete it or transform it
>> (still broken).
>
>
> For Solaris? I'm not motivated in the slightest. In fact, I'm tempted
> to mark all non-Linux gdbserver targets as obsolete, and repair them
> one at a time as volunteers, or at least testers, pop their heads up.
I don't think that is reasonable - it would be setting a precident for
me doing things like ignoring / breaking currently working linux targets
because (say) most are not multi-arch.
enjoy,
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: gdbserver/{<foo>,<os>,<bar>}.c?; Was: [rfa] gdbserver overhaul
2002-09-27 15:35 ` Andrew Cagney
@ 2002-09-27 15:49 ` Andrew Cagney
0 siblings, 0 replies; 24+ messages in thread
From: Andrew Cagney @ 2002-09-27 15:49 UTC (permalink / raw)
To: Andrew Cagney; +Cc: Daniel Jacobowitz, gdb-patches
I, er, messed up my mozilla, I didn't realize I messed it up this much -
this is a 12 month old e-mail.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2002-09-27 22:49 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-10-11 13:15 [rfa] gdbserver overhaul Daniel Jacobowitz
2001-10-14 18:13 ` Andrew Cagney
2001-10-14 18:44 ` Daniel Jacobowitz
2001-10-16 21:12 ` Andrew Cagney
2001-10-16 21:24 ` Daniel Jacobowitz
2001-10-16 21:09 ` Andrew Cagney
2001-10-16 21:23 ` Daniel Jacobowitz
2001-10-17 4:45 ` Eli Zaretskii
2001-10-17 9:06 ` Andrew Cagney
2001-10-17 10:57 ` Daniel Jacobowitz
2001-10-17 12:34 ` gdbserver/{<foo>,<os>,<bar>}.c?; Was: " Andrew Cagney
2001-10-17 13:39 ` Daniel Jacobowitz
2002-09-27 15:35 ` Andrew Cagney
2002-09-27 15:49 ` Andrew Cagney
2001-10-18 1:11 ` Eli Zaretskii
2001-10-18 9:30 ` Andrew Cagney
2001-10-18 12:36 ` Eli Zaretskii
2001-10-18 11:59 ` Andrew Cagney
2001-10-18 12:08 ` Daniel Jacobowitz
2001-10-21 4:02 ` Mark Kettenis
2001-10-21 9:15 ` Andrew Cagney
2001-10-17 15:17 ` Daniel Jacobowitz
2001-10-18 14:28 ` Andrew Cagney
2001-10-18 17:06 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox