Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jason R Thorpe <thorpej@wasabisystems.com>
To: Mark Kettenis <kettenis@science.uva.nl>
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: [patch] Overhaul i386nbsd-nat.c, add support for XMM + ELF core files
Date: Fri, 04 Jan 2002 19:03:00 -0000	[thread overview]
Message-ID: <20020104190350.K9599@dr-evil.shagadelic.org> (raw)
In-Reply-To: <s3i4rm1iqav.fsf@soliton.wins.uva.nl>; from kettenis@science.uva.nl on Sat, Jan 05, 2002 at 01:39:52AM +0100

[-- Attachment #1: Type: text/plain, Size: 2122 bytes --]

On Sat, Jan 05, 2002 at 01:39:52AM +0100, Mark Kettenis wrote:

 > Is there any chance that I can convince you to make NetBSD use
 > i386bsd-nat.c instead of i386nbsd-nat.c?  NetBSD is close enough to
 > FreeBSD and OpenBSD to be able to use the same basic functionality on
 > all of them.

Alright, I did this; it wasn't quite as nasty as I thought it'd be.

OK to commit?

        [ for gdb/ChangeLog ]
2002-01-04  Jason Thorpe  <thorpej@wasabisystems.com> 
 
        * acconfig.h (HAVE_PT_GETXMMREGS): New.
        * config.in: Regenerate. 
        * configure.in: Update copyright years.
        Add test for PT_GETXMMREGS supplied by <sys/ptrace.h>.
        * configure: Regenerate.
        * i386bsd-nat.c: Update copyright years.
        (fill_gregset): Use regcache_collect.  
        (fetch_inferior_registers): Only fetch integer registers
        if requested to do so.  Add support for XMM registers
        using PT_GETXMMREGS. 
        (store_inferior_registers): Only store integer registers
        if requested to do so.  Add support for XMM registers
        using PT_SETXMMREGS. 
        * i386nbsd-nat.c (fetch_inferior_registers): Remove.
        (store_inferior_registers): Remove. 
        (fetch_core_registers): Use supply_gregset and i387_supply_fsave. 
        (fetch_elfcore_registers): New function.
        (i386nbsd_elfcore_fns): New.
        (_initialize_i386nbsd_nat): Register i386nbsd_elfcore_fns.
        * config/i386/nbsd.mh (NATDEPFILES): Add i387-nat.o and
        i386bsd-nat.o.
        * config/i386/nbsdelf.mh (NATDEPFILES): Likewise.
        * config/i386/nbsd.mt (TDEPFILES): Add i386bsd-nat.o.
        * config/i386/nbsdelf.mt (TDEPFILES): Likewise.
        * config/i386/tm-nbsd.h: Update copyright years. 
        (HAVE_SSE_REGS): Define. 
        (IN_SIGTRAMP): Define as i386bsd_in_sigtramp.
        (SIGTRAMP_START): Redefine as i386bsd_sigtramp_start.
        (SIGTRAMP_END): Redefine as i386bsd_sigtramp_end.
        (SIGCONTEXT_PC_OFFSET): Remove.
        (FRAME_SAVED_PC): Define as i386bsd_frame_saved_pc.

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>

[-- Attachment #2: patch3 --]
[-- Type: text/plain, Size: 21627 bytes --]

Index: acconfig.h
===================================================================
RCS file: /cvs/src/src/gdb/acconfig.h,v
retrieving revision 1.16
diff -c -r1.16 acconfig.h
*** acconfig.h	2001/03/31 18:09:02	1.16
--- acconfig.h	2002/01/05 02:57:32
***************
*** 150,155 ****
--- 150,158 ----
  /* Define if <sys/ptrace.h> defines the PT_GETDBREGS request.  */
  #undef HAVE_PT_GETDBREGS
  
+ /* Define if <sys/ptrace.h> defines the PT_GETXMMREGS request.  */
+ #undef HAVE_PT_GETXMMREGS
+ 
  /* Define if gnu-regex.c included with GDB should be used. */
  #undef USE_INCLUDED_REGEX
  
Index: configure.in
===================================================================
RCS file: /cvs/src/src/gdb/configure.in,v
retrieving revision 1.76
diff -c -r1.76 configure.in
*** configure.in	2001/12/21 22:32:37	1.76
--- configure.in	2002/01/05 02:57:40
***************
*** 1,5 ****
  dnl Autoconf configure script for GDB, the GNU debugger.
! dnl Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001
  dnl Free Software Foundation, Inc.
  dnl
  dnl This file is part of GDB.
--- 1,5 ----
  dnl Autoconf configure script for GDB, the GNU debugger.
! dnl Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
  dnl Free Software Foundation, Inc.
  dnl
  dnl This file is part of GDB.
***************
*** 215,220 ****
--- 215,233 ----
  AC_MSG_RESULT($gdb_cv_have_pt_getdbregs)
  if test $gdb_cv_have_pt_getdbregs = yes; then
    AC_DEFINE(HAVE_PT_GETDBREGS)
+ fi
+ 
+ # See if <sys/ptrace.h> provides the PT_GETXMMREGS request.
+ AC_MSG_CHECKING(for PT_GETXMMREGS)
+ AC_CACHE_VAL(gdb_cv_have_pt_getxmmregs,
+ [AC_TRY_COMPILE([#include <sys/types.h>
+ #include <sys/ptrace.h>],
+ 		[PT_GETXMMREGS;],
+ 		[gdb_cv_have_pt_getxmmregs=yes],
+ 		[gdb_cv_have_pt_getxmmregs=no])])
+ AC_MSG_RESULT($gdb_cv_have_pt_getxmmregs)
+ if test $gdb_cv_have_pt_getxmmregs = yes; then
+   AC_DEFINE(HAVE_PT_GETXMMREGS)
  fi
  
  
Index: i386bsd-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/i386bsd-nat.c,v
retrieving revision 1.10
diff -c -r1.10 i386bsd-nat.c
*** i386bsd-nat.c	2001/12/29 20:15:47	1.10
--- i386bsd-nat.c	2002/01/05 02:57:41
***************
*** 1,5 ****
  /* Native-dependent code for modern i386 BSD's.
!    Copyright 2000, 2001 Free Software Foundation, Inc.
  
     This file is part of GDB.
  
--- 1,5 ----
  /* Native-dependent code for modern i386 BSD's.
!    Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
  
     This file is part of GDB.
  
***************
*** 96,101 ****
--- 96,111 ----
  
  #define REG_ADDR(regset, regno) ((char *) (regset) + reg_offset[regno])
  
+ /* Macro to determine if a register is fetched with PT_GETREGS.  */
+ #define GETREGS_SUPPLIES(regno) \
+   ((0 <= (regno) && (regno) <= 15))
+ 
+ #ifdef HAVE_PT_GETXMMREGS
+ /* Set to 1 if the kernel supports PT_GETXMMREGS.  Initialized to -1
+    so that we try PT_GETXMMREGS the first time around.  */
+ static int have_ptrace_xmmregs = -1;
+ #endif
+ 
  /* Return nonzero if we shouldn't try to fetch register REGNO.  */
  
  static int
***************
*** 135,142 ****
  
    for (i = 0; i < NUM_GREGS; i++)
      if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i))
!       memcpy (REG_ADDR (gregsetp, i), &registers[REGISTER_BYTE (i)],
! 	      REGISTER_RAW_SIZE (i));
  }
  
  #include "i387-nat.h"
--- 145,151 ----
  
    for (i = 0; i < NUM_GREGS; i++)
      if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i))
!       regcache_collect (i, REG_ADDR (gregsetp, i));
  }
  
  #include "i387-nat.h"
***************
*** 166,188 ****
  void
  fetch_inferior_registers (int regno)
  {
-   gregset_t gregs;
  
!   if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
!               (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
!     perror_with_name ("Couldn't get registers");
  
!   supply_gregset (&gregs);
  
    if (regno == -1 || regno >= FP0_REGNUM)
      {
        fpregset_t fpregs;
  
        if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
  		  (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
  	perror_with_name ("Couldn't get floating point status");
  
        supply_fpregset (&fpregs);
      }
  }
  
--- 175,222 ----
  void
  fetch_inferior_registers (int regno)
  {
  
!   if (regno == -1 || GETREGS_SUPPLIES (regno))
!     {
!       gregset_t gregs;
  
!       if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
! 		  (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
! 	perror_with_name ("Couldn't get registers");
! 
!       supply_gregset (&gregs);
!       if (regno != -1)
! 	return;
!     }
  
    if (regno == -1 || regno >= FP0_REGNUM)
      {
        fpregset_t fpregs;
+ #ifdef HAVE_PT_GETXMMREGS
+       char xmmregs[512];
+ 
+       if (have_ptrace_xmmregs != 0 &&
+ 	  ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid),
+ 		 (PTRACE_ARG3_TYPE) xmmregs, 0) == 0)
+ 	{
+ 	  have_ptrace_xmmregs = 1;
+ 	  i387_supply_fxsave (xmmregs);
+ 	}
+       else
+ 	{
+           if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
+ 		      (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
+ 	    perror_with_name ("Couldn't get floating point status");
  
+ 	  supply_fpregset (&fpregs);
+ 	}
+ #else
        if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
  		  (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
  	perror_with_name ("Couldn't get floating point status");
  
        supply_fpregset (&fpregs);
+ #endif
      }
  }
  
***************
*** 192,222 ****
  void
  store_inferior_registers (int regno)
  {
!   gregset_t gregs;
  
!   if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
!               (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
!     perror_with_name ("Couldn't get registers");
  
!   fill_gregset (&gregs, regno);
  
!   if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
! 	      (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
!     perror_with_name ("Couldn't write registers");
  
    if (regno == -1 || regno >= FP0_REGNUM)
      {
        fpregset_t fpregs;
  
!       if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
! 		  (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
! 	perror_with_name ("Couldn't get floating point status");
  
!       fill_fpregset (&fpregs, regno);
    
!       if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
! 		  (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
! 	perror_with_name ("Couldn't write floating point status");
      }
  }
  \f
--- 226,284 ----
  void
  store_inferior_registers (int regno)
  {
! 
!   if (regno == -1 || GETREGS_SUPPLIES (regno))
!     {
!       gregset_t gregs;
  
!       if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
!                   (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
!         perror_with_name ("Couldn't get registers");
  
!       fill_gregset (&gregs, regno);
  
!       if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
! 	          (PTRACE_ARG3_TYPE) &gregs, 0) == -1)
!         perror_with_name ("Couldn't write registers");
  
+       if (regno != -1)
+ 	return;
+     }
+ 
    if (regno == -1 || regno >= FP0_REGNUM)
      {
        fpregset_t fpregs;
+ #ifdef HAVE_PT_GETXMMREGS
+       char xmmregs[512];
  
!       if (have_ptrace_xmmregs != 0 &&
! 	  ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid),
! 		 (PTRACE_ARG3_TYPE) xmmregs, 0) == 0)
! 	{
! 	  have_ptrace_xmmregs = 1;
! 
! 	  i387_fill_fxsave (xmmregs, regno);
! 
! 	  if (ptrace (PT_SETXMMREGS, PIDGET (inferior_ptid),
! 		      (PTRACE_ARG3_TYPE) xmmregs, 0) == -1)
!             perror_with_name ("Couldn't write XMM registers");
! 	}
!       else
! 	{
! 	  have_ptrace_xmmregs = 0;
! #endif
!           if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
! 		      (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
! 	    perror_with_name ("Couldn't get floating point status");
  
!           fill_fpregset (&fpregs, regno);
    
!           if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
! 		      (PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
! 	    perror_with_name ("Couldn't write floating point status");
! #ifdef HAVE_PT_GETXMMREGS
!         }
! #endif
      }
  }
  \f
Index: i386nbsd-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/i386nbsd-nat.c,v
retrieving revision 1.9
diff -c -r1.9 i386nbsd-nat.c
*** i386nbsd-nat.c	2002/01/04 22:43:31	1.9
--- i386nbsd-nat.c	2002/01/05 02:57:41
***************
*** 25,160 ****
  #include <machine/reg.h>
  #include <machine/frame.h>
  #include "inferior.h"
! #include "gdbcore.h" /* for registers_fetched() */
  #include "regcache.h"
  
! /* Defines for XMM0_REGNUM etc. */
! #include "i386-tdep.h"
  
! #define RF(dst, src) \
! 	memcpy(&registers[REGISTER_BYTE(dst)], &src, sizeof(src))
  
! #define RS(src, dst) \
! 	memcpy(&dst, &registers[REGISTER_BYTE(src)], sizeof(dst))
!      
! struct env387
!   {
!     unsigned short control;
!     unsigned short r0;
!     unsigned short status;
!     unsigned short r1;
!     unsigned short tag;  
!     unsigned short r2;
!     unsigned long eip;
!     unsigned short code_seg;
!     unsigned short opcode;
!     unsigned long operand; 
!     unsigned short operand_seg;
!     unsigned short r3;
!     unsigned char regs[8][10];
!   };
  
- void
- fetch_inferior_registers (int regno)
- {
-   struct reg inferior_registers;
-   struct env387 inferior_fpregisters;
- 
-   ptrace (PT_GETREGS, PIDGET (inferior_ptid),
- 	  (PTRACE_ARG3_TYPE) &inferior_registers, 0);
-   ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
- 	  (PTRACE_ARG3_TYPE) &inferior_fpregisters, 0);
- 
-   RF ( 0, inferior_registers.r_eax);
-   RF ( 1, inferior_registers.r_ecx);
-   RF ( 2, inferior_registers.r_edx);
-   RF ( 3, inferior_registers.r_ebx);
-   RF ( 4, inferior_registers.r_esp);
-   RF ( 5, inferior_registers.r_ebp);
-   RF ( 6, inferior_registers.r_esi);
-   RF ( 7, inferior_registers.r_edi);
-   RF ( 8, inferior_registers.r_eip);
-   RF ( 9, inferior_registers.r_eflags);
-   RF (10, inferior_registers.r_cs);
-   RF (11, inferior_registers.r_ss);
-   RF (12, inferior_registers.r_ds);
-   RF (13, inferior_registers.r_es);
-   RF (14, inferior_registers.r_fs);
-   RF (15, inferior_registers.r_gs);
- 
-   RF (FP0_REGNUM,     inferior_fpregisters.regs[0]);
-   RF (FP0_REGNUM + 1, inferior_fpregisters.regs[1]);
-   RF (FP0_REGNUM + 2, inferior_fpregisters.regs[2]);
-   RF (FP0_REGNUM + 3, inferior_fpregisters.regs[3]);
-   RF (FP0_REGNUM + 4, inferior_fpregisters.regs[4]);
-   RF (FP0_REGNUM + 5, inferior_fpregisters.regs[5]);
-   RF (FP0_REGNUM + 6, inferior_fpregisters.regs[6]);
-   RF (FP0_REGNUM + 7, inferior_fpregisters.regs[7]);
- 
-   RF (FCTRL_REGNUM,   inferior_fpregisters.control);
-   RF (FSTAT_REGNUM,   inferior_fpregisters.status);
-   RF (FTAG_REGNUM,    inferior_fpregisters.tag);
-   RF (FCS_REGNUM,     inferior_fpregisters.code_seg);
-   RF (FCOFF_REGNUM,   inferior_fpregisters.eip);
-   RF (FDS_REGNUM,     inferior_fpregisters.operand_seg);
-   RF (FDOFF_REGNUM,   inferior_fpregisters.operand);
-   RF (FOP_REGNUM,     inferior_fpregisters.opcode);
- 
-   registers_fetched ();
- }
- 
- void
- store_inferior_registers (int regno)
- {
-   struct reg inferior_registers;
-   struct env387 inferior_fpregisters;
- 
-   RS ( 0, inferior_registers.r_eax);
-   RS ( 1, inferior_registers.r_ecx);
-   RS ( 2, inferior_registers.r_edx);
-   RS ( 3, inferior_registers.r_ebx);
-   RS ( 4, inferior_registers.r_esp);
-   RS ( 5, inferior_registers.r_ebp);
-   RS ( 6, inferior_registers.r_esi);
-   RS ( 7, inferior_registers.r_edi);
-   RS ( 8, inferior_registers.r_eip);
-   RS ( 9, inferior_registers.r_eflags);
-   RS (10, inferior_registers.r_cs);
-   RS (11, inferior_registers.r_ss);
-   RS (12, inferior_registers.r_ds);
-   RS (13, inferior_registers.r_es);
-   RS (14, inferior_registers.r_fs);
-   RS (15, inferior_registers.r_gs);
- 
-   
-   RS (FP0_REGNUM,     inferior_fpregisters.regs[0]);
-   RS (FP0_REGNUM + 1, inferior_fpregisters.regs[1]);
-   RS (FP0_REGNUM + 2, inferior_fpregisters.regs[2]);
-   RS (FP0_REGNUM + 3, inferior_fpregisters.regs[3]);
-   RS (FP0_REGNUM + 4, inferior_fpregisters.regs[4]);
-   RS (FP0_REGNUM + 5, inferior_fpregisters.regs[5]);
-   RS (FP0_REGNUM + 6, inferior_fpregisters.regs[6]);
-   RS (FP0_REGNUM + 7, inferior_fpregisters.regs[7]);
- 
-   RS (FCTRL_REGNUM,   inferior_fpregisters.control);
-   RS (FSTAT_REGNUM,   inferior_fpregisters.status);
-   RS (FTAG_REGNUM,    inferior_fpregisters.tag);
-   RS (FCS_REGNUM,     inferior_fpregisters.code_seg);
-   RS (FCOFF_REGNUM,   inferior_fpregisters.eip);
-   RS (FDS_REGNUM,     inferior_fpregisters.operand_seg);
-   RS (FDOFF_REGNUM,   inferior_fpregisters.operand);
-   RS (FOP_REGNUM,     inferior_fpregisters.opcode);
-   
-   ptrace (PT_SETREGS, PIDGET (inferior_ptid),
- 	  (PTRACE_ARG3_TYPE) &inferior_registers, 0);
-   ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
- 	  (PTRACE_ARG3_TYPE) &inferior_fpregisters, 0);
- }
- \f
  struct md_core
  {
    struct reg intreg;
!   struct env387 freg;
  };
  
  static void
--- 25,50 ----
  #include <machine/reg.h>
  #include <machine/frame.h>
  #include "inferior.h"
! #include "gdbcore.h"
  #include "regcache.h"
  
! #ifndef HAVE_GREGSET_T
! typedef struct reg gregset_t;
! #endif
! 
! #ifndef HAVE_FPREGSET_T
! typedef struct fpreg fpregset_t;
! #endif
  
! #include "gregset.h"
  
! /* Prototypes for i387_supply_fsave etc.  */
! #include "i387-nat.h"  
  
  struct md_core
  {
    struct reg intreg;
!   char freg[108];
  };
  
  static void
***************
*** 162,194 ****
  		      CORE_ADDR ignore)
  {
    struct md_core *core_reg = (struct md_core *) core_reg_sect;
  
!   /* integer registers */
!   memcpy (&registers[REGISTER_BYTE (0)], &core_reg->intreg,
! 	  sizeof (struct reg));
! 
!   /* floating point registers */
!   RF (FP0_REGNUM,     core_reg->freg.regs[0]);
!   RF (FP0_REGNUM + 1, core_reg->freg.regs[1]);
!   RF (FP0_REGNUM + 2, core_reg->freg.regs[2]);
!   RF (FP0_REGNUM + 3, core_reg->freg.regs[3]);
!   RF (FP0_REGNUM + 4, core_reg->freg.regs[4]);
!   RF (FP0_REGNUM + 5, core_reg->freg.regs[5]);
!   RF (FP0_REGNUM + 6, core_reg->freg.regs[6]);
!   RF (FP0_REGNUM + 7, core_reg->freg.regs[7]);
! 
!   RF (FCTRL_REGNUM,   core_reg->freg.control);
!   RF (FSTAT_REGNUM,   core_reg->freg.status);
!   RF (FTAG_REGNUM,    core_reg->freg.tag);
!   RF (FCS_REGNUM,     core_reg->freg.code_seg);
!   RF (FCOFF_REGNUM,   core_reg->freg.eip);
!   RF (FDS_REGNUM,     core_reg->freg.operand_seg);
!   RF (FDOFF_REGNUM,   core_reg->freg.operand);
!   RF (FOP_REGNUM,     core_reg->freg.opcode);
  
!   registers_fetched ();
  }
  
  /* Register that we are able to handle i386nbsd core file formats.
     FIXME: is this really bfd_target_unknown_flavour? */
  
--- 52,108 ----
  		      CORE_ADDR ignore)
  {
    struct md_core *core_reg = (struct md_core *) core_reg_sect;
+ 
+   /* We get everything from one section.  */
+   if (which != 0)
+     return;
  
!   /* Integer registers.  */
!   supply_gregset (&core_reg->intreg);
  
!   /* Floating point registers.  */
!   i387_supply_fsave (core_reg->freg);
  }
  
+ static void
+ fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, int which,
+                          CORE_ADDR ignore)
+ {
+   gregset_t gregset;
+ 
+   switch (which)
+     {
+     case 0:  /* Integer registers.  */
+       if (core_reg_size != sizeof (struct reg))
+ 	warning ("Wrong size register set in core file.");
+       else
+ 	{
+ 	  memcpy (&gregset, core_reg_sect, sizeof (gregset));
+ 	  supply_gregset (&gregset);
+ 	}
+       break;
+ 
+     case 2:  /* Floating point registers.  */
+       if (core_reg_size != 108)
+ 	warning ("Wrong size FP register set in core file.");
+       else
+ 	i387_supply_fsave (core_reg_sect);
+       break;
+ 
+     case 3:  /* "Extended" floating point registers.  This is gdb-speak
+ 		for SSE/SSE2. */
+       if (core_reg_size != 512)
+ 	warning ("Wrong size XMM register set in core file.");
+       else
+ 	i387_supply_fxsave (core_reg_sect);
+       break;
+ 
+     default:
+       /* Don't know what kind of register request this is; just ignore it.  */
+       break;
+     }
+ }
+ 
  /* Register that we are able to handle i386nbsd core file formats.
     FIXME: is this really bfd_target_unknown_flavour? */
  
***************
*** 201,208 ****
--- 115,132 ----
    NULL					/* next */
  };
  
+ static struct core_fns i386nbsd_elfcore_fns =
+ {
+   bfd_target_elf_flavour,		/* core_flavour */
+   default_check_format,			/* check_format */
+   default_core_sniffer,			/* core_sniffer */
+   fetch_elfcore_registers,		/* core_read_registers */
+   NULL					/* next */
+ };
+ 
  void
  _initialize_i386nbsd_nat (void)
  {
    add_core_fns (&i386nbsd_core_fns);
+   add_core_fns (&i386nbsd_elfcore_fns);
  }
Index: config/i386/nbsd.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/nbsd.mh,v
retrieving revision 1.10
diff -c -r1.10 nbsd.mh
*** nbsd.mh	2001/10/02 23:11:21	1.10
--- nbsd.mh	2002/01/05 02:57:41
***************
*** 7,13 ****
  # continuation character (backslash) to extend a commented line.  As a
  # consequence, BSD make considers subsequent tab-indented lines to be
  # "unassociated shell commands".
! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386nbsd-nat.o solib.o solib-sunos.o
  
  XM_FILE= xm-nbsd.h
  NAT_FILE= nm-nbsd.h
--- 7,13 ----
  # continuation character (backslash) to extend a commented line.  As a
  # consequence, BSD make considers subsequent tab-indented lines to be
  # "unassociated shell commands".
! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i387-nat.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-sunos.o
  
  XM_FILE= xm-nbsd.h
  NAT_FILE= nm-nbsd.h
Index: config/i386/nbsd.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/nbsd.mt,v
retrieving revision 1.6
diff -c -r1.6 nbsd.mt
*** nbsd.mt	2001/01/22 20:23:16	1.6
--- nbsd.mt	2002/01/05 02:57:42
***************
*** 1,5 ****
  # Target: Intel 386 running NetBSD
! TDEPFILES= i386-tdep.o i387-tdep.o i386nbsd-tdep.o
  TM_FILE= tm-nbsd.h
  
  GDBSERVER_DEPFILES= low-nbsd.o
--- 1,5 ----
  # Target: Intel 386 running NetBSD
! TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o
  TM_FILE= tm-nbsd.h
  
  GDBSERVER_DEPFILES= low-nbsd.o
Index: config/i386/nbsdelf.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/nbsdelf.mh,v
retrieving revision 1.6
diff -c -r1.6 nbsdelf.mh
*** nbsdelf.mh	2001/03/10 06:17:21	1.6
--- nbsdelf.mh	2002/01/05 02:57:42
***************
*** 1,5 ****
  # Host: Intel 386 running NetBSD
  XDEPFILES=
! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386nbsd-nat.o solib.o solib-svr4.o solib-legacy.o
  XM_FILE= xm-nbsd.h
  NAT_FILE= nm-nbsdelf.h
--- 1,5 ----
  # Host: Intel 386 running NetBSD
  XDEPFILES=
! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i387-nat.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-svr4.o solib-legacy.o
  XM_FILE= xm-nbsd.h
  NAT_FILE= nm-nbsdelf.h
Index: config/i386/nbsdelf.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/nbsdelf.mt,v
retrieving revision 1.3
diff -c -r1.3 nbsdelf.mt
*** nbsdelf.mt	2001/01/22 20:23:16	1.3
--- nbsdelf.mt	2002/01/05 02:57:42
***************
*** 1,5 ****
  # Target: Intel 386 running NetBSD
! TDEPFILES= i386-tdep.o i387-tdep.o
  TM_FILE= tm-nbsdelf.h
  
  GDBSERVER_DEPFILES= low-nbsd.o
--- 1,5 ----
  # Target: Intel 386 running NetBSD
! TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o
  TM_FILE= tm-nbsdelf.h
  
  GDBSERVER_DEPFILES= low-nbsd.o
Index: config/i386/tm-nbsd.h
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/tm-nbsd.h,v
retrieving revision 1.7
diff -c -r1.7 tm-nbsd.h
*** tm-nbsd.h	2001/03/06 08:21:29	1.7
--- tm-nbsd.h	2002/01/05 02:57:42
***************
*** 1,5 ****
  /* Macro definitions for i386 running under NetBSD.
!    Copyright 1994, 1996, 2000 Free Software Foundation, Inc.
  
     This file is part of GDB.
  
--- 1,5 ----
  /* Macro definitions for i386 running under NetBSD.
!    Copyright 1994, 1996, 2000, 2002 Free Software Foundation, Inc.
  
     This file is part of GDB.
  
***************
*** 22,27 ****
--- 22,28 ----
  #define TM_NBSD_H
  
  #define HAVE_I387_REGS
+ #define HAVE_SSE_REGS
  
  #include "i386/tm-i386.h"
  #include "config/tm-nbsd.h"
***************
*** 46,58 ****
  \f
  /* Support for signal handlers.  */
  
! /* The sigtramp is above the user stack and immediately below the 
!    user area.  Using constants here allows for cross debugging. */
  
! #define SIGTRAMP_START(pc)	0xbfbfdf20
! #define SIGTRAMP_END(pc)	0xbfbfdff0
  
! /* Offset to saved PC in sigcontext, from <sys/signal.h>.  */
! #define SIGCONTEXT_PC_OFFSET 20
  
  #endif /* TM_NBSD_H */
--- 47,70 ----
  \f
  /* Support for signal handlers.  */
  
! #define IN_SIGTRAMP(pc, name) i386bsd_in_sigtramp (pc, name)
! extern int i386bsd_in_sigtramp (CORE_ADDR pc, char *name);
  
! /* These defines allow the recognition of sigtramps as a function name
!    <sigtramp>.
  
!    FIXME: kettenis/2001-07-13: These should be added to the target
!    vector and turned into functions when we go "multi-arch".  */
! 
! #define SIGTRAMP_START(pc) i386bsd_sigtramp_start
! #define SIGTRAMP_END(pc) i386bsd_sigtramp_end
! extern CORE_ADDR i386bsd_sigtramp_start;
! extern CORE_ADDR i386bsd_sigtramp_end;
! 
! /* Override FRAME_SAVED_PC to enable the recognition of signal handlers.  */
! 
! #undef FRAME_SAVED_PC
! #define FRAME_SAVED_PC(frame) i386bsd_frame_saved_pc (frame)
! extern CORE_ADDR i386bsd_frame_saved_pc (struct frame_info *frame);
  
  #endif /* TM_NBSD_H */

  parent reply	other threads:[~2002-01-05  3:03 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-04 16:08 Jason R Thorpe
2002-01-04 16:41 ` Mark Kettenis
2002-01-04 17:05   ` Jason R Thorpe
2002-01-04 19:03   ` Jason R Thorpe [this message]
2002-01-04 19:28     ` Michael Snyder
2002-01-04 19:41       ` Andrew Cagney
2002-01-05 12:59         ` Michael Snyder
2002-01-05  6:07     ` Mark Kettenis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020104190350.K9599@dr-evil.shagadelic.org \
    --to=thorpej@wasabisystems.com \
    --cc=gdb-patches@sourceware.cygnus.com \
    --cc=kettenis@science.uva.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox