From 6ec7e4d36a85990132baf8b0166614f273e7b31d Mon Sep 17 00:00:00 2001
From: Stan Shebs <shebs@codesourcery.com>
Date: Thu, 16 Jun 1994 22:02:24 +0000
Subject: [PATCH] 	* configure.in: Improve sorting/formatting of hosts
 and targets. 	(i[34]86-*-mach3*, i[34]86-*-osf1mk*, mips-*-mach3*, 
 m88*-*-mach3*, ns32k-*-mach3*): Recognize. 	* Makefile.in (gdb-stop): New
 target. 	* gdb-stop.c: New file, utility to gets attention of waiting
 GDBs 	in Mach 3.

---
 gdb/ChangeLog    |   9 ++++
 gdb/Makefile.in  |   8 +++-
 gdb/configure.in |  74 +++++++++++++++----------------
 gdb/gdb-stop.c   | 110 +++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 164 insertions(+), 37 deletions(-)
 create mode 100644 gdb/gdb-stop.c

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7da13985111..05c18d20ea1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+Thu Jun 16 14:41:37 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* configure.in: Improve sorting/formatting of hosts and targets.
+	(i[34]86-*-mach3*, i[34]86-*-osf1mk*, mips-*-mach3*,
+	m88*-*-mach3*, ns32k-*-mach3*): Recognize.
+	* Makefile.in (gdb-stop): New target.
+	* gdb-stop.c: New file, utility to gets attention of waiting GDBs
+	in Mach 3.
+
 Wed Jun 15 00:41:03 1994  Tom Lord  (lord@rtl.cygnus.com)
 
 	* top.c (gdb_init): Init current_directory in gdb_init.  Probably
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 0590761f8d6..adad21dc642 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1,4 +1,4 @@
-#Copyright 1989, 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+# Copyright 1989, 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
 
 # This file is part of GDB.
 
@@ -587,6 +587,12 @@ saber_gdb: $(SFILES) $(DEPFILES) copying.c version.c
 	echo "Load .c corresponding to:" $(DEPFILES)
 
 
+# A Mach 3.0 program to force gdb back to command level
+
+gdb-stop: gdb-stop.o
+	${CC-LD} $(GLOBAL_CFLAGS) $(LDFLAGS) -o gdb-stop \
+	gdb-stop.o $(CLIBS) $(LOADLIBES)
+
 # This is useful when debugging GDB, because some Unix's don't let you run GDB
 # on itself without copying the executable.  So "make gdb1" will make
 # gdb and put a copy in gdb1, and you can run it with "gdb gdb1".
diff --git a/gdb/configure.in b/gdb/configure.in
index 2496eaf1c76..f4685386389 100644
--- a/gdb/configure.in
+++ b/gdb/configure.in
@@ -1,7 +1,13 @@
-configdirs="doc testsuite"
+# This file is a shell script fragment that supplies the information
+# necessary to tailor a template configure script into the configure
+# script appropriate for this directory.  For more information, check
+# any existing configure script.
+
 srcname="GDB"
 srctrigger=main.c
 
+configdirs="doc testsuite"
+
 # per-host:
 
 # Map host cpu into the config cpu subdirectory name.
@@ -13,6 +19,7 @@ c[12])			gdb_host_cpu=convex ;;
 hppa*)			gdb_host_cpu=pa ;;
 i[34]86)		gdb_host_cpu=i386 ;;
 m68*)			gdb_host_cpu=m68k ;;
+m88*)			gdb_host_cpu=m88k ;;
 np1)			gdb_host_cpu=gould ;;
 pyramid)		gdb_host_cpu=pyr ;;
 *)			gdb_host_cpu=$host_cpu ;;
@@ -32,25 +39,23 @@ arm-*-*)		gdb_host=arm ;;
 c[12]-*-*)		gdb_host=convex ;;
 
 hppa*-*-bsd*)		gdb_host=hppabsd ;;
-hppa*-*-hpux*)		gdb_host=hppahpux ;;
 hppa*-*-hiux*)		gdb_host=hppahpux ;;
+hppa*-*-hpux*)		gdb_host=hppahpux ;;
 hppa*-*-osf*)		gdb_host=hppabsd ;;
 
 i[34]86-ncr-*)		gdb_host=ncr3000 ;;
-i[34]86-sequent-bsd*)	gdb_host=symmetry ;; #dynix
+i[34]86-sequent-bsd*)	gdb_host=symmetry ;;  # dynix
 i[34]86-sequent-sysv4*)	gdb_host=ptx4 ;;
 i[34]86-sequent-sysv*)	gdb_host=ptx ;;
-
 i[34]86-*-aix*)		gdb_host=i386aix ;;
 i[34]86-*-bsd*)		gdb_host=i386bsd ;;
 i[34]86-*-netbsd*)	gdb_host=i386bsd ;;
-i[34]86-*-go32*)		gdb_host=go32 ;;
+i[34]86-*-go32*)	gdb_host=go32 ;;
 i[34]86-*-linux*)	gdb_host=linux ;;
 i[34]86-*-lynxos*)	gdb_host=i386lynx ;;
-# Obsolete I suspect
-# i[34]86-*-mach)		gdb_host=i386mach ;;
-i[34]86-*-mach*)	gdb_host=i386m3 ;;
-i[34]86-*-osf1mk*)	gdb_host=i386mk ;;
+i[34]86-*-mach3*)	gdb_host=mach3 ;;
+i[34]86-*-mach*)	gdb_host=i386mach ;;
+i[34]86-*-osf1mk*)	gdb_host=osf1mk ;;
 i[34]86-*-sco3.2v4*)	gdb_host=i386sco4 ;;
 i[34]86-*-sco*)		gdb_host=i386sco ;;
 i[34]86-*-solaris*)	gdb_host=i386sol2 ;;
@@ -85,24 +90,26 @@ m68*-sun-*)		gdb_host=sun3os4 ;;
 
 m88*-motorola-sysv4*)	gdb_host=delta88v4 ;;
 m88*-motorola-sysv*)	gdb_host=delta88 ;;
-# I suspect this is just used for DGUX
+m88*-*-mach3*)		gdb_host=mach3 ;;
 m88*-*-*)		gdb_host=m88k ;;
 
+mips-dec-mach3*)	gdb_host=mach3 ;;
 mips-dec-*)		gdb_host=decstation ;;
 mips-little-*)		gdb_host=littlemips ;;
 mips-sgi-irix3*)	gdb_host=irix3 ;;
 mips-sgi-irix4*)	gdb_host=irix4 ;;
 mips-sgi-irix5*)	gdb_host=irix5 ;;
 mips-sony-*)		gdb_host=news-mips ;;
+mips-*-mach3*)		gdb_host=mach3 ;;
 mips-*-sysv4*)		gdb_host=mipsv4 ;;
 mips-*-sysv*)		gdb_host=riscos ;;
 mips-*-riscos*)		gdb_host=riscos ;;
-mips-*-mach*)		gdb_host=mipsm3 ;;
 
 none-*-*)		gdb_host=none ;;
 
 np1-*-*)		gdb_host=np1 ;;
 
+ns32k-*-mach3*)		gdb_host=mach3 ;;
 ns32k-umax-*)		gdb_host=umax ;;
 ns32k-utek-sysv*)	gdb_host=merlin ;;
 
@@ -149,14 +156,13 @@ c[12])			gdb_target_cpu=convex ;;
 hppa*)			gdb_target_cpu=pa ;;
 i[34]86)		gdb_target_cpu=i386 ;;
 m68*)			gdb_target_cpu=m68k ;;
-m8*)			gdb_target_cpu=m88k ;;
+m88*)			gdb_target_cpu=m88k ;;
 mips*)			gdb_target_cpu=mips ;;
 np1)			gdb_target_cpu=gould ;;
 pn)			gdb_target_cpu=gould ;;
 pyramid)		gdb_target_cpu=pyr ;;
 sparclite*)		gdb_target_cpu=sparc
-			configdirs="${configdirs} sparclite"
-			;;
+			configdirs="${configdirs} sparclite" ;;
 sparc*)			gdb_target_cpu=sparc ;;
 *)			gdb_target_cpu=$target_cpu ;;
 
@@ -177,8 +183,8 @@ a29k-*-udi*)		gdb_target=a29k-udi ;;
 
 alpha-*-osf*)		gdb_target=alpha-osf1 ;;
 alpha-*-netware*)	gdb_target=alpha-nw
-			configdirs="${configdirs} nlm"
-			;;
+			configdirs="${configdirs} nlm" ;;
+
 arm-*-*)		gdb_target=arm ;;
 
 c1-*-*)			gdb_target=convex ;;
@@ -198,19 +204,16 @@ i[34]86-sequent-bsd*)	gdb_target=symmetry ;;
 i[34]86-sequent-sysv4*)	gdb_target=ptx4 ;;
 i[34]86-sequent-sysv*)	gdb_target=ptx ;;
 i[34]86-ncr-*)		gdb_target=ncr3000 ;;
-
 i[34]86-*-aout*)	gdb_target=i386aout ;;
 i[34]86-*-coff*)	gdb_target=i386v ;;
 i[34]86-*-elf*)		gdb_target=i386v ;;
-
 i[34]86-*-aix*)		gdb_target=i386aix ;;
 i[34]86-*-bsd*)		gdb_target=i386bsd ;;
 i[34]86-*-netbsd*)	gdb_target=i386bsd ;;
 i[34]86-*-os9k)		gdb_target=i386os9k ;;
 i[34]86-*-go32*)	gdb_target=i386aout ;;
 i[34]86-*-lynxos*)	gdb_target=i386lynx
-			configdirs="${configdirs} gdbserver" 
-			;;
+			configdirs="${configdirs} gdbserver" ;;
 i[34]86-*-solaris*)	gdb_target=i386sol2 ;;
 i[34]86-*-sunos*)	gdb_target=sun386 ;;
 i[34]86-*-sysv4*)	gdb_target=i386v4 ;;
@@ -218,7 +221,8 @@ i[34]86-*-sco*)		gdb_target=i386v ;;
 i[34]86-*-sysv*)	gdb_target=i386v ;;
 i[34]86-*-linux*)	gdb_target=linux ;;
 i[34]86-*-isc*)		gdb_target=i386v ;;
-i[34]86-*-mach*)	gdb_target=i386m3 ;;
+i[34]86-*-mach3*)	gdb_target=mach3 ;;
+i[34]86-*-mach*)	gdb_target=i386mach ;;
 i[34]86-*-netware*)	gdb_target=i386nw ;;
 i[34]86-*-osf1mk*)	gdb_target=i386mk ;;
 
@@ -232,43 +236,41 @@ i960-*-vxworks*)	gdb_target=vxworks960 ;;
 m68000-*-sunos3*)	gdb_target=sun2os3 ;;
 m68000-*-sunos4*)	gdb_target=sun2os4 ;;
 
-m68*-cbm-sysv4*)	gdb_target=amix ;;
-m68*-bull-sysv*)	gdb_target=dpx2 ;;
-m68*-hp-bsd*)		gdb_target=hp300bsd ;;
-m68*-hp-hpux*)		gdb_target=hp300hpux ;;
-
 m68*-altos-*)		gdb_target=altos ;;
 m68*-apollo*-bsd*)	gdb_target=apollo68b ;;
 m68*-att-*)		gdb_target=3b1 ;;
+m68*-bull-sysv*)	gdb_target=dpx2 ;;
+m68*-cbm-sysv4*)	gdb_target=amix ;;
 m68*-cisco*-*)		gdb_target=cisco ;;
 m68*-ericsson-*)	gdb_target=es1800 ;;
+m68*-hp-bsd*)		gdb_target=hp300bsd ;;
+m68*-hp-hpux*)		gdb_target=hp300hpux ;;
 m68*-isi-*)		gdb_target=isi ;;
 m68*-motorola-*)	gdb_target=delta68 ;;
 m68*-netx-*)		gdb_target=vxworks68 ;;
 m68*-sony-*)		gdb_target=news ;;
 m68*-tandem-*)		gdb_target=st2000 ;;
-
 m68*-rom68k-*)          gdb_target=monitor ;;
 m68*-*bug-*)            gdb_target=monitor ;;
 m68*-monitor-*)         gdb_target=monitor ;;
-
 m68*-*-aout*)		gdb_target=monitor ;;
 m68*-*-coff*)		gdb_target=monitor ;;
 m68*-*-elf*)		gdb_target=monitor ;;
 m68*-*-lynxos*)		gdb_target=m68klynx
-			configdirs="${configdirs} gdbserver"
-			;;
+			configdirs="${configdirs} gdbserver" ;;
 m68*-*-os68k*)		gdb_target=os68k ;;
 m68*-*-sunos3*)		gdb_target=sun3os3 ;;
 m68*-*-sunos4*)		gdb_target=sun3os4 ;;
 m68*-*-vxworks*)	gdb_target=vxworks68 ;;
 
 m88*-motorola-sysv4*)	gdb_target=delta88v4 ;;
+m88*-*-mach3*)		gdb_target=mach3 ;;
 m88*-motorola-*)	gdb_target=delta88 ;;
 m88*-*-*)		gdb_target=m88k ;;
 
 mips64*-big-*)		gdb_target=bigmips64 ;;
 mips*-big-*)		gdb_target=bigmips ;;
+mips*-dec-mach3*)	gdb_target=mach3 ;;
 mips*-dec-*)		gdb_target=decstation ;;
 mips64*el-*-ecoff*)	gdb_target=idtl64 ;;
 mips64*-idt-ecoff*)	gdb_target=idt64 ;;
@@ -282,15 +284,16 @@ mips*-little-*)		gdb_target=littlemips ;;
 mips*-sgi-irix5*)	gdb_target=irix5 ;;
 mips*-sgi-*)		gdb_target=irix3 ;;
 mips*-sony-*)		gdb_target=bigmips ;;
+mips*-*-mach3*)		gdb_target=mach3 ;;
 mips*-*-sysv4*)		gdb_target=mipsv4 ;;
 mips*-*-sysv*)		gdb_target=bigmips ;;
 mips*-*-riscos*)	gdb_target=bigmips ;;
-mips*-*-mach*)		gdb_target=mipsm3 ;;
 
 none-*-*)		gdb_target=none ;;
 
 np1-*-*)		gdb_target=np1 ;;
 
+ns32k-*-mach3*)		gdb_target=mach3 ;;
 ns32k-utek-sysv*)	gdb_target=merlin ;;
 ns32k-utek-*)		gdb_target=umax ;;
 
@@ -305,22 +308,21 @@ sparc-*-aout*)		gdb_target=sparc-em ;;
 sparc-*-coff*)		gdb_target=sparc-em ;;
 sparc-*-elf*)		gdb_target=sparc-em ;;
 sparc-*-lynxos*)	gdb_target=sparclynx
-			configdirs="${configdirs} gdbserver"
-			;;
+			configdirs="${configdirs} gdbserver" ;;
 sparc-*-solaris2*)	gdb_target=sun4sol2 ;;
 sparc-*-sunos4*)	gdb_target=sun4os4 ;;
 sparc-*-vxworks*)	gdb_target=vxsparc ;;
 sparc-*-*)		gdb_target=sun4os4 ;;
 sparclite*-*-*)		gdb_target=sparclite ;;
-# start-sanitize-v9
-sparc64-*-*)		gdb_target_cpu=sparc gdb_target=sp64 ;;
-# end-sanitize-v9
+sparc64-*-*)		gdb_target=sp64 ;;
 
 tahoe-*-*)		gdb_target=tahoe ;;
+
 vax-*-*)		gdb_target=vax ;;
 
 z8k-*-sim*)		gdb_target=z8ksim ;;
 z8k-*-coff*)		gdb_target=z8ksim ;;
+
 esac
 
 if [ ! -f ${srcdir}/config/${gdb_target_cpu}/${gdb_target}.mt ]; then
diff --git a/gdb/gdb-stop.c b/gdb/gdb-stop.c
new file mode 100644
index 00000000000..abb3d696d3e
--- /dev/null
+++ b/gdb/gdb-stop.c
@@ -0,0 +1,110 @@
+/* A client to make GDB return to command level in Mach 3.
+   Copyright (C) 1992, 1993 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* Authors: Jukka Virtanen <jtv@hut.fi> and Peter Stout <pds@cs.cmu.edu>.
+
+   A simple client to make GDB (versions 4.4 and later) on Mach 3 return
+   to the command level when it is waiting for the inferior to stop.
+  
+   Actions: Lookup the send right to the GDB message port from the
+            NetMsgServer.
+
+ 	    Send an asynchronous message with msgh_id
+ 	    GDB_MESSAGE_ID_STOP to that port.
+   */
+
+#include <stdio.h>
+
+#include "defs.h"
+
+#include <mach.h>
+#include <mach/message.h>
+#include <mach_error.h>
+#include <servers/netname.h>
+#include <servers/netname_defs.h>
+
+void
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  kern_return_t kr;
+  mach_msg_header_t msg;
+  mach_port_t gdb_port;
+  char *host;
+  char *name;
+
+  if (argc == 1)
+    argv[argc++] = GDB_DEF_NAME;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "Usage : %s <GDB name>\n", argv[0]);
+      exit (1);
+    }
+
+  /* Allow the user to specify a remote host.  */
+  host = strchr (argv[1], '@');
+  if (host)
+    *(host++) = '\0';
+  else
+    host = (char *) "";
+
+  name = malloc (strlen (argv[1]) + sizeof(GDB_NAME_PREFIX));
+  if (name == NULL)
+    {
+      fprintf (stderr, "Unable to allocate memory for name.");
+      exit (1);
+    }
+
+  strcpy (name, GDB_NAME_PREFIX);
+  strcat (name, argv[1]);
+
+  /* Look up the GDB service port.  For convenience, add the
+     GDB_NAME_PREFIX the argument before looking up the name.
+     For backwards compatibility, do it without.  */
+
+  kr = netname_look_up (name_server_port, host, name, &gdb_port);
+  if (kr == NETNAME_NOT_CHECKED_IN)
+    kr = netname_look_up (name_server_port, host, argv[1], &gdb_port);
+  if (kr != KERN_SUCCESS)
+    {
+      fprintf (stderr, "Unable to lookup the GDB service port: %s.\n",
+	       mach_error_string(kr));
+      exit(1);
+    }
+
+  /* Code generated by mig stub generator, with minor cleanups :-)
+
+     simpleroutine stop_inferior(gdb_port : mach_port_t);  */
+
+  msg.msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_COPY_SEND, 0);
+  msg.msgh_remote_port = gdb_port;
+  msg.msgh_local_port  = MACH_PORT_NULL;
+  msg.msgh_size	       = sizeof(msg);
+  msg.msgh_seqno       = 0;
+  msg.msgh_id          = GDB_MESSAGE_ID_STOP;
+
+  kr = mach_msg_send (&msg);
+  if (kr != KERN_SUCCESS)
+    fprintf (stderr, "Message not sent, return code %d : %s\n", kr,
+	     mach_error_string (kr));
+
+  exit (kr != KERN_SUCCESS);
+}