This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RFA: gdbserver changes


Stan,

Below is a retry for some changes to gdbserver.  [I *thought* I sent
them to you last Thursday, but examination of my mail logs shows that
I sent the message to the wrong address:  I used gdb-patches@cygnus.com
instead of gdb-patches@sourceware.cygnus.com.]

These changes make gdbserver buildable and runnable for me on
Linux/x86.  Note too that I have made changes for other platforms. 
These will be necessary (but possibly not sufficient) for gdbserver to
build cleanly again in these other environments.

Also...  does anyone have an opinion on PTRACE_PEEKUSER vs. 
PTRACE_GETREGS?

My initial experiments with gdbserver were not fetching registers
properly, and I hypothesized that the ptrace() interface had been
changed on Linux, favoring the latter mechanism for fetching registers
over the former.  [It turned out that the registers were not being
fetched properly for a different reason entirely.] Closer examination
of the Linux sources revealed that PTRACE_PEEKUSER is implemented for
most (perhaps all) of the architectures supported by Linux, whereas
PTRACE_GETREGS is not.  However, it seems to me that PTRACE_GETREGS
(where implemented) is probably more efficient since all of the
registers are fetched in one fell swoop.  I even wrote a version of
low-linux.c which used PTRACE_GETREGS instead of PTRACE_PEEKUSER, but
decided that I liked the original version (using PTRACE_PEEKUSER)
better from a portability standpoint.

Kevin

	* gdbserver/gdbreplay.c (config.h, errno.h): Include.
	(perror_with_name): Don't declare sys_nerr, sys_errlist, or errno
	when STDC_HEADERS is defined.
	* gdbserver/utils.c (STDC_HEADERS): Likewise.

	* gdbserver/low-hppabsd.c, gdbserver/low-linux.c,
	gdbserver/low-lynx.c, gdbserver/low-sim.c, gdbserver/low-sparc.c,
	gdbserver/low-sun3.c (my_registers): Declare.
	(registers): Changed from array type to pointer type in order
	to match declaration in inferior.h in main gdb sources.
	* gdbserver/server.h (registers): Likewise.
	* gdbserver/remote-utils.c (outreg): Removed declaration of
	registers[].

	* gdbserver/low-linux.c (fetch_register): Changed PTRACE_PEEKUSR to
	PTRACE_PEEKUSER.  [Note the missing 'E'.]
	(store_inferior_registers): Likewise for PTRACE_POKEUSER.

Index: gdbreplay.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/gdbreplay.c,v
retrieving revision 1.4
diff -u -r1.4 gdbreplay.c
--- gdbreplay.c	1999/07/07 23:52:44	1.4
+++ gdbreplay.c	1999/10/11 17:34:20
@@ -19,6 +19,7 @@
    Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include "config.h"
 #include <stdio.h>
 #include <sys/file.h>
 #include <netinet/in.h>
@@ -28,6 +29,7 @@
 #include <signal.h>
 #include <ctype.h>
 #include <fcntl.h>
+#include <errno.h>
 
 /* Sort of a hack... */
 #define EOL (EOF - 1)
@@ -42,10 +44,12 @@
 perror_with_name (string)
      char *string;
 {
+#ifndef STDC_HEADERS
   extern int sys_nerr;
   extern char *sys_errlist[];
   extern int errno;
-  char *err;
+#endif
+  const char *err;
   char *combined;
 
   err = (errno < sys_nerr) ? sys_errlist[errno] : "unknown error";
Index: low-hppabsd.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-hppabsd.c,v
retrieving revision 1.5
diff -u -r1.5 low-hppabsd.c
--- low-hppabsd.c	1999/07/07 23:52:44	1.5
+++ low-hppabsd.c	1999/10/11 17:34:22
@@ -34,7 +34,8 @@
 
 /***************Begin MY defs*********************/
 int quit_flag = 0;
-char registers[REGISTER_BYTES];
+static char my_registers[REGISTER_BYTES];
+char *registers = my_registers;
 
 /* Index within `registers' of the first byte of the space for
    register N.  */
Index: low-linux.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-linux.c,v
retrieving revision 1.6
diff -u -r1.6 low-linux.c
--- low-linux.c	1999/07/07 23:52:44	1.6
+++ low-linux.c	1999/10/11 17:34:22
@@ -36,7 +36,8 @@
 
 /***************Begin MY defs*********************/
 int quit_flag = 0;
-char registers[REGISTER_BYTES];
+static char my_registers[REGISTER_BYTES];
+char *registers = my_registers;
 
 /* Index within `registers' of the first byte of the space for
    register N.  */
@@ -266,7 +267,7 @@
   for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int))
     {
       errno = 0;
-      *(int *) &registers[regno * 4 + i] = ptrace (PTRACE_PEEKUSR, inferior_pid,
+      *(int *) &registers[regno * 4 + i] = ptrace (PTRACE_PEEKUSER, inferior_pid,
 					     (PTRACE_ARG3_TYPE) regaddr, 0);
       regaddr += sizeof (int);
       if (errno != 0)
@@ -335,7 +336,7 @@
 	for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int))
 	  {
 	    errno = 0;
-	    ptrace (PTRACE_POKEUSR, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
+	    ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
 		    *(int *) &registers[REGISTER_BYTE (regno) + i]);
 	    if (errno != 0)
 	      {
Index: low-lynx.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-lynx.c,v
retrieving revision 1.11
diff -u -r1.11 low-lynx.c
--- low-lynx.c	1999/07/07 23:52:44	1.11
+++ low-lynx.c	1999/10/11 17:34:22
@@ -44,7 +44,8 @@
 #include <sys/wait.h>
 #include <sys/fpp.h>
 
-char registers[REGISTER_BYTES];
+static char my_registers[REGISTER_BYTES];
+char *registers = my_registers;
 
 #include <sys/ptrace.h>
 
Index: low-sim.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-sim.c,v
retrieving revision 1.4
diff -u -r1.4 low-sim.c
--- low-sim.c	1999/07/07 23:52:44	1.4
+++ low-sim.c	1999/10/11 17:34:23
@@ -28,7 +28,8 @@
 
 extern host_callback default_callback;	/* in sim/common/callback.c */
 
-char registers[REGISTER_BYTES] __attribute__ ((aligned));
+static char my_registers[REGISTER_BYTES] __attribute__ ((aligned));
+char * registers = my_registers;
 
 int target_byte_order;		/* used by simulator */
 
Index: low-sparc.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-sparc.c,v
retrieving revision 1.9
diff -u -r1.9 low-sparc.c
--- low-sparc.c	1999/07/07 23:52:44	1.9
+++ low-sparc.c	1999/10/11 17:34:23
@@ -37,7 +37,8 @@
 
 /***************Begin MY defs*********************/
 int quit_flag = 0;
-char registers[REGISTER_BYTES];
+static char my_registers[REGISTER_BYTES];
+char *registers = my_registers;
 
 /* Index within `registers' of the first byte of the space for
    register N.  */
Index: low-sun3.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/low-sun3.c,v
retrieving revision 1.9
diff -u -r1.9 low-sun3.c
--- low-sun3.c	1999/07/07 23:52:44	1.9
+++ low-sun3.c	1999/10/11 17:34:23
@@ -34,7 +34,8 @@
 
 /***************Begin MY defs*********************/
 int quit_flag = 0;
-char registers[REGISTER_BYTES];
+static char my_registers[REGISTER_BYTES];
+char *registers = my_registers;
 
 /* Index within `registers' of the first byte of the space for
    register N.  */
Index: remote-utils.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/remote-utils.c,v
retrieving revision 1.12
diff -u -r1.12 remote-utils.c
--- remote-utils.c	1999/07/07 23:52:44	1.12
+++ remote-utils.c	1999/10/11 17:34:23
@@ -435,7 +435,6 @@
      int regno;
      char *buf;
 {
-  extern char registers[];
   int regsize = REGISTER_RAW_SIZE (regno);
 
   *buf++ = tohex (regno >> 4);
Index: server.h
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/server.h,v
retrieving revision 1.8
diff -u -r1.8 server.h
--- server.h	1999/07/07 23:52:45	1.8
+++ server.h	1999/10/11 17:34:26
@@ -36,7 +36,7 @@
 
 /* Target-specific variables */
 
-extern char registers[];
+extern char *registers;
 
 /* Public variables in server.c */
 
Index: utils.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbserver/utils.c,v
retrieving revision 1.6
diff -u -r1.6 utils.c
--- utils.c	1999/07/07 23:52:45	1.6
+++ utils.c	1999/10/11 17:34:26
@@ -32,10 +32,12 @@
 perror_with_name (string)
      char *string;
 {
+#ifndef STDC_HEADERS
   extern int sys_nerr;
   extern char *sys_errlist[];
   extern int errno;
-  char *err;
+#endif
+  const char *err;
   char *combined;
 
   if (errno < sys_nerr)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]