🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Glenn Engel Sat, 31 Dec 1988 18:30
remote.c fixes & hp9k320 support
#648
Author: Glenn Engel
Date: Sat, 31 Dec 1988 18:30
405 lines
10023 bytes
The following patches support remote process debugging on hp-ux (hp9k320).  
These patches only support the form of attach where a device file is specified
for remote communication.

These patches are for gdb3.0 :

1) hp9k320-dep.c   Addition of attach and detach routines.
2) m-hp9k320.h     defined ATTACH_DETACH
3) remote.c        Numerous generic bug fixes applicable to all machines.

Thanks for including these in the next release,
 
--
 |  Glenn R. Engel
 |  Hewlett-Packard 
 |  (206) 335-2066
 |  glenne%hplsla@hplabs.hp.com


*** ../dist-gdb/hp9k320-dep.c	Tue Nov 15 07:30:28 1988
--- hp9k320-dep.c	Sat Dec 31 09:50:57 1988
***************
*** 40,45
  #include <sys/stat.h>
  
  extern int errno;
  
  /* This function simply calls ptrace with the given arguments.  
     It exists so that all calls to ptrace are isolated in this 

--- 39,45 -----
  #include <sys/stat.h>
  
  extern int errno;
+ extern int attach_flag;
  
  /* This function simply calls ptrace with the given arguments.  
     It exists so that all calls to ptrace are isolated in this 
***************
*** 93,98
  	perror_with_name ("ptrace");
      }
  }
  
  #define INFERIOR_AR0(u)							\
    ((ptrace								\

--- 94,130 -----
  	perror_with_name ("ptrace");
      }
  }
+ 
+ #ifdef ATTACH_DETACH
+ 
+ /* Start debugging the process whose number is PID.  */
+ 
+ attach (pid)
+      int pid;
+ {
+   errno = 0;
+   /* ptrace (PTRACE_ATTACH, pid, 0, 0); */  /* how do we do this ? */
+   if (errno)
+     perror_with_name ("ptrace");
+   attach_flag = 1;
+   return pid;
+ }
+ 
+ /* Stop debugging the process whose number is PID
+    and continue it with signal number SIGNAL.
+    SIGNAL = 0 means just continue it.  */
+ 
+ void
+ detach (signal)
+      int signal;
+ {
+   errno = 0;
+   /* ptrace (PTRACE_DETACH, inferior_pid, 1, signal); */ /* how do we do this ? */
+   if (errno)
+     perror_with_name ("ptrace");
+   attach_flag = 0;
+ }
+ #endif /* ATTACH_DETACH */
  
  #define INFERIOR_AR0(u)							\
    ((ptrace								\
***************
*** 190,201
    struct user u;
    register int regno;
    register unsigned int ar0_offset;
! 
!   ar0_offset = (INFERIOR_AR0 (u));
!   for (regno = 0; (regno < FP0_REGNUM); regno++)
!     fetch_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
!   for (; (regno < NUM_REGS); regno++)
!     fetch_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
  }
  
  /* Store our register values back into the inferior.

--- 222,238 -----
    struct user u;
    register int regno;
    register unsigned int ar0_offset;
!   extern char registers[];
!   if (remote_debugging)
!     remote_fetch_registers (registers);
!   else
!     {
!       ar0_offset = (INFERIOR_AR0 (u));
!       for (regno = 0; (regno < FP0_REGNUM); regno++)
!         fetch_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
!       for (; (regno < NUM_REGS); regno++)
!         fetch_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
!     }
  }
  
  /* Store our register values back into the inferior.
***************
*** 207,214
  {
    struct user u;
    register unsigned int ar0_offset;
! 
!   if (regno >= FP0_REGNUM)
      {
        store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
        return;

--- 244,253 -----
  {
    struct user u;
    register unsigned int ar0_offset;
!   extern char registers[];
!   if (remote_debugging)
!     remote_store_registers (registers);
!   else
      {
        if (regno >= FP0_REGNUM)
          {
***************
*** 210,218
  
    if (regno >= FP0_REGNUM)
      {
!       store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
!       return;
!     }
  
    ar0_offset = (INFERIOR_AR0 (u));
    if (regno >= 0)

--- 249,259 -----
      remote_store_registers (registers);
    else
      {
!       if (regno >= FP0_REGNUM)
!         {
!           store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
!           return;
!         }
  
        ar0_offset = (INFERIOR_AR0 (u));
        if (regno >= 0)
***************
*** 214,224
        return;
      }
  
!   ar0_offset = (INFERIOR_AR0 (u));
!   if (regno >= 0)
!     {
!       store_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
!       return;
      }
  
    for (regno = 0; (regno < FP0_REGNUM); regno++)

--- 255,271 -----
            return;
          }
  
!       ar0_offset = (INFERIOR_AR0 (u));
!       if (regno >= 0)
!         {
!           store_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
!           return;
!         }
!     
!       for (regno = 0; (regno < FP0_REGNUM); regno++)
!         store_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
!       for (; (regno < NUM_REGS); regno++)
!         store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
      }
    return;
  }
***************
*** 220,230
        store_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
        return;
      }
- 
-   for (regno = 0; (regno < FP0_REGNUM); regno++)
-     store_inferior_register (regno, (REGISTER_ADDR (ar0_offset, regno)));
-   for (; (regno < NUM_REGS); regno++)
-     store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
    return;
  }
  

--- 267,272 -----
        for (; (regno < NUM_REGS); regno++)
          store_inferior_register (regno, (FP_REGISTER_ADDR (u, regno)));
      }
    return;
  }
  
*** ../dist-gdb/remote.c	Wed Nov 23 13:39:54 1988
--- remote.c	Fri Dec 30 11:26:58 1988
***************
*** 101,107
  /* Descriptor for I/O to remote machine.  */
  int remote_desc;
  
! #define	PBUFSIZ	300
  
  static void remote_send ();
  static void putpkt ();

--- 101,108 -----
  /* Descriptor for I/O to remote machine.  */
  int remote_desc;
  
! /* need at least 360 bytes for hex form of 680x0/6888x registers */
! #define	PBUFSIZ	400
  
  static void remote_send ();
  static void putpkt ();
***************
*** 128,134
  
    ioctl (remote_desc, TIOCGETP, &sg);
  #ifdef HAVE_TERMIO
!   sg.c_lflag &= ~ICANON;
  #else
    sg.sg_flags = RAW;
  #endif

--- 129,137 -----
  
    ioctl (remote_desc, TIOCGETP, &sg);
  #ifdef HAVE_TERMIO
!   sg.c_cc[VMIN] = 1; /* read at least 1 char */
!   sg.c_cc[VTIME] = 0;
!   sg.c_lflag &= ~(ICANON | ECHO);
  #else
    sg.sg_flags = RAW;
  #endif
***************
*** 187,193
  remote_wait (status)
       WAITTYPE *status;
  {
!   char buf[PBUFSIZ];
  
    WSETEXIT ((*status), 0);
    getpkt (buf);

--- 190,196 -----
  remote_wait (status)
       WAITTYPE *status;
  {
!   unsigned char buf[PBUFSIZ];
  
    WSETEXIT ((*status), 0);
    getpkt (buf);
***************
*** 245,250
        *p++ = tohex ((regs[i] >> 4) & 0xf);
        *p++ = tohex (regs[i] & 0xf);
      }
  
    remote_send (buf);
  }

--- 248,254 -----
        *p++ = tohex ((regs[i] >> 4) & 0xf);
        *p++ = tohex (regs[i] & 0xf);
      }
+   *p = '\0';
  
    remote_send (buf);
  }
***************
*** 311,316
        *p++ = tohex ((myaddr[i] >> 4) & 0xf);
        *p++ = tohex (myaddr[i] & 0xf);
      }
  
    remote_send (buf);
  }

--- 315,321 -----
        *p++ = tohex ((myaddr[i] >> 4) & 0xf);
        *p++ = tohex (myaddr[i] & 0xf);
      }
+   *p = '\0';
  
    remote_send (buf);
  }
***************
*** 395,401
       char *buf;
  {
    int i;
!   char csum = 0;
    char buf2[500];
    char buf3[1];
    int cnt = strlen (buf);

--- 400,406 -----
       char *buf;
  {
    int i;
!   unsigned char csum = 0;
    char buf2[500];
    char buf3[1];
    int cnt = strlen (buf);
***************
*** 443,449
       char *buf;
  {
    char *bp;
!   char csum = 0;
    int c, c1, c2;
    extern kiodebug;
  

--- 448,454 -----
       char *buf;
  {
    char *bp;
!   unsigned char csum;
    int c, c1, c2;
    extern kiodebug;
  
***************
*** 449,454
  
    while (1)
      {
        while ((c = readchar()) != '$');
  
        bp = buf;

--- 454,460 -----
  
    while (1)
      {
+       csum = 0;
        while ((c = readchar()) != '$');
  
        bp = buf;
*** ../dist-gdb/m-hp9k320.h	Fri Dec  9 12:44:34 1988
--- m-hp9k320.h	Fri Dec 30 11:12:04 1988
***************
*** 22,27
  #define HP9K320
  #endif
  
  /* Set flag to indicate whether HP's assembler is in use. */
  #ifdef __GNU__
  #ifdef __HPUX_ASM__

--- 22,31 -----
  #define HP9K320
  #endif
  
+ /* parameter to lseek - set pointer to value, increment pointer */
+ #define L_SET 0
+ #define L_INCR 1
+ 
  /* Set flag to indicate whether HP's assembler is in use. */
  #ifdef __GNU__
  #ifdef __HPUX_ASM__
***************
*** 245,250
       ? (&u.u_pcb.pcb_mc68881[FMC68881_R0 + (((regno) - FP0_REGNUM) * 3)]) \
       : (&u.u_pcb.pcb_mc68881[FMC68881_C + ((regno) - FPC_REGNUM)])))	\
     - ((char *) (& u)))
  
  /* It is safe to look for symsegs on a Sun, because Sun's ld
     does not screw up with random garbage at end of file.  */

--- 249,258 -----
       ? (&u.u_pcb.pcb_mc68881[FMC68881_R0 + (((regno) - FP0_REGNUM) * 3)]) \
       : (&u.u_pcb.pcb_mc68881[FMC68881_C + ((regno) - FPC_REGNUM)])))	\
     - ((char *) (& u)))
+ 
+ /* Do implement the attach and detach commands.  */
+ 
+ #define ATTACH_DETACH
  
  /* It is safe to look for symsegs on a Sun, because Sun's ld
     does not screw up with random garbage at end of file.  */
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads