* Gdbserver with powerpc
@ 2002-02-01 7:30 stefania magistrali
2002-02-01 7:35 ` Daniel Jacobowitz
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: stefania magistrali @ 2002-02-01 7:30 UTC (permalink / raw)
To: gdb
Hi all!
I am developing a powerpc (860) board. I need to compile gdb for my host
(Intel with Linux) and gdbserver for target. I configured the system
like
this:
for gdb: ./configure --target=powerpc-linux
and for gdbserver: ./configure powerpc-linux (then I set CC=cross
compiler
for powerpc)
I have problems with gdbserver, I can't compile it. There are 2
problems:
1) when I compile it, the utils.c file loads the server.h file and this
loads the ../defs.h file (gdb/defs.h) where it is included the config.h
file
(gdb/config.h). But that file is created when I configured gdb (with the
host=Intel and target=powerpc) and so, p.e. it is defined
HAVE_SYS_REG_H,
when I haven't the file sys/reg.h for powerpc. Have I to configure it in
a
different way?
2) In low-linux.c there is a source code for Intel and m68k, I have to
add
code for powerpc? If so, do you know if someone has already done it?
Thanks,
Stefania
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:30 Gdbserver with powerpc stefania magistrali
@ 2002-02-01 7:35 ` Daniel Jacobowitz
2002-02-01 7:37 ` Dan Kegel
2002-02-01 7:37 ` William A. Gatliff
2 siblings, 0 replies; 11+ messages in thread
From: Daniel Jacobowitz @ 2002-02-01 7:35 UTC (permalink / raw)
To: stefania magistrali; +Cc: gdb
On Fri, Feb 01, 2002 at 04:30:29PM -0100, stefania magistrali wrote:
> Hi all!
> I am developing a powerpc (860) board. I need to compile gdb for my host
>
> (Intel with Linux) and gdbserver for target. I configured the system
> like
> this:
>
> for gdb: ./configure --target=powerpc-linux
> and for gdbserver: ./configure powerpc-linux (then I set CC=cross
> compiler
> for powerpc)
>
> I have problems with gdbserver, I can't compile it. There are 2
> problems:
> 1) when I compile it, the utils.c file loads the server.h file and this
> loads the ../defs.h file (gdb/defs.h) where it is included the config.h
> file
> (gdb/config.h). But that file is created when I configured gdb (with the
>
> host=Intel and target=powerpc) and so, p.e. it is defined
> HAVE_SYS_REG_H,
> when I haven't the file sys/reg.h for powerpc. Have I to configure it in
> a
> different way?
GDB must be configured for the TARGET, not for a cross-debugger, in
order to build gdbserver. $CC must be a cross-compiler.
> 2) In low-linux.c there is a source code for Intel and m68k, I have to
> add
> code for powerpc? If so, do you know if someone has already done it?
> Thanks,
> Stefania
I believe it's been posted to the list a few times. It may be again in
a few days.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:30 Gdbserver with powerpc stefania magistrali
2002-02-01 7:35 ` Daniel Jacobowitz
2002-02-01 7:37 ` Dan Kegel
@ 2002-02-01 7:37 ` William A. Gatliff
2002-02-01 7:57 ` Daniel Jacobowitz
2002-02-01 8:42 ` Andrew Cagney
2 siblings, 2 replies; 11+ messages in thread
From: William A. Gatliff @ 2002-02-01 7:37 UTC (permalink / raw)
To: stefania magistrali; +Cc: gdb
Sefania:
Peter Barada and I are currently grinding through this--- he for 68k
and powerpc targets, me for arm-linux.
I have set up a rudimentary page in the Crossgcc Wiki where you can
follow our progress--- which isn't much yet, we only started
yesterday!
The crossgcc Wiki is at
http://www.billgatliff.com/twiki/bin/view/Crossgcc/WebHome
The page I've set up for gdbserver is the BuildGdbServer page, which
you can get to directly like this:
http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildGdbServer
HTH,
b.g.
On Fri, Feb 01, 2002 at 04:30:29PM -0100, stefania magistrali wrote:
> Hi all!
> I am developing a powerpc (860) board. I need to compile gdb for my host
>
> (Intel with Linux) and gdbserver for target. I configured the system
> like
> this:
>
> for gdb: ./configure --target=powerpc-linux
> and for gdbserver: ./configure powerpc-linux (then I set CC=cross
> compiler
> for powerpc)
>
> I have problems with gdbserver, I can't compile it. There are 2
> problems:
> 1) when I compile it, the utils.c file loads the server.h file and this
> loads the ../defs.h file (gdb/defs.h) where it is included the config.h
> file
> (gdb/config.h). But that file is created when I configured gdb (with the
>
> host=Intel and target=powerpc) and so, p.e. it is defined
> HAVE_SYS_REG_H,
> when I haven't the file sys/reg.h for powerpc. Have I to configure it in
> a
> different way?
> 2) In low-linux.c there is a source code for Intel and m68k, I have to
> add
> code for powerpc? If so, do you know if someone has already done it?
> Thanks,
> Stefania
>
--
Bill Gatliff
bgat@billgatliff.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:30 Gdbserver with powerpc stefania magistrali
2002-02-01 7:35 ` Daniel Jacobowitz
@ 2002-02-01 7:37 ` Dan Kegel
2002-02-01 7:50 ` Daniel Jacobowitz
2002-02-01 7:37 ` William A. Gatliff
2 siblings, 1 reply; 11+ messages in thread
From: Dan Kegel @ 2002-02-01 7:37 UTC (permalink / raw)
To: stefania magistrali; +Cc: gdb
stefania magistrali wrote:
> I am developing a powerpc (860) board. I need to compile gdb for my host
> (Intel with Linux) and gdbserver for target. I configured the system
> like this:
>
> for gdb: ./configure --target=powerpc-linux
> and for gdbserver: ./configure powerpc-linux (then I set CC=cross
> compiler for powerpc)
>
> I have problems with gdbserver, I can't compile it. There are 2
> problems:
> 1) when I compile it, the utils.c file loads the server.h file and this
> loads the ../defs.h file (gdb/defs.h) where it is included the config.h
> file (gdb/config.h). But that file is created when I configured gdb
> (with the host=Intel and target=powerpc) and so, p.e. it is defined
> HAVE_SYS_REG_H, when I haven't the file sys/reg.h for powerpc.
> Have I to configure it in a different way?
Yes; you have to configure and build gdb as if you wanted it to
run native on the ppc; only then can you configure and build gdbserver.
> 2) In low-linux.c there is a source code for Intel and m68k, I have to
> add code for powerpc? If so, do you know if someone has already done it?
Heh. gdbserver is broken at the moment. I posted recently with
almost identical questions. There is talk of fixing it, but I
don't know if anyone's working on it. Similarly, there's talk
of making it handle multithreaded programs, but I don't know
if anyone's working on that, either.
- Dan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:37 ` Dan Kegel
@ 2002-02-01 7:50 ` Daniel Jacobowitz
0 siblings, 0 replies; 11+ messages in thread
From: Daniel Jacobowitz @ 2002-02-01 7:50 UTC (permalink / raw)
To: Dan Kegel; +Cc: stefania magistrali, gdb
On Fri, Feb 01, 2002 at 07:43:35AM -0800, Dan Kegel wrote:
> stefania magistrali wrote:
> > I am developing a powerpc (860) board. I need to compile gdb for my host
> > (Intel with Linux) and gdbserver for target. I configured the system
> > like this:
> >
> > for gdb: ./configure --target=powerpc-linux
> > and for gdbserver: ./configure powerpc-linux (then I set CC=cross
> > compiler for powerpc)
> >
> > I have problems with gdbserver, I can't compile it. There are 2
> > problems:
> > 1) when I compile it, the utils.c file loads the server.h file and this
> > loads the ../defs.h file (gdb/defs.h) where it is included the config.h
> > file (gdb/config.h). But that file is created when I configured gdb
> > (with the host=Intel and target=powerpc) and so, p.e. it is defined
> > HAVE_SYS_REG_H, when I haven't the file sys/reg.h for powerpc.
> > Have I to configure it in a different way?
>
> Yes; you have to configure and build gdb as if you wanted it to
> run native on the ppc; only then can you configure and build gdbserver.
>
> > 2) In low-linux.c there is a source code for Intel and m68k, I have to
> > add code for powerpc? If so, do you know if someone has already done it?
>
> Heh. gdbserver is broken at the moment. I posted recently with
> almost identical questions. There is talk of fixing it, but I
> don't know if anyone's working on it. Similarly, there's talk
> of making it handle multithreaded programs, but I don't know
> if anyone's working on that, either.
> - Dan
Both.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:37 ` William A. Gatliff
@ 2002-02-01 7:57 ` Daniel Jacobowitz
2002-02-01 7:59 ` William A. Gatliff
2002-02-01 8:15 ` stefania magistrali
2002-02-01 8:42 ` Andrew Cagney
1 sibling, 2 replies; 11+ messages in thread
From: Daniel Jacobowitz @ 2002-02-01 7:57 UTC (permalink / raw)
To: William A. Gatliff; +Cc: stefania magistrali, gdb
[-- Attachment #1: Type: text/plain, Size: 1161 bytes --]
On Fri, Feb 01, 2002 at 09:37:20AM -0600, William A. Gatliff wrote:
> Sefania:
>
>
> Peter Barada and I are currently grinding through this--- he for 68k
> and powerpc targets, me for arm-linux.
>
> I have set up a rudimentary page in the Crossgcc Wiki where you can
> follow our progress--- which isn't much yet, we only started
> yesterday!
>
> The crossgcc Wiki is at
> http://www.billgatliff.com/twiki/bin/view/Crossgcc/WebHome
>
> The page I've set up for gdbserver is the BuildGdbServer page, which
> you can get to directly like this:
> http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildGdbServer
I dug the patches out of my working directory for all of you clammering
for this support. No promises. The second one will almost certainly
not apply, but that's just to gdb/config/*; look at the diff and apply
the bits you care about by hand, it's quite obvious.
This should fix all Linux targets that I know of that GDB otherwise
supports. MIPS, SH, i386, m68k, ARM, PowerPC, ia64 at least.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
[-- Attachment #2: serverparts.diff --]
[-- Type: text/plain, Size: 81524 bytes --]
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/Makefile.in gdb/gdbserver/Makefile.in
--- /opt/src/gdb/branch/src/gdb/gdbserver/Makefile.in Tue Mar 6 03:21:43 2001
+++ gdb/gdbserver/Makefile.in Sun Jan 20 00:50:28 2002
@@ -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.
@@ -86,11 +86,6 @@
BFD_SRC = $(srcdir)/$(BFD_DIR)
BFD_CFLAGS = -I$(BFD_DIR) -I$(BFD_SRC)
-# Where is the source dir for the READLINE library? Traditionally in .. or .
-# (For the binary library built from it, we use ${READLINE_DIR}${subdir}.)
-READLINE_DIR = ${srcdir}/../readline
-READLINE_DEP = $$(READLINE_DIR)
-
# All the includes used for CFLAGS and for lint.
# -I. for config files.
# -I.. for gdb's config files (especially config.h)
@@ -137,7 +132,7 @@
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 signals.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 +242,8 @@
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
+signals.o : ${srcdir}/../signals.c
+ ${CC} -c ${INTERNAL_CFLAGS} $<
# This is the end of "Makefile.in".
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/gdbreplay.c gdb/gdbserver/gdbreplay.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/gdbreplay.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/gdbreplay.c Sun Jan 20 00:50:28 2002
@@ -30,6 +30,9 @@
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
/* Sort of a hack... */
#define EOL (EOF - 1)
@@ -83,8 +86,6 @@
void
remote_open (char *name)
{
- extern char *strchr ();
-
if (!strchr (name, ':'))
{
fprintf (stderr, "%s: Must specify tcp connection as host:addr\n", name);
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-hppabsd.c gdb/gdbserver/low-hppabsd.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-hppabsd.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-hppabsd.c Sun Jan 20 00:50:28 2002
@@ -81,6 +81,13 @@
/*************inferior_died ();****VK**************/
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Return nonzero if the given thread is still alive. */
int
mythread_alive (int pid)
@@ -229,7 +236,7 @@
errno = 0;
if (regno == PCOQ_HEAD_REGNUM || regno == PCOQ_TAIL_REGNUM)
{
- scratch = *(int *) ®isters[REGISTER_BYTE (regno)] | 0x3;
+ scratch = *(int *) register_data (regno) | 0x3;
ptrace (PT_WUREGS, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
scratch, 0);
if (errno != 0)
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-arm.c gdb/gdbserver/low-linux-arm.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-arm.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-arm.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,46 @@
+/* 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
+
+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);
+}
+
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-i386.c gdb/gdbserver/low-linux-i386.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-i386.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-i386.c Sun Jan 20 00:50:28 2002
@@ -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);
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-ia64.c gdb/gdbserver/low-linux-ia64.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-ia64.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-ia64.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,296 @@
+/* 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
+
+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;
+}
+
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-m68k.c gdb/gdbserver/low-linux-m68k.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-m68k.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-m68k.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,64 @@
+/* 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
+
+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);
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-mips.c gdb/gdbserver/low-linux-mips.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-mips.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-mips.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,104 @@
+/* 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
+
+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;
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-ppc.c gdb/gdbserver/low-linux-ppc.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-ppc.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-ppc.c Sun Jan 20 00:50:28 2002
@@ -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;
+}
+
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-sh.c gdb/gdbserver/low-linux-sh.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux-sh.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/low-linux-sh.c Sun Jan 20 00:50:28 2002
@@ -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;
+}
+
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-linux.c gdb/gdbserver/low-linux.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-linux.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-linux.c Sun Jan 20 00:50:28 2002
@@ -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,24 +30,20 @@
#include <signal.h>
#include <sys/ioctl.h>
#include <fcntl.h>
-
-/***************Begin MY defs*********************/
-static char my_registers[REGISTER_BYTES];
-char *registers = my_registers;
-/***************End MY defs*********************/
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
#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;
-
-static void initialize_arch (void);
+extern int num_regs;
+extern int regmap[];
/* Start an inferior process and returns its pid.
ALLARGS is a vector of program-name and args. */
@@ -70,7 +64,7 @@
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);
}
@@ -78,6 +72,23 @@
return pid;
}
+/* Attach to an inferior process. */
+
+int
+myattach (int pid)
+{
+ if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
+ {
+ fprintf (stderr, "Cannot attach to process %d: %s (%d)\n", pid,
+ errno < sys_nerr ? sys_errlist[errno] : "unknown error",
+ errno);
+ fflush (stderr);
+ _exit (0177);
+ }
+
+ return 0;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
@@ -87,7 +98,6 @@
return;
ptrace (PTRACE_KILL, inferior_pid, 0, 0);
wait (0);
-/*************inferior_died ();****VK**************/
}
/* Return nonzero if the given thread is still alive. */
@@ -106,7 +116,7 @@
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");
@@ -144,418 +154,23 @@
}
-#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. */
-
-int
-m68k_linux_register_u_addr (int blockend, int regnum)
-{
- 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,
- };
+#define REGISTER_RAW_SIZE(regno) register_size((regno))
int
-ia64_register_u_addr (int blockend, int regnum)
+register_addr (int regnum, CORE_ADDR blockend)
{
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 +179,19 @@
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 +214,7 @@
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 +229,43 @@
{
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;
+
+ if (cannot_store_register (regno))
+ return;
+
+ regaddr = register_addr (regno, 0);
+ if (regaddr == -1)
return;
-#endif
- regaddr = register_addr (regno, offset);
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 +286,7 @@
/* 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 +313,13 @@
/* 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 +331,7 @@
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 +342,5 @@
void
initialize_low (void)
{
- initialize_arch ();
+ init_registers ();
}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-lynx.c gdb/gdbserver/low-lynx.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-lynx.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-lynx.c Sun Jan 20 00:50:28 2002
@@ -87,6 +87,13 @@
return pid;
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
@@ -521,7 +528,7 @@
else
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (I0_REGNUM)
+ FRAME_SAVED_I0;
- target_xfer_memory (sp + regoffset, ®isters[REGISTER_BYTE (regno)],
+ target_xfer_memory (sp + regoffset, register_data (regno),
REGISTER_RAW_SIZE (regno), 1);
}
}
@@ -606,7 +613,7 @@
if (errno)
perror_with_name ("fetch_inferior_registers(PTRACE_PEEKTHREAD)");
- *(unsigned long *) ®isters[REGISTER_BYTE (regno)] = reg;
+ *(unsigned long *) register_data (regno) = reg;
}
}
@@ -631,7 +638,7 @@
ptrace_fun = regno == SP_REGNUM ? PTRACE_POKEUSP : PTRACE_POKEUSER;
#endif
- reg = *(unsigned long *) ®isters[REGISTER_BYTE (regno)];
+ reg = *(unsigned long *) register_data (regno);
errno = 0;
ptrace (ptrace_fun, BUILDPID (inferior_pid, general_thread),
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-nbsd.c gdb/gdbserver/low-nbsd.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-nbsd.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-nbsd.c Sun Jan 20 00:50:28 2002
@@ -145,6 +145,13 @@
return pid;
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-sim.c gdb/gdbserver/low-sim.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-sim.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-sim.c Sun Jan 20 00:50:28 2002
@@ -139,6 +139,13 @@
return pid;
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
@@ -153,7 +160,7 @@
static void
fetch_register (int regno)
{
- sim_fetch_register (gdbsim_desc, regno, ®isters[REGISTER_BYTE (regno)],
+ sim_fetch_register (gdbsim_desc, regno, register_data (regno),
REGISTER_RAW_SIZE (regno));
}
@@ -182,7 +189,7 @@
store_inferior_registers (regno);
}
else
- sim_store_register (gdbsim_desc, regno, ®isters[REGISTER_BYTE (regno)],
+ sim_store_register (gdbsim_desc, regno, register_data (regno),
REGISTER_RAW_SIZE (regno));
}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-sparc.c gdb/gdbserver/low-sparc.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-sparc.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-sparc.c Sun Jan 20 00:50:28 2002
@@ -75,6 +75,13 @@
return pid;
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/low-sun3.c gdb/gdbserver/low-sun3.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/low-sun3.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/low-sun3.c Sun Jan 20 00:50:28 2002
@@ -72,6 +72,13 @@
return pid;
}
+/* Attaching is not supported. */
+int
+myattach (int pid)
+{
+ return -1;
+}
+
/* Kill the inferior process. Make us have no inferior. */
void
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-arm.c gdb/gdbserver/reg-arm.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-arm.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-arm.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,20 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-i386.c gdb/gdbserver/reg-i386.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-i386.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-i386.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,24 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-ia64.c gdb/gdbserver/reg-ia64.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-ia64.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-ia64.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,169 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-m68k.c gdb/gdbserver/reg-m68k.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-m68k.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-m68k.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,24 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-mips.c gdb/gdbserver/reg-mips.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-mips.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-mips.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,48 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-ppc.c gdb/gdbserver/reg-ppc.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-ppc.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-ppc.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,37 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/reg-sh.c gdb/gdbserver/reg-sh.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/reg-sh.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/reg-sh.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,30 @@
+#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));
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/regdef.c gdb/gdbserver/regdef.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/regdef.c Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/regdef.c Sun Jan 20 00:50:28 2002
@@ -0,0 +1,99 @@
+#include "server.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+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;
+}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/regdef.h gdb/gdbserver/regdef.h
--- /opt/src/gdb/branch/src/gdb/gdbserver/regdef.h Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/regdef.h Sun Jan 20 00:50:28 2002
@@ -0,0 +1,44 @@
+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[];
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/remote-utils.c gdb/gdbserver/remote-utils.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/remote-utils.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/remote-utils.c Sun Jan 20 00:50:28 2002
@@ -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 @@
return a - 'a' + 10;
else
error ("Reply contains invalid hex digit");
+ return 0;
}
/* Convert number NIB to a hex digit. */
@@ -204,11 +206,13 @@
{
int i;
unsigned char csum = 0;
- char buf2[PBUFSIZ];
+ char *buf2;
char buf3[1];
int cnt = strlen (buf);
char *p;
+ buf2 = malloc(PBUFSIZ);
+
/* Copy the packet into buffer BUF2, encapsulating it
and giving it a checksum. */
@@ -250,11 +254,13 @@
else
perror ("putpkt(read)");
+ free (buf2);
return -1;
}
}
while (buf3[0] != '+');
+ free(buf2);
return 1; /* Success! */
}
@@ -440,7 +446,7 @@
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 +455,7 @@
*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++ = ';';
@@ -459,42 +465,26 @@
void
prepare_resume_reply (char *buf, char status, unsigned char signo)
{
- int nib;
+ int nib, sig;
*buf++ = status;
- /* FIXME! Should be converting this signal number (numbered
- according to the signal numbering of the system we are running on)
- to the signal numbers used by the gdb protocol (see enum target_signal
- in gdb/target.h). */
- nib = ((signo & 0xf0) >> 4);
+ sig = (int)target_signal_from_host (signo);
+
+ nib = ((sig & 0xf0) >> 4);
*buf++ = tohex (nib);
- nib = signo & 0x0f;
+ nib = sig & 0x0f;
*buf++ = tohex (nib);
if (status == 'T')
{
-#ifdef GDBSERVER_RESUME_REGS
- static int gdbserver_resume_regs[] = GDBSERVER_RESUME_REGS ;
- int i;
- for (i = 0;
- i < sizeof (gdbserver_resume_regs)
- / sizeof (gdbserver_resume_regs[0]);
- i++)
+ char **regp = gdbserver_resume_regs;
+
+ while (*regp)
{
- int regnum = gdbserver_resume_regs[i];
- buf = outreg (regnum, buf);
+ buf = outreg (find_regno (*regp), buf);
+ regp++;
}
-#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
- buf = outreg (O7_REGNUM, buf);
-#endif
-#endif /* GDBSERVER_RESUME_REGS */
/* 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. */
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/server.c gdb/gdbserver/server.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/server.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/server.c Sun Jan 20 00:50:28 2002
@@ -21,6 +21,8 @@
#include "server.h"
+#include <stdlib.h>
+
int cont_thread;
int general_thread;
int thread_from_wait;
@@ -39,16 +41,35 @@
return mywait (statusptr);
}
+static int
+attach_inferior (int pid, char *statusptr, unsigned char *sigptr)
+{
+ /* myattach should return -1 if attaching is unsupported,
+ 0 if it succeeded, and call error() otherwise. */
+ if (myattach (pid) != 0)
+ return -1;
+
+ inferior_pid = pid;
+
+ *sigptr = mywait (statusptr);
+
+ return 0;
+}
+
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;
+ int bad_attach = 0;
+ int pid = 0;
+ int attached = 0;
+ char *arg_end;
if (setjmp (toplevel))
{
@@ -56,15 +77,46 @@
exit (1);
}
- if (argc < 3)
- error ("Usage: gdbserver tty prog [args ...]");
+ if (argc >= 3 && strcmp (argv[2], "--attach") == 0)
+ {
+ if (argc == 4
+ && argv[3] != '\0'
+ && (pid = strtoul (argv[3], &arg_end, 10)) != 0
+ && *arg_end == '\0')
+ {
+ ;
+ }
+ else
+ bad_attach = 1;
+ }
+
+ if (argc < 3 || bad_attach)
+ error ("Usage:\tgdbserver tty prog [args ...]\n"
+ "\tgdbserver tty --attach pid");
initialize_low ();
- /* Wait till we are at first instruction in program. */
- signal = start_inferior (&argv[2], &status);
+ own_buf = malloc (PBUFSIZ);
- /* We are now stopped at the first instruction of the target process */
+ if (pid == 0)
+ {
+ /* Wait till we are at first instruction in program. */
+ signal = start_inferior (&argv[2], &status);
+
+ /* We are now stopped at the first instruction of the target process */
+ }
+ else
+ {
+ switch (attach_inferior (pid, &status, &signal))
+ {
+ case -1:
+ error ("Attaching not supported on this target");
+ break;
+ default:
+ attached = 1;
+ break;
+ }
+ }
while (1)
{
@@ -83,8 +135,17 @@
remote_debug = !remote_debug;
break;
case '!':
- extended_protocol = 1;
- prepare_resume_reply (own_buf, status, signal);
+ if (attached == 0)
+ {
+ extended_protocol = 1;
+ prepare_resume_reply (own_buf, status, signal);
+ }
+ else
+ {
+ /* We can not use the extended protocol if we are
+ attached. */
+ own_buf[0] = '\0';
+ }
break;
case '?':
prepare_resume_reply (own_buf, status, signal);
@@ -109,10 +170,10 @@
}
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;
@@ -130,13 +191,21 @@
break;
case 'C':
convert_ascii_to_int (own_buf + 1, &sig, 1);
- myresume (0, sig);
+ if (target_signal_to_host_p (sig))
+ signal = target_signal_to_host (sig);
+ else
+ signal = 0;
+ myresume (0, signal);
signal = mywait (&status);
prepare_resume_reply (own_buf, status, signal);
break;
case 'S':
convert_ascii_to_int (own_buf + 1, &sig, 1);
- myresume (1, sig);
+ if (target_signal_to_host_p (sig))
+ signal = target_signal_to_host (sig);
+ else
+ signal = 0;
+ myresume (1, signal);
signal = mywait (&status);
prepare_resume_reply (own_buf, status, signal);
break;
@@ -199,6 +268,17 @@
own_buf[0] = '\0';
break;
}
+#if 0
+ case 'q':
+ if (strcmp (own_buf, "qRegisters") == 0)
+ {
+ char *p = registers_format_name ();
+ strcpy (own_buf, "qRegisters:");
+ convert_int_to_ascii (p, &own_buf[11], strlen(p));
+ break;
+ }
+ /* FALL THROUGH */
+#endif
default:
/* It is a request we don't understand. Respond with an
empty packet so that gdb knows that we don't support this
@@ -250,8 +330,8 @@
}
else
{
- fprintf (stderr, "Remote side has terminated connection. GDBserver will reopen the connection.\n");
-
+ fprintf (stderr, "Remote side has terminated connection. "
+ "GDBserver will reopen the connection.\n");
remote_close ();
}
}
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/server.h gdb/gdbserver/server.h
--- /opt/src/gdb/branch/src/gdb/gdbserver/server.h Tue Mar 6 03:21:44 2001
+++ gdb/gdbserver/server.h Sun Jan 20 00:50:28 2002
@@ -19,8 +19,17 @@
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include "defs.h"
+#include "config.h"
+#include "bfd.h"
+typedef bfd_vma CORE_ADDR;
+#include <stdarg.h>
+#include <stdio.h>
#include <setjmp.h>
+#include <errno.h>
+#define NORETURN
+
+#include "regdef.h"
+#include "signals.h"
/* Target-specific functions */
@@ -69,11 +78,12 @@
void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
unsigned int *len_ptr, char *to);
-
/* Functions from utils.c */
void perror_with_name (char *string);
-
+void error (const char *string,...);
+void fatal (const char *string,...);
+void warning (const char *string,...);
/* Maximum number of bytes to read/write at once. The value here
is chosen to fill up a packet (the headers account for the 32). */
@@ -81,6 +91,6 @@
/* 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 () > MAXBUFBYTES (2000)) \
+ ? (registers_length () * 2 + 32) \
: 2000)
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/signals.h gdb/gdbserver/signals.h
--- /opt/src/gdb/branch/src/gdb/gdbserver/signals.h Wed Dec 31 19:00:00 1969
+++ gdb/gdbserver/signals.h Sun Jan 20 00:50:28 2002
@@ -0,0 +1,241 @@
+/* The numbering of these signals is chosen to match traditional unix
+ signals (insofar as various unices use the same numbers, anyway).
+ It is also the numbering of the GDB remote protocol. Other remote
+ protocols, if they use a different numbering, should make sure to
+ translate appropriately.
+
+ Since these numbers have actually made it out into other software
+ (stubs, etc.), you mustn't disturb the assigned numbering. If you
+ need to add new signals here, add them to the end of the explicitly
+ numbered signals.
+
+ This is based strongly on Unix/POSIX signals for several reasons:
+ (1) This set of signals represents a widely-accepted attempt to
+ represent events of this sort in a portable fashion, (2) we want a
+ signal to make it from wait to child_wait to the user intact, (3) many
+ remote protocols use a similar encoding. However, it is
+ recognized that this set of signals has limitations (such as not
+ distinguishing between various kinds of SIGSEGV, or not
+ distinguishing hitting a breakpoint from finishing a single step).
+ So in the future we may get around this either by adding additional
+ signals for breakpoint, single-step, etc., or by adding signal
+ codes; the latter seems more in the spirit of what BSD, System V,
+ etc. are doing to address these issues. */
+
+/* For an explanation of what each signal means, see
+ target_signal_to_string. */
+
+enum target_signal
+ {
+ /* Used some places (e.g. stop_signal) to record the concept that
+ there is no signal. */
+ TARGET_SIGNAL_0 = 0,
+ TARGET_SIGNAL_FIRST = 0,
+ TARGET_SIGNAL_HUP = 1,
+ TARGET_SIGNAL_INT = 2,
+ TARGET_SIGNAL_QUIT = 3,
+ TARGET_SIGNAL_ILL = 4,
+ TARGET_SIGNAL_TRAP = 5,
+ TARGET_SIGNAL_ABRT = 6,
+ TARGET_SIGNAL_EMT = 7,
+ TARGET_SIGNAL_FPE = 8,
+ TARGET_SIGNAL_KILL = 9,
+ TARGET_SIGNAL_BUS = 10,
+ TARGET_SIGNAL_SEGV = 11,
+ TARGET_SIGNAL_SYS = 12,
+ TARGET_SIGNAL_PIPE = 13,
+ TARGET_SIGNAL_ALRM = 14,
+ TARGET_SIGNAL_TERM = 15,
+ TARGET_SIGNAL_URG = 16,
+ TARGET_SIGNAL_STOP = 17,
+ TARGET_SIGNAL_TSTP = 18,
+ TARGET_SIGNAL_CONT = 19,
+ TARGET_SIGNAL_CHLD = 20,
+ TARGET_SIGNAL_TTIN = 21,
+ TARGET_SIGNAL_TTOU = 22,
+ TARGET_SIGNAL_IO = 23,
+ TARGET_SIGNAL_XCPU = 24,
+ TARGET_SIGNAL_XFSZ = 25,
+ TARGET_SIGNAL_VTALRM = 26,
+ TARGET_SIGNAL_PROF = 27,
+ TARGET_SIGNAL_WINCH = 28,
+ TARGET_SIGNAL_LOST = 29,
+ TARGET_SIGNAL_USR1 = 30,
+ TARGET_SIGNAL_USR2 = 31,
+ TARGET_SIGNAL_PWR = 32,
+ /* Similar to SIGIO. Perhaps they should have the same number. */
+ TARGET_SIGNAL_POLL = 33,
+ TARGET_SIGNAL_WIND = 34,
+ TARGET_SIGNAL_PHONE = 35,
+ TARGET_SIGNAL_WAITING = 36,
+ TARGET_SIGNAL_LWP = 37,
+ TARGET_SIGNAL_DANGER = 38,
+ TARGET_SIGNAL_GRANT = 39,
+ TARGET_SIGNAL_RETRACT = 40,
+ TARGET_SIGNAL_MSG = 41,
+ TARGET_SIGNAL_SOUND = 42,
+ TARGET_SIGNAL_SAK = 43,
+ TARGET_SIGNAL_PRIO = 44,
+ TARGET_SIGNAL_REALTIME_33 = 45,
+ TARGET_SIGNAL_REALTIME_34 = 46,
+ TARGET_SIGNAL_REALTIME_35 = 47,
+ TARGET_SIGNAL_REALTIME_36 = 48,
+ TARGET_SIGNAL_REALTIME_37 = 49,
+ TARGET_SIGNAL_REALTIME_38 = 50,
+ TARGET_SIGNAL_REALTIME_39 = 51,
+ TARGET_SIGNAL_REALTIME_40 = 52,
+ TARGET_SIGNAL_REALTIME_41 = 53,
+ TARGET_SIGNAL_REALTIME_42 = 54,
+ TARGET_SIGNAL_REALTIME_43 = 55,
+ TARGET_SIGNAL_REALTIME_44 = 56,
+ TARGET_SIGNAL_REALTIME_45 = 57,
+ TARGET_SIGNAL_REALTIME_46 = 58,
+ TARGET_SIGNAL_REALTIME_47 = 59,
+ TARGET_SIGNAL_REALTIME_48 = 60,
+ TARGET_SIGNAL_REALTIME_49 = 61,
+ TARGET_SIGNAL_REALTIME_50 = 62,
+ TARGET_SIGNAL_REALTIME_51 = 63,
+ TARGET_SIGNAL_REALTIME_52 = 64,
+ TARGET_SIGNAL_REALTIME_53 = 65,
+ TARGET_SIGNAL_REALTIME_54 = 66,
+ TARGET_SIGNAL_REALTIME_55 = 67,
+ TARGET_SIGNAL_REALTIME_56 = 68,
+ TARGET_SIGNAL_REALTIME_57 = 69,
+ TARGET_SIGNAL_REALTIME_58 = 70,
+ TARGET_SIGNAL_REALTIME_59 = 71,
+ TARGET_SIGNAL_REALTIME_60 = 72,
+ TARGET_SIGNAL_REALTIME_61 = 73,
+ TARGET_SIGNAL_REALTIME_62 = 74,
+ TARGET_SIGNAL_REALTIME_63 = 75,
+
+ /* Used internally by Solaris threads. See signal(5) on Solaris. */
+ TARGET_SIGNAL_CANCEL = 76,
+
+ /* Yes, this pains me, too. But LynxOS didn't have SIG32, and now
+ Linux does, and we can't disturb the numbering, since it's part
+ of the remote protocol. Note that in some GDB's
+ TARGET_SIGNAL_REALTIME_32 is number 76. */
+ TARGET_SIGNAL_REALTIME_32,
+ /* Yet another pain, IRIX 6 has SIG64. */
+ TARGET_SIGNAL_REALTIME_64,
+ /* Yet another pain, Linux/MIPS might go up to 128. */
+ TARGET_SIGNAL_REALTIME_65,
+ TARGET_SIGNAL_REALTIME_66,
+ TARGET_SIGNAL_REALTIME_67,
+ TARGET_SIGNAL_REALTIME_68,
+ TARGET_SIGNAL_REALTIME_69,
+ TARGET_SIGNAL_REALTIME_70,
+ TARGET_SIGNAL_REALTIME_71,
+ TARGET_SIGNAL_REALTIME_72,
+ TARGET_SIGNAL_REALTIME_73,
+ TARGET_SIGNAL_REALTIME_74,
+ TARGET_SIGNAL_REALTIME_75,
+ TARGET_SIGNAL_REALTIME_76,
+ TARGET_SIGNAL_REALTIME_77,
+ TARGET_SIGNAL_REALTIME_78,
+ TARGET_SIGNAL_REALTIME_79,
+ TARGET_SIGNAL_REALTIME_80,
+ TARGET_SIGNAL_REALTIME_81,
+ TARGET_SIGNAL_REALTIME_82,
+ TARGET_SIGNAL_REALTIME_83,
+ TARGET_SIGNAL_REALTIME_84,
+ TARGET_SIGNAL_REALTIME_85,
+ TARGET_SIGNAL_REALTIME_86,
+ TARGET_SIGNAL_REALTIME_87,
+ TARGET_SIGNAL_REALTIME_88,
+ TARGET_SIGNAL_REALTIME_89,
+ TARGET_SIGNAL_REALTIME_90,
+ TARGET_SIGNAL_REALTIME_91,
+ TARGET_SIGNAL_REALTIME_92,
+ TARGET_SIGNAL_REALTIME_93,
+ TARGET_SIGNAL_REALTIME_94,
+ TARGET_SIGNAL_REALTIME_95,
+ TARGET_SIGNAL_REALTIME_96,
+ TARGET_SIGNAL_REALTIME_97,
+ TARGET_SIGNAL_REALTIME_98,
+ TARGET_SIGNAL_REALTIME_99,
+ TARGET_SIGNAL_REALTIME_100,
+ TARGET_SIGNAL_REALTIME_101,
+ TARGET_SIGNAL_REALTIME_102,
+ TARGET_SIGNAL_REALTIME_103,
+ TARGET_SIGNAL_REALTIME_104,
+ TARGET_SIGNAL_REALTIME_105,
+ TARGET_SIGNAL_REALTIME_106,
+ TARGET_SIGNAL_REALTIME_107,
+ TARGET_SIGNAL_REALTIME_108,
+ TARGET_SIGNAL_REALTIME_109,
+ TARGET_SIGNAL_REALTIME_110,
+ TARGET_SIGNAL_REALTIME_111,
+ TARGET_SIGNAL_REALTIME_112,
+ TARGET_SIGNAL_REALTIME_113,
+ TARGET_SIGNAL_REALTIME_114,
+ TARGET_SIGNAL_REALTIME_115,
+ TARGET_SIGNAL_REALTIME_116,
+ TARGET_SIGNAL_REALTIME_117,
+ TARGET_SIGNAL_REALTIME_118,
+ TARGET_SIGNAL_REALTIME_119,
+ TARGET_SIGNAL_REALTIME_120,
+ TARGET_SIGNAL_REALTIME_121,
+ TARGET_SIGNAL_REALTIME_122,
+ TARGET_SIGNAL_REALTIME_123,
+ TARGET_SIGNAL_REALTIME_124,
+ TARGET_SIGNAL_REALTIME_125,
+ TARGET_SIGNAL_REALTIME_126,
+ TARGET_SIGNAL_REALTIME_127,
+
+#if defined(MACH) || defined(__MACH__)
+ /* Mach exceptions */
+ TARGET_EXC_BAD_ACCESS,
+ TARGET_EXC_BAD_INSTRUCTION,
+ TARGET_EXC_ARITHMETIC,
+ TARGET_EXC_EMULATION,
+ TARGET_EXC_SOFTWARE,
+ TARGET_EXC_BREAKPOINT,
+#endif
+ TARGET_SIGNAL_INFO,
+
+ /* Some signal we don't know about. */
+ TARGET_SIGNAL_UNKNOWN,
+
+ /* Use whatever signal we use when one is not specifically specified
+ (for passing to proceed and so on). */
+ TARGET_SIGNAL_DEFAULT,
+
+ /* Last and unused enum value, for sizing arrays, etc. */
+ TARGET_SIGNAL_LAST
+ };
+
+
+/* Return the string for a signal. */
+extern char *target_signal_to_string (enum target_signal);
+
+/* Return the name (SIGHUP, etc.) for a signal. */
+extern char *target_signal_to_name (enum target_signal);
+
+/* Given a name (SIGHUP, etc.), return its signal. */
+enum target_signal target_signal_from_name (char *);
+
+/* Predicate to target_signal_to_host(). Return non-zero if the enum
+ targ_signal SIGNO has an equivalent ``host'' representation. */
+/* FIXME: cagney/1999-11-22: The name below was chosen in preference
+ to the shorter target_signal_p() because it is far less ambigious.
+ In this context ``target_signal'' refers to GDB's internal
+ representation of the target's set of signals while ``host signal''
+ refers to the target operating system's signal. Confused? */
+
+extern int target_signal_to_host_p (enum target_signal signo);
+
+/* Convert between host signal numbers and enum target_signal's.
+ target_signal_to_host() returns 0 and prints a warning() on GDB's
+ console if SIGNO has no equivalent host representation. */
+/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
+ refering to the target operating system's signal numbering.
+ Similarly, ``enum target_signal'' is named incorrectly, ``enum
+ gdb_signal'' would probably be better as it is refering to GDB's
+ internal representation of a target operating system's signal. */
+
+extern enum target_signal target_signal_from_host (int);
+extern int target_signal_to_host (enum target_signal);
+
+/* Convert from a number used in a GDB command to an enum target_signal. */
+extern enum target_signal target_signal_from_command (int);
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/gdbserver/utils.c gdb/gdbserver/utils.c
--- /opt/src/gdb/branch/src/gdb/gdbserver/utils.c Wed Jul 25 22:17:38 2001
+++ gdb/gdbserver/utils.c Sun Jan 20 00:50:28 2002
@@ -22,6 +22,7 @@
#include "server.h"
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
/* Generally useful subroutines used throughout the program. */
@@ -53,6 +54,21 @@
error ("%s.", combined);
}
+/* Print a warning message.
+ The first argument STRING is the warning message, used as a fprintf string,
+ and the remaining args are passed as arguments to it.
+ The primary difference between warnings and errors is that a warning
+ does not force the return to command level. */
+void
+warning (const char *string,...)
+{
+ va_list args;
+ va_start (args, string);
+ fflush (stdout);
+ vfprintf (stderr, string, args);
+ fprintf (stderr, "\n");
+}
+
/* Print an error message and return to command level.
STRING is the error message, used as a fprintf string,
and ARG is passed as an argument to it. */
@@ -75,7 +91,7 @@
/* VARARGS */
NORETURN void
-fatal (char *string,...)
+fatal (const char *string,...)
{
va_list args;
va_start (args, string);
@@ -84,4 +100,16 @@
fprintf (stderr, "\n");
va_end (args);
exit (1);
+}
+
+void
+internal_error (const char *file, int line, const char *string, ...)
+{
+ va_list args;
+ va_start (args, string);
+ fprintf (stderr, "gdb internal error (%s:%d): ", file, line);
+ vfprintf (stderr, string, args);
+ fprintf (stderr, "\n");
+ va_end (args);
+ exit (1);
}
[-- Attachment #3: serverconfig.diff --]
[-- Type: text/plain, Size: 3401 bytes --]
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/arm/linux.mt gdb/config/arm/linux.mt
--- /opt/src/gdb/branch/src/gdb/config/arm/linux.mt Sat Mar 10 01:17:21 2001
+++ gdb/config/arm/linux.mt Sun Jan 20 00:50:28 2002
@@ -1,5 +1,5 @@
# Target: ARM based machine running GNU/Linux
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_DEPFILES= low-linux.o low-linux-arm.o reg-arm.o
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/i386/linux.mt gdb/config/i386/linux.mt
--- /opt/src/gdb/branch/src/gdb/config/i386/linux.mt Sat Mar 10 01:17:21 2001
+++ gdb/config/i386/linux.mt Sun Jan 20 00:50:28 2002
@@ -1,6 +1,6 @@
# Target: Intel 386 running GNU/Linux
TDEPFILES= i386-tdep.o i386-linux-tdep.o i387-tdep.o \
solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_DEPFILES= low-linux.o low-linux-i386.o reg-i386.o
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/ia64/linux.mt gdb/config/ia64/linux.mt
--- /opt/src/gdb/branch/src/gdb/config/ia64/linux.mt Sat Mar 10 01:17:22 2001
+++ gdb/config/ia64/linux.mt Sun Jan 20 00:50:28 2002
@@ -3,5 +3,5 @@
solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_DEPFILES= low-linux.o low-linux-ia64.o reg-ia64.o
GDBSERVER_LIBS= -lc -lnss_dns -lnss_files -lresolv -lc
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/m68k/linux.mh gdb/config/m68k/linux.mh
--- /opt/src/gdb/branch/src/gdb/config/m68k/linux.mh Wed Jul 11 14:35:25 2001
+++ gdb/config/m68k/linux.mh Sun Jan 20 00:50:28 2002
@@ -7,4 +7,4 @@
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_DEPFILES= low-linux.o low-linux-m68k.o reg-m68k.o
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/mips/linux.mt gdb/config/mips/linux.mt
--- /opt/src/gdb/branch/src/gdb/config/mips/linux.mt Tue Jul 10 16:36:13 2001
+++ gdb/config/mips/linux.mt Sun Jan 20 00:50:28 2002
@@ -3,7 +3,7 @@
solib.o solib-svr4.o
TM_FILE= tm-linux.h
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_DEPFILES= low-linux.o low-linux-mips.o reg-mips.o
SIM_OBS = remote-sim.o
SIM = ../sim/mips/libsim.a
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/powerpc/linux.mh gdb/config/powerpc/linux.mh
--- /opt/src/gdb/branch/src/gdb/config/powerpc/linux.mh Mon Oct 30 17:33:32 2000
+++ gdb/config/powerpc/linux.mh Sun Jan 20 00:50:28 2002
@@ -5,9 +5,9 @@
XM_CLIBS=
NAT_FILE= nm-linux.h
NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o \
core-aout.o core-regset.o ppc-linux-nat.o proc-service.o thread-db.o lin-lwp.o
LOADLIBES = -ldl -rdynamic
-GDBSERVER_DEPFILES= low-linux.o
+GDBSERVER_DEPFILES= low-linux.o low-linux-ppc.o reg-ppc.o
diff -x *~ -uNr -x CVS /opt/src/gdb/branch/src/gdb/config/sh/linux.mt gdb/config/sh/linux.mt
--- /opt/src/gdb/branch/src/gdb/config/sh/linux.mt Sat Mar 10 01:17:23 2001
+++ gdb/config/sh/linux.mt Sun Jan 20 00:50:28 2002
@@ -1,6 +1,8 @@
# Target: Hitachi Super-H running GNU/Linux
TDEPFILES= sh-tdep.o monitor.o sh3-rom.o remote-e7000.o ser-e7kpc.o dsrec.o solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-linux.h
SIM_OBS = remote-sim.o
SIM = ../sim/sh/libsim.a
+
+GDBSERVER_DEPFILES = low-linux.o low-linux-sh.o reg-sh.o
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:57 ` Daniel Jacobowitz
@ 2002-02-01 7:59 ` William A. Gatliff
2002-02-01 8:15 ` stefania magistrali
1 sibling, 0 replies; 11+ messages in thread
From: William A. Gatliff @ 2002-02-01 7:59 UTC (permalink / raw)
To: gdb
Dan:
Thankyouthankyouthankyou! :^)
b.g.
On Fri, Feb 01, 2002 at 10:56:59AM -0500, Daniel Jacobowitz wrote:
> On Fri, Feb 01, 2002 at 09:37:20AM -0600, William A. Gatliff wrote:
> > Sefania:
> >
> >
> > Peter Barada and I are currently grinding through this--- he for 68k
> > and powerpc targets, me for arm-linux.
> >
> > I have set up a rudimentary page in the Crossgcc Wiki where you can
> > follow our progress--- which isn't much yet, we only started
> > yesterday!
> >
> > The crossgcc Wiki is at
> > http://www.billgatliff.com/twiki/bin/view/Crossgcc/WebHome
> >
> > The page I've set up for gdbserver is the BuildGdbServer page, which
> > you can get to directly like this:
> > http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildGdbServer
>
>
> I dug the patches out of my working directory for all of you clammering
> for this support. No promises. The second one will almost certainly
> not apply, but that's just to gdb/config/*; look at the diff and apply
> the bits you care about by hand, it's quite obvious.
>
> This should fix all Linux targets that I know of that GDB otherwise
> supports. MIPS, SH, i386, m68k, ARM, PowerPC, ia64 at least.
>
> --
> Daniel Jacobowitz Carnegie Mellon University
> MontaVista Software Debian GNU/Linux Developer
--
Bill Gatliff
bgat@billgatliff.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:57 ` Daniel Jacobowitz
2002-02-01 7:59 ` William A. Gatliff
@ 2002-02-01 8:15 ` stefania magistrali
1 sibling, 0 replies; 11+ messages in thread
From: stefania magistrali @ 2002-02-01 8:15 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb
Thanks very very much!
Stefania
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 7:37 ` William A. Gatliff
2002-02-01 7:57 ` Daniel Jacobowitz
@ 2002-02-01 8:42 ` Andrew Cagney
2002-02-01 8:49 ` William A. Gatliff
1 sibling, 1 reply; 11+ messages in thread
From: Andrew Cagney @ 2002-02-01 8:42 UTC (permalink / raw)
To: bgat; +Cc: stefania magistrali, gdb
> Peter Barada and I are currently grinding through this--- he for 68k
> and powerpc targets, me for arm-linux.
>
> I have set up a rudimentary page in the Crossgcc Wiki where you can
> follow our progress--- which isn't much yet, we only started
> yesterday!
>
> The crossgcc Wiki is at
> http://www.billgatliff.com/twiki/bin/view/Crossgcc/WebHome
>
> The page I've set up for gdbserver is the BuildGdbServer page, which
> you can get to directly like this:
> http://www.billgatliff.com/twiki/bin/view/Crossgcc/BuildGdbServer
For what its worth, I think the place for this is:
http://sources.redhat.com/gdb/onlinedocs/gdb_17.html#SEC137
enjoy,
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 8:42 ` Andrew Cagney
@ 2002-02-01 8:49 ` William A. Gatliff
2002-02-01 9:10 ` Andrew Cagney
0 siblings, 1 reply; 11+ messages in thread
From: William A. Gatliff @ 2002-02-01 8:49 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb
Andrew:
> For what its worth, I think the place for this is:
>
> http://sources.redhat.com/gdb/onlinedocs/gdb_17.html#SEC137
Aaah, a thinly-veiled "RTFM". :^)
Although actually, I always need that. Thanks!
Cheers,
b.g.
>
>
> enjoy,
> Andrew
>
>
>
--
Bill Gatliff
bgat@billgatliff.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Gdbserver with powerpc
2002-02-01 8:49 ` William A. Gatliff
@ 2002-02-01 9:10 ` Andrew Cagney
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Cagney @ 2002-02-01 9:10 UTC (permalink / raw)
To: bgat; +Cc: gdb
> Andrew:
>
>
>
>> For what its worth, I think the place for this is:
>>
>> http://sources.redhat.com/gdb/onlinedocs/gdb_17.html#SEC137
>
>
>
> Aaah, a thinly-veiled "RTFM". :^)
RTNPCM please.
> Although actually, I always need that. Thanks!
Well, the chapter is only about two weeks old. Prior to that the little
information that is there was well and truely burried.
Hopefully by giving the remote debug users their own chapter, the'll be
more willing to wip it into shape :-)
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2002-02-01 17:10 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-01 7:30 Gdbserver with powerpc stefania magistrali
2002-02-01 7:35 ` Daniel Jacobowitz
2002-02-01 7:37 ` Dan Kegel
2002-02-01 7:50 ` Daniel Jacobowitz
2002-02-01 7:37 ` William A. Gatliff
2002-02-01 7:57 ` Daniel Jacobowitz
2002-02-01 7:59 ` William A. Gatliff
2002-02-01 8:15 ` stefania magistrali
2002-02-01 8:42 ` Andrew Cagney
2002-02-01 8:49 ` William A. Gatliff
2002-02-01 9:10 ` Andrew Cagney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox