This is the mail archive of the gdb-patches@sources.redhat.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]

s390 gdbserver; Was: gdb & gdbserver for s390 31 & 64 bit


Denis,

The attached support for s390 gdbserver hasn't been committed to either 
the 5.1 branch or the trunk.  I don't think it should go into the 5.1 
branch since it is more intrusive than the s390 target code.  As for the 
trunk, I need to look at it more carefully.

Andrew
2001-07-09 D.J. Barrow <djbarrow@de.ibm.com>:

        * signals.c: Fixed so that the gdbserver could build it to use
	target_signal_to_host & target_signal_from_host gdbserver was very
	broken & had a severe fixme wrt signals.

	* gdbserver/Makefile.in: Made makefile go to parent directory for
	source files (so as to build signal.c).
	* gdbserver/low-linux.c: Added s390 32/64 bit support Fixed
	assumption that PTRACE_XFER_TYPE was an int added
	CANNOT_FETCH_REGISTER & CANNOT_STORE_REGISTER macros.  Fixed
	fetch_inferior_registers etc. to work with s390 floating point
	regs.
	* gdbserver/server.c: Added target signal remapping FIXME.
	* gdbserver/remote-utils: Likewise.

	And also:
	* defs.h: When GDBSERVER undef GDB_MULTI_ARCH.
	
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.60.2.1
retrieving revision 1.60.2.1.2.1
diff -p -r1.60.2.1 -r1.60.2.1.2.1
*** defs.h	2001/08/02 21:36:51	1.60.2.1
--- defs.h	2001/09/27 00:13:29	1.60.2.1.2.1
***************
*** 1,4 ****
! /* *INDENT-OFF* */ /* ATTR_FORMAT confuses indent, avoid running it for now */
  /* Basic, host-specific, and target-specific definitions for GDB.
     Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
     1997, 1998, 1999, 2000, 2001
--- 1,4 ----
! /* *INDENT-OFF* *//* ATTR_FORMAT confuses indent, avoid running it for now */
  /* Basic, host-specific, and target-specific definitions for GDB.
     Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
     1997, 1998, 1999, 2000, 2001
***************
*** 25,30 ****
--- 25,33 ----
  #define DEFS_H
  
  #include "config.h"		/* Generated by configure */
+ #if GDBSERVER
+ #undef GDB_MULTI_ARCH
+ #endif /* GDBSERVER */
  #include <stdio.h>
  #include <errno.h>		/* System call error return status */
  #include <limits.h>
Index: signals.c
===================================================================
RCS file: /cvs/src/src/gdb/signals.c,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -p -r1.1 -r1.1.4.1
*** signals.c	2001/07/19 18:09:11	1.1
--- signals.c	2001/09/27 00:13:30	1.1.4.1
***************
*** 24,29 ****
--- 24,30 ----
  #include "target.h"
  #include <signal.h>
  
+ #ifndef GDBSERVER
  /* This table must match in order and size the signals in enum target_signal
     in target.h.  */
  /* *INDENT-OFF* */
*************** target_signal_from_name (char *name)
*** 230,242 ****
  
    /* This ugly cast brought to you by the native VAX compiler.  */
    for (sig = TARGET_SIGNAL_HUP;
!        signals[sig].name != NULL;
!        sig = (enum target_signal) ((int) sig + 1))
      if (STREQ (name, signals[sig].name))
        return sig;
    return TARGET_SIGNAL_UNKNOWN;
  }
! 
  /* The following functions are to help certain targets deal
     with the signal/waitstatus stuff.  They could just as well be in
     a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
--- 231,243 ----
  
    /* This ugly cast brought to you by the native VAX compiler.  */
    for (sig = TARGET_SIGNAL_HUP;
!        signals[sig].name != NULL; sig = (enum target_signal) ((int) sig + 1))
      if (STREQ (name, signals[sig].name))
        return sig;
    return TARGET_SIGNAL_UNKNOWN;
  }
! #endif /* GDBSERVER */
! 
  /* The following functions are to help certain targets deal
     with the signal/waitstatus stuff.  They could just as well be in
     a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
*************** target_signal_from_host (int hostsig)
*** 480,486 ****
  	return (enum target_signal)
  	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
        else
! 	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
      }
  #endif
  
--- 481,488 ----
  	return (enum target_signal)
  	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
        else
! 	error
! 	  ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
      }
  #endif
  
*************** target_signal_from_host (int hostsig)
*** 494,500 ****
        else if (hostsig == 64)
  	return TARGET_SIGNAL_REALTIME_64;
        else
! 	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
      }
  #endif
    return TARGET_SIGNAL_UNKNOWN;
--- 496,503 ----
        else if (hostsig == 64)
  	return TARGET_SIGNAL_REALTIME_64;
        else
! 	error
! 	  ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
      }
  #endif
    return TARGET_SIGNAL_UNKNOWN;
*************** target_signal_from_host (int hostsig)
*** 506,513 ****
     accordingly. */
  
  static int
! do_target_signal_to_host (enum target_signal oursig,
! 			  int *oursig_ok)
  {
    *oursig_ok = 1;
    switch (oursig)
--- 509,515 ----
     accordingly. */
  
  static int
! do_target_signal_to_host (enum target_signal oursig, int *oursig_ok)
  {
    *oursig_ok = 1;
    switch (oursig)
*************** do_target_signal_to_host (enum target_si
*** 737,745 ****
  	  && oursig <= TARGET_SIGNAL_REALTIME_63)
  	{
  	  /* This block of signals is continuous, and
!              TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
! 	  int retsig =
! 	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
  	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
  	    return retsig;
  	}
--- 739,746 ----
  	  && oursig <= TARGET_SIGNAL_REALTIME_63)
  	{
  	  /* This block of signals is continuous, and
! 	     TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
! 	  int retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
  	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
  	    return retsig;
  	}
*************** do_target_signal_to_host (enum target_si
*** 747,753 ****
        else if (oursig == TARGET_SIGNAL_REALTIME_32)
  	{
  	  /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
!              TARGET_SIGNAL_REALTIME_33.  It is 32 by definition.  */
  	  return 32;
  	}
  #endif
--- 748,754 ----
        else if (oursig == TARGET_SIGNAL_REALTIME_32)
  	{
  	  /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
! 	     TARGET_SIGNAL_REALTIME_33.  It is 32 by definition.  */
  	  return 32;
  	}
  #endif
*************** do_target_signal_to_host (enum target_si
*** 756,768 ****
  	  && oursig <= TARGET_SIGNAL_REALTIME_127)
  	{
  	  /* This block of signals is continuous, and
!              TARGET_SIGNAL_REALTIME_64 is 64 by definition.  */
! 	  int retsig =
! 	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
  	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
  	    return retsig;
  	}
!       
  #endif
  #endif
  
--- 757,768 ----
  	  && oursig <= TARGET_SIGNAL_REALTIME_127)
  	{
  	  /* This block of signals is continuous, and
! 	     TARGET_SIGNAL_REALTIME_64 is 64 by definition.  */
! 	  int retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
  	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
  	    return retsig;
  	}
! 
  #endif
  #endif
  
*************** do_target_signal_to_host (enum target_si
*** 771,779 ****
  	  && oursig <= TARGET_SIGNAL_REALTIME_63)
  	{
  	  /* This block of signals is continuous, and
!              TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
! 	  int retsig =
! 	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
  	  if (retsig >= SIGRTMIN && retsig <= SIGRTMAX)
  	    return retsig;
  	}
--- 771,778 ----
  	  && oursig <= TARGET_SIGNAL_REALTIME_63)
  	{
  	  /* This block of signals is continuous, and
! 	     TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
! 	  int retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
  	  if (retsig >= SIGRTMIN && retsig <= SIGRTMAX)
  	    return retsig;
  	}
*************** do_target_signal_to_host (enum target_si
*** 785,790 ****
--- 784,790 ----
      }
  }
  
+ #ifndef GDBSERVER
  int
  target_signal_to_host_p (enum target_signal oursig)
  {
*************** target_signal_to_host_p (enum target_sig
*** 792,797 ****
--- 792,798 ----
    do_target_signal_to_host (oursig, &oursig_ok);
    return oursig_ok;
  }
+ #endif /* GDBSERVER */
  
  int
  target_signal_to_host (enum target_signal oursig)
*************** target_signal_to_host (enum target_signa
*** 802,815 ****
--- 803,823 ----
      {
        /* The user might be trying to do "signal SIGSAK" where this system
           doesn't have SIGSAK.  */
+ #ifdef GDBSERVER
+       fprintf (stderr, "Target signal %d does not exist on this system.\n",
+ 	       oursig);
+ #else
        warning ("Signal %s does not exist on this system.\n",
  	       target_signal_to_name (oursig));
+ #endif
+ 
        return 0;
      }
    else
      return targ_signo;
  }
  
+ #ifndef GDBSERVER
  /* In some circumstances we allow a command to specify a numeric
     signal.  The idea is to keep these circumstances limited so that
     users (and scripts) develop portable habits.  For comparison,
*************** _initialize_signals (void)
*** 833,835 ****
--- 841,844 ----
    if (!STREQ (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC"))
      internal_error (__FILE__, __LINE__, "failed internal consistency check");
  }
+ #endif /* GDBSERVER */
Index: gdbserver/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v
retrieving revision 1.3
retrieving revision 1.3.6.1
diff -p -r1.3 -r1.3.6.1
*** Makefile.in	2001/03/06 08:21:43	1.3
--- Makefile.in	2001/09/27 00:13:30	1.3.6.1
*************** LINTFLAGS= $(BFD_CFLAGS)
*** 130,148 ****
  SFILES = $(srcdir)/low-hppabsd.c $(srcdir)/low-linux.c $(srcdir)/low-lynx.c \
  	 $(srcdir)/low-nbsd.c $(srcdir)/low-sim.c $(srcdir)/low-sparc.c \
  	 $(srcdir)/low-sun3.c $(srcdir)/utils.c $(srcdir)/server.c \
! 	 $(srcdir)/remote-utils.c
  
  DEPFILES = $(GDBSERVER_DEPFILES)
  
  SOURCES = $(SFILES) $(ALLDEPFILES)
  TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} 
  
! OBS = utils.o $(GDBSERVER_DEPFILES) server.o remote-utils.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.
! .c.o:
  	${CC} -c ${INTERNAL_CFLAGS} $<
  
  all: gdbserver gdbreplay
  
--- 130,150 ----
  SFILES = $(srcdir)/low-hppabsd.c $(srcdir)/low-linux.c $(srcdir)/low-lynx.c \
  	 $(srcdir)/low-nbsd.c $(srcdir)/low-sim.c $(srcdir)/low-sparc.c \
  	 $(srcdir)/low-sun3.c $(srcdir)/utils.c $(srcdir)/server.c \
! 	 $(srcdir)/remote-utils.c ../signals.c
  
  DEPFILES = $(GDBSERVER_DEPFILES)
  
  SOURCES = $(SFILES) $(ALLDEPFILES)
  TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} 
  
! OBS = $(srcdir)/utils.o $(GDBSERVER_DEPFILES) server.o remote-utils.o signals.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.
! %.o: %.c
  	${CC} -c ${INTERNAL_CFLAGS} $<
+ %.o: ../%.c
+ 	${CC} -c ${INTERNAL_CFLAGS} $<
  
  all: gdbserver gdbreplay
  
*************** low-sim.o : ${srcdir}/low-sim.c ${srcdir
*** 246,251 ****
  low-sparc.o : $(srcdir)/low-sparc.c $(srcdir)/server.h
  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
  
  # This is the end of "Makefile.in".
--- 248,254 ----
  low-sparc.o : $(srcdir)/low-sparc.c $(srcdir)/server.h
  low-sun3.o : $(srcdir)/low-sun3.c $(srcdir)/server.h
  low-hppabsd.o : $(srcdir)/low-hppabsd.c $(srcdir)/server.h
! $(srcdir)/utils.o : ${srcdir}/utils.c ${srcdir}/server.h
! signals.o : ../signals.c ../target.h
  
  # This is the end of "Makefile.in".
Index: gdbserver/low-linux.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/low-linux.c,v
retrieving revision 1.11
retrieving revision 1.11.4.1
diff -p -r1.11 -r1.11.4.1
*** low-linux.c	2001/07/26 02:23:58	1.11
--- low-linux.c	2001/09/27 00:13:30	1.11.4.1
*************** char *registers = my_registers;
*** 49,56 ****
  
  extern int errno;
  
  static void initialize_arch (void);
! 
  /* Start an inferior process and returns its pid.
     ALLARGS is a vector of program-name and args. */
  
--- 49,57 ----
  
  extern int errno;
  
+ #ifndef S390_GNULINUX_TARGET
  static void initialize_arch (void);
! #endif
  /* Start an inferior process and returns its pid.
     ALLARGS is a vector of program-name and args. */
  
*************** mywait (char *status)
*** 113,125 ****
  
    if (WIFEXITED (w))
      {
!       fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w));
        *status = 'W';
        return ((unsigned char) WEXITSTATUS (w));
      }
    else if (!WIFSTOPPED (w))
      {
!       fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
        *status = 'X';
        return ((unsigned char) WTERMSIG (w));
      }
--- 114,128 ----
  
    if (WIFEXITED (w))
      {
!       fprintf (stderr, "\nChild exited with retcode = %x \n",
! 	       WEXITSTATUS (w));
        *status = 'W';
        return ((unsigned char) WEXITSTATUS (w));
      }
    else if (!WIFSTOPPED (w))
      {
!       fprintf (stderr, "\nChild terminated with signal = %x \n",
! 	       WTERMSIG (w));
        *status = 'X';
        return ((unsigned char) WTERMSIG (w));
      }
*************** int i386_register_byte[MAX_NUM_REGS];
*** 178,194 ****
  /* 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
--- 181,197 ----
  /* 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)
*** 212,219 ****
  
  /* 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,
--- 215,221 ----
  
  /* 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,
*************** initialize_arch (void)
*** 236,243 ****
  }
  
  /* 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,
--- 238,244 ----
  }
  
  /* 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,
*************** m68k_linux_register_u_addr (int blockend
*** 268,525 ****
  
  #include <asm/ptrace_offsets.h>
  
! static int u_offsets[] =
!   {
!     /* general registers */
!     -1,		/* gr0 not available; i.e, it's always zero */
!     PT_R1,
!     PT_R2,
!     PT_R3,
!     PT_R4,
!     PT_R5,
!     PT_R6,
!     PT_R7,
!     PT_R8,
!     PT_R9,
!     PT_R10,
!     PT_R11,
!     PT_R12,
!     PT_R13,
!     PT_R14,
!     PT_R15,
!     PT_R16,
!     PT_R17,
!     PT_R18,
!     PT_R19,
!     PT_R20,
!     PT_R21,
!     PT_R22,
!     PT_R23,
!     PT_R24,
!     PT_R25,
!     PT_R26,
!     PT_R27,
!     PT_R28,
!     PT_R29,
!     PT_R30,
!     PT_R31,
!     /* gr32 through gr127 not directly available via the ptrace interface */
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     /* Floating point registers */
!     -1, -1,	/* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
!     PT_F2,
!     PT_F3,
!     PT_F4,
!     PT_F5,
!     PT_F6,
!     PT_F7,
!     PT_F8,
!     PT_F9,
!     PT_F10,
!     PT_F11,
!     PT_F12,
!     PT_F13,
!     PT_F14,
!     PT_F15,
!     PT_F16,
!     PT_F17,
!     PT_F18,
!     PT_F19,
!     PT_F20,
!     PT_F21,
!     PT_F22,
!     PT_F23,
!     PT_F24,
!     PT_F25,
!     PT_F26,
!     PT_F27,
!     PT_F28,
!     PT_F29,
!     PT_F30,
!     PT_F31,
!     PT_F32,
!     PT_F33,
!     PT_F34,
!     PT_F35,
!     PT_F36,
!     PT_F37,
!     PT_F38,
!     PT_F39,
!     PT_F40,
!     PT_F41,
!     PT_F42,
!     PT_F43,
!     PT_F44,
!     PT_F45,
!     PT_F46,
!     PT_F47,
!     PT_F48,
!     PT_F49,
!     PT_F50,
!     PT_F51,
!     PT_F52,
!     PT_F53,
!     PT_F54,
!     PT_F55,
!     PT_F56,
!     PT_F57,
!     PT_F58,
!     PT_F59,
!     PT_F60,
!     PT_F61,
!     PT_F62,
!     PT_F63,
!     PT_F64,
!     PT_F65,
!     PT_F66,
!     PT_F67,
!     PT_F68,
!     PT_F69,
!     PT_F70,
!     PT_F71,
!     PT_F72,
!     PT_F73,
!     PT_F74,
!     PT_F75,
!     PT_F76,
!     PT_F77,
!     PT_F78,
!     PT_F79,
!     PT_F80,
!     PT_F81,
!     PT_F82,
!     PT_F83,
!     PT_F84,
!     PT_F85,
!     PT_F86,
!     PT_F87,
!     PT_F88,
!     PT_F89,
!     PT_F90,
!     PT_F91,
!     PT_F92,
!     PT_F93,
!     PT_F94,
!     PT_F95,
!     PT_F96,
!     PT_F97,
!     PT_F98,
!     PT_F99,
!     PT_F100,
!     PT_F101,
!     PT_F102,
!     PT_F103,
!     PT_F104,
!     PT_F105,
!     PT_F106,
!     PT_F107,
!     PT_F108,
!     PT_F109,
!     PT_F110,
!     PT_F111,
!     PT_F112,
!     PT_F113,
!     PT_F114,
!     PT_F115,
!     PT_F116,
!     PT_F117,
!     PT_F118,
!     PT_F119,
!     PT_F120,
!     PT_F121,
!     PT_F122,
!     PT_F123,
!     PT_F124,
!     PT_F125,
!     PT_F126,
!     PT_F127,
!     /* predicate registers - we don't fetch these individually */
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     /* branch registers */
!     PT_B0,
!     PT_B1,
!     PT_B2,
!     PT_B3,
!     PT_B4,
!     PT_B5,
!     PT_B6,
!     PT_B7,
!     /* virtual frame pointer and virtual return address pointer */
!     -1, -1,
!     /* other registers */
!     PT_PR,
!     PT_CR_IIP,	/* ip */
!     PT_CR_IPSR, /* psr */
!     PT_CFM,	/* cfm */
!     /* kernel registers not visible via ptrace interface (?) */
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     /* hole */
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     PT_AR_RSC,
!     PT_AR_BSP,
!     PT_AR_BSPSTORE,
!     PT_AR_RNAT,
!     -1,
!     -1,		/* Not available: FCR, IA32 floating control register */
!     -1, -1,
!     -1,		/* Not available: EFLAG */
!     -1,		/* Not available: CSD */
!     -1,		/* Not available: SSD */
!     -1,		/* Not available: CFLG */
!     -1,		/* Not available: FSR */
!     -1,		/* Not available: FIR */
!     -1,		/* Not available: FDR */
!     -1,
!     PT_AR_CCV,
!     -1, -1, -1,
!     PT_AR_UNAT,
!     -1, -1, -1,
!     PT_AR_FPSR,
!     -1, -1, -1,
!     -1,		/* Not available: ITC */
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     PT_AR_PFS,
!     PT_AR_LC,
!     -1,		/* Not available: EC, the Epilog Count register */
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!     -1,
!     /* nat bits - not fetched directly; instead we obtain these bits from
!        either rnat or unat or from memory. */
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!     -1, -1, -1, -1, -1, -1, -1, -1,
!   };
  
  int
  ia64_register_u_addr (int blockend, int regnum)
--- 269,525 ----
  
  #include <asm/ptrace_offsets.h>
  
! static int u_offsets[] = {
!   /* general registers */
!   -1,				/* gr0 not available; i.e, it's always zero */
!   PT_R1,
!   PT_R2,
!   PT_R3,
!   PT_R4,
!   PT_R5,
!   PT_R6,
!   PT_R7,
!   PT_R8,
!   PT_R9,
!   PT_R10,
!   PT_R11,
!   PT_R12,
!   PT_R13,
!   PT_R14,
!   PT_R15,
!   PT_R16,
!   PT_R17,
!   PT_R18,
!   PT_R19,
!   PT_R20,
!   PT_R21,
!   PT_R22,
!   PT_R23,
!   PT_R24,
!   PT_R25,
!   PT_R26,
!   PT_R27,
!   PT_R28,
!   PT_R29,
!   PT_R30,
!   PT_R31,
!   /* gr32 through gr127 not directly available via the ptrace interface */
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   /* Floating point registers */
!   -1, -1,			/* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
!   PT_F2,
!   PT_F3,
!   PT_F4,
!   PT_F5,
!   PT_F6,
!   PT_F7,
!   PT_F8,
!   PT_F9,
!   PT_F10,
!   PT_F11,
!   PT_F12,
!   PT_F13,
!   PT_F14,
!   PT_F15,
!   PT_F16,
!   PT_F17,
!   PT_F18,
!   PT_F19,
!   PT_F20,
!   PT_F21,
!   PT_F22,
!   PT_F23,
!   PT_F24,
!   PT_F25,
!   PT_F26,
!   PT_F27,
!   PT_F28,
!   PT_F29,
!   PT_F30,
!   PT_F31,
!   PT_F32,
!   PT_F33,
!   PT_F34,
!   PT_F35,
!   PT_F36,
!   PT_F37,
!   PT_F38,
!   PT_F39,
!   PT_F40,
!   PT_F41,
!   PT_F42,
!   PT_F43,
!   PT_F44,
!   PT_F45,
!   PT_F46,
!   PT_F47,
!   PT_F48,
!   PT_F49,
!   PT_F50,
!   PT_F51,
!   PT_F52,
!   PT_F53,
!   PT_F54,
!   PT_F55,
!   PT_F56,
!   PT_F57,
!   PT_F58,
!   PT_F59,
!   PT_F60,
!   PT_F61,
!   PT_F62,
!   PT_F63,
!   PT_F64,
!   PT_F65,
!   PT_F66,
!   PT_F67,
!   PT_F68,
!   PT_F69,
!   PT_F70,
!   PT_F71,
!   PT_F72,
!   PT_F73,
!   PT_F74,
!   PT_F75,
!   PT_F76,
!   PT_F77,
!   PT_F78,
!   PT_F79,
!   PT_F80,
!   PT_F81,
!   PT_F82,
!   PT_F83,
!   PT_F84,
!   PT_F85,
!   PT_F86,
!   PT_F87,
!   PT_F88,
!   PT_F89,
!   PT_F90,
!   PT_F91,
!   PT_F92,
!   PT_F93,
!   PT_F94,
!   PT_F95,
!   PT_F96,
!   PT_F97,
!   PT_F98,
!   PT_F99,
!   PT_F100,
!   PT_F101,
!   PT_F102,
!   PT_F103,
!   PT_F104,
!   PT_F105,
!   PT_F106,
!   PT_F107,
!   PT_F108,
!   PT_F109,
!   PT_F110,
!   PT_F111,
!   PT_F112,
!   PT_F113,
!   PT_F114,
!   PT_F115,
!   PT_F116,
!   PT_F117,
!   PT_F118,
!   PT_F119,
!   PT_F120,
!   PT_F121,
!   PT_F122,
!   PT_F123,
!   PT_F124,
!   PT_F125,
!   PT_F126,
!   PT_F127,
!   /* predicate registers - we don't fetch these individually */
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   /* branch registers */
!   PT_B0,
!   PT_B1,
!   PT_B2,
!   PT_B3,
!   PT_B4,
!   PT_B5,
!   PT_B6,
!   PT_B7,
!   /* virtual frame pointer and virtual return address pointer */
!   -1, -1,
!   /* other registers */
!   PT_PR,
!   PT_CR_IIP,			/* ip */
!   PT_CR_IPSR,			/* psr */
!   PT_CFM,			/* cfm */
!   /* kernel registers not visible via ptrace interface (?) */
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   /* hole */
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   PT_AR_RSC,
!   PT_AR_BSP,
!   PT_AR_BSPSTORE,
!   PT_AR_RNAT,
!   -1,
!   -1,				/* Not available: FCR, IA32 floating control register */
!   -1, -1,
!   -1,				/* Not available: EFLAG */
!   -1,				/* Not available: CSD */
!   -1,				/* Not available: SSD */
!   -1,				/* Not available: CFLG */
!   -1,				/* Not available: FSR */
!   -1,				/* Not available: FIR */
!   -1,				/* Not available: FDR */
!   -1,
!   PT_AR_CCV,
!   -1, -1, -1,
!   PT_AR_UNAT,
!   -1, -1, -1,
!   PT_AR_FPSR,
!   -1, -1, -1,
!   -1,				/* Not available: ITC */
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   PT_AR_PFS,
!   PT_AR_LC,
!   -1,				/* Not available: EC, the Epilog Count register */
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
!   -1,
!   /* nat bits - not fetched directly; instead we obtain these bits from
!      either rnat or unat or from memory. */
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
!   -1, -1, -1, -1, -1, -1, -1, -1,
! };
  
  int
  ia64_register_u_addr (int blockend, int regnum)
*************** fetch_register (int regno)
*** 569,590 ****
  
    offset = U_REGS_OFFSET;
  
!   regaddr = register_addr (regno, offset);
!   for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
      {
!       errno = 0;
!       *(PTRACE_XFER_TYPE *) &registers[REGISTER_BYTE (regno) + i] =
! 	ptrace (PTRACE_PEEKUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, 0);
!       regaddr += sizeof (PTRACE_XFER_TYPE);
!       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, "reading register %d: %s", regno, err);
! 	  error (msg);
! 	  goto error_exit;
  	}
      }
  error_exit:;
--- 569,599 ----
  
    offset = U_REGS_OFFSET;
  
! #ifdef  S390_GNULINUX_TARGET	/* intel has CANNOT_FETCH_REGISTER defined but not linked */
!   if (CANNOT_FETCH_REGISTER (regno))
!     memset (&registers[REGISTER_BYTE (regno)], 0, REGISTER_RAW_SIZE (regno));
!   else
! #endif
      {
!       regaddr = register_addr (regno, offset);
!       for (i = 0; i < REGISTER_RAW_SIZE (regno);
! 	   i += sizeof (PTRACE_XFER_TYPE))
  	{
! 	  errno = 0;
! 	  *(PTRACE_XFER_TYPE *) & registers[REGISTER_BYTE (regno) + i] =
! 	    ptrace (PTRACE_PEEKUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
! 		    0);
! 	  regaddr += sizeof (PTRACE_XFER_TYPE);
! 	  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, "reading register %d: %s", regno, err);
! 	      error (msg);
! 	      goto error_exit;
! 	    }
  	}
      }
  error_exit:;
*************** void
*** 596,602 ****
  fetch_inferior_registers (int regno)
  {
    if (regno == -1 || regno == 0)
!     for (regno = 0; regno < NUM_REGS - NUM_FREGS; regno++)
        fetch_register (regno);
    else
      fetch_register (regno);
--- 605,615 ----
  fetch_inferior_registers (int regno)
  {
    if (regno == -1 || regno == 0)
!     for (regno = 0; regno < NUM_REGS
! #ifndef S390_GNULINUX_TARGET
! 	 - NUM_FREGS
! #endif
! 	 ; regno++)
        fetch_register (regno);
    else
      fetch_register (regno);
*************** store_inferior_registers (int regno)
*** 615,621 ****
  
    if (regno >= 0)
      {
! #if 0
        if (CANNOT_STORE_REGISTER (regno))
  	return;
  #endif
--- 628,634 ----
  
    if (regno >= 0)
      {
! #ifdef  S390_GNULINUX_TARGET	/* intel has CANNOT_STORE_REGISTER defined but not implemented */
        if (CANNOT_STORE_REGISTER (regno))
  	return;
  #endif
*************** store_inferior_registers (int regno)
*** 637,655 ****
  	}
        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 *) &registers[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;
  	      }
--- 650,669 ----
  	}
        else
  #endif
! 	for (i = 0; i < REGISTER_RAW_SIZE (regno);
! 	     i += sizeof (PTRACE_XFER_TYPE))
  	  {
  	    errno = 0;
  	    ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
! 		    *(PTRACE_XFER_TYPE *) & registers[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;
  	      }
*************** store_inferior_registers (int regno)
*** 657,663 ****
  	  }
      }
    else
!     for (regno = 0; regno < NUM_REGS - NUM_FREGS; regno++)
        store_inferior_registers (regno);
  }
  
--- 671,681 ----
  	  }
      }
    else
!     for (regno = 0; regno < NUM_REGS
! #ifndef S390_GNULINUX_TARGET
! 	 - NUM_FREGS
! #endif
! 	 ; regno++)
        store_inferior_registers (regno);
  }
  
*************** read_inferior_memory (CORE_ADDR memaddr,
*** 677,687 ****
    /* Round starting address down to longword boundary.  */
    register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
    /* Round ending address up; get number of longwords that makes.  */
!   register int count 
!     = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) 
!       / sizeof (PTRACE_XFER_TYPE);
    /* Allocate buffer of that many longwords.  */
!   register PTRACE_XFER_TYPE *buffer 
      = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
  
    /* Read all the longwords */
--- 695,705 ----
    /* Round starting address down to longword boundary.  */
    register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
    /* Round ending address up; get number of longwords that makes.  */
!   register int count
!     = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
!     / sizeof (PTRACE_XFER_TYPE);
    /* Allocate buffer of that many longwords.  */
!   register PTRACE_XFER_TYPE *buffer
      = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
  
    /* Read all the longwords */
*************** read_inferior_memory (CORE_ADDR memaddr,
*** 691,697 ****
      }
  
    /* Copy appropriate bytes out of the buffer.  */
!   memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), len);
  }
  
  /* Copy LEN bytes of data from debugger memory at MYADDR
--- 709,716 ----
      }
  
    /* Copy appropriate bytes out of the buffer.  */
!   memcpy (myaddr,
! 	  (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), len);
  }
  
  /* Copy LEN bytes of data from debugger memory at MYADDR
*************** write_inferior_memory (CORE_ADDR memaddr
*** 707,715 ****
    register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
    /* Round ending address up; get number of longwords that makes.  */
    register int count
!   = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) / sizeof (PTRACE_XFER_TYPE);
    /* Allocate buffer of that many longwords.  */
!   register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
    extern int errno;
  
    /* Fill start and end extra bytes of buffer with existing memory data.  */
--- 726,737 ----
    register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
    /* Round ending address up; get number of longwords that makes.  */
    register int count
!     =
!     (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) -
!      1) / sizeof (PTRACE_XFER_TYPE);
    /* Allocate buffer of that many longwords.  */
!   register PTRACE_XFER_TYPE *buffer =
!     (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
    extern int errno;
  
    /* Fill start and end extra bytes of buffer with existing memory data.  */
*************** write_inferior_memory (CORE_ADDR memaddr
*** 725,731 ****
  
    /* Copy data to be written over corresponding part of buffer */
  
!   memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), myaddr, len);
  
    /* Write the entire buffer.  */
  
--- 747,754 ----
  
    /* Copy data to be written over corresponding part of buffer */
  
!   memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
! 	  myaddr, len);
  
    /* Write the entire buffer.  */
  
*************** write_inferior_memory (CORE_ADDR memaddr
*** 743,747 ****
--- 766,772 ----
  void
  initialize_low (void)
  {
+ #ifndef S390_GNULINUX_TARGET
    initialize_arch ();
+ #endif
  }
Index: gdbserver/remote-utils.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/remote-utils.c,v
retrieving revision 1.7
retrieving revision 1.7.4.1
diff -p -r1.7 -r1.7.4.1
*** remote-utils.c	2001/07/12 21:04:35	1.7
--- remote-utils.c	2001/09/27 00:13:30	1.7.4.1
***************
*** 34,39 ****
--- 34,40 ----
  #include <fcntl.h>
  #include <sys/time.h>
  #include <unistd.h>
+ #include <target.h>
  
  int remote_debug = 0;
  struct ui_file *gdb_stdlog;
*************** remote_open (char *name)
*** 141,147 ****
  
        /* Enable TCP keep alive process. */
        tmp = 1;
!       setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, (char *) &tmp, sizeof (tmp));
  
        /* Tell TCP not to delay small packets.  This greatly speeds up
           interactive response. */
--- 142,149 ----
  
        /* Enable TCP keep alive process. */
        tmp = 1;
!       setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, (char *) &tmp,
! 		  sizeof (tmp));
  
        /* Tell TCP not to delay small packets.  This greatly speeds up
           interactive response. */
*************** input_interrupt (void)
*** 278,284 ****
      {
        int cc;
        char c;
!       
        cc = read (remote_desc, &c, 1);
  
        if (cc != 1 || c != '\003')
--- 280,286 ----
      {
        int cc;
        char c;
! 
        cc = read (remote_desc, &c, 1);
  
        if (cc != 1 || c != '\003')
*************** input_interrupt (void)
*** 286,292 ****
  	  fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
  	  return;
  	}
!       
        kill (inferior_pid, SIGINT);
      }
  }
--- 288,294 ----
  	  fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
  	  return;
  	}
! 
        kill (inferior_pid, SIGINT);
      }
  }
*************** prepare_resume_reply (char *buf, char st
*** 463,472 ****
  
    *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);
    *buf++ = tohex (nib);
    nib = signo & 0x0f;
--- 465,471 ----
  
    *buf++ = status;
  
!   signo = target_signal_from_host (signo);
    nib = ((signo & 0xf0) >> 4);
    *buf++ = tohex (nib);
    nib = signo & 0x0f;
*************** prepare_resume_reply (char *buf, char st
*** 475,486 ****
    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++)
  	{
  	  int regnum = gdbserver_resume_regs[i];
  	  buf = outreg (regnum, buf);
--- 474,484 ----
    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++)
  	{
  	  int regnum = gdbserver_resume_regs[i];
  	  buf = outreg (regnum, buf);
Index: gdbserver/server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.3
retrieving revision 1.3.6.1
diff -p -r1.3 -r1.3.6.1
*** server.c	2001/03/06 08:21:44	1.3
--- server.c	2001/09/27 00:13:30	1.3.6.1
***************
*** 20,25 ****
--- 20,26 ----
     Boston, MA 02111-1307, USA.  */
  
  #include "server.h"
+ #include "target.h"
  
  int cont_thread;
  int general_thread;
*************** main (int argc, char *argv[])
*** 60,66 ****
      error ("Usage: gdbserver tty prog [args ...]");
  
    initialize_low ();
- 
    /* Wait till we are at first instruction in program.  */
    signal = start_inferior (&argv[2], &status);
  
--- 61,66 ----
*************** main (int argc, char *argv[])
*** 130,141 ****
--- 130,143 ----
  	      break;
  	    case 'C':
  	      convert_ascii_to_int (own_buf + 1, &sig, 1);
+ 	      sig = target_signal_to_host (sig);
  	      myresume (0, sig);
  	      signal = mywait (&status);
  	      prepare_resume_reply (own_buf, status, signal);
  	      break;
  	    case 'S':
  	      convert_ascii_to_int (own_buf + 1, &sig, 1);
+ 	      sig = target_signal_to_host (sig);
  	      myresume (1, sig);
  	      signal = mywait (&status);
  	      prepare_resume_reply (own_buf, status, signal);
*************** main (int argc, char *argv[])
*** 210,217 ****
  	  putpkt (own_buf);
  
  	  if (status == 'W')
! 	    fprintf (stderr,
! 		     "\nChild exited with status %d\n", sig);
  	  if (status == 'X')
  	    fprintf (stderr, "\nChild terminated with signal = 0x%x\n", sig);
  	  if (status == 'W' || status == 'X')
--- 212,218 ----
  	  putpkt (own_buf);
  
  	  if (status == 'W')
! 	    fprintf (stderr, "\nChild exited with status %d\n", sig);
  	  if (status == 'X')
  	    fprintf (stderr, "\nChild terminated with signal = 0x%x\n", sig);
  	  if (status == 'W' || status == 'X')
*************** main (int argc, char *argv[])
*** 250,256 ****
  	}
        else
  	{
! 	  fprintf (stderr, "Remote side has terminated connection.  GDBserver will reopen the connection.\n");
  
  	  remote_close ();
  	}
--- 251,258 ----
  	}
        else
  	{
! 	  fprintf (stderr,
! 		   "Remote side has terminated connection.  GDBserver will reopen the connection.\n");
  
  	  remote_close ();
  	}

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