summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1998-03-29 22:18:10 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1998-03-29 22:18:10 +0000
commite67d583556a72a00ae4703b79321b01cf0e166f9 (patch)
tree294574e30a9ca6c051c5660df5d5de62b6bf7d3a
parent82d7b263d3ef037532ae14b08ba6e5d1297430e8 (diff)
Adapt the newer of our GDB versions to a.out ports. The main part of this
commit comes from NetBSD. Also, the kernel debugging mode is a bit different but you will notice when you type gdb -k because it documents the difference
-rw-r--r--gnu/usr.bin/Makefile11
-rw-r--r--gnu/usr.bin/binutils/Makefile.bsd-wrapper13
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/nbsd.mh5
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/nm-nbsd.h14
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/nm-obsd.h14
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/obsd.mh5
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/obsd.mt2
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/tm-nbsd.h12
-rw-r--r--gnu/usr.bin/binutils/gdb/config/i386/tm-obsd.h14
-rw-r--r--gnu/usr.bin/binutils/gdb/config/m68k/nbsd.mh5
-rw-r--r--gnu/usr.bin/binutils/gdb/config/m68k/obsd.mh5
-rw-r--r--gnu/usr.bin/binutils/gdb/config/m68k/obsd.mt2
-rw-r--r--gnu/usr.bin/binutils/gdb/config/m68k/tm-nbsd.h26
-rw-r--r--gnu/usr.bin/binutils/gdb/config/m68k/tm-obsd.h26
-rw-r--r--gnu/usr.bin/binutils/gdb/config/nm-nbsd.h32
-rw-r--r--gnu/usr.bin/binutils/gdb/config/nm-obsd.h32
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/nbsd.mh4
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/nm-nbsd.h10
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/nm-obsd.h10
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mh4
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mt2
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/tm-nbsd.h66
-rw-r--r--gnu/usr.bin/binutils/gdb/config/ns32k/tm-obsd.h66
-rw-r--r--gnu/usr.bin/binutils/gdb/config/sparc/nbsd.mh4
-rw-r--r--gnu/usr.bin/binutils/gdb/config/sparc/nm-nbsd.h37
-rw-r--r--gnu/usr.bin/binutils/gdb/config/sparc/nm-obsd.h37
-rw-r--r--gnu/usr.bin/binutils/gdb/config/sparc/obsd.mh4
-rw-r--r--gnu/usr.bin/binutils/gdb/config/sparc/obsd.mt2
-rw-r--r--gnu/usr.bin/binutils/gdb/config/tm-nbsd.h9
-rw-r--r--gnu/usr.bin/binutils/gdb/config/tm-obsd.h9
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/nbsd.mh6
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/nm-nbsd.h21
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/nm-obsd.h21
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/obsd.mt3
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/tm-nbsd.h26
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/tm-obsd.h26
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/xm-nbsd.h21
-rw-r--r--gnu/usr.bin/binutils/gdb/config/vax/xm-obsd.h21
-rw-r--r--gnu/usr.bin/binutils/gdb/configure.host1
-rw-r--r--gnu/usr.bin/binutils/gdb/kcore-nbsd.c474
-rw-r--r--gnu/usr.bin/binutils/gdb/m68k-tdep.c57
-rw-r--r--gnu/usr.bin/binutils/gdb/m68knbsd-nat.c124
-rw-r--r--gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c128
43 files changed, 1197 insertions, 214 deletions
diff --git a/gnu/usr.bin/Makefile b/gnu/usr.bin/Makefile
index 321a97fa5a6..c50930b48c1 100644
--- a/gnu/usr.bin/Makefile
+++ b/gnu/usr.bin/Makefile
@@ -1,15 +1,14 @@
-# $OpenBSD: Makefile,v 1.22 1998/03/11 21:42:18 maja Exp $
+# $OpenBSD: Makefile,v 1.23 1998/03/29 22:17:15 niklas Exp $
# $NetBSD: Makefile,v 1.35 1996/04/03 21:20:52 chuck Exp $
SUBDIR+= bc cvs dc deroff diff diff3 gcc grep groff
SUBDIR+= gzip lynx perl rcs sdiff sendbug sudo
-# some ports use binutils, some do not.
-.if (${MACHINE_ARCH} == "alpha") || (${MACHINE_ARCH} == "mips") || \
- (${MACHINE_ARCH} == "powerpc")
SUBDIR+= binutils
-.else
-SUBDIR+= gas gdb ld
+# some ports use binutils gas and ld, most do not (yet).
+.if (${MACHINE_ARCH} != "alpha") && (${MACHINE_ARCH} != "mips") && \
+ (${MACHINE_ARCH} != "powerpc")
+SUBDIR+= gas ld
.endif
# Do this last, so that it re-builds the info 'dir' file
diff --git a/gnu/usr.bin/binutils/Makefile.bsd-wrapper b/gnu/usr.bin/binutils/Makefile.bsd-wrapper
index 862466366c6..f5884665b33 100644
--- a/gnu/usr.bin/binutils/Makefile.bsd-wrapper
+++ b/gnu/usr.bin/binutils/Makefile.bsd-wrapper
@@ -1,11 +1,8 @@
-# $OpenBSD: Makefile.bsd-wrapper,v 1.20 1998/03/29 07:28:04 millert Exp $
-
-MAN= binutils/ar.1 binutils/nm.1 \
- binutils/objcopy.1 binutils/objdump.1 binutils/ranlib.1 \
- binutils/size.1 binutils/strings.1 binutils/strip.1 \
- gas/doc/as.1 gprof/gprof.1 ld/ld.1
+# $OpenBSD: Makefile.bsd-wrapper,v 1.21 1998/03/29 22:17:17 niklas Exp $
SUBDIRS= libiberty opcodes bfd
+MAN=
+
# gdb not ready yet
.if (${MACHINE_ARCH} != "powerpc")
SUBDIRS+= gdb mmalloc readline
@@ -16,6 +13,10 @@ MAN+= gdb/gdb.1
.if (${MACHINE_ARCH} == "alpha") || (${MACHINE_ARCH} == "mips") || \
(${MACHINE_ARCH} == "powerpc")
SUBDIRS+= binutils ld gas
+MAN+= binutils/ar.1 binutils/nm.1 \
+ binutils/objcopy.1 binutils/objdump.1 binutils/ranlib.1 \
+ binutils/size.1 binutils/strings.1 binutils/strip.1 \
+ gas/doc/as.1 gprof/gprof.1 ld/ld.1
.endif
# Used by the GNU Makefile
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/nbsd.mh b/gnu/usr.bin/binutils/gdb/config/i386/nbsd.mh
index 5b3bd2b8c25..96125041759 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/nbsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/i386/nbsd.mh
@@ -1,5 +1,6 @@
# Host: Intel 386 running NetBSD
-XDEPFILES=
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386b-nat.o
+XDEPFILES= ser-tcp.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o i386nbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/nm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/i386/nm-nbsd.h
index b59fec68214..2a2f72d73bc 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/nm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/i386/nm-nbsd.h
@@ -17,18 +17,8 @@ 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. */
-#ifndef NM_NBSD_H
-#define NM_NBSD_H
-
/* Get generic NetBSD native definitions. */
#include "nm-nbsd.h"
-/* #define FLOAT_INFO { i386_float_info(); } */
-
-#define REGISTER_U_ADDR(addr, blockend, regno) \
- (addr) = i386_register_u_addr ((blockend),(regno));
-
-extern int
-i386_register_u_addr PARAMS ((int, int));
-
-#endif /* NM_NBSD_H */
+#define FLOAT_INFO extern i386_float_info (); \
+ i386_float_info ()
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/nm-obsd.h b/gnu/usr.bin/binutils/gdb/config/i386/nm-obsd.h
index 90972db74bb..953eedb64ac 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/nm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/i386/nm-obsd.h
@@ -17,18 +17,8 @@ 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. */
-#ifndef NM_OBSD_H
-#define NM_OBSD_H
-
/* Get generic OpenBSD native definitions. */
#include "nm-obsd.h"
-/* #define FLOAT_INFO { i386_float_info(); } */
-
-#define REGISTER_U_ADDR(addr, blockend, regno) \
- (addr) = i386_register_u_addr ((blockend),(regno));
-
-extern int
-i386_register_u_addr PARAMS ((int, int));
-
-#endif /* NM_OBSD_H */
+#define FLOAT_INFO extern i386_float_info (); \
+ i386_float_info ()
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/obsd.mh b/gnu/usr.bin/binutils/gdb/config/i386/obsd.mh
index ac9b74cfc77..34d97957980 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/obsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/i386/obsd.mh
@@ -1,5 +1,6 @@
# Host: Intel 386 running OpenBSD
-XDEPFILES=
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386b-nat.o solib.o
+XDEPFILES= ser-tcp.o
XM_FILE= xm-obsd.h
NAT_FILE= nm-obsd.h
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o i386nbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/obsd.mt b/gnu/usr.bin/binutils/gdb/config/i386/obsd.mt
index dc69ea704c5..21ff99a651b 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/obsd.mt
+++ b/gnu/usr.bin/binutils/gdb/config/i386/obsd.mt
@@ -1,3 +1,3 @@
# Target: Intel 386 running OpenBSD
-TDEPFILES= i386-tdep.o i387-tdep.o
+TDEPFILES= i386-tdep.o i387-tdep.o solib.o
TM_FILE= tm-obsd.h
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/tm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/i386/tm-nbsd.h
index cf5159f2655..5bfdd3f9074 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/tm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/i386/tm-nbsd.h
@@ -20,12 +20,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef TM_NBSD_H
#define TM_NBSD_H
-#include "i386/tm-i386bsd.h"
+#include "i386/tm-i386.h"
#include "tm-nbsd.h"
+/* NetBSD supports only the first 16 regs. */
#undef NUM_REGS
#define NUM_REGS 16
+/* On NetBSD, sigtramp is above the user stack and immediately below
+ the user area. Using constants here allows for cross debugging. */
+#define SIGTRAMP_END(pc) 0xefbfe000 /* USRSTACK */
+#define SIGTRAMP_START(pc) (SIGTRAMP_END(pc) - 64)
+
+/* Saved Pc. Get it from sigcontext if within sigtramp. */
+/* Offset to saved PC in sigcontext, from <sys/signal.h>. */
+#define SIGCONTEXT_PC_OFFSET 44
+
#define JB_ELEMENT_SIZE sizeof(int) /* jmp_buf[_JBLEN] is array of ints */
#define JB_PC 0 /* Setjmp()'s return PC saved here */
diff --git a/gnu/usr.bin/binutils/gdb/config/i386/tm-obsd.h b/gnu/usr.bin/binutils/gdb/config/i386/tm-obsd.h
index b2212c5db99..defa9a9a3a7 100644
--- a/gnu/usr.bin/binutils/gdb/config/i386/tm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/i386/tm-obsd.h
@@ -20,12 +20,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef TM_OBSD_H
#define TM_OBSD_H
-#include "i386/tm-i386bsd.h"
+#include "i386/tm-i386.h"
#include "tm-obsd.h"
+/* Net- and OpenBSD supports only the first 16 regs. */
#undef NUM_REGS
#define NUM_REGS 16
+/* On Net- and OpenBSD, sigtramp is above the user stack and immediately below
+ the user area. Using constants here allows for cross debugging. */
+#define SIGTRAMP_END(pc) 0xefbfe000 /* USRSTACK */
+#define SIGTRAMP_START(pc) (SIGTRAMP_END(pc) - 64)
+
+/* Saved Pc. Get it from sigcontext if within sigtramp. */
+/* Offset to saved PC in sigcontext, from <sys/signal.h>. */
+#define SIGCONTEXT_PC_OFFSET 44
+
#define JB_ELEMENT_SIZE sizeof(int) /* jmp_buf[_JBLEN] is array of ints */
#define JB_PC 0 /* Setjmp()'s return PC saved here */
@@ -39,4 +49,4 @@ get_longjmp_target PARAMS ((CORE_ADDR *));
#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)
-#endif /* TM_NBSD_H */
+#endif /* TM_OBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/m68k/nbsd.mh b/gnu/usr.bin/binutils/gdb/config/m68k/nbsd.mh
index 2e7fe617757..a3a2cbdd5b4 100644
--- a/gnu/usr.bin/binutils/gdb/config/m68k/nbsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/m68k/nbsd.mh
@@ -1,5 +1,6 @@
# Host: Motorola m68k running NetBSD
-XDEPFILES=
-NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o m68knbsd-nat.o
+XDEPFILES= ser-tcp.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o m68knbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mh b/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mh
index 309daf0e491..3c0cd1f8765 100644
--- a/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mh
@@ -1,5 +1,6 @@
# Host: Motorola m68k running OpenBSD
-XDEPFILES=
-NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o m68knbsd-nat.o solib.o
+XDEPFILES= ser-tcp.o
XM_FILE= xm-obsd.h
NAT_FILE= nm-obsd.h
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o m68knbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mt b/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mt
index 63708d9c5c6..2a6093bc4f7 100644
--- a/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mt
+++ b/gnu/usr.bin/binutils/gdb/config/m68k/obsd.mt
@@ -1,3 +1,3 @@
# Target: Motorola m68k running OpenBSD
-TDEPFILES= m68k-tdep.o
+TDEPFILES= m68k-tdep.o solib.o
TM_FILE= tm-obsd.h
diff --git a/gnu/usr.bin/binutils/gdb/config/m68k/tm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/m68k/tm-nbsd.h
index cc86cc8d4d2..ea6cb6992f7 100644
--- a/gnu/usr.bin/binutils/gdb/config/m68k/tm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/m68k/tm-nbsd.h
@@ -1,4 +1,4 @@
-/* Macro definitions for i386 running under NetBSD.
+/* Macro definitions for m68k running under NetBSD.
Copyright 1994 Free Software Foundation, Inc.
This file is part of GDB.
@@ -20,22 +20,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef TM_NBSD_H
#define TM_NBSD_H
-#include <sys/param.h>
-#include <machine/vmparam.h>
+/* NetBSD uses trap 15 for both user and kernel breakpoints. */
+#define BPT_VECTOR 0xf
+#define REMOTE_BPT_VECTOR 0xf
-/* Define BPT_VECTOR if it is different than the default.
- This is the vector number used by traps to indicate a breakpoint. */
-
-#define BPT_VECTOR 0x2
-
-/* Address of end of stack space. */
-#define STACK_END_ADDR USRSTACK
-
-/* For NetBSD, sigtramp is 32 bytes before STACK_END_ADDR. */
-#define SIGTRAMP_START(pc) (STACK_END_ADDR - 32)
-#define SIGTRAMP_END(pc) (STACK_END_ADDR)
+/* For NetBSD, sigtramp is 32 bytes before STACK_END_ADDR,
+ but we don't know where that is until run-time! */
+extern int nbsd_in_sigtramp(CORE_ADDR);
+#define IN_SIGTRAMP(pc, name) nbsd_in_sigtramp (pc)
+/* Generic definitions. */
#include "m68k/tm-m68k.h"
#include "tm-nbsd.h"
+/* Offset to saved PC in sigcontext, from <m68k/signal.h>. */
+#define SIGCONTEXT_PC_OFFSET 20
+
#endif /* TM_NBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/m68k/tm-obsd.h b/gnu/usr.bin/binutils/gdb/config/m68k/tm-obsd.h
index f24e530edc1..3773f55f775 100644
--- a/gnu/usr.bin/binutils/gdb/config/m68k/tm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/m68k/tm-obsd.h
@@ -1,4 +1,4 @@
-/* Macro definitions for i386 running under OpenBSD.
+/* Macro definitions for m68k running under OpenBSD.
Copyright 1994 Free Software Foundation, Inc.
This file is part of GDB.
@@ -20,22 +20,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef TM_OBSD_H
#define TM_OBSD_H
-#include <sys/param.h>
-#include <machine/vmparam.h>
+/* Net- and OpenBSD uses trap 15 for both user and kernel breakpoints. */
+#define BPT_VECTOR 0xf
+#define REMOTE_BPT_VECTOR 0xf
-/* Define BPT_VECTOR if it is different than the default.
- This is the vector number used by traps to indicate a breakpoint. */
-
-#define BPT_VECTOR 0x2
-
-/* Address of end of stack space. */
-#define STACK_END_ADDR USRSTACK
-
-/* For OpenBSD, sigtramp is 32 bytes before STACK_END_ADDR. */
-#define SIGTRAMP_START(pc) (STACK_END_ADDR - 32)
-#define SIGTRAMP_END(pc) (STACK_END_ADDR)
+/* For Net- and OpenBSD, sigtramp is 32 bytes before STACK_END_ADDR,
+ but we don't know where that is until run-time! */
+extern int nbsd_in_sigtramp(CORE_ADDR);
+#define IN_SIGTRAMP(pc, name) nbsd_in_sigtramp (pc)
+/* Generic definitions. */
#include "m68k/tm-m68k.h"
#include "tm-obsd.h"
+/* Offset to saved PC in sigcontext, from <m68k/signal.h>. */
+#define SIGCONTEXT_PC_OFFSET 20
+
#endif /* TM_OBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/nm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/nm-nbsd.h
index bc1d6a621ac..3e3663e7b53 100644
--- a/gnu/usr.bin/binutils/gdb/config/nm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/nm-nbsd.h
@@ -17,22 +17,32 @@ 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. */
-/* This is the amount to subtract from u.u_ar0
- to get the offset in the core file of the register values. */
+/* "Support" the NetBSD-specific "-k" option. */
+#define ADDITIONAL_OPTIONS {"k", no_argument, 0, 'k'},
+#define ADDITIONAL_OPTION_CASES case 'k': \
+ fprintf_unfiltered (gdb_stderr, \
+"-k: obsolete option. For kernel debugging, start gdb\n" \
+"with just the kernel name as an argument (no core file)\n" \
+"and then use the gdb command `target kcore COREFILE'.\n"); \
+ exit (1);
+/* End of "-k" stuff. */
-#include <machine/vmparam.h>
-
-#define KERNEL_U_ADDR USRSTACK
-
-#define PTRACE_ARG3_TYPE char*
+#define ATTACH_DETACH
+/* Use this instead of KERNEL_U_ADDR (See gdb/infptrace.c) */
#define FETCH_INFERIOR_REGISTERS
-#define ATTACH_DETACH
+/* This enables functions needed by kcore-nbsd.c */
+#define FETCH_KCORE_REGISTERS
+
+#define PTRACE_ARG3_TYPE char*
#include "solib.h" /* Support for shared libraries. */
-/* make structure definitions match up with those expected in solib.c */
+#ifndef SVR4_SHARED_LIBS
+/* The NetBSD link.h structure definitions have different names
+ than the SunOS version, but the structures are very similar,
+ so we can use solib.c by defining the SunOS names. */
#define link_object sod
#define lo_name sod_name
#define lo_library sod_library
@@ -54,7 +64,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define link_dynamic_2 section_dispatch_table
#define ld_loaded sdt_loaded
#define ld_need sdt_sods
-#define ld_rules sdt_filler1
+#define ld_rules sdt_rules
#define ld_got sdt_got
#define ld_plt sdt_plt
#define ld_rel sdt_rel
@@ -84,3 +94,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define ldd d_debug
#define ld_un d_un
#define ld_2 d_sdt
+
+#endif /* SVR4_SHARED_LIBS */
diff --git a/gnu/usr.bin/binutils/gdb/config/nm-obsd.h b/gnu/usr.bin/binutils/gdb/config/nm-obsd.h
index f0c91965eca..f897d68bc5e 100644
--- a/gnu/usr.bin/binutils/gdb/config/nm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/nm-obsd.h
@@ -17,22 +17,32 @@ 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. */
-/* This is the amount to subtract from u.u_ar0
- to get the offset in the core file of the register values. */
+/* "Support" the Net- and OpenBSD-specific "-k" option. */
+#define ADDITIONAL_OPTIONS {"k", no_argument, 0, 'k'},
+#define ADDITIONAL_OPTION_CASES case 'k': \
+ fprintf_unfiltered (gdb_stderr, \
+"-k: obsolete option. For kernel debugging, start gdb\n" \
+"with just the kernel name as an argument (no core file)\n" \
+"and then use the gdb command `target kcore COREFILE'.\n"); \
+ exit (1);
+/* End of "-k" stuff. */
-#include <machine/vmparam.h>
-
-#define KERNEL_U_ADDR USRSTACK
-
-#define PTRACE_ARG3_TYPE char*
+#define ATTACH_DETACH
+/* Use this instead of KERNEL_U_ADDR (See gdb/infptrace.c) */
#define FETCH_INFERIOR_REGISTERS
-#define ATTACH_DETACH
+/* This enables functions needed by kcore-nbsd.c */
+#define FETCH_KCORE_REGISTERS
+
+#define PTRACE_ARG3_TYPE char*
#include "solib.h" /* Support for shared libraries. */
-/* make structure definitions match up with those expected in solib.c */
+#ifndef SVR4_SHARED_LIBS
+/* The Net- and OpenBSD link.h structure definitions have different names
+ than the SunOS version, but the structures are very similar,
+ so we can use solib.c by defining the SunOS names. */
#define link_object sod
#define lo_name sod_name
#define lo_library sod_library
@@ -54,7 +64,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define link_dynamic_2 section_dispatch_table
#define ld_loaded sdt_loaded
#define ld_need sdt_sods
-#define ld_rules sdt_filler1
+#define ld_rules sdt_rules
#define ld_got sdt_got
#define ld_plt sdt_plt
#define ld_rel sdt_rel
@@ -84,3 +94,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define ldd d_debug
#define ld_un d_un
#define ld_2 d_sdt
+
+#endif /* SVR4_SHARED_LIBS */
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/nbsd.mh b/gnu/usr.bin/binutils/gdb/config/ns32k/nbsd.mh
index 96efec59ce5..2179e0655e1 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/nbsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/nbsd.mh
@@ -1,4 +1,6 @@
# Host: PC532 running NetBSD
+XDEPFILES= ser-tcp.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o ns32k-nat.o
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o ns32k-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/nm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/ns32k/nm-nbsd.h
index cef536e4050..c28fbcc09fb 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/nm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/nm-nbsd.h
@@ -23,14 +23,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Get generic NetBSD native definitions. */
#include "nm-nbsd.h"
-#if 0
-#define FLOAT_INFO { extern ns32k_float_info(); ns32k_float_info(); }
-#endif
-
-#define REGISTER_U_ADDR(addr, blockend, regno) \
- (addr) = ns32k_register_u_addr ((blockend),(regno));
-
-extern int
-ns32k_register_u_addr PARAMS ((int, int));
-
#endif /* NM_NBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/nm-obsd.h b/gnu/usr.bin/binutils/gdb/config/ns32k/nm-obsd.h
index 97bd9c0bafe..4f65861dce4 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/nm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/nm-obsd.h
@@ -23,14 +23,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Get generic OpenBSD native definitions. */
#include "nm-obsd.h"
-#if 0
-#define FLOAT_INFO { extern ns32k_float_info(); ns32k_float_info(); }
-#endif
-
-#define REGISTER_U_ADDR(addr, blockend, regno) \
- (addr) = ns32k_register_u_addr ((blockend),(regno));
-
-extern int
-ns32k_register_u_addr PARAMS ((int, int));
-
#endif /* NM_OBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mh b/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mh
index 479e675ea89..a5fb5f624cb 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mh
@@ -1,4 +1,6 @@
# Host: PC532 running OpenBSD
+XDEPFILES= ser-tcp.o
XM_FILE= xm-obsd.h
NAT_FILE= nm-obsd.h
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o ns32k-nat.o solib.o
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o ns32k-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mt b/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mt
index 684b146fc62..4767b9ad1df 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mt
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/obsd.mt
@@ -1,3 +1,3 @@
# Target: PC532 running OpenBSD
-TDEPFILES= ns32k-tdep.o
+TDEPFILES= ns32k-tdep.o solib.o
TM_FILE= tm-obsd.h
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/tm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/ns32k/tm-nbsd.h
index 5a0fa322a98..2d57bcd2cd3 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/tm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/tm-nbsd.h
@@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Override number of expected traps from sysv. */
#define START_INFERIOR_TRAPS_EXPECTED 2
+#define INVALID_FLOAT(p, s) invalid_float(p, s)
/* Most definitions from umax could be used. */
@@ -30,6 +31,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Saved Pc. Get it from sigcontext if within sigtramp. */
+/* We define our own fetch and store methods. */
+#define FETCH_INFERIOR_REGISTERS
+
/* Offset to saved PC in sigcontext, from <machine/signal.h>. */
#define SIGCONTEXT_PC_OFFSET 20
@@ -39,3 +43,65 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
? sigtramp_saved_pc (FRAME) \
: read_memory_integer ((FRAME)->frame + 4, 4)) \
)
+
+#undef FRAME_NUM_ARGS
+#define FRAME_NUM_ARGS(numargs, fi) numargs = frame_num_args(fi)
+
+#undef FRAME_CHAIN
+#define FRAME_CHAIN(thisframe) \
+ (read_memory_integer ((thisframe)->frame, 4) > (thisframe)->frame ? \
+ read_memory_integer ((thisframe)->frame, 4) : 0)
+
+#define FRAME_CHAIN_VALID(chain, thisframe)\
+ ((chain) != 0\
+ && !inside_main_func ((thisframe) -> pc))
+
+/* tm-umax.h assumes a 32082 fpu. We have a 32382 fpu. */
+#undef REGISTER_NAMES
+#undef NUM_REGS
+#undef REGISTER_BYTES
+#undef REGISTER_BYTE
+/* Initializer for an array of names of registers.
+ There should be NUM_REGS strings in this initializer. */
+
+#define REGISTER_NAMES {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
+ "sp", "fp", "pc", "ps", \
+ "fsr", \
+ "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", "xx", \
+ }
+
+#define NUM_REGS 29
+
+/* Total amount of space needed to store our copies of the machine's
+ register state, the array `registers'. */
+#define REGISTER_BYTES \
+ ((NUM_REGS - 4) * REGISTER_RAW_SIZE(R0_REGNUM) \
+ + 8 * REGISTER_RAW_SIZE(LP0_REGNUM))
+
+/* Index within `registers' of the first byte of the space for
+ register N. */
+
+/* This is a bit yuck. The even numbered double precision floating
+ point long registers occupy the same space as the even:odd numbered
+ single precision floating point registers, but the extra 32381 fpu
+ registers are at the end. Doing it this way is compatable for both
+ 32081 and 32381 equiped machines. */
+
+#define REGISTER_BYTE(N) (((N) < LP0_REGNUM? (N)\
+ : ((N) - LP0_REGNUM) & 1? (N) - 1 \
+ : ((N) - LP0_REGNUM + FP0_REGNUM)) * 4)
+
+
+#undef FRAME_NUM_ARGS
+#define FRAME_NUM_ARGS(numargs, fi) numargs = frame_num_args(fi)
+
+#undef FRAME_CHAIN
+#define FRAME_CHAIN(thisframe) \
+ (read_memory_integer ((thisframe)->frame, 4) > (thisframe)->frame ? \
+ read_memory_integer ((thisframe)->frame, 4) : 0)
+
+#undef FRAME_CHAIN_VALID
+#define FRAME_CHAIN_VALID(chain, thisframe) \
+ ((chain) != 0 \
+ && !inside_main_func ((thisframe) -> pc))
diff --git a/gnu/usr.bin/binutils/gdb/config/ns32k/tm-obsd.h b/gnu/usr.bin/binutils/gdb/config/ns32k/tm-obsd.h
index 41fdb88db3d..1dc3bbcf8a1 100644
--- a/gnu/usr.bin/binutils/gdb/config/ns32k/tm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/ns32k/tm-obsd.h
@@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Override number of expected traps from sysv. */
#define START_INFERIOR_TRAPS_EXPECTED 2
+#define INVALID_FLOAT(p, s) invalid_float(p, s)
/* Most definitions from umax could be used. */
@@ -30,6 +31,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Saved Pc. Get it from sigcontext if within sigtramp. */
+/* We define our own fetch and store methods. */
+#define FETCH_INFERIOR_REGISTERS
+
/* Offset to saved PC in sigcontext, from <machine/signal.h>. */
#define SIGCONTEXT_PC_OFFSET 20
@@ -39,3 +43,65 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
? sigtramp_saved_pc (FRAME) \
: read_memory_integer ((FRAME)->frame + 4, 4)) \
)
+
+#undef FRAME_NUM_ARGS
+#define FRAME_NUM_ARGS(numargs, fi) numargs = frame_num_args(fi)
+
+#undef FRAME_CHAIN
+#define FRAME_CHAIN(thisframe) \
+ (read_memory_integer ((thisframe)->frame, 4) > (thisframe)->frame ? \
+ read_memory_integer ((thisframe)->frame, 4) : 0)
+
+#define FRAME_CHAIN_VALID(chain, thisframe)\
+ ((chain) != 0\
+ && !inside_main_func ((thisframe) -> pc))
+
+/* tm-umax.h assumes a 32082 fpu. We have a 32382 fpu. */
+#undef REGISTER_NAMES
+#undef NUM_REGS
+#undef REGISTER_BYTES
+#undef REGISTER_BYTE
+/* Initializer for an array of names of registers.
+ There should be NUM_REGS strings in this initializer. */
+
+#define REGISTER_NAMES {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
+ "sp", "fp", "pc", "ps", \
+ "fsr", \
+ "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", "xx", \
+ }
+
+#define NUM_REGS 29
+
+/* Total amount of space needed to store our copies of the machine's
+ register state, the array `registers'. */
+#define REGISTER_BYTES \
+ ((NUM_REGS - 4) * REGISTER_RAW_SIZE(R0_REGNUM) \
+ + 8 * REGISTER_RAW_SIZE(LP0_REGNUM))
+
+/* Index within `registers' of the first byte of the space for
+ register N. */
+
+/* This is a bit yuck. The even numbered double precision floating
+ point long registers occupy the same space as the even:odd numbered
+ single precision floating point registers, but the extra 32381 fpu
+ registers are at the end. Doing it this way is compatable for both
+ 32081 and 32381 equiped machines. */
+
+#define REGISTER_BYTE(N) (((N) < LP0_REGNUM? (N)\
+ : ((N) - LP0_REGNUM) & 1? (N) - 1 \
+ : ((N) - LP0_REGNUM + FP0_REGNUM)) * 4)
+
+
+#undef FRAME_NUM_ARGS
+#define FRAME_NUM_ARGS(numargs, fi) numargs = frame_num_args(fi)
+
+#undef FRAME_CHAIN
+#define FRAME_CHAIN(thisframe) \
+ (read_memory_integer ((thisframe)->frame, 4) > (thisframe)->frame ? \
+ read_memory_integer ((thisframe)->frame, 4) : 0)
+
+#undef FRAME_CHAIN_VALID
+#define FRAME_CHAIN_VALID(chain, thisframe) \
+ ((chain) != 0 \
+ && !inside_main_func ((thisframe) -> pc))
diff --git a/gnu/usr.bin/binutils/gdb/config/sparc/nbsd.mh b/gnu/usr.bin/binutils/gdb/config/sparc/nbsd.mh
index 310838d6acf..2d36ed9dab1 100644
--- a/gnu/usr.bin/binutils/gdb/config/sparc/nbsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/sparc/nbsd.mh
@@ -2,5 +2,5 @@
XDEPFILES= ser-tcp.o
XM_FILE= xm-nbsd.h
NAT_FILE= nm-nbsd.h
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o sparc-nat.o
-HOST_IPC=-DBSD_IPC
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o sparcnbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/sparc/nm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/sparc/nm-nbsd.h
index 016772ae372..a39b4581725 100644
--- a/gnu/usr.bin/binutils/gdb/config/sparc/nm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/sparc/nm-nbsd.h
@@ -18,40 +18,9 @@ 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. */
-#ifndef NM_NBSD_H
-#define NM_NBSD_H
-
/* Get generic NetBSD native definitions. */
-
#include "nm-nbsd.h"
-#define FETCH_INFERIOR_REGISTERS
-
-/* Before storing, we need to read all the registers. */
-
-#define CHILD_PREPARE_TO_STORE() read_register_bytes (0, NULL, REGISTER_BYTES)
-
-/* Make things match up with what is expected in sparc-nat.c. */
-
-#define regs trapframe
-#define fp_status fpstate
-
-#define r_g1 tf_global[1]
-#define r_ps tf_psr
-#define r_pc tf_pc
-#define r_npc tf_npc
-#define r_y tf_y
-
-#define fpu fpstate
-#define fpu_regs fs_regs
-#define fpu_fsr fs_fsr
-#define fpu_fr fs_regs
-#define Fpu_fsr fs_fsr
-#define FPU_FSR_TYPE int
-
-#define PTRACE_GETREGS PT_GETREGS
-#define PTRACE_GETFPREGS PT_GETFPREGS
-#define PTRACE_SETREGS PT_SETREGS
-#define PTRACE_SETFPREGS PT_SETFPREGS
-
-#endif /* NM_NBSD_H */
+/* Before storing, read all the registers. (see inftarg.c) */
+#define CHILD_PREPARE_TO_STORE() \
+ read_register_bytes (0, NULL, REGISTER_BYTES)
diff --git a/gnu/usr.bin/binutils/gdb/config/sparc/nm-obsd.h b/gnu/usr.bin/binutils/gdb/config/sparc/nm-obsd.h
index a6330ef39cb..001ab3e5554 100644
--- a/gnu/usr.bin/binutils/gdb/config/sparc/nm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/sparc/nm-obsd.h
@@ -18,40 +18,9 @@ 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. */
-#ifndef NM_OBSD_H
-#define NM_OBSD_H
-
/* Get generic OpenBSD native definitions. */
-
#include "nm-obsd.h"
-#define FETCH_INFERIOR_REGISTERS
-
-/* Before storing, we need to read all the registers. */
-
-#define CHILD_PREPARE_TO_STORE() read_register_bytes (0, NULL, REGISTER_BYTES)
-
-/* Make things match up with what is expected in sparc-nat.c. */
-
-#define regs trapframe
-#define fp_status fpstate
-
-#define r_g1 tf_global[1]
-#define r_ps tf_psr
-#define r_pc tf_pc
-#define r_npc tf_npc
-#define r_y tf_y
-
-#define fpu fpstate
-#define fpu_regs fs_regs
-#define fpu_fsr fs_fsr
-#define fpu_fr fs_regs
-#define Fpu_fsr fs_fsr
-#define FPU_FSR_TYPE int
-
-#define PTRACE_GETREGS PT_GETREGS
-#define PTRACE_GETFPREGS PT_GETFPREGS
-#define PTRACE_SETREGS PT_SETREGS
-#define PTRACE_SETFPREGS PT_SETFPREGS
-
-#endif /* NM_OBSD_H */
+/* Before storing, read all the registers. (see inftarg.c) */
+#define CHILD_PREPARE_TO_STORE() \
+ read_register_bytes (0, NULL, REGISTER_BYTES)
diff --git a/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mh b/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mh
index 963a4470493..a7a0940bd90 100644
--- a/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mh
+++ b/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mh
@@ -2,5 +2,5 @@
XDEPFILES= ser-tcp.o
XM_FILE= xm-obsd.h
NAT_FILE= nm-obsd.h
-NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o sparc-nat.o solib.o
-HOST_IPC=-DBSD_IPC
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o sparcnbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mt b/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mt
index ae148ac88ca..e7598446aed 100644
--- a/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mt
+++ b/gnu/usr.bin/binutils/gdb/config/sparc/obsd.mt
@@ -1,3 +1,3 @@
# Target: Sun 4 or Sparcstation, running OpenBSD
-TDEPFILES= sparc-tdep.o
+TDEPFILES= sparc-tdep.o solib.o
TM_FILE= tm-obsd.h
diff --git a/gnu/usr.bin/binutils/gdb/config/tm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/tm-nbsd.h
index e295d85ea2d..ec4ca2d328c 100644
--- a/gnu/usr.bin/binutils/gdb/config/tm-nbsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/tm-nbsd.h
@@ -17,3 +17,12 @@ 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. */
+
+#ifndef SVR4_SHARED_LIBS
+
+/* Return non-zero if we are in a shared library trampoline code stub. */
+
+#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) \
+ (name && !strcmp(name, "_DYNAMIC"))
+
+#endif /* !SVR4_SHARED_LIBS */
diff --git a/gnu/usr.bin/binutils/gdb/config/tm-obsd.h b/gnu/usr.bin/binutils/gdb/config/tm-obsd.h
index d386e5a5dc9..97f36fdaed8 100644
--- a/gnu/usr.bin/binutils/gdb/config/tm-obsd.h
+++ b/gnu/usr.bin/binutils/gdb/config/tm-obsd.h
@@ -17,3 +17,12 @@ 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. */
+
+#ifndef SVR4_SHARED_LIBS
+
+/* Return non-zero if we are in a shared library trampoline code stub. */
+
+#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) \
+ (name && !strcmp(name, "_DYNAMIC"))
+
+#endif /* !SVR4_SHARED_LIBS */
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/nbsd.mh b/gnu/usr.bin/binutils/gdb/config/vax/nbsd.mh
new file mode 100644
index 00000000000..5ea7a09d838
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/nbsd.mh
@@ -0,0 +1,6 @@
+# Host: VAX running NetBSD
+XDEPFILES= ser-tcp.o
+XM_FILE= xm-nbsd.h
+NAT_FILE= nm-nbsd.h
+NAT_CLIBS= -lkvm
+NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o kcore-nbsd.o vaxnbsd-nat.o
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/nm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/vax/nm-nbsd.h
new file mode 100644
index 00000000000..cc013378340
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/nm-nbsd.h
@@ -0,0 +1,21 @@
+/* Native-dependent definitions for DEC VAX running NetBSD, for GDB.
+ Copyright 1996 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. */
+
+/* Get generic NetBSD native definitions. */
+#include "nm-nbsd.h"
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/nm-obsd.h b/gnu/usr.bin/binutils/gdb/config/vax/nm-obsd.h
new file mode 100644
index 00000000000..06ce32d32e6
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/nm-obsd.h
@@ -0,0 +1,21 @@
+/* Native-dependent definitions for DEC VAX running OpenBSD, for GDB.
+ Copyright 1996 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. */
+
+/* Get generic OpenBSD native definitions. */
+#include "nm-obsd.h"
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/obsd.mt b/gnu/usr.bin/binutils/gdb/config/vax/obsd.mt
new file mode 100644
index 00000000000..60acef1d0d3
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/obsd.mt
@@ -0,0 +1,3 @@
+# Target: VAX running OpenBSD
+TDEPFILES= vax-tdep.o solib.o
+TM_FILE= tm-obsd.h
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/tm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/vax/tm-nbsd.h
new file mode 100644
index 00000000000..82beba5c89f
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/tm-nbsd.h
@@ -0,0 +1,26 @@
+/* Macro definitions for Sparc running under NetBSD.
+ Copyright 1994 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. */
+
+#ifndef TM_NBSD_H
+#define TM_NBSD_H
+
+#include "vax/tm-vax.h"
+#include "tm-nbsd.h"
+
+#endif /* TM_NBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/tm-obsd.h b/gnu/usr.bin/binutils/gdb/config/vax/tm-obsd.h
new file mode 100644
index 00000000000..8a195bda67b
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/tm-obsd.h
@@ -0,0 +1,26 @@
+/* Macro definitions for Sparc running under OpenBSD.
+ Copyright 1994 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. */
+
+#ifndef TM_OBSD_H
+#define TM_OBSD_H
+
+#include "vax/tm-vax.h"
+#include "tm-obsd.h"
+
+#endif /* TM_OBSD_H */
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/xm-nbsd.h b/gnu/usr.bin/binutils/gdb/config/vax/xm-nbsd.h
new file mode 100644
index 00000000000..7e5cb7eafc1
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/xm-nbsd.h
@@ -0,0 +1,21 @@
+/* Parameters for execution on a VAX running NetBSD, for GDB.
+ Copyright 1994 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. */
+
+/* Get generic NetBSD host definitions. */
+#include "xm-nbsd.h"
diff --git a/gnu/usr.bin/binutils/gdb/config/vax/xm-obsd.h b/gnu/usr.bin/binutils/gdb/config/vax/xm-obsd.h
new file mode 100644
index 00000000000..88428ad732d
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/config/vax/xm-obsd.h
@@ -0,0 +1,21 @@
+/* Parameters for execution on a VAX running OpenBSD, for GDB.
+ Copyright 1994 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. */
+
+/* Get generic OpenBSD host definitions. */
+#include "xm-obsd.h"
diff --git a/gnu/usr.bin/binutils/gdb/configure.host b/gnu/usr.bin/binutils/gdb/configure.host
index f2936eba6b4..cb6ff7b1f31 100644
--- a/gnu/usr.bin/binutils/gdb/configure.host
+++ b/gnu/usr.bin/binutils/gdb/configure.host
@@ -157,6 +157,7 @@ sparc64-*-*) gdb_host=sun4sol2 ;;
tahoe-*-*) gdb_host=tahoe ;;
vax-*-bsd*) gdb_host=vaxbsd ;;
+vax-*-openbsd*) gdb_host=obsd ;;
vax-*-ultrix2*) gdb_host=vaxult2 ;;
vax-*-ultrix*) gdb_host=vaxult ;;
diff --git a/gnu/usr.bin/binutils/gdb/kcore-nbsd.c b/gnu/usr.bin/binutils/gdb/kcore-nbsd.c
new file mode 100644
index 00000000000..b9778657b42
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/kcore-nbsd.c
@@ -0,0 +1,474 @@
+/* Kernel core dump functions below target vector, for GDB.
+ Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995
+ 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.
+*/
+
+/*
+ * This works like "remote" but, you use it like this:
+ * target kcore /dev/mem
+ * or
+ * target kcore /var/crash/host/core.0
+ *
+ * This way makes it easy to short-circut the whole bfd monster,
+ * and direct the inferior stuff to our libkvm implementation.
+ */
+
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/proc.h>
+#include <sys/user.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <kvm.h>
+
+#include "defs.h"
+#include "gdb_string.h"
+#include "frame.h" /* required by inferior.h */
+#include "inferior.h"
+#include "symtab.h"
+#include "command.h"
+#include "bfd.h"
+#include "target.h"
+#include "gdbcore.h"
+
+struct target_ops kcore_ops;
+
+static void
+kcore_files_info PARAMS ((struct target_ops *));
+
+static void
+kcore_close PARAMS ((int));
+
+static void
+get_kcore_registers PARAMS ((int));
+
+static int
+xfer_mem PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
+
+static int
+xfer_umem PARAMS ((CORE_ADDR, char *, int, int));
+
+static char *core_file;
+static kvm_t *core_kd;
+static struct pcb cur_pcb;
+
+
+/*
+ * Read the "thing" at kernel address 'addr' into the space pointed to
+ * by point. The length of the "thing" is determined by the type of p.
+ * Result is non-zero if transfer fails.
+ */
+#define kvread(addr, p) \
+(target_read_memory((CORE_ADDR)(addr), (char *)(p), sizeof(*(p))))
+
+
+CORE_ADDR
+ksym_lookup(name)
+ const char *name;
+{
+ struct minimal_symbol *sym;
+
+ sym = lookup_minimal_symbol(name, NULL, NULL);
+ if (sym == NULL)
+ error("kernel symbol `%s' not found.", name);
+
+ return SYMBOL_VALUE_ADDRESS(sym);
+}
+
+/*
+ * Provide the address of an initial PCB to use.
+ * If this is a crash dump, try for "dumppcb".
+ * If no "dumppcb" or it's /dev/mem, use proc0.
+ * Return the core address of the PCB we found.
+ */
+static CORE_ADDR
+initial_pcb()
+{
+ struct minimal_symbol *sym;
+ CORE_ADDR addr;
+ void *val;
+
+ /* Make sure things are open... */
+ if (!core_kd || !core_file)
+ return (0);
+
+ /* If this is NOT /dev/mem try for dumppcb. */
+ if (strncmp(core_file, "/dev/", 5)) {
+ sym = lookup_minimal_symbol("dumppcb", NULL, NULL);
+ if (sym != NULL) {
+ addr = SYMBOL_VALUE_ADDRESS(sym);
+ return (addr);
+ }
+ }
+
+ /*
+ * OK, just use proc0pcb. Note that curproc might
+ * not exist, and if it does, it will point to gdb.
+ * Therefore, just use proc0 and let the user set
+ * some other context if they care about it.
+ */
+ addr = ksym_lookup("proc0paddr");
+ if (kvread(addr, &val)) {
+ error("cannot read proc0paddr pointer at %x\n", addr);
+ val = 0;
+ }
+
+ return ((CORE_ADDR)val);
+}
+
+/*
+ * Set the current context to that of the PCB struct
+ * at the system address passed.
+ */
+static int
+set_context(addr)
+ CORE_ADDR addr;
+{
+
+ if (kvread(addr, &cur_pcb))
+ error("cannot read pcb at %#x", addr);
+
+ /* Fetch all registers from core file */
+ target_fetch_registers (-1);
+
+ /* Now, set up the frame cache, and print the top of stack */
+ flush_cached_frames();
+ set_current_frame (create_new_frame (read_fp (), read_pc ()));
+ select_frame (get_current_frame (), 0);
+ return (0);
+}
+
+/* Discard all vestiges of any previous core file and mark data and stack
+ spaces as empty. */
+
+/* ARGSUSED */
+static void
+kcore_close (quitting)
+ int quitting;
+{
+
+ inferior_pid = 0; /* Avoid confusion from thread stuff */
+
+ if (core_kd) {
+ kvm_close(core_kd);
+ free(core_file);
+ core_file = NULL;
+ core_kd = NULL;
+ }
+}
+
+/* This routine opens and sets up the core file bfd. */
+
+static void
+kcore_open (filename, from_tty)
+ char *filename; /* the core file */
+ int from_tty;
+{
+ kvm_t *kd;
+ const char *p;
+ struct cleanup *old_chain;
+ char buf[256], *cp;
+ int ontop;
+ CORE_ADDR addr;
+
+ target_preopen (from_tty);
+
+ /* The exec file is required for symbols. */
+ if (exec_bfd == NULL)
+ error("No kernel exec file specified");
+
+ if (core_kd) {
+ error ("No core file specified."
+ " (Use `detach' to stop debugging a core file.)");
+ return;
+ }
+
+ if (!filename) {
+ error ("No core file specified.");
+ return;
+ }
+
+ filename = tilde_expand (filename);
+ if (filename[0] != '/') {
+ cp = concat (current_directory, "/", filename, NULL);
+ free (filename);
+ filename = cp;
+ }
+
+ old_chain = make_cleanup (free, filename);
+
+ kd = kvm_open (bfd_get_filename(exec_bfd), filename, NULL,
+ write_files ? O_RDWR: O_RDONLY, 0);
+ if (kd == NULL) {
+ perror_with_name (filename);
+ return;
+ }
+
+ /* Looks semi-reasonable. Toss the old core file and work on the new. */
+
+ discard_cleanups (old_chain); /* Don't free filename any more */
+ core_file = filename;
+ unpush_target (&kcore_ops);
+ ontop = !push_target (&kcore_ops);
+
+ /* Note unpush_target (above) calls kcore_close. */
+ core_kd = kd;
+
+ /* print out the panic string if there is one */
+ if (kvread(ksym_lookup("panicstr"), &addr) == 0 &&
+ addr != 0 &&
+ target_read_memory(addr, buf, sizeof(buf)) == 0) {
+
+ for (cp = buf; cp < &buf[sizeof(buf)] && *cp; cp++)
+ if (!isascii(*cp) || (!isprint(*cp) && !isspace(*cp)))
+ *cp = '?';
+ *cp = '\0';
+ if (buf[0] != '\0')
+ printf_filtered("panic: %s\n", buf);
+ }
+
+ if (!ontop) {
+ warning (
+"you won't be able to access this core file until you terminate\n\
+your %s; do ``info files''", target_longname);
+ return;
+ }
+
+ /* Now, set up process context, and print the top of stack */
+ (void)set_context(initial_pcb());
+ print_stack_frame (selected_frame, selected_frame_level, 1);
+}
+
+static void
+kcore_detach (args, from_tty)
+ char *args;
+ int from_tty;
+{
+ if (args)
+ error ("Too many arguments");
+ unpush_target (&kcore_ops);
+ reinit_frame_cache ();
+ if (from_tty)
+ printf_filtered ("No kernel core file now.\n");
+}
+
+/* Get the registers out of a core file. This is the machine-
+ independent part. Fetch_core_registers is the machine-dependent
+ part, typically implemented in the xm-file for each architecture. */
+
+/* We just get all the registers, so we don't use regno. */
+
+/* ARGSUSED */
+static void
+get_kcore_registers (regno)
+ int regno;
+{
+
+ /*
+ * XXX - Only read the pcb when set_context() is called.
+ * When looking at a live kernel this may be a problem,
+ * but the user can do another "proc" or "pcb" command to
+ * grab a new copy of the pcb...
+ */
+
+ /*
+ * Zero out register set then fill in the ones we know about.
+ */
+ fetch_kcore_registers (&cur_pcb);
+}
+
+static void
+kcore_files_info (t)
+ struct target_ops *t;
+{
+ printf_filtered ("\t`%s'\n", core_file);
+}
+
+/* If mourn is being called in all the right places, this could be say
+ `gdb internal error' (since generic_mourn calls breakpoint_init_inferior). */
+
+static int
+ignore (addr, contents)
+ CORE_ADDR addr;
+ char *contents;
+{
+ return 0;
+}
+
+static int
+xfer_kmem (memaddr, myaddr, len, write, target)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+ int write;
+ struct target_ops *target;
+{
+ int n;
+
+#if 0 /* XXX */
+ if (it is a user address)
+ return xfer_umem(memaddr, myaddr, len, write);
+#endif
+
+ if (core_kd == NULL)
+ return 0;
+
+ if (write)
+ n = kvm_write(core_kd, memaddr, myaddr, len);
+ else
+ n = kvm_read (core_kd, memaddr, myaddr, len) ;
+ if (n < 0) {
+ fprintf_unfiltered (gdb_stderr, "can not access 0x%x, %s\n",
+ memaddr, kvm_geterr(core_kd));
+ n = 0;
+ }
+
+ return n;
+}
+
+#if 0 /* XXX */
+static int
+xfer_umem (memaddr, myaddr, len, write)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+ int write; /* ignored */
+{
+ int n;
+ struct proc proc;
+
+ if (kvread(cur_proc, &proc))
+ error("cannot read proc at %#x", cur_proc);
+ n = kvm_uread(core_kd, &proc, memaddr, myaddr, len) ;
+
+ if (n < 0)
+ return 0;
+ return n;
+}
+#endif
+
+static void
+set_proc_cmd(arg)
+ char *arg;
+{
+ CORE_ADDR addr;
+ void *val;
+
+ if (!arg)
+ error_no_arg("proc address for the new context");
+
+ if (core_kd == NULL)
+ error("no kernel core file");
+
+ addr = (CORE_ADDR)parse_and_eval_address(arg);
+
+ /* Read the PCB address in proc structure. */
+ addr += (int) &((struct proc *)0)->p_addr;
+ if (kvread(addr, &val))
+ error("cannot read u area ptr");
+
+ if (set_context((CORE_ADDR)val))
+ error("invalid proc address");
+}
+
+static void
+set_pcb_cmd(arg)
+ char *arg;
+{
+ CORE_ADDR addr;
+ void *val;
+
+ if (!arg)
+ error_no_arg("pcb address for the new context");
+
+ if (core_kd == NULL)
+ error("no kernel core file");
+
+ addr = (CORE_ADDR)parse_and_eval_address(arg);
+
+ if (set_context(addr))
+ error("invalid pcb address");
+}
+
+struct target_ops kcore_ops = {
+ "kcore", /* to_shortname */
+ "Kernel memory image", /* to_longname */
+ "Use a kernel core dump file or live kernel as a target.\n\
+Specify the filename of the core file or /dev/mem for the live kernel.",
+ kcore_open, /* to_open */
+ kcore_close, /* to_close */
+ find_default_attach, /* to_attach */
+ kcore_detach, /* to_detach */
+ 0, /* to_resume */
+ 0, /* to_wait */
+ get_kcore_registers, /* to_fetch_registers */
+ 0, /* to_store_registers */
+ 0, /* to_prepare_to_store */
+ xfer_kmem, /* to_xfer_memory */
+ kcore_files_info, /* to_files_info */
+ ignore, /* to_insert_breakpoint */
+ ignore, /* to_remove_breakpoint */
+
+ 0, /* to_terminal_init */
+ 0, /* to_terminal_inferior */
+ 0, /* to_terminal_ours_for_output */
+ 0, /* to_terminal_ours */
+ 0, /* to_terminal_info */
+
+ 0, /* to_kill */
+ 0, /* to_load */
+ 0, /* to_lookup_symbol */
+
+ find_default_create_inferior, /* to_create_inferior */
+ 0, /* to_mourn_inferior */
+ 0, /* to_can_run */
+ 0, /* to_notice_signals */
+ 0, /* to_thread_alive */
+ 0, /* to_stop */
+
+ /*
+ * Use the same "stratum" as remote.c uses, because
+ * find_core_target() should NOT find this target.
+ */
+ process_stratum, /* to_stratum */
+ 0, /* to_next */
+
+ 0, /* to_has_all_memory */
+ 1, /* to_has_memory */
+ 1, /* to_has_stack */
+ 1, /* to_has_registers */
+ 0, /* to_has_execution */
+
+ 0, /* to_sections */
+ 0, /* to_sections_end */
+ OPS_MAGIC, /* to_magic */
+};
+
+void
+_initialize_kcore_nbsd()
+{
+
+ add_target (&kcore_ops);
+
+ add_com ("proc", class_obscure, set_proc_cmd,
+ "Set current context from proc address");
+ add_com ("pcb", class_obscure, set_pcb_cmd,
+ "Set current context from pcb address");
+}
diff --git a/gnu/usr.bin/binutils/gdb/m68k-tdep.c b/gnu/usr.bin/binutils/gdb/m68k-tdep.c
index d597efa0ec7..9da48b8eb63 100644
--- a/gnu/usr.bin/binutils/gdb/m68k-tdep.c
+++ b/gnu/usr.bin/binutils/gdb/m68k-tdep.c
@@ -20,9 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "frame.h"
#include "symtab.h"
-#include "gdbcore.h"
-#include "value.h"
-#include "gdb_string.h"
/* Push an empty stack frame, to record the current PC, etc. */
@@ -64,6 +61,7 @@ m68k_pop_frame ()
register CORE_ADDR fp;
register int regnum;
struct frame_saved_regs fsr;
+ struct frame_info *fi;
char raw_buffer[12];
fp = FRAME_FP (frame);
@@ -509,6 +507,59 @@ m68k_saved_pc_after_call(frame)
return read_memory_integer (read_register (SP_REGNUM), 4);
}
+/* This used to be needed by tm-sun3.h but is probably not
+ used by any targets anymore. Keep it for now anyway.
+ This works like blockframe.c:sigtramp_saved_pc() */
+
+#ifdef SIG_PC_FP_OFFSET
+CORE_ADDR
+m68k_sigtramp_saved_pc (frame)
+ struct frame_info *frame;
+{
+ CORE_ADDR nextfp, pc;
+
+ if (frame->signal_handler_caller == 0)
+ abort();
+
+ nextfp = (frame)->next ?
+ (frame)->next->frame :
+ read_register (SP_REGNUM) - 8;
+ nextfp += SIG_PC_FP_OFFSET;
+
+ pc = read_memory_integer (nextfp, 4);
+
+ return pc;
+}
+#endif /* SIG_PC_FP_OFFSET */
+
+/* For Open- and NetBSD, sigtramp is 32 bytes before STACK_END_ADDR,
+ but we don't know where that is until run-time! */
+
+#if defined(TM_NBSD_H) || defined(TM_OBSD_H)
+int
+nbsd_in_sigtramp (pc)
+ CORE_ADDR pc;
+{
+ static CORE_ADDR stack_end_addr;
+ struct minimal_symbol *msymbol;
+ CORE_ADDR pssaddr;
+ int rv;
+
+ if (stack_end_addr == 0) {
+ msymbol = lookup_minimal_symbol("__ps_strings", NULL, NULL);
+ if (msymbol == NULL)
+ pssaddr = 0x40a0; /* XXX return 0? */
+ else
+ pssaddr = SYMBOL_VALUE_ADDRESS(msymbol);
+ stack_end_addr = read_memory_integer (pssaddr, 4);
+ stack_end_addr = (stack_end_addr + 0xFF) & ~0xFF;
+ }
+ rv = ((pc >= (stack_end_addr - 32)) &&
+ (pc < stack_end_addr));
+ return rv;
+}
+#endif /* TM_NBSD_H || TM_OBSD_H */
+
void
_initialize_m68k_tdep ()
{
diff --git a/gnu/usr.bin/binutils/gdb/m68knbsd-nat.c b/gnu/usr.bin/binutils/gdb/m68knbsd-nat.c
index c2e71dfb570..c1a604f7045 100644
--- a/gnu/usr.bin/binutils/gdb/m68knbsd-nat.c
+++ b/gnu/usr.bin/binutils/gdb/m68knbsd-nat.c
@@ -1,5 +1,5 @@
-/* Native-dependent code for Motorola m68k's running NetBSD, for GDB.
- Copyright 1988, 1989, 1991, 1992, 1994, 1996 Free Software Foundation, Inc.
+/* Functions specific to running gdb native on an m68k running NetBSD
+ Copyright 1989, 1992, 1993, 1994, 1996 Free Software Foundation, Inc.
This file is part of GDB.
@@ -19,34 +19,41 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <sys/types.h>
#include <sys/ptrace.h>
-#include <machine/reg.h>
-#include <machine/frame.h>
+#include <m68k/reg.h>
+#include <m68k/frame.h>
+#ifdef __OpenBSD__
+#include <machine/pcb.h>
+#else
+#include <m68k/pcb.h>
+#endif
#include "defs.h"
#include "inferior.h"
+#include "target.h"
+#include "gdbcore.h"
void
-fetch_inferior_registers(regno)
+fetch_inferior_registers (regno)
int regno;
{
struct reg inferior_registers;
struct fpreg inferior_fp_registers;
- ptrace (PT_GETREGS, inferior_pid,
+ ptrace (PT_GETREGS, inferior_pid,
(PTRACE_ARG3_TYPE) &inferior_registers, 0);
- memcpy (&registers[REGISTER_BYTE (0)], &inferior_registers,
+ memcpy (&registers[REGISTER_BYTE (0)], &inferior_registers,
sizeof(inferior_registers));
- ptrace (PT_GETFPREGS, inferior_pid,
+ ptrace (PT_GETFPREGS, inferior_pid,
(PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
- memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers,
+ memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers,
sizeof(inferior_fp_registers));
registers_fetched ();
}
void
-store_inferior_registers(regno)
+store_inferior_registers (regno)
int regno;
{
struct reg inferior_registers;
@@ -54,33 +61,114 @@ store_inferior_registers(regno)
memcpy (&inferior_registers, &registers[REGISTER_BYTE (0)],
sizeof(inferior_registers));
- ptrace (PT_SETREGS, inferior_pid,
+ ptrace (PT_SETREGS, inferior_pid,
(PTRACE_ARG3_TYPE) &inferior_registers, 0);
memcpy (&inferior_fp_registers, &registers[REGISTER_BYTE (FP0_REGNUM)],
sizeof(inferior_fp_registers));
- ptrace (PT_SETFPREGS, inferior_pid,
+ ptrace (PT_SETFPREGS, inferior_pid,
(PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
}
+
+/* XXX - Add this to machine/regs.h instead? */
struct md_core {
- struct reg intreg;
+ struct reg intreg;
struct fpreg freg;
};
-void
-fetch_core_registers (core_reg_sect, core_reg_size, which, ignore)
+static void
+fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
char *core_reg_sect;
unsigned core_reg_size;
int which;
- CORE_ADDR ignore;
+ unsigned int reg_addr; /* Unused in this version */
{
- struct md_core *core_reg = (struct md_core *)core_reg_sect;
-
+ struct md_core *core_reg;
+
+ core_reg = (struct md_core *)core_reg_sect;
+
+ /* We get everything from the .reg section. */
+ if (which != 0)
+ return;
+
+ if (core_reg_size < sizeof(*core_reg)) {
+ fprintf_unfiltered (gdb_stderr, "Couldn't read regs from core file\n");
+ return;
+ }
+
/* Integer registers */
memcpy(&registers[REGISTER_BYTE (0)],
&core_reg->intreg, sizeof(struct reg));
/* Floating point registers */
memcpy(&registers[REGISTER_BYTE (FP0_REGNUM)],
&core_reg->freg, sizeof(struct fpreg));
+
+ registers_fetched ();
+}
+
+/* Register that we are able to handle m68knbsd core file formats.
+ FIXME: is this really bfd_target_unknown_flavour? */
+
+static struct core_fns nat_core_fns =
+{
+ bfd_target_unknown_flavour,
+ fetch_core_registers,
+ NULL
+};
+
+void
+_initialize_m68knbsd_nat ()
+{
+ add_core_fns (&nat_core_fns);
+}
+
+
+/*
+ * kernel_u_size() is not helpful on NetBSD because
+ * the "u" struct is NOT in the core dump file.
+ */
+
+#ifdef FETCH_KCORE_REGISTERS
+/*
+ * Get registers from a kernel crash dump or live kernel.
+ * Called by kcore-nbsd.c:get_kcore_registers().
+ */
+void
+fetch_kcore_registers (pcb)
+ struct pcb *pcb;
+{
+ int i, *ip, tmp=0;
+
+ /* D0,D1 */
+ ip = &tmp;
+ supply_register(0, (char *)ip);
+ supply_register(1, (char *)ip);
+ /* D2-D7 */
+ ip = &pcb->pcb_regs[0];
+ for (i = 2; i < 8; i++, ip++)
+ supply_register(i, (char *)ip);
+
+ /* A0,A1 */
+ ip = &tmp;
+ supply_register(8, (char *)ip);
+ supply_register(9, (char *)ip);
+ /* A2-A7 */
+ ip = &pcb->pcb_regs[6];
+ for (i = 10; i < 16; i++, (char *)ip++)
+ supply_register(i, (char *)ip);
+
+ /* PS (sr) */
+ tmp = pcb->pcb_ps & 0xFFFF;
+ supply_register(PS_REGNUM, (char *)&tmp);
+
+ /* PC (use return address) */
+ tmp = pcb->pcb_regs[10] + 4;
+ if (target_read_memory(tmp, (char *)&tmp, sizeof(tmp)))
+ tmp = 0;
+ supply_register(PC_REGNUM, (char *)&tmp);
+
+ /* The kernel does not use the FPU, so ignore it. */
+ registers_fetched ();
}
+#endif /* FETCH_KCORE_REGISTERS */
diff --git a/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c b/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c
new file mode 100644
index 00000000000..b5cac264929
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c
@@ -0,0 +1,128 @@
+/* Functions specific to running gdb native on a VAX running NetBSD
+ Copyright 1989, 1992, 1993, 1994, 1996 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 <sys/types.h>
+#include <sys/ptrace.h>
+#include <machine/reg.h>
+#include <machine/frame.h>
+#include <machine/pcb.h>
+
+#include "defs.h"
+#include "inferior.h"
+#include "target.h"
+#include "gdbcore.h"
+
+void
+fetch_inferior_registers (regno)
+ int regno;
+{
+ struct reg inferior_registers;
+
+ ptrace (PT_GETREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ memcpy (&registers[REGISTER_BYTE (0)], &inferior_registers,
+ sizeof(inferior_registers));
+
+ registers_fetched ();
+}
+
+void
+store_inferior_registers (regno)
+ int regno;
+{
+ struct reg inferior_registers;
+
+ memcpy (&inferior_registers, &registers[REGISTER_BYTE (0)],
+ sizeof(inferior_registers));
+ ptrace (PT_SETREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+}
+
+
+/* XXX - Add this to machine/regs.h instead? */
+struct md_core {
+ struct reg intreg;
+ /* struct fpreg freg; XXX */
+};
+
+static void
+fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
+ char *core_reg_sect;
+ unsigned core_reg_size;
+ int which;
+ unsigned int reg_addr; /* Unused in this version */
+{
+ struct md_core *core_reg;
+
+ core_reg = (struct md_core *)core_reg_sect;
+
+ /* We get everything from the .reg section. */
+ if (which != 0)
+ return;
+
+ if (core_reg_size < sizeof(*core_reg)) {
+ fprintf_unfiltered (gdb_stderr, "Couldn't read regs from core file\n");
+ return;
+ }
+
+ /* Integer registers */
+ memcpy(&registers[REGISTER_BYTE (0)],
+ &core_reg->intreg, sizeof(struct reg));
+
+ registers_fetched ();
+}
+
+/* Register that we are able to handle vaxnbsd core file formats.
+ FIXME: is this really bfd_target_unknown_flavour? */
+
+static struct core_fns nat_core_fns =
+{
+ bfd_target_unknown_flavour,
+ fetch_core_registers,
+ NULL
+};
+
+void
+_initialize_vaxnbsd_nat ()
+{
+ add_core_fns (&nat_core_fns);
+}
+
+
+/*
+ * kernel_u_size() is not helpful on NetBSD because
+ * the "u" struct is NOT in the core dump file.
+ */
+
+#ifdef FETCH_KCORE_REGISTERS
+/*
+ * Get registers from a kernel crash dump or live kernel.
+ * Called by kcore-nbsd.c:get_kcore_registers().
+ */
+void
+fetch_kcore_registers (pcb)
+ struct pcb *pcb;
+{
+
+ printf("XXX: fetch_kcore_registers\n");
+
+ /* The kernel does not use the FPU, so ignore it. */
+ registers_fetched ();
+}
+#endif /* FETCH_KCORE_REGISTERS */