OSDN Git Service

import gdb-1999-06-28 snapshot
authorJason Molenda <jsm@bugshack.cygnus.com>
Mon, 28 Jun 1999 16:06:02 +0000 (16:06 +0000)
committerJason Molenda <jsm@bugshack.cygnus.com>
Mon, 28 Jun 1999 16:06:02 +0000 (16:06 +0000)
146 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/NEWS
gdb/altos-xdep.c
gdb/arm-tdep.c
gdb/ax-gdb.c
gdb/config/convex/Convex.notes
gdb/config/convex/convex.mh
gdb/config/convex/convex.mt
gdb/config/convex/tm-convex.h
gdb/config/convex/xm-convex.h
gdb/config/m68k/altos.mh
gdb/config/m68k/altos.mt
gdb/config/m68k/tm-altos.h
gdb/config/m68k/xm-altos.h
gdb/configure.host
gdb/configure.tgt
gdb/convex-tdep.c
gdb/convex-xdep.c
gdb/doc/ChangeLog
gdb/doc/Makefile.in
gdb/doc/gdbint.texinfo
gdb/doc/remote.texi
gdb/doc/stabs.texinfo
gdb/event-loop.c
gdb/event-loop.h
gdb/event-top.c
gdb/frame.h
gdb/gdbserver/Makefile.in
gdb/main.c
gdb/nlm/Makefile.in
gdb/rdi-share/Makefile.in
gdb/remote.c
gdb/solib.c
gdb/symtab.c
gdb/testsuite/ChangeLog
gdb/testsuite/Makefile.in
gdb/testsuite/gdb.base/all-bin.exp
gdb/testsuite/gdb.base/annota1.c
gdb/testsuite/gdb.base/annota1.exp
gdb/testsuite/gdb.base/bitfields.c
gdb/testsuite/gdb.base/break.c
gdb/testsuite/gdb.base/break.exp
gdb/testsuite/gdb.base/call-ar-st.c
gdb/testsuite/gdb.base/call-ar-st.exp
gdb/testsuite/gdb.base/call-rt-st.c
gdb/testsuite/gdb.base/call-rt-st.exp
gdb/testsuite/gdb.base/call-strs.c
gdb/testsuite/gdb.base/call-strs.exp
gdb/testsuite/gdb.base/callfuncs.c
gdb/testsuite/gdb.base/callfuncs.exp
gdb/testsuite/gdb.base/callfuncs2.c
gdb/testsuite/gdb.base/callfuncs2.exp
gdb/testsuite/gdb.base/commands.exp
gdb/testsuite/gdb.base/completion.exp
gdb/testsuite/gdb.base/condbreak.c
gdb/testsuite/gdb.base/condbreak.exp
gdb/testsuite/gdb.base/constvars.exp
gdb/testsuite/gdb.base/corefile.exp
gdb/testsuite/gdb.base/coremaker.c
gdb/testsuite/gdb.base/default.exp
gdb/testsuite/gdb.base/define.exp
gdb/testsuite/gdb.base/display.exp
gdb/testsuite/gdb.base/ena-dis-br.exp
gdb/testsuite/gdb.base/ending-run.c
gdb/testsuite/gdb.base/ending-run.exp
gdb/testsuite/gdb.base/eval-skip.exp
gdb/testsuite/gdb.base/exprs.c
gdb/testsuite/gdb.base/exprs.exp
gdb/testsuite/gdb.base/funcargs.c
gdb/testsuite/gdb.base/funcargs.exp
gdb/testsuite/gdb.base/interrupt.c
gdb/testsuite/gdb.base/interrupt.exp
gdb/testsuite/gdb.base/jump.c
gdb/testsuite/gdb.base/jump.exp
gdb/testsuite/gdb.base/langs.exp
gdb/testsuite/gdb.base/langs0.c
gdb/testsuite/gdb.base/langs1.c
gdb/testsuite/gdb.base/langs2.c
gdb/testsuite/gdb.base/list.exp
gdb/testsuite/gdb.base/list0.c
gdb/testsuite/gdb.base/list1.c
gdb/testsuite/gdb.base/logical.exp
gdb/testsuite/gdb.base/long_long.c
gdb/testsuite/gdb.base/long_long.exp
gdb/testsuite/gdb.base/mips_pro.c
gdb/testsuite/gdb.base/mips_pro.exp
gdb/testsuite/gdb.base/miscexprs.exp
gdb/testsuite/gdb.base/nodebug.c
gdb/testsuite/gdb.base/nodebug.exp
gdb/testsuite/gdb.base/opaque.exp
gdb/testsuite/gdb.base/opaque0.c
gdb/testsuite/gdb.base/opaque1.c
gdb/testsuite/gdb.base/pointers.exp
gdb/testsuite/gdb.base/printcmds.c
gdb/testsuite/gdb.base/ptype.c
gdb/testsuite/gdb.base/ptype.exp
gdb/testsuite/gdb.base/recurse.c
gdb/testsuite/gdb.base/relational.exp
gdb/testsuite/gdb.base/restore.c
gdb/testsuite/gdb.base/return.c
gdb/testsuite/gdb.base/run.c
gdb/testsuite/gdb.base/scope.exp
gdb/testsuite/gdb.base/scope0.c
gdb/testsuite/gdb.base/scope1.c
gdb/testsuite/gdb.base/sect-cmd.exp
gdb/testsuite/gdb.base/setshow.c
gdb/testsuite/gdb.base/setvar.c
gdb/testsuite/gdb.base/setvar.exp
gdb/testsuite/gdb.base/shlib-call.exp
gdb/testsuite/gdb.base/shmain.c
gdb/testsuite/gdb.base/shr1.c
gdb/testsuite/gdb.base/shr2.c
gdb/testsuite/gdb.base/sigall.c
gdb/testsuite/gdb.base/signals.c
gdb/testsuite/gdb.base/signals.exp
gdb/testsuite/gdb.base/so-impl-ld.c
gdb/testsuite/gdb.base/so-impl-ld.exp
gdb/testsuite/gdb.base/so-indr-cl.c
gdb/testsuite/gdb.base/so-indr-cl.exp
gdb/testsuite/gdb.base/solib.c
gdb/testsuite/gdb.base/solib.exp
gdb/testsuite/gdb.base/solib1.c
gdb/testsuite/gdb.base/solib2.c
gdb/testsuite/gdb.base/step-test.c
gdb/testsuite/gdb.base/step-test.exp
gdb/testsuite/gdb.base/term.exp
gdb/testsuite/gdb.base/twice.c
gdb/testsuite/gdb.base/twice.exp
gdb/testsuite/gdb.base/varargs.c
gdb/testsuite/gdb.base/varargs.exp
gdb/testsuite/gdb.base/volatile.exp
gdb/testsuite/gdb.base/watchpoint.c
gdb/testsuite/gdb.base/watchpoint.exp
gdb/testsuite/gdb.base/whatis.c
gdb/testsuite/gdb.base/whatis.exp
gdb/testsuite/gdb.c++/member-ptr.exp
gdb/testsuite/gdb.chill/ChangeLog
gdb/testsuite/lib/gdb.exp
gdb/top.c
gdb/utils.c
sim/common/ChangeLog
sim/common/cgen-engine.h
sim/common/genmloop.sh
sim/mcore/ChangeLog
sim/mcore/sysdep.h

index 6a4c613..f41bc52 100644 (file)
@@ -1,3 +1,109 @@
+1999-06-28  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       * solib.c (clear_solib): Don't disable breakpoints if we're
+       running an a.out executable (Solaris's SunOS emulation).
+
+1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       * main.c (main): Remove intialization of command_loop_hook, it
+       is now done in _initialize_event_loop().
+       * event-loop.c (gdb_do_one_event): Make static.
+       (start_event_loop): New function. Just start the event loop.
+       * event-top.c (cli_command_loop): New name for start_event_loop().
+       (gdb_readline2): Make non static.
+       (_initialize_event_loop): Set command_loop_hook to cli_command_loop.
+       * event-loop.h: Adjust exported functions accordingly.
+
+       * top.c (init_main): Move setting of async_command_editing_p from
+       here.  
+       * event-top.c (_initialize_event_loop): To here.
+       (change_line_handler): Revert previous change. Add comment.
+       (_initialize_event_loop): Revert previous change.
+       (cli_command_loop): New name for start_event_loop().
+       (start_event_loop): New function. This just starts up the event loop.
+       (gdb_readline2): Make non static.
+       (_initialize_event_loop): Set command_loop_hook to cli_command_loop.
+
+1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       * event-top.c (change_line_handler): Get rid of the global
+       variable input_fd, use `fileno (instream)' instead.
+       (_initialize_event_loop): Ditto
+       
+       * event-loop.c (add_file_handler): New function. Wrapper for
+       create_file_handler.
+       (create_file_handler): Make static.  
+       * event-top.c (_initialize_event_loop): Call add_file_handler,
+       instead of create_file_handler.
+       (change_line_handler): Ditto.  
+       Remove poll.h include.
+       * event-loop.h: Export add_file_handler instead of
+       create_file_handler.    
+
+1999-06-24  Stan Shebs  <shebs@andros.cygnus.com>
+
+       Declare Altos configuration obsolete.
+       * configure.host, configure.tgt: Comment out Altos config.
+       * Makefile.in: Comment out Altos-related actions.
+       * altos-xdep.c, config/m68k/altos.mh, altos.mt, tm-altos.h,
+       xm-altos.h: Comment out.
+       * NEWS: Mention obsolete status.
+
+1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+       * Makefile.in: Add MAKEHTML and MAKEHTMLFLAGS; pass them down;
+       recognize html and install-html targets.
+       * gdbserver/Makefile.in: Add empty html and install-html targets.
+       * nlm/Makefile.in: Ditto.
+       * rdi-share/Makefile.in: Ditto.
+
+1999-06-24  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       * ax-gdb.c (agent_command): Remove vestigial call to ax_reqs.
+
+1999-06-24  James Ingham  <jingham@leda.cygnus.com>
+
+       * arm-tdep.c (arm_othernames): Change both gdb's register display
+       AND the opcode disassembly register naming if the othernames
+       command.  Fixes the gdb part of CR 101177.
+
+1999-06-23  Stan Shebs  <shebs@andros.cygnus.com>
+
+       Declare Convex configuration obsolete.
+       * configure.host, configure.tgt: Comment out Convex configs.
+       * Makefile.in: Comment out Convex-related actions.
+       * convex-xdep.c, convex-tdep.c, config/convex/*: Comment out.
+       * NEWS: Mention obsolete status.
+
+1999-06-23  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       * main.c: Turn on async by default by setting async_p to 1.
+
+Wed Jun 23 15:44:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       From Jimmy Guo <guo@cup.hp.com>:
+       * frame.h (enum lval_type): Delcare when an __STDC__ compiler.
+       Reverts Mon Aug 11 16:08:52 1997 Fred Fish <fnf@cygnus.com>
+       change.
+       * utils.c (gdb_file_rewind, gdb_file_put): Fix.  A void function
+       does not return a result.
+
+Wed Jun 23 15:30:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote.c (set_thread, remote_get_threadinfo,
+       remote_threads_info, remote_current_thread, remote_get_threadlist,
+       extended_remote_restart, get_offsets, remote_open_1,
+       remote_detach, remote_resume, remote_wait, remote_fetch_registers,
+       remote_store_registers, check_binary_download, remote_write_bytes,
+       remote_read_bytes, remote_search, putpkt_binary, putpkt_binary,
+       read_frame, compare_sections_command, remote_query,
+       packet_command, remote_info_process): Use alloca to create space
+       for arrays of size PBUFSIZ.
+
+1999-06-22  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+       * top.c: Update copyright years to include 1999.
+
 1999-06-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
 
        * top.c: Move include of event-loop.h, to avoid redefinition of
index d2f2e4e..177333e 100644 (file)
@@ -39,6 +39,7 @@ man7dir = $(mandir)/man7
 man8dir = $(mandir)/man8
 man9dir = $(mandir)/man9
 infodir = @infodir@
+htmldir = $(prefix)/html
 includedir = @includedir@
 
 # This can be referenced by `INTLDEPS' as computed by CY_GNU_GETTEXT.
@@ -89,6 +90,10 @@ YLWRAP = $(srcdir)/../ylwrap
 # where to find makeinfo, preferably one designed for texinfo-2
 MAKEINFO=makeinfo
 
+MAKEHTML = texi2html
+
+MAKEHTMLFLAGS = -glossary -menu -split_chapter
+
 # Set this up with gcc if you have gnu ld and the loader will print out
 # line numbers for undefined references.
 #CC_LD=gcc -static
@@ -219,7 +224,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
 ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
 ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
 
-VERSION = 19990621
+VERSION = 19990628
 DIST=gdb
 
 LINT=/usr/5bin/lint
@@ -276,6 +281,8 @@ FLAGS_TO_PASS = \
        "DLLTOOL=$(DLLTOOL)" \
        "RANLIB=$(RANLIB)" \
        "MAKEINFO=$(MAKEINFO)" \
+       "MAKEHTML=$(MAKEHTML)" \
+       "MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
        "INSTALL=$(INSTALL)" \
        "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
        "INSTALL_DATA=$(INSTALL_DATA)" \
@@ -358,6 +365,7 @@ TARGET_FLAGS_TO_PASS = \
        "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
        "INSTALL_DATA=$(INSTALL_DATA)" \
        "MAKEINFO=$(MAKEINFO)" \
+       "MAKEHTML=$(MAKEHTML)" \
        "RUNTEST=$(RUNTEST)" \
        "RUNTESTFLAGS=$(RUNTESTFLAGS)"
 
@@ -557,7 +565,7 @@ check: force
          $(MAKE) $(TARGET_FLAGS_TO_PASS) check; \
        else true; fi
 
-info dvi install-info clean-info: force
+info dvi install-info clean-info html install-html: force
        @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
 gdb.z:gdb.1
@@ -986,7 +994,7 @@ alpha-nat.o: alpha-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) target.h
 alpha-tdep.o: alpha-tdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \
        $(inferior_h) $(symtab_h) $(dis-asm.h) gdb_string.h
 
-altos-xdep.o: altos-xdep.c $(defs_h) $(gdbcore_h) $(inferior_h)
+# OBSOLETE altos-xdep.o: altos-xdep.c $(defs_h) $(gdbcore_h) $(inferior_h)
 
 annotate.o: annotate.c $(defs_h) annotate.h $(value_h) target.h $(gdbtypes_h)
 
@@ -1048,11 +1056,11 @@ command.o: command.c $(defs_h) $(expression_h) $(gdbcmd_h) \
 
 complaints.o: complaints.c complaints.h $(defs_h) $(gdbcmd_h)
 
-convex-tdep.o: convex-tdep.c $(wait_h) $(defs_h) $(gdbcmd_h) \
-       $(gdbcore_h) $(inferior_h)
+# OBSOLETE convex-tdep.o: convex-tdep.c $(wait_h) $(defs_h) $(gdbcmd_h) \
+# OBSOLETE     $(gdbcore_h) $(inferior_h)
 
-convex-xdep.o: convex-xdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \
-       $(inferior_h)
+# OBSOLETE convex-xdep.o: convex-xdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \
+# OBSOLETE     $(inferior_h)
 
 copying.o: copying.c $(defs_h) $(gdbcmd_h)
 
index 7ae2bbd..c6cf4c3 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -7,6 +7,10 @@
 
 TI TMS320C80                                   tic80-*-*
 
+* OBSOLETE configurations
+
+Altos 3068                                     m68*-altos-*
+Convex                                         c1-*-*, c2-*-*
 
 *** Changes in GDB-4.18:
 
index 272c581..0704ddd 100644 (file)
-/* Low level interface to ptrace, for GDB when running under m68k SVR2 Unix
-   on Altos 3068.  Report bugs to Jyrki Kuoppala <jkp@cs.hut.fi>
-   Copyright (C) 1989, 1991 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 "defs.h"
-#include "frame.h"
-#include "inferior.h"
-
-#ifdef USG
-#include <sys/types.h>
-#endif
-
-#include <sys/param.h>
-#include <sys/dir.h>
-#include <signal.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#ifdef USG
-#include <sys/page.h>
-#ifdef ALTOS
-#include <sys/net.h>
-#include <errno.h>
-#endif
-#endif
-
-#include "gdbcore.h"
-#include <sys/user.h>          /* After a.out.h  */
-#include <sys/file.h>
-#include "gdb_stat.h"
-
-\f
-/* Work with core dump and executable files, for GDB. 
-   This code would be in corefile.c if it weren't machine-dependent. */
-
-void
-core_file_command (filename, from_tty)
-     char *filename;
-     int from_tty;
-{
-  int val;
-
-  /* Discard all vestiges of any previous core file
-     and mark data and stack spaces as empty.  */
-
-  if (corefile)
-    free (corefile);
-  corefile = 0;
-
-  if (corechan >= 0)
-    close (corechan);
-  corechan = -1;
-
-  data_start = 0;
-  data_end = 0;
-  stack_start = STACK_END_ADDR;
-  stack_end = STACK_END_ADDR;
-
-  /* Now, if a new core file was specified, open it and digest it.  */
-
-  if (filename)
-    {
-      filename = tilde_expand (filename);
-      make_cleanup (free, filename);
-      
-      if (have_inferior_p ())
-       error ("To look at a core file, you must kill the program with \"kill\".");
-      corechan = open (filename, O_RDONLY, 0);
-      if (corechan < 0)
-       perror_with_name (filename);
-      /* 4.2-style (and perhaps also sysV-style) core dump file.  */
-      {
-       struct user u;
-
-       unsigned int reg_offset;
-
-       val = myread (corechan, &u, sizeof u);
-       if (val < 0)
-         perror_with_name ("Not a core file: reading upage");
-       if (val != sizeof u)
-         error ("Not a core file: could only read %d bytes", val);
-       data_start = exec_data_start;
-
-#if !defined (NBPG)
-#define NBPG NBPP
-#endif
-#if !defined (UPAGES)
-#define UPAGES USIZE
-#endif
-
-       data_end = data_start + NBPG * u.u_dsize;
-       stack_start = stack_end - NBPG * u.u_ssize;
-       data_offset = NBPG * UPAGES + exec_data_start % NBPG /* Not sure about this //jkp */;
-       stack_offset = NBPG * (UPAGES + u.u_dsize);
-
-       /* Some machines put an absolute address in here and some put
-          the offset in the upage of the regs.  */
-       reg_offset = (int) u.u_state;
-       if (reg_offset > NBPG * UPAGES)
-         reg_offset -= KERNEL_U_ADDR;
-
-       memcpy (&core_aouthdr, &u.u_exdata, sizeof (AOUTHDR));
-       printf_unfiltered ("Core file is from \"%s\".\n", u.u_comm);
-
-       /* I don't know where to find this info.
-          So, for now, mark it as not available.  */
-       N_SET_MAGIC (core_aouthdr, 0);
-
-       /* Read the register values out of the core file and store
-          them where `read_register' will find them.  */
-
-       {
-         register int regno;
-
-         for (regno = 0; regno < NUM_REGS; regno++)
-           {
-             char buf[MAX_REGISTER_RAW_SIZE];
-
-             val = lseek (corechan, register_addr (regno, reg_offset), 0);
-             if (val < 0
-                 || (val = myread (corechan, buf, sizeof buf)) < 0)
-               {
-                 char * buffer = (char *) alloca (strlen (REGISTER_NAME (regno))
-                                                  + 30);
-                 strcpy (buffer, "Reading register ");
-                 strcat (buffer, REGISTER_NAME (regno));
-                                                  
-                 perror_with_name (buffer);
-               }
-
-             supply_register (regno, buf);
-           }
-       }
-      }
-      if (filename[0] == '/')
-       corefile = savestring (filename, strlen (filename));
-      else
-       {
-         corefile = concat (current_directory, "/", filename, NULL);
-       }
-
-      flush_cached_frames ();
-      select_frame (get_current_frame (), 0);
-      validate_files ();
-    }
-  else if (from_tty)
-    printf_unfiltered ("No core file now.\n");
-}
+/* OBSOLETE /* Low level interface to ptrace, for GDB when running under m68k SVR2 Unix */
+/* OBSOLETE    on Altos 3068.  Report bugs to Jyrki Kuoppala <jkp@cs.hut.fi> */
+/* OBSOLETE    Copyright (C) 1989, 1991 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #include "defs.h" */
+/* OBSOLETE #include "frame.h" */
+/* OBSOLETE #include "inferior.h" */
+/* OBSOLETE  */
+/* OBSOLETE #ifdef USG */
+/* OBSOLETE #include <sys/types.h> */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE #include <sys/param.h> */
+/* OBSOLETE #include <sys/dir.h> */
+/* OBSOLETE #include <signal.h> */
+/* OBSOLETE #include <sys/ioctl.h> */
+/* OBSOLETE #include <fcntl.h> */
+/* OBSOLETE #ifdef USG */
+/* OBSOLETE #include <sys/page.h> */
+/* OBSOLETE #ifdef ALTOS */
+/* OBSOLETE #include <sys/net.h> */
+/* OBSOLETE #include <errno.h> */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE #include "gdbcore.h" */
+/* OBSOLETE #include <sys/user.h>              /* After a.out.h  *x/ */
+/* OBSOLETE #include <sys/file.h> */
+/* OBSOLETE #include "gdb_stat.h" */
+/* OBSOLETE  */
+/* OBSOLETE \f */
+/* OBSOLETE /* Work with core dump and executable files, for GDB.  */
+/* OBSOLETE    This code would be in corefile.c if it weren't machine-dependent. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE core_file_command (filename, from_tty) */
+/* OBSOLETE      char *filename; */
+/* OBSOLETE      int from_tty; */
+/* OBSOLETE { */
+/* OBSOLETE   int val; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Discard all vestiges of any previous core file */
+/* OBSOLETE      and mark data and stack spaces as empty.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (corefile) */
+/* OBSOLETE     free (corefile); */
+/* OBSOLETE   corefile = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   if (corechan >= 0) */
+/* OBSOLETE     close (corechan); */
+/* OBSOLETE   corechan = -1; */
+/* OBSOLETE  */
+/* OBSOLETE   data_start = 0; */
+/* OBSOLETE   data_end = 0; */
+/* OBSOLETE   stack_start = STACK_END_ADDR; */
+/* OBSOLETE   stack_end = STACK_END_ADDR; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Now, if a new core file was specified, open it and digest it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (filename) */
+/* OBSOLETE     { */
+/* OBSOLETE       filename = tilde_expand (filename); */
+/* OBSOLETE       make_cleanup (free, filename); */
+/* OBSOLETE        */
+/* OBSOLETE       if (have_inferior_p ()) */
+/* OBSOLETE    error ("To look at a core file, you must kill the program with \"kill\"."); */
+/* OBSOLETE       corechan = open (filename, O_RDONLY, 0); */
+/* OBSOLETE       if (corechan < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE       /* 4.2-style (and perhaps also sysV-style) core dump file.  *x/ */
+/* OBSOLETE       { */
+/* OBSOLETE    struct user u; */
+/* OBSOLETE  */
+/* OBSOLETE    unsigned int reg_offset; */
+/* OBSOLETE  */
+/* OBSOLETE    val = myread (corechan, &u, sizeof u); */
+/* OBSOLETE    if (val < 0) */
+/* OBSOLETE      perror_with_name ("Not a core file: reading upage"); */
+/* OBSOLETE    if (val != sizeof u) */
+/* OBSOLETE      error ("Not a core file: could only read %d bytes", val); */
+/* OBSOLETE    data_start = exec_data_start; */
+/* OBSOLETE  */
+/* OBSOLETE #if !defined (NBPG) */
+/* OBSOLETE #define NBPG NBPP */
+/* OBSOLETE #endif */
+/* OBSOLETE #if !defined (UPAGES) */
+/* OBSOLETE #define UPAGES USIZE */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE    data_end = data_start + NBPG * u.u_dsize; */
+/* OBSOLETE    stack_start = stack_end - NBPG * u.u_ssize; */
+/* OBSOLETE    data_offset = NBPG * UPAGES + exec_data_start % NBPG /* Not sure about this //jkp *x/; */
+/* OBSOLETE    stack_offset = NBPG * (UPAGES + u.u_dsize); */
+/* OBSOLETE  */
+/* OBSOLETE    /* Some machines put an absolute address in here and some put */
+/* OBSOLETE       the offset in the upage of the regs.  *x/ */
+/* OBSOLETE    reg_offset = (int) u.u_state; */
+/* OBSOLETE    if (reg_offset > NBPG * UPAGES) */
+/* OBSOLETE      reg_offset -= KERNEL_U_ADDR; */
+/* OBSOLETE  */
+/* OBSOLETE    memcpy (&core_aouthdr, &u.u_exdata, sizeof (AOUTHDR)); */
+/* OBSOLETE    printf_unfiltered ("Core file is from \"%s\".\n", u.u_comm); */
+/* OBSOLETE  */
+/* OBSOLETE    /* I don't know where to find this info. */
+/* OBSOLETE       So, for now, mark it as not available.  *x/ */
+/* OBSOLETE    N_SET_MAGIC (core_aouthdr, 0); */
+/* OBSOLETE  */
+/* OBSOLETE    /* Read the register values out of the core file and store */
+/* OBSOLETE       them where `read_register' will find them.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE    { */
+/* OBSOLETE      register int regno; */
+/* OBSOLETE  */
+/* OBSOLETE      for (regno = 0; regno < NUM_REGS; regno++) */
+/* OBSOLETE        { */
+/* OBSOLETE          char buf[MAX_REGISTER_RAW_SIZE]; */
+/* OBSOLETE  */
+/* OBSOLETE          val = lseek (corechan, register_addr (regno, reg_offset), 0); */
+/* OBSOLETE          if (val < 0 */
+/* OBSOLETE              || (val = myread (corechan, buf, sizeof buf)) < 0) */
+/* OBSOLETE            { */
+/* OBSOLETE              char * buffer = (char *) alloca (strlen (REGISTER_NAME (regno)) */
+/* OBSOLETE                                               + 30); */
+/* OBSOLETE              strcpy (buffer, "Reading register "); */
+/* OBSOLETE              strcat (buffer, REGISTER_NAME (regno)); */
+/* OBSOLETE                                                */
+/* OBSOLETE              perror_with_name (buffer); */
+/* OBSOLETE            } */
+/* OBSOLETE  */
+/* OBSOLETE          supply_register (regno, buf); */
+/* OBSOLETE        } */
+/* OBSOLETE    } */
+/* OBSOLETE       } */
+/* OBSOLETE       if (filename[0] == '/') */
+/* OBSOLETE    corefile = savestring (filename, strlen (filename)); */
+/* OBSOLETE       else */
+/* OBSOLETE    { */
+/* OBSOLETE      corefile = concat (current_directory, "/", filename, NULL); */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       flush_cached_frames (); */
+/* OBSOLETE       select_frame (get_current_frame (), 0); */
+/* OBSOLETE       validate_files (); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (from_tty) */
+/* OBSOLETE     printf_unfiltered ("No core file now.\n"); */
+/* OBSOLETE } */
index 993e4bf..70db37e 100644 (file)
@@ -45,7 +45,32 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
    a power of two. */
 #define ROUND_DOWN(n,a)        ((n) & ~((a) - 1))
 #define ROUND_UP(n,a)          (((n) + (a) - 1) & ~((a) - 1))
-  
+
+static char *APCS_register_names[] =
+{ "a1", "a2", "a3", "a4", /*  0  1  2  3 */
+  "v1", "v2", "v3", "v4", /*  4  5  6  7 */
+  "v5", "v6", "sl", "fp", /*  8  9 10 11 */
+  "ip", "sp", "lr", "pc", /* 12 13 14 15 */
+  "f0", "f1", "f2", "f3", /* 16 17 18 19 */
+  "f4", "f5", "f6", "f7", /* 20 21 22 23 */
+  "fps","ps" }            /* 24 25       */;
+
+/* These names are the ones which gcc emits, and 
+   I find them less confusing.  Toggle between them
+   using the `othernames' command. */
+static char *additional_register_names[] =
+{ "r0", "r1", "r2", "r3", /*  0  1  2  3 */
+  "r4", "r5", "r6", "r7",    /*  4  5  6  7 */
+  "r8", "r9", "r10", "r11",  /*  8  9 10 11 */
+  "r12", "r13", "r14", "pc", /* 12 13 14 15 */
+  "f0", "f1", "f2", "f3",    /* 16 17 18 19 */
+  "f4", "f5", "f6", "f7",    /* 20 21 22 23 */
+  "fps","ps" }               /* 24 25       */;
+
+/* By default use the APCS registers names */
+
+char **arm_register_names = APCS_register_names;
+
 /* Should call_function allocate stack space for a struct return?  */
 /* The system C compiler uses a similar structure return convention to gcc */
 int
@@ -1029,38 +1054,18 @@ arm_float_info ()
     print_fpu_flags (status);
 }
 
-static char *original_register_names[] =
-{ "a1", "a2", "a3", "a4", /*  0  1  2  3 */
-  "v1", "v2", "v3", "v4", /*  4  5  6  7 */
-  "v5", "v6", "sl", "fp", /*  8  9 10 11 */
-  "ip", "sp", "lr", "pc", /* 12 13 14 15 */
-  "f0", "f1", "f2", "f3", /* 16 17 18 19 */
-  "f4", "f5", "f6", "f7", /* 20 21 22 23 */
-  "fps","ps" }            /* 24 25       */;
-
-/* These names are the ones which gcc emits, and 
-   I find them less confusing.  Toggle between them
-   using the `othernames' command. */
-static char *additional_register_names[] =
-{ "r0", "r1", "r2", "r3", /*  0  1  2  3 */
-  "r4", "r5", "r6", "r7", /*  4  5  6  7 */
-  "r8", "r9", "sl", "fp", /*  8  9 10 11 */
-  "ip", "sp", "lr", "pc", /* 12 13 14 15 */
-  "f0", "f1", "f2", "f3", /* 16 17 18 19 */
-  "f4", "f5", "f6", "f7", /* 20 21 22 23 */
-  "fps","ps" }            /* 24 25       */;
-
-char **arm_register_names = original_register_names;
-
-
 static void
 arm_othernames ()
 {
-  static int toggle;
-  arm_register_names = (toggle
-                       ? additional_register_names
-                       : original_register_names);
-  toggle = !toggle;
+
+  if (arm_register_names ==  APCS_register_names) { 
+    arm_register_names =  additional_register_names;
+    arm_toggle_regnames ();
+  } else {
+    arm_register_names =  APCS_register_names;
+    arm_toggle_regnames ();
+  }    
+    
 }
 
 /* FIXME:  Fill in with the 'right thing', see asm 
@@ -1616,8 +1621,15 @@ arm_skip_stub (pc)
 void
 _initialize_arm_tdep ()
 {
+  int regname_is_APCS = (arm_register_names ==  APCS_register_names);
+
   tm_print_insn = gdb_print_insn_arm;
+  
+  /* Sync the opcode insn printer with our register viewer: */
 
+  if (arm_toggle_regnames () != regname_is_APCS)
+    arm_toggle_regnames ();
+     
   add_com ("othernames", class_obscure, arm_othernames,
           "Switch to the other set of register names.");
 
index 8312031..f9265e4 100644 (file)
@@ -1901,7 +1901,6 @@ agent_command (exp, from_tty)
   struct cleanup *old_chain = 0;
   struct expression *expr;
   struct agent_expr *agent;
-  struct agent_reqs reqs;
   struct frame_info *fi = get_current_frame ();        /* need current scope */
 
   /* We don't deal with overlay debugging at the moment.  We need to
@@ -1919,7 +1918,9 @@ agent_command (exp, from_tty)
   agent = gen_trace_for_expr (fi->pc, expr);
   make_cleanup ((make_cleanup_func) free_agent_expr, agent);
   ax_print (gdb_stdout, agent);
-  ax_reqs (agent, &reqs);
+
+  /* It would be nice to call ax_reqs here to gather some general info
+     about the expression, and then print out the result.  */
 
   do_cleanups (old_chain);
   dont_repeat ();
index 28d336b..828778c 100644 (file)
+@c OBSOLETE 
+@c OBSOLETE @node Convex,,, Top
+@c OBSOLETE @appendix Convex-specific info
+@c OBSOLETE @cindex Convex notes
+@c OBSOLETE 
+@c OBSOLETE Scalar registers are 64 bits long, which is a pain since
+@c OBSOLETE left half of an S register frequently contains noise.
+@c OBSOLETE Therefore there are two ways to obtain the value of an S register.
+@c OBSOLETE 
+@c OBSOLETE @table @kbd
+@c OBSOLETE @item $s0
+@c OBSOLETE returns the low half of the register as an int
+@c OBSOLETE 
+@c OBSOLETE @item $S0
+@c OBSOLETE returns the whole register as a long long
+@c OBSOLETE @end table
+@c OBSOLETE 
+@c OBSOLETE You can print the value in floating point by using @samp{p/f $s0} or @samp{p/f $S0}
+@c OBSOLETE to print a single or double precision value.
+@c OBSOLETE 
+@c OBSOLETE @cindex vector registers
+@c OBSOLETE Vector registers are handled similarly, with @samp{$V0} denoting the whole
+@c OBSOLETE 64-bit register and @kbd{$v0} denoting the 32-bit low half; @samp{p/f $v0}
+@c OBSOLETE or @samp{p/f $V0} can be used to examine the register in floating point.
+@c OBSOLETE The length of the vector registers is taken from @samp{$vl}.  
+@c OBSOLETE 
+@c OBSOLETE Individual elements of a vector register are denoted in the obvious way;
+@c OBSOLETE @samp{print $v3[9]} prints the tenth element of register @kbd{v3}, and
+@c OBSOLETE @samp{set $v3[9] = 1234} alters it.
+@c OBSOLETE 
+@c OBSOLETE @kbd{$vl} and @kbd{$vs} are int, and @kbd{$vm} is an int vector.
+@c OBSOLETE Elements of @kbd{$vm} can't be assigned to.
+@c OBSOLETE 
+@c OBSOLETE @cindex communication registers
+@c OBSOLETE @kindex info comm-registers
+@c OBSOLETE Communication registers have names @kbd{$C0 .. $C63}, with @kbd{$c0 .. $c63}
+@c OBSOLETE denoting the low-order halves.  @samp{info comm-registers} will print them
+@c OBSOLETE all out, and tell which are locked.  (A communication register is
+@c OBSOLETE locked when a value is sent to it, and unlocked when the value is
+@c OBSOLETE received.)  Communication registers are, of course, global to all
+@c OBSOLETE threads, so it does not matter what the currently selected thread is.
+@c OBSOLETE @samp{info comm-reg @var{name}} prints just that one communication
+@c OBSOLETE register; @samp{name} may also be a communication register number
+@c OBSOLETE @samp{nn} or @samp{0xnn}.
+@c OBSOLETE @samp{info comm-reg @var{address}} prints the contents of the resource
+@c OBSOLETE structure at that address.
+@c OBSOLETE 
+@c OBSOLETE @kindex info psw
+@c OBSOLETE The command @samp{info psw} prints the processor status word @kbd{$ps}
+@c OBSOLETE bit by bit.
+@c OBSOLETE 
+@c OBSOLETE @kindex set base
+@c OBSOLETE GDB normally prints all integers in base 10, but the leading
+@c OBSOLETE @kbd{0x80000000} of pointers is intolerable in decimal, so the default
+@c OBSOLETE output radix has been changed to try to print addresses appropriately.
+@c OBSOLETE The @samp{set base} command can be used to change this.
+@c OBSOLETE 
+@c OBSOLETE @table @code
+@c OBSOLETE @item set base 10
+@c OBSOLETE Integer values always print in decimal.
+@c OBSOLETE 
+@c OBSOLETE @item set base 16
+@c OBSOLETE Integer values always print in hex.
+@c OBSOLETE 
+@c OBSOLETE @item set base
+@c OBSOLETE Go back to the initial state, which prints integer values in hex if they
+@c OBSOLETE look like pointers (specifically, if they start with 0x8 or 0xf in the
+@c OBSOLETE stack), otherwise in decimal.
+@c OBSOLETE @end table
+@c OBSOLETE 
+@c OBSOLETE @kindex set pipeline
+@c OBSOLETE When an exception such as a bus error or overflow happens, usually the PC
+@c OBSOLETE is several instructions ahead by the time the exception is detected.
+@c OBSOLETE The @samp{set pipe} command will disable this.
+@c OBSOLETE 
+@c OBSOLETE @table @code
+@c OBSOLETE @item set pipeline off
+@c OBSOLETE Forces serial execution of instructions; no vector chaining and no 
+@c OBSOLETE scalar instruction overlap.  With this, exceptions are detected with 
+@c OBSOLETE the PC pointing to the instruction after the one in error.
+@c OBSOLETE 
+@c OBSOLETE @item set pipeline on
+@c OBSOLETE Returns to normal, fast, execution.  This is the default.
+@c OBSOLETE @end table
+@c OBSOLETE 
+@c OBSOLETE @cindex parallel
+@c OBSOLETE In a parallel program, multiple threads may be executing, each
+@c OBSOLETE with its own registers, stack, and local memory.  When one of them
+@c OBSOLETE hits a breakpoint, that thread is selected.  Other threads do
+@c OBSOLETE not run while the thread is in the breakpoint.
+@c OBSOLETE 
+@c OBSOLETE @kindex 1cont
+@c OBSOLETE The selected thread can be single-stepped, given signals, and so
+@c OBSOLETE on.  Any other threads remain stopped.  When a @samp{cont} command is given,
+@c OBSOLETE all threads are resumed.  To resume just the selected thread, use
+@c OBSOLETE the command @samp{1cont}.
+@c OBSOLETE 
+@c OBSOLETE @kindex thread
+@c OBSOLETE The @samp{thread} command will show the active threads and the
+@c OBSOLETE instruction they are about to execute.  The selected thread is marked
+@c OBSOLETE with an asterisk.  The command @samp{thread @var{n}} will select thread @var{n},
+@c OBSOLETE shifting the debugger's attention to it for single-stepping,
+@c OBSOLETE registers, local memory, and so on.
+@c OBSOLETE 
+@c OBSOLETE @kindex info threads
+@c OBSOLETE The @samp{info threads} command will show what threads, if any, have
+@c OBSOLETE invisibly hit breakpoints or signals and are waiting to be noticed.
+@c OBSOLETE 
+@c OBSOLETE @kindex set parallel
+@c OBSOLETE The @samp{set parallel} command controls how many threads can be active.
+@c OBSOLETE 
+@c OBSOLETE @table @code
+@c OBSOLETE @item set parallel off
+@c OBSOLETE One thread.  Requests by the program that other threads join in
+@c OBSOLETE (spawn and pfork instructions) do not cause other threads to start up.
+@c OBSOLETE This does the same thing as the @samp{limit concurrency 1} command.
+@c OBSOLETE 
+@c OBSOLETE @item set parallel fixed
+@c OBSOLETE All CPUs are assigned to your program whenever it runs.  When it
+@c OBSOLETE executes a pfork or spawn instruction, it begins parallel execution
+@c OBSOLETE immediately.  This does the same thing as the @samp{mpa -f} command.
+@c OBSOLETE 
+@c OBSOLETE @item set parallel on
+@c OBSOLETE One or more threads.  Spawn and pfork cause CPUs to join in when and if
+@c OBSOLETE they are free.  This is the default.  It is very good for system
+@c OBSOLETE throughput, but not very good for finding bugs in parallel code.  If you
+@c OBSOLETE suspect a bug in parallel code, you probably want @samp{set parallel fixed.}
+@c OBSOLETE @end table
+@c OBSOLETE 
+@c OBSOLETE @subsection Limitations
+@c OBSOLETE 
+@c OBSOLETE WARNING: Convex GDB evaluates expressions in long long, because S
+@c OBSOLETE registers are 64 bits long.  However, GDB expression semantics are not
+@c OBSOLETE exactly C semantics.  This is a bug, strictly speaking, but it's not one I
+@c OBSOLETE know how to fix.  If @samp{x} is a program variable of type int, then it
+@c OBSOLETE is also type int to GDB, but @samp{x + 1} is long long, as is @samp{x + y}
+@c OBSOLETE or any other expression requiring computation.  So is the expression
+@c OBSOLETE @samp{1}, or any other constant.  You only really have to watch out for
+@c OBSOLETE calls.  The innocuous expression @samp{list_node (0x80001234)} has an
+@c OBSOLETE argument of type long long.  You must explicitly cast it to int.
+@c OBSOLETE 
+@c OBSOLETE It is not possible to continue after an uncaught fatal signal by using
+@c OBSOLETE @samp{signal 0}, @samp{return}, @samp{jump}, or anything else.  The difficulty is with
+@c OBSOLETE Unix, not GDB.
+@c OBSOLETE 
+@c OBSOLETE I have made no big effort to make such things as single-stepping a
+@c OBSOLETE @kbd{join} instruction do something reasonable.  If the program seems to
+@c OBSOLETE hang when doing this, type @kbd{ctrl-c} and @samp{cont}, or use
+@c OBSOLETE @samp{thread} to shift to a live thread.  Single-stepping a @kbd{spawn}
+@c OBSOLETE instruction apparently causes new threads to be born with their T bit set;
+@c OBSOLETE this is not handled gracefully.  When a thread has hit a breakpoint, other
+@c OBSOLETE threads may have invisibly hit the breakpoint in the background; if you
+@c OBSOLETE clear the breakpoint gdb will be surprised when threads seem to continue
+@c OBSOLETE to stop at it.  All of these situations produce spurious signal 5 traps;
+@c OBSOLETE if this happens, just type @samp{cont}.  If it becomes a nuisance, use
+@c OBSOLETE @samp{handle 5 nostop}.  (It will ask if you are sure.  You are.)
+@c OBSOLETE 
+@c OBSOLETE There is no way in GDB to store a float in a register, as with
+@c OBSOLETE @kbd{set $s0 = 3.1416}.  The identifier @kbd{$s0} denotes an integer,
+@c OBSOLETE and like any C expression which assigns to an integer variable, the
+@c OBSOLETE right-hand side is casted to type int.  If you should need to do
+@c OBSOLETE something like this, you can assign the value to @kbd{@{float@} ($sp-4)}
+@c OBSOLETE and then do @kbd{set $s0 = $sp[-4]}.  Same deal with @kbd{set $v0[69] = 6.9}.
 
-@node Convex,,, Top
-@appendix Convex-specific info
-@cindex Convex notes
-
-Scalar registers are 64 bits long, which is a pain since
-left half of an S register frequently contains noise.
-Therefore there are two ways to obtain the value of an S register.
-
-@table @kbd
-@item $s0
-returns the low half of the register as an int
-
-@item $S0
-returns the whole register as a long long
-@end table
-
-You can print the value in floating point by using @samp{p/f $s0} or @samp{p/f $S0}
-to print a single or double precision value.
-
-@cindex vector registers
-Vector registers are handled similarly, with @samp{$V0} denoting the whole
-64-bit register and @kbd{$v0} denoting the 32-bit low half; @samp{p/f $v0}
-or @samp{p/f $V0} can be used to examine the register in floating point.
-The length of the vector registers is taken from @samp{$vl}.  
-
-Individual elements of a vector register are denoted in the obvious way;
-@samp{print $v3[9]} prints the tenth element of register @kbd{v3}, and
-@samp{set $v3[9] = 1234} alters it.
-
-@kbd{$vl} and @kbd{$vs} are int, and @kbd{$vm} is an int vector.
-Elements of @kbd{$vm} can't be assigned to.
-
-@cindex communication registers
-@kindex info comm-registers
-Communication registers have names @kbd{$C0 .. $C63}, with @kbd{$c0 .. $c63}
-denoting the low-order halves.  @samp{info comm-registers} will print them
-all out, and tell which are locked.  (A communication register is
-locked when a value is sent to it, and unlocked when the value is
-received.)  Communication registers are, of course, global to all
-threads, so it does not matter what the currently selected thread is.
-@samp{info comm-reg @var{name}} prints just that one communication
-register; @samp{name} may also be a communication register number
-@samp{nn} or @samp{0xnn}.
-@samp{info comm-reg @var{address}} prints the contents of the resource
-structure at that address.
-
-@kindex info psw
-The command @samp{info psw} prints the processor status word @kbd{$ps}
-bit by bit.
-
-@kindex set base
-GDB normally prints all integers in base 10, but the leading
-@kbd{0x80000000} of pointers is intolerable in decimal, so the default
-output radix has been changed to try to print addresses appropriately.
-The @samp{set base} command can be used to change this.
-
-@table @code
-@item set base 10
-Integer values always print in decimal.
-
-@item set base 16
-Integer values always print in hex.
-
-@item set base
-Go back to the initial state, which prints integer values in hex if they
-look like pointers (specifically, if they start with 0x8 or 0xf in the
-stack), otherwise in decimal.
-@end table
-
-@kindex set pipeline
-When an exception such as a bus error or overflow happens, usually the PC
-is several instructions ahead by the time the exception is detected.
-The @samp{set pipe} command will disable this.
-
-@table @code
-@item set pipeline off
-Forces serial execution of instructions; no vector chaining and no 
-scalar instruction overlap.  With this, exceptions are detected with 
-the PC pointing to the instruction after the one in error.
-
-@item set pipeline on
-Returns to normal, fast, execution.  This is the default.
-@end table
-
-@cindex parallel
-In a parallel program, multiple threads may be executing, each
-with its own registers, stack, and local memory.  When one of them
-hits a breakpoint, that thread is selected.  Other threads do
-not run while the thread is in the breakpoint.
-
-@kindex 1cont
-The selected thread can be single-stepped, given signals, and so
-on.  Any other threads remain stopped.  When a @samp{cont} command is given,
-all threads are resumed.  To resume just the selected thread, use
-the command @samp{1cont}.
-
-@kindex thread
-The @samp{thread} command will show the active threads and the
-instruction they are about to execute.  The selected thread is marked
-with an asterisk.  The command @samp{thread @var{n}} will select thread @var{n},
-shifting the debugger's attention to it for single-stepping,
-registers, local memory, and so on.
-
-@kindex info threads
-The @samp{info threads} command will show what threads, if any, have
-invisibly hit breakpoints or signals and are waiting to be noticed.
-
-@kindex set parallel
-The @samp{set parallel} command controls how many threads can be active.
-
-@table @code
-@item set parallel off
-One thread.  Requests by the program that other threads join in
-(spawn and pfork instructions) do not cause other threads to start up.
-This does the same thing as the @samp{limit concurrency 1} command.
-
-@item set parallel fixed
-All CPUs are assigned to your program whenever it runs.  When it
-executes a pfork or spawn instruction, it begins parallel execution
-immediately.  This does the same thing as the @samp{mpa -f} command.
-
-@item set parallel on
-One or more threads.  Spawn and pfork cause CPUs to join in when and if
-they are free.  This is the default.  It is very good for system
-throughput, but not very good for finding bugs in parallel code.  If you
-suspect a bug in parallel code, you probably want @samp{set parallel fixed.}
-@end table
-
-@subsection Limitations
-
-WARNING: Convex GDB evaluates expressions in long long, because S
-registers are 64 bits long.  However, GDB expression semantics are not
-exactly C semantics.  This is a bug, strictly speaking, but it's not one I
-know how to fix.  If @samp{x} is a program variable of type int, then it
-is also type int to GDB, but @samp{x + 1} is long long, as is @samp{x + y}
-or any other expression requiring computation.  So is the expression
-@samp{1}, or any other constant.  You only really have to watch out for
-calls.  The innocuous expression @samp{list_node (0x80001234)} has an
-argument of type long long.  You must explicitly cast it to int.
-
-It is not possible to continue after an uncaught fatal signal by using
-@samp{signal 0}, @samp{return}, @samp{jump}, or anything else.  The difficulty is with
-Unix, not GDB.
-
-I have made no big effort to make such things as single-stepping a
-@kbd{join} instruction do something reasonable.  If the program seems to
-hang when doing this, type @kbd{ctrl-c} and @samp{cont}, or use
-@samp{thread} to shift to a live thread.  Single-stepping a @kbd{spawn}
-instruction apparently causes new threads to be born with their T bit set;
-this is not handled gracefully.  When a thread has hit a breakpoint, other
-threads may have invisibly hit the breakpoint in the background; if you
-clear the breakpoint gdb will be surprised when threads seem to continue
-to stop at it.  All of these situations produce spurious signal 5 traps;
-if this happens, just type @samp{cont}.  If it becomes a nuisance, use
-@samp{handle 5 nostop}.  (It will ask if you are sure.  You are.)
-
-There is no way in GDB to store a float in a register, as with
-@kbd{set $s0 = 3.1416}.  The identifier @kbd{$s0} denotes an integer,
-and like any C expression which assigns to an integer variable, the
-right-hand side is casted to type int.  If you should need to do
-something like this, you can assign the value to @kbd{@{float@} ($sp-4)}
-and then do @kbd{set $s0 = $sp[-4]}.  Same deal with @kbd{set $v0[69] = 6.9}.
index 35a121f..5ec3bfe 100644 (file)
@@ -1,3 +1,3 @@
-# Host: Convex Unix (4bsd)
-XDEPFILES= convex-xdep.o
-XM_FILE= xm-convex.h
+# OBSOLETE # Host: Convex Unix (4bsd)
+# OBSOLETE XDEPFILES= convex-xdep.o
+# OBSOLETE XM_FILE= xm-convex.h
index eefbeb3..425b171 100644 (file)
@@ -1,3 +1,3 @@
-# Target: Convex Unix (4bsd)
-TDEPFILES= convex-tdep.o
-TM_FILE= tm-convex.h
+# OBSOLETE # Target: Convex Unix (4bsd)
+# OBSOLETE TDEPFILES= convex-tdep.o
+# OBSOLETE TM_FILE= tm-convex.h
index 212f39d..953f767 100644 (file)
-/* Definitions to make GDB run on Convex Unix (4bsd)
-   Copyright 1989, 1991, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#define TARGET_BYTE_ORDER BIG_ENDIAN
-
-/* There is come problem with the debugging symbols generated by the
-   compiler such that the debugging symbol for the first line of a
-   function overlap with the function prologue.  */
-#define PROLOGUE_FIRSTLINE_OVERLAP
-
-/* When convex pcc says CHAR or SHORT, it provides the correct address.  */
-
-#define BELIEVE_PCC_PROMOTION 1
-
-/* Symbol types to ignore.  */
-/* 0xc4 is N_MONPT.  Use the numeric value for the benefit of people
-   with (rather) old OS's.  */
-#define IGNORE_SYMBOL(TYPE) \
-    (((TYPE) & ~N_EXT) == N_TBSS       \
-     || ((TYPE) & ~N_EXT) == N_TDATA   \
-     || ((TYPE) & ~N_EXT) == 0xc4)
-
-/* Offset from address of function to start of its code.
-   Zero on most machines.  */
-
-#define FUNCTION_START_OFFSET 0
-
-/* Advance PC across any function entry prologue instructions
-   to reach some "real" code.
-   Convex prolog is:
-       [sub.w #-,sp]           in one of 3 possible sizes
-       [mov psw,-              fc/vc main program prolog
-        and #-,-                 (skip it because the "mov psw" saves the
-       mov -,psw]                 T bit, so continue gets a surprise trap)
-       [and #-,sp]             fc/vc O2 main program prolog
-       [ld.- -(ap),-]          pcc/gcc register arg loads
-*/
-
-extern CORE_ADDR convex_skip_prologue PARAMS ((CORE_ADDR pc));
-#define SKIP_PROLOGUE(pc) (convex_skip_prologue (pc))
-
-/* Immediately after a function call, return the saved pc.
-   (ignore frame and return *$sp so we can handle both calls and callq) */
-
-#define SAVED_PC_AFTER_CALL(frame) \
-    read_memory_integer (read_register (SP_REGNUM), 4)
-
-/* Address of end of stack space.
-   This is ((USRSTACK + 0xfff) & -0x1000)) from <convex/vmparam.h> but
-   that expression depends on the kernel version; instead, fetch a
-   page-zero pointer and get it from that.  This will be invalid if
-   they ever change the way bkpt signals are delivered.  */
-
-#define STACK_END_ADDR (0xfffff000 & *(unsigned *) 0x80000050)
-
-/* User-mode traps push an extended rtn block,
-   then fault with one of the following PCs */
-
-#define is_trace_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000040)) <= 4)
-#define is_arith_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000044)) <= 4)
-#define is_break_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000050)) <= 4)
-
-/* We need to manipulate trap bits in the psw */
-
-#define PSW_TRAP_FLAGS 0x69670000
-#define PSW_T_BIT      0x08000000
-#define PSW_S_BIT      0x01000000
-
-/* Stack grows downward.  */
-
-#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
-
-/* Sequence of bytes for breakpoint instruction. (bkpt)  */
-
-#define BREAKPOINT {0x7d,0x50}
-
-/* Amount PC must be decremented by after a breakpoint.
-   This is often the number of bytes in BREAKPOINT but not always.
-   (The break PC needs to be decremented by 2, but we do it when the
-   break frame is recognized and popped.  That way gdb can tell breaks
-   from trace traps with certainty.) */
-
-#define DECR_PC_AFTER_BREAK 0
-
-/* Say how long (ordinary) registers are.  This is a piece of bogosity
-   used in push_word and a few other places; REGISTER_RAW_SIZE is the
-   real way to know how big a register is.  */
-
-#define REGISTER_SIZE 8
-
-/* Number of machine registers */
-
-#define NUM_REGS 26
-
-/* Initializer for an array of names of registers.
-   There should be NUM_REGS strings in this initializer.  */
-
-#define REGISTER_NAMES {"pc","psw","fp","ap","a5","a4","a3","a2","a1","sp",\
-                       "s7","s6","s5","s4","s3","s2","s1","s0",\
-                       "S7","S6","S5","S4","S3","S2","S1","S0"}
-
-/* Register numbers of various important registers.
-   Note that some of these values are "real" register numbers,
-   and correspond to the general registers of the machine,
-   and some are "phony" register numbers which are too large
-   to be actual register numbers as far as the user is concerned
-   but do serve to get the desired values when passed to read_register.  */
-
-#define S0_REGNUM 25           /* the real S regs */
-#define S7_REGNUM 18
-#define s0_REGNUM 17           /* low-order halves of S regs */
-#define s7_REGNUM 10
-#define SP_REGNUM 9            /* A regs */
-#define A1_REGNUM 8
-#define A5_REGNUM 4
-#define AP_REGNUM 3
-#define FP_REGNUM 2            /* Contains address of executing stack frame */
-#define PS_REGNUM 1            /* Contains processor status */
-#define PC_REGNUM 0            /* Contains program counter */
-
-/* convert dbx stab register number (from `r' declaration) to a gdb REGNUM */
-
-#define STAB_REG_TO_REGNUM(value) \
-      ((value) < 8 ? S0_REGNUM - (value) : SP_REGNUM - ((value) - 8))
-
-/* Vector register numbers, not handled as ordinary regs.
-   They are treated as convenience variables whose values are read
-   from the inferior when needed.  */
-
-#define V0_REGNUM 0
-#define V7_REGNUM 7
-#define VM_REGNUM 8
-#define VS_REGNUM 9
-#define VL_REGNUM 10
-
-/* Total amount of space needed to store our copies of the machine's
-   register state, the array `registers'.  */
-#define REGISTER_BYTES (4*10 + 8*8)
-
-/* Index within `registers' of the first byte of the space for
-   register N.
-   NB: must match structure of struct syscall_context for correct operation */
-
-#define REGISTER_BYTE(N) ((N) < s7_REGNUM ? 4*(N) : \
-                         (N) < S7_REGNUM ? 44 + 8 * ((N)-s7_REGNUM) : \
-                                           40 + 8 * ((N)-S7_REGNUM))
-
-/* Number of bytes of storage in the actual machine representation
-   for register N. */
-
-#define REGISTER_RAW_SIZE(N) ((N) < S7_REGNUM ? 4 : 8)
-
-/* Number of bytes of storage in the program's representation
-   for register N.   */
-
-#define REGISTER_VIRTUAL_SIZE(N) REGISTER_RAW_SIZE(N)
-
-/* Largest value REGISTER_RAW_SIZE can have.  */
-
-#define MAX_REGISTER_RAW_SIZE 8
-
-/* Largest value REGISTER_VIRTUAL_SIZE can have.  */
-
-#define MAX_REGISTER_VIRTUAL_SIZE 8
-
-/* Return the GDB type object for the "standard" data type
-   of data in register N.  */
-
-#define REGISTER_VIRTUAL_TYPE(N) \
-   ((N) < S7_REGNUM ? builtin_type_int : builtin_type_long_long)
-
-/* Store the address of the place in which to copy the structure the
-   subroutine will return.  This is called from call_function. */
-
-#define STORE_STRUCT_RETURN(ADDR, SP) \
-  { write_register (A1_REGNUM, (ADDR)); }
-
-/* Extract from an array REGBUF containing the (raw) register state
-   a function return value of type TYPE, and copy that, in virtual format,
-   into VALBUF.  */
-
-#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
-  memcpy (VALBUF, &((char *) REGBUF) [REGISTER_BYTE (S0_REGNUM) + \
-                            8 - TYPE_LENGTH (TYPE)],\
-        TYPE_LENGTH (TYPE))
-
-/* Write into appropriate registers a function return value
-   of type TYPE, given in virtual format.  */
-
-#define STORE_RETURN_VALUE(TYPE,VALBUF) \
-    write_register_bytes (REGISTER_BYTE (S0_REGNUM), VALBUF, 8)
-
-/* Extract from an array REGBUF containing the (raw) register state
-   the address in which a function should return its structure value,
-   as a CORE_ADDR (or an expression that can be used as one).  */
-
-#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
-    (*(int *) & ((char *) REGBUF) [REGISTER_BYTE (s0_REGNUM)])
-
-/* Define trapped internal variable hooks to read and write
-   vector and communication registers.  */
-
-#define IS_TRAPPED_INTERNALVAR is_trapped_internalvar
-#define VALUE_OF_TRAPPED_INTERNALVAR value_of_trapped_internalvar
-#define SET_TRAPPED_INTERNALVAR set_trapped_internalvar
-
-extern struct value *value_of_trapped_internalvar ();
-
-/* Hooks to read data from soff exec and core files,
-   and to describe the files.  */
-
-#define FILES_INFO_HOOK print_maps
-
-/* Hook to call to print a typeless integer value, normally printed in decimal.
-   For convex, use hex instead if the number looks like an address.  */
-
-#define PRINT_TYPELESS_INTEGER decout
-
-/* For the native compiler, variables for a particular lexical context
-   are listed after the beginning LBRAC instead of before in the
-   executables list of symbols.  Using "gcc_compiled." to distinguish
-   between GCC and native compiler doesn't work on Convex because the
-   linker sorts the symbols to put "gcc_compiled." in the wrong place.
-   desc is nonzero for native, zero for gcc.   */
-#define VARIABLES_INSIDE_BLOCK(desc, gcc_p) (desc != 0)
-
-/* Pcc occaisionally puts an SO where there should be an SOL.   */
-#define PCC_SOL_BROKEN
-\f
-/* Describe the pointer in each stack frame to the previous stack frame
-   (its caller).  */
-
-/* FRAME_CHAIN takes a frame_info with a frame's nominal address in fi->frame,
-   and produces the frame's chain-pointer. */
-
-/* (caller fp is saved at 8(fp)) */
-
-#define FRAME_CHAIN(fi)   (read_memory_integer ((fi)->frame + 8, 4))
-
-/* Define other aspects of the stack frame.  */
-
-/* We need the boundaries of the text in the exec file, as a kludge,
-   for FRAMELESS_FUNCTION_INVOCATION and CALL_DUMMY_LOCATION. */
-
-#define        NEED_TEXT_START_END 1
-
-/* An expression that tells us whether the function invocation represented
-   by FI does not have a frame on the stack associated with it.
-   On convex, check at the return address for `callq' -- if so, frameless,
-   otherwise, not.  */
-
-extern int convex_frameless_function_invocation PARAMS ((struct frame_info *fi));
-#define FRAMELESS_FUNCTION_INVOCATION(FI) (convex_frameless_function_invocatio (FI))
-
-#define FRAME_SAVED_PC(fi) (read_memory_integer ((fi)->frame, 4))
-
-#define FRAME_ARGS_ADDRESS(fi) (read_memory_integer ((fi)->frame + 12, 4))
-
-#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
-
-/* Return number of args passed to a frame.
-   Can return -1, meaning no way to tell.  */
-
-extern int convex_frame_num_args PARAMS ((struct frame_info *fi));
-#define FRAME_NUM_ARGS(fi) (convex_frame_num_args ((fi)))
-
-/* Return number of bytes at start of arglist that are not really args.  */
-
-#define FRAME_ARGS_SKIP 0
-
-/* Put here the code to store, into a struct frame_saved_regs,
-   the addresses of the saved registers of frame described by FRAME_INFO.
-   This includes special registers such as pc and fp saved in special
-   ways in the stack frame.  sp is even more special:
-   the address we return for it IS the sp for the next frame.  */
-
-/* Normal (short) frames save only PC, FP, (callee's) AP.  To reasonably
-   handle gcc and pcc register variables, scan the code following the
-   call for the instructions the compiler inserts to reload register
-   variables from stack slots and record the stack slots as the saved
-   locations of those registers.  This will occasionally identify some
-   random load as a saved register; this is harmless.  vc does not
-   declare its register allocation actions in the stabs.  */
-
-#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs)            \
-{ register int regnum;                                                 \
-  register int frame_length =  /* 3 short, 2 long, 1 extended, 0 context */\
-      (read_memory_integer ((frame_info)->frame + 4, 4) >> 25) & 3;    \
-  register CORE_ADDR frame_fp =                                                \
-      read_memory_integer ((frame_info)->frame + 8, 4);                        \
-  register CORE_ADDR next_addr;                                                \
-  memset (&frame_saved_regs, '\0', sizeof frame_saved_regs);                   \
-  (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 0;                \
-  (frame_saved_regs).regs[PS_REGNUM] = (frame_info)->frame + 4;                \
-  (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame + 8;                \
-  (frame_saved_regs).regs[AP_REGNUM] = frame_fp + 12;                  \
-  next_addr = (frame_info)->frame + 12;                                        \
-  if (frame_length < 3)                                                        \
-    for (regnum = A5_REGNUM; regnum < SP_REGNUM; ++regnum)             \
-      (frame_saved_regs).regs[regnum] = (next_addr += 4);              \
-  if (frame_length < 2)                                                        \
-    (frame_saved_regs).regs[SP_REGNUM] = (next_addr += 4);             \
-  next_addr -= 4;                                                      \
-  if (frame_length < 3)                                                        \
-    for (regnum = S7_REGNUM; regnum < S0_REGNUM; ++regnum)             \
-      (frame_saved_regs).regs[regnum] = (next_addr += 8);              \
-  if (frame_length < 2)                                                        \
-    (frame_saved_regs).regs[S0_REGNUM] = (next_addr += 8);             \
-  else                                                                 \
-    (frame_saved_regs).regs[SP_REGNUM] = next_addr + 8;                        \
-  if (frame_length == 3) {                                             \
-    CORE_ADDR pc = read_memory_integer ((frame_info)->frame, 4);       \
-    int op, ix, disp;                                                  \
-    op = read_memory_integer (pc, 2);                                  \
-    if ((op & 0xffc7) == 0x1480) pc += 4;      /* add.w #-,sp */       \
-    else if ((op & 0xffc7) == 0x58c0) pc += 2; /* add.w #-,sp */       \
-    op = read_memory_integer (pc, 2);                                  \
-    if ((op & 0xffc7) == 0x2a06) pc += 4;      /* ld.w -,ap */         \
-    for (;;) {                                                         \
-      op = read_memory_integer (pc, 2);                                        \
-      ix = (op >> 3) & 7;                                              \
-      if ((op & 0xfcc0) == 0x2800) {           /* ld.- -,ak */         \
-        regnum = SP_REGNUM - (op & 7);                                 \
-       disp = read_memory_integer (pc + 2, 2);                         \
-       pc += 4;}                                                       \
-      else if ((op & 0xfcc0) == 0x2840) {      /* ld.- -,ak */         \
-        regnum = SP_REGNUM - (op & 7);                                 \
-       disp = read_memory_integer (pc + 2, 4);                         \
-       pc += 6;}                                                       \
-      if ((op & 0xfcc0) == 0x3000) {           /* ld.- -,sk */         \
-        regnum = S0_REGNUM - (op & 7);                                 \
-       disp = read_memory_integer (pc + 2, 2);                         \
-       pc += 4;}                                                       \
-      else if ((op & 0xfcc0) == 0x3040) {      /* ld.- -,sk */         \
-        regnum = S0_REGNUM - (op & 7);                                 \
-       disp = read_memory_integer (pc + 2, 4);                         \
-       pc += 6;}                                                       \
-      else if ((op & 0xff00) == 0x7100) {      /* br crossjump */      \
-        pc += 2 * (char) op;                                           \
-        continue;}                                                     \
-      else if (op == 0x0140) {                 /* jmp crossjump */     \
-        pc = read_memory_integer (pc + 2, 4);                          \
-        continue;}                                                     \
-      else break;                                                      \
-      if ((frame_saved_regs).regs[regnum])                             \
-       break;                                                          \
-      if (ix == 7) disp += frame_fp;                                   \
-      else if (ix == 6) disp += read_memory_integer (frame_fp + 12, 4);        \
-      else if (ix != 0) break;                                         \
-      (frame_saved_regs).regs[regnum] =                                        \
-       disp - 8 + (1 << ((op >> 8) & 3));                              \
-      if (regnum >= S7_REGNUM)                                         \
-        (frame_saved_regs).regs[regnum - S0_REGNUM + s0_REGNUM] =      \
-         disp - 4 + (1 << ((op >> 8) & 3));                            \
-    }                                                                  \
-  }                                                                    \
-}
-\f
-/* Things needed for making the inferior call functions.  */
-
-#define        CALL_DUMMY_LOCATION     BEFORE_TEXT_END
-
-/* Push an empty stack frame, to record the current PC, etc.  */
-
-#define PUSH_DUMMY_FRAME \
-{ register CORE_ADDR sp = read_register (SP_REGNUM);                   \
-  register int regnum;                                                 \
-  char buf[8];                                                         \
-  long word;                                                           \
-  for (regnum = S0_REGNUM; regnum >= S7_REGNUM; --regnum) {            \
-    read_register_bytes (REGISTER_BYTE (regnum), buf, 8);              \
-    sp = push_bytes (sp, buf, 8);}                                     \
-  for (regnum = SP_REGNUM; regnum >= FP_REGNUM; --regnum) {            \
-    word = read_register (regnum);                                     \
-    sp = push_bytes (sp, &word, 4);}                                           \
-  word = (read_register (PS_REGNUM) &~ (3<<25)) | (1<<25);             \
-  sp = push_bytes (sp, &word, 4);                                      \
-  word = read_register (PC_REGNUM);                                    \
-  sp = push_bytes (sp, &word, 4);                                      \
-  write_register (SP_REGNUM, sp);                                      \
-  write_register (FP_REGNUM, sp);                                      \
-  write_register (AP_REGNUM, sp);}
-
-/* Discard from the stack the innermost frame, restoring all registers.  */
-
-#define POP_FRAME  do {\
-  register CORE_ADDR fp = read_register (FP_REGNUM);       \
-  register int regnum;                                     \
-  register int frame_length =  /* 3 short, 2 long, 1 extended, 0 context */ \
-      (read_memory_integer (fp + 4, 4) >> 25) & 3;          \
-  char buf[8];                                             \
-  write_register (PC_REGNUM, read_memory_integer (fp, 4));  \
-  write_register (PS_REGNUM, read_memory_integer (fp += 4, 4));  \
-  write_register (FP_REGNUM, read_memory_integer (fp += 4, 4));  \
-  write_register (AP_REGNUM, read_memory_integer (fp += 4, 4));  \
-  if (frame_length < 3)                                     \
-    for (regnum = A5_REGNUM; regnum < SP_REGNUM; ++regnum)   \
-      write_register (regnum, read_memory_integer (fp += 4, 4)); \
-  if (frame_length < 2)                                             \
-    write_register (SP_REGNUM, read_memory_integer (fp += 4, 4)); \
-  fp -= 4;                                                     \
-  if (frame_length < 3)                                        \
-    for (regnum = S7_REGNUM; regnum < S0_REGNUM; ++regnum) {   \
-      read_memory (fp += 8, buf, 8);                           \
-      write_register_bytes (REGISTER_BYTE (regnum), buf, 8);}   \
-  if (frame_length < 2)        {                                       \
-    read_memory (fp += 8, buf, 8);                             \
-    write_register_bytes (REGISTER_BYTE (regnum), buf, 8);}     \
-  else write_register (SP_REGNUM, fp + 8);                     \
-  flush_cached_frames ();                                      \
-} while (0)
-
-/* This sequence of words is the instructions
-     mov sp,ap
-     pshea 69696969
-     calls 32323232
-     bkpt
-   Note this is 16 bytes.  */
-
-#define CALL_DUMMY {0x50860d4069696969LL,0x2140323232327d50LL}
-
-#define CALL_DUMMY_LENGTH 16
-
-#define CALL_DUMMY_START_OFFSET 0
-
-/* Insert the specified number of args and function address
-   into a call sequence of the above form stored at DUMMYNAME.  */
-
-#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p)   \
-{ *(int *)((char *) dummyname + 4) = nargs;    \
-  *(int *)((char *) dummyname + 10) = fun; }
-\f
-/* Defs to read soff symbol tables, see dbxread.c */
-
-#define NUMBER_OF_SYMBOLS    ((long) opthdr.o_nsyms)
-#define STRING_TABLE_OFFSET  ((long) filehdr.h_strptr)
-#define SYMBOL_TABLE_OFFSET  ((long) opthdr.o_symptr)
-#define STRING_TABLE_SIZE    ((long) filehdr.h_strsiz)
-#define SIZE_OF_TEXT_SEGMENT ((long) txthdr.s_size)
-#define ENTRY_POINT          ((long) opthdr.o_entry)
-
-#define READ_STRING_TABLE_SIZE(BUFFER) \
-    (BUFFER = STRING_TABLE_SIZE)
-
-#define DECLARE_FILE_HEADERS \
-  FILEHDR filehdr;                                                     \
-  OPTHDR opthdr;                                                       \
-  SCNHDR txthdr
-
-#define READ_FILE_HEADERS(DESC,NAME) \
-{                                                                      \
-  int n;                                                               \
-  val = myread (DESC, &filehdr, sizeof filehdr);                       \
-  if (val < 0)                                                         \
-    perror_with_name (NAME);                                           \
-  if (! IS_SOFF_MAGIC (filehdr.h_magic))                               \
-    error ("%s: not an executable file.", NAME);                       \
-  lseek (DESC, 0L, 0);                                                 \
-  if (myread (DESC, &filehdr, sizeof filehdr) < 0)                     \
-    perror_with_name (NAME);                                           \
-  if (myread (DESC, &opthdr, filehdr.h_opthdr) <= 0)                   \
-    perror_with_name (NAME);                                           \
-  for (n = 0; n < filehdr.h_nscns; n++)                                        \
-    {                                                                  \
-      if (myread (DESC, &txthdr, sizeof txthdr) < 0)                   \
-       perror_with_name (NAME);                                        \
-      if ((txthdr.s_flags & S_TYPMASK) == S_TEXT)                      \
-       break;                                                          \
-    }                                                                  \
-}
+/* OBSOLETE /* Definitions to make GDB run on Convex Unix (4bsd) */
+/* OBSOLETE    Copyright 1989, 1991, 1993 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define TARGET_BYTE_ORDER BIG_ENDIAN */
+/* OBSOLETE  */
+/* OBSOLETE /* There is come problem with the debugging symbols generated by the */
+/* OBSOLETE    compiler such that the debugging symbol for the first line of a */
+/* OBSOLETE    function overlap with the function prologue.  *x/ */
+/* OBSOLETE #define PROLOGUE_FIRSTLINE_OVERLAP */
+/* OBSOLETE  */
+/* OBSOLETE /* When convex pcc says CHAR or SHORT, it provides the correct address.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define BELIEVE_PCC_PROMOTION 1 */
+/* OBSOLETE  */
+/* OBSOLETE /* Symbol types to ignore.  *x/ */
+/* OBSOLETE /* 0xc4 is N_MONPT.  Use the numeric value for the benefit of people */
+/* OBSOLETE    with (rather) old OS's.  *x/ */
+/* OBSOLETE #define IGNORE_SYMBOL(TYPE) \ */
+/* OBSOLETE     (((TYPE) & ~N_EXT) == N_TBSS       \ */
+/* OBSOLETE      || ((TYPE) & ~N_EXT) == N_TDATA   \ */
+/* OBSOLETE      || ((TYPE) & ~N_EXT) == 0xc4) */
+/* OBSOLETE  */
+/* OBSOLETE /* Offset from address of function to start of its code. */
+/* OBSOLETE    Zero on most machines.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FUNCTION_START_OFFSET 0 */
+/* OBSOLETE  */
+/* OBSOLETE /* Advance PC across any function entry prologue instructions */
+/* OBSOLETE    to reach some "real" code. */
+/* OBSOLETE    Convex prolog is: */
+/* OBSOLETE        [sub.w #-,sp]               in one of 3 possible sizes */
+/* OBSOLETE        [mov psw,-          fc/vc main program prolog */
+/* OBSOLETE         and #-,-             (skip it because the "mov psw" saves the */
+/* OBSOLETE    mov -,psw]                 T bit, so continue gets a surprise trap) */
+/* OBSOLETE        [and #-,sp]         fc/vc O2 main program prolog */
+/* OBSOLETE        [ld.- -(ap),-]              pcc/gcc register arg loads */
+/* OBSOLETE *x/ */
+/* OBSOLETE  */
+/* OBSOLETE extern CORE_ADDR convex_skip_prologue PARAMS ((CORE_ADDR pc)); */
+/* OBSOLETE #define SKIP_PROLOGUE(pc) (convex_skip_prologue (pc)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Immediately after a function call, return the saved pc. */
+/* OBSOLETE    (ignore frame and return *$sp so we can handle both calls and callq) *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define SAVED_PC_AFTER_CALL(frame) \ */
+/* OBSOLETE     read_memory_integer (read_register (SP_REGNUM), 4) */
+/* OBSOLETE  */
+/* OBSOLETE /* Address of end of stack space. */
+/* OBSOLETE    This is ((USRSTACK + 0xfff) & -0x1000)) from <convex/vmparam.h> but */
+/* OBSOLETE    that expression depends on the kernel version; instead, fetch a */
+/* OBSOLETE    page-zero pointer and get it from that.  This will be invalid if */
+/* OBSOLETE    they ever change the way bkpt signals are delivered.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define STACK_END_ADDR (0xfffff000 & *(unsigned *) 0x80000050) */
+/* OBSOLETE  */
+/* OBSOLETE /* User-mode traps push an extended rtn block, */
+/* OBSOLETE    then fault with one of the following PCs *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define is_trace_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000040)) <= 4) */
+/* OBSOLETE #define is_arith_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000044)) <= 4) */
+/* OBSOLETE #define is_break_pc(pc)  ((unsigned) ((pc) - (*(int *) 0x80000050)) <= 4) */
+/* OBSOLETE  */
+/* OBSOLETE /* We need to manipulate trap bits in the psw *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define PSW_TRAP_FLAGS     0x69670000 */
+/* OBSOLETE #define PSW_T_BIT  0x08000000 */
+/* OBSOLETE #define PSW_S_BIT  0x01000000 */
+/* OBSOLETE  */
+/* OBSOLETE /* Stack grows downward.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define INNER_THAN(lhs,rhs) ((lhs) < (rhs)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Sequence of bytes for breakpoint instruction. (bkpt)  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define BREAKPOINT {0x7d,0x50} */
+/* OBSOLETE  */
+/* OBSOLETE /* Amount PC must be decremented by after a breakpoint. */
+/* OBSOLETE    This is often the number of bytes in BREAKPOINT but not always. */
+/* OBSOLETE    (The break PC needs to be decremented by 2, but we do it when the */
+/* OBSOLETE    break frame is recognized and popped.  That way gdb can tell breaks */
+/* OBSOLETE    from trace traps with certainty.) *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define DECR_PC_AFTER_BREAK 0 */
+/* OBSOLETE  */
+/* OBSOLETE /* Say how long (ordinary) registers are.  This is a piece of bogosity */
+/* OBSOLETE    used in push_word and a few other places; REGISTER_RAW_SIZE is the */
+/* OBSOLETE    real way to know how big a register is.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_SIZE 8 */
+/* OBSOLETE  */
+/* OBSOLETE /* Number of machine registers *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define NUM_REGS 26 */
+/* OBSOLETE  */
+/* OBSOLETE /* Initializer for an array of names of registers. */
+/* OBSOLETE    There should be NUM_REGS strings in this initializer.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_NAMES {"pc","psw","fp","ap","a5","a4","a3","a2","a1","sp",\ */
+/* OBSOLETE                    "s7","s6","s5","s4","s3","s2","s1","s0",\ */
+/* OBSOLETE                    "S7","S6","S5","S4","S3","S2","S1","S0"} */
+/* OBSOLETE  */
+/* OBSOLETE /* Register numbers of various important registers. */
+/* OBSOLETE    Note that some of these values are "real" register numbers, */
+/* OBSOLETE    and correspond to the general registers of the machine, */
+/* OBSOLETE    and some are "phony" register numbers which are too large */
+/* OBSOLETE    to be actual register numbers as far as the user is concerned */
+/* OBSOLETE    but do serve to get the desired values when passed to read_register.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define S0_REGNUM 25               /* the real S regs *x/ */
+/* OBSOLETE #define S7_REGNUM 18 */
+/* OBSOLETE #define s0_REGNUM 17               /* low-order halves of S regs *x/ */
+/* OBSOLETE #define s7_REGNUM 10 */
+/* OBSOLETE #define SP_REGNUM 9                /* A regs *x/ */
+/* OBSOLETE #define A1_REGNUM 8 */
+/* OBSOLETE #define A5_REGNUM 4 */
+/* OBSOLETE #define AP_REGNUM 3 */
+/* OBSOLETE #define FP_REGNUM 2                /* Contains address of executing stack frame *x/ */
+/* OBSOLETE #define PS_REGNUM 1                /* Contains processor status *x/ */
+/* OBSOLETE #define PC_REGNUM 0                /* Contains program counter *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* convert dbx stab register number (from `r' declaration) to a gdb REGNUM *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define STAB_REG_TO_REGNUM(value) \ */
+/* OBSOLETE       ((value) < 8 ? S0_REGNUM - (value) : SP_REGNUM - ((value) - 8)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Vector register numbers, not handled as ordinary regs. */
+/* OBSOLETE    They are treated as convenience variables whose values are read */
+/* OBSOLETE    from the inferior when needed.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define V0_REGNUM 0 */
+/* OBSOLETE #define V7_REGNUM 7 */
+/* OBSOLETE #define VM_REGNUM 8 */
+/* OBSOLETE #define VS_REGNUM 9 */
+/* OBSOLETE #define VL_REGNUM 10 */
+/* OBSOLETE  */
+/* OBSOLETE /* Total amount of space needed to store our copies of the machine's */
+/* OBSOLETE    register state, the array `registers'.  *x/ */
+/* OBSOLETE #define REGISTER_BYTES (4*10 + 8*8) */
+/* OBSOLETE  */
+/* OBSOLETE /* Index within `registers' of the first byte of the space for */
+/* OBSOLETE    register N. */
+/* OBSOLETE    NB: must match structure of struct syscall_context for correct operation *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_BYTE(N) ((N) < s7_REGNUM ? 4*(N) : \ */
+/* OBSOLETE                      (N) < S7_REGNUM ? 44 + 8 * ((N)-s7_REGNUM) : \ */
+/* OBSOLETE                                        40 + 8 * ((N)-S7_REGNUM)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Number of bytes of storage in the actual machine representation */
+/* OBSOLETE    for register N. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_RAW_SIZE(N) ((N) < S7_REGNUM ? 4 : 8) */
+/* OBSOLETE  */
+/* OBSOLETE /* Number of bytes of storage in the program's representation */
+/* OBSOLETE    for register N.   *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_VIRTUAL_SIZE(N) REGISTER_RAW_SIZE(N) */
+/* OBSOLETE  */
+/* OBSOLETE /* Largest value REGISTER_RAW_SIZE can have.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define MAX_REGISTER_RAW_SIZE 8 */
+/* OBSOLETE  */
+/* OBSOLETE /* Largest value REGISTER_VIRTUAL_SIZE can have.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define MAX_REGISTER_VIRTUAL_SIZE 8 */
+/* OBSOLETE  */
+/* OBSOLETE /* Return the GDB type object for the "standard" data type */
+/* OBSOLETE    of data in register N.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_VIRTUAL_TYPE(N) \ */
+/* OBSOLETE    ((N) < S7_REGNUM ? builtin_type_int : builtin_type_long_long) */
+/* OBSOLETE  */
+/* OBSOLETE /* Store the address of the place in which to copy the structure the */
+/* OBSOLETE    subroutine will return.  This is called from call_function. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define STORE_STRUCT_RETURN(ADDR, SP) \ */
+/* OBSOLETE   { write_register (A1_REGNUM, (ADDR)); } */
+/* OBSOLETE  */
+/* OBSOLETE /* Extract from an array REGBUF containing the (raw) register state */
+/* OBSOLETE    a function return value of type TYPE, and copy that, in virtual format, */
+/* OBSOLETE    into VALBUF.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \ */
+/* OBSOLETE   memcpy (VALBUF, &((char *) REGBUF) [REGISTER_BYTE (S0_REGNUM) + \ */
+/* OBSOLETE                         8 - TYPE_LENGTH (TYPE)],\ */
+/* OBSOLETE     TYPE_LENGTH (TYPE)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Write into appropriate registers a function return value */
+/* OBSOLETE    of type TYPE, given in virtual format.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define STORE_RETURN_VALUE(TYPE,VALBUF) \ */
+/* OBSOLETE     write_register_bytes (REGISTER_BYTE (S0_REGNUM), VALBUF, 8) */
+/* OBSOLETE  */
+/* OBSOLETE /* Extract from an array REGBUF containing the (raw) register state */
+/* OBSOLETE    the address in which a function should return its structure value, */
+/* OBSOLETE    as a CORE_ADDR (or an expression that can be used as one).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \ */
+/* OBSOLETE     (*(int *) & ((char *) REGBUF) [REGISTER_BYTE (s0_REGNUM)]) */
+/* OBSOLETE  */
+/* OBSOLETE /* Define trapped internal variable hooks to read and write */
+/* OBSOLETE    vector and communication registers.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define IS_TRAPPED_INTERNALVAR is_trapped_internalvar */
+/* OBSOLETE #define VALUE_OF_TRAPPED_INTERNALVAR value_of_trapped_internalvar */
+/* OBSOLETE #define SET_TRAPPED_INTERNALVAR set_trapped_internalvar */
+/* OBSOLETE  */
+/* OBSOLETE extern struct value *value_of_trapped_internalvar (); */
+/* OBSOLETE  */
+/* OBSOLETE /* Hooks to read data from soff exec and core files, */
+/* OBSOLETE    and to describe the files.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FILES_INFO_HOOK print_maps */
+/* OBSOLETE  */
+/* OBSOLETE /* Hook to call to print a typeless integer value, normally printed in decimal. */
+/* OBSOLETE    For convex, use hex instead if the number looks like an address.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define PRINT_TYPELESS_INTEGER decout */
+/* OBSOLETE  */
+/* OBSOLETE /* For the native compiler, variables for a particular lexical context */
+/* OBSOLETE    are listed after the beginning LBRAC instead of before in the */
+/* OBSOLETE    executables list of symbols.  Using "gcc_compiled." to distinguish */
+/* OBSOLETE    between GCC and native compiler doesn't work on Convex because the */
+/* OBSOLETE    linker sorts the symbols to put "gcc_compiled." in the wrong place. */
+/* OBSOLETE    desc is nonzero for native, zero for gcc.   *x/ */
+/* OBSOLETE #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) (desc != 0) */
+/* OBSOLETE  */
+/* OBSOLETE /* Pcc occaisionally puts an SO where there should be an SOL.   *x/ */
+/* OBSOLETE #define PCC_SOL_BROKEN */
+/* OBSOLETE \f */
+/* OBSOLETE /* Describe the pointer in each stack frame to the previous stack frame */
+/* OBSOLETE    (its caller).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* FRAME_CHAIN takes a frame_info with a frame's nominal address in fi->frame, */
+/* OBSOLETE    and produces the frame's chain-pointer. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* (caller fp is saved at 8(fp)) *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_CHAIN(fi)   (read_memory_integer ((fi)->frame + 8, 4)) */
+/* OBSOLETE  */
+/* OBSOLETE /* Define other aspects of the stack frame.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* We need the boundaries of the text in the exec file, as a kludge, */
+/* OBSOLETE    for FRAMELESS_FUNCTION_INVOCATION and CALL_DUMMY_LOCATION. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define    NEED_TEXT_START_END 1 */
+/* OBSOLETE  */
+/* OBSOLETE /* An expression that tells us whether the function invocation represented */
+/* OBSOLETE    by FI does not have a frame on the stack associated with it. */
+/* OBSOLETE    On convex, check at the return address for `callq' -- if so, frameless, */
+/* OBSOLETE    otherwise, not.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE extern int convex_frameless_function_invocation PARAMS ((struct frame_info *fi)); */
+/* OBSOLETE #define FRAMELESS_FUNCTION_INVOCATION(FI) (convex_frameless_function_invocatio (FI)) */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_SAVED_PC(fi) (read_memory_integer ((fi)->frame, 4)) */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_ARGS_ADDRESS(fi) (read_memory_integer ((fi)->frame + 12, 4)) */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_LOCALS_ADDRESS(fi) (fi)->frame */
+/* OBSOLETE  */
+/* OBSOLETE /* Return number of args passed to a frame. */
+/* OBSOLETE    Can return -1, meaning no way to tell.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE extern int convex_frame_num_args PARAMS ((struct frame_info *fi)); */
+/* OBSOLETE #define FRAME_NUM_ARGS(fi) (convex_frame_num_args ((fi))) */
+/* OBSOLETE  */
+/* OBSOLETE /* Return number of bytes at start of arglist that are not really args.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_ARGS_SKIP 0 */
+/* OBSOLETE  */
+/* OBSOLETE /* Put here the code to store, into a struct frame_saved_regs, */
+/* OBSOLETE    the addresses of the saved registers of frame described by FRAME_INFO. */
+/* OBSOLETE    This includes special registers such as pc and fp saved in special */
+/* OBSOLETE    ways in the stack frame.  sp is even more special: */
+/* OBSOLETE    the address we return for it IS the sp for the next frame.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* Normal (short) frames save only PC, FP, (callee's) AP.  To reasonably */
+/* OBSOLETE    handle gcc and pcc register variables, scan the code following the */
+/* OBSOLETE    call for the instructions the compiler inserts to reload register */
+/* OBSOLETE    variables from stack slots and record the stack slots as the saved */
+/* OBSOLETE    locations of those registers.  This will occasionally identify some */
+/* OBSOLETE    random load as a saved register; this is harmless.  vc does not */
+/* OBSOLETE    declare its register allocation actions in the stabs.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs)                \ */
+/* OBSOLETE { register int regnum;                                                     \ */
+/* OBSOLETE   register int frame_length =      /* 3 short, 2 long, 1 extended, 0 context *x/\ */
+/* OBSOLETE       (read_memory_integer ((frame_info)->frame + 4, 4) >> 25) & 3;        \ */
+/* OBSOLETE   register CORE_ADDR frame_fp =                                            \ */
+/* OBSOLETE       read_memory_integer ((frame_info)->frame + 8, 4);                    \ */
+/* OBSOLETE   register CORE_ADDR next_addr;                                            \ */
+/* OBSOLETE   memset (&frame_saved_regs, '\0', sizeof frame_saved_regs);                       \ */
+/* OBSOLETE   (frame_saved_regs).regs[PC_REGNUM] = (frame_info)->frame + 0;            \ */
+/* OBSOLETE   (frame_saved_regs).regs[PS_REGNUM] = (frame_info)->frame + 4;            \ */
+/* OBSOLETE   (frame_saved_regs).regs[FP_REGNUM] = (frame_info)->frame + 8;            \ */
+/* OBSOLETE   (frame_saved_regs).regs[AP_REGNUM] = frame_fp + 12;                      \ */
+/* OBSOLETE   next_addr = (frame_info)->frame + 12;                                    \ */
+/* OBSOLETE   if (frame_length < 3)                                                    \ */
+/* OBSOLETE     for (regnum = A5_REGNUM; regnum < SP_REGNUM; ++regnum)         \ */
+/* OBSOLETE       (frame_saved_regs).regs[regnum] = (next_addr += 4);          \ */
+/* OBSOLETE   if (frame_length < 2)                                                    \ */
+/* OBSOLETE     (frame_saved_regs).regs[SP_REGNUM] = (next_addr += 4);         \ */
+/* OBSOLETE   next_addr -= 4;                                                  \ */
+/* OBSOLETE   if (frame_length < 3)                                                    \ */
+/* OBSOLETE     for (regnum = S7_REGNUM; regnum < S0_REGNUM; ++regnum)         \ */
+/* OBSOLETE       (frame_saved_regs).regs[regnum] = (next_addr += 8);          \ */
+/* OBSOLETE   if (frame_length < 2)                                                    \ */
+/* OBSOLETE     (frame_saved_regs).regs[S0_REGNUM] = (next_addr += 8);         \ */
+/* OBSOLETE   else                                                                     \ */
+/* OBSOLETE     (frame_saved_regs).regs[SP_REGNUM] = next_addr + 8;                    \ */
+/* OBSOLETE   if (frame_length == 3) {                                         \ */
+/* OBSOLETE     CORE_ADDR pc = read_memory_integer ((frame_info)->frame, 4);   \ */
+/* OBSOLETE     int op, ix, disp;                                                      \ */
+/* OBSOLETE     op = read_memory_integer (pc, 2);                                      \ */
+/* OBSOLETE     if ((op & 0xffc7) == 0x1480) pc += 4;  /* add.w #-,sp *x/      \ */
+/* OBSOLETE     else if ((op & 0xffc7) == 0x58c0) pc += 2;     /* add.w #-,sp *x/      \ */
+/* OBSOLETE     op = read_memory_integer (pc, 2);                                      \ */
+/* OBSOLETE     if ((op & 0xffc7) == 0x2a06) pc += 4;  /* ld.w -,ap *x/                \ */
+/* OBSOLETE     for (;;) {                                                             \ */
+/* OBSOLETE       op = read_memory_integer (pc, 2);                                    \ */
+/* OBSOLETE       ix = (op >> 3) & 7;                                          \ */
+/* OBSOLETE       if ((op & 0xfcc0) == 0x2800) {               /* ld.- -,ak *x/                \ */
+/* OBSOLETE         regnum = SP_REGNUM - (op & 7);                                     \ */
+/* OBSOLETE    disp = read_memory_integer (pc + 2, 2);                         \ */
+/* OBSOLETE    pc += 4;}                                                       \ */
+/* OBSOLETE       else if ((op & 0xfcc0) == 0x2840) {  /* ld.- -,ak *x/                \ */
+/* OBSOLETE         regnum = SP_REGNUM - (op & 7);                                     \ */
+/* OBSOLETE    disp = read_memory_integer (pc + 2, 4);                         \ */
+/* OBSOLETE    pc += 6;}                                                       \ */
+/* OBSOLETE       if ((op & 0xfcc0) == 0x3000) {               /* ld.- -,sk *x/                \ */
+/* OBSOLETE         regnum = S0_REGNUM - (op & 7);                                     \ */
+/* OBSOLETE    disp = read_memory_integer (pc + 2, 2);                         \ */
+/* OBSOLETE    pc += 4;}                                                       \ */
+/* OBSOLETE       else if ((op & 0xfcc0) == 0x3040) {  /* ld.- -,sk *x/                \ */
+/* OBSOLETE         regnum = S0_REGNUM - (op & 7);                                     \ */
+/* OBSOLETE    disp = read_memory_integer (pc + 2, 4);                         \ */
+/* OBSOLETE    pc += 6;}                                                       \ */
+/* OBSOLETE       else if ((op & 0xff00) == 0x7100) {  /* br crossjump *x/     \ */
+/* OBSOLETE         pc += 2 * (char) op;                                               \ */
+/* OBSOLETE         continue;}                                                 \ */
+/* OBSOLETE       else if (op == 0x0140) {                     /* jmp crossjump *x/    \ */
+/* OBSOLETE         pc = read_memory_integer (pc + 2, 4);                              \ */
+/* OBSOLETE         continue;}                                                 \ */
+/* OBSOLETE       else break;                                                  \ */
+/* OBSOLETE       if ((frame_saved_regs).regs[regnum])                         \ */
+/* OBSOLETE    break;                                                          \ */
+/* OBSOLETE       if (ix == 7) disp += frame_fp;                                       \ */
+/* OBSOLETE       else if (ix == 6) disp += read_memory_integer (frame_fp + 12, 4);    \ */
+/* OBSOLETE       else if (ix != 0) break;                                             \ */
+/* OBSOLETE       (frame_saved_regs).regs[regnum] =                                    \ */
+/* OBSOLETE    disp - 8 + (1 << ((op >> 8) & 3));                              \ */
+/* OBSOLETE       if (regnum >= S7_REGNUM)                                             \ */
+/* OBSOLETE         (frame_saved_regs).regs[regnum - S0_REGNUM + s0_REGNUM] =  \ */
+/* OBSOLETE      disp - 4 + (1 << ((op >> 8) & 3));                            \ */
+/* OBSOLETE     }                                                                      \ */
+/* OBSOLETE   }                                                                        \ */
+/* OBSOLETE } */
+/* OBSOLETE \f */
+/* OBSOLETE /* Things needed for making the inferior call functions.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define    CALL_DUMMY_LOCATION     BEFORE_TEXT_END */
+/* OBSOLETE  */
+/* OBSOLETE /* Push an empty stack frame, to record the current PC, etc.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define PUSH_DUMMY_FRAME \ */
+/* OBSOLETE { register CORE_ADDR sp = read_register (SP_REGNUM);                       \ */
+/* OBSOLETE   register int regnum;                                                     \ */
+/* OBSOLETE   char buf[8];                                                             \ */
+/* OBSOLETE   long word;                                                               \ */
+/* OBSOLETE   for (regnum = S0_REGNUM; regnum >= S7_REGNUM; --regnum) {                \ */
+/* OBSOLETE     read_register_bytes (REGISTER_BYTE (regnum), buf, 8);          \ */
+/* OBSOLETE     sp = push_bytes (sp, buf, 8);}                                 \ */
+/* OBSOLETE   for (regnum = SP_REGNUM; regnum >= FP_REGNUM; --regnum) {                \ */
+/* OBSOLETE     word = read_register (regnum);                                 \ */
+/* OBSOLETE     sp = push_bytes (sp, &word, 4);}                                       \ */
+/* OBSOLETE   word = (read_register (PS_REGNUM) &~ (3<<25)) | (1<<25);         \ */
+/* OBSOLETE   sp = push_bytes (sp, &word, 4);                                  \ */
+/* OBSOLETE   word = read_register (PC_REGNUM);                                        \ */
+/* OBSOLETE   sp = push_bytes (sp, &word, 4);                                          \ */
+/* OBSOLETE   write_register (SP_REGNUM, sp);                                  \ */
+/* OBSOLETE   write_register (FP_REGNUM, sp);                                  \ */
+/* OBSOLETE   write_register (AP_REGNUM, sp);} */
+/* OBSOLETE  */
+/* OBSOLETE /* Discard from the stack the innermost frame, restoring all registers.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define POP_FRAME  do {\ */
+/* OBSOLETE   register CORE_ADDR fp = read_register (FP_REGNUM);           \ */
+/* OBSOLETE   register int regnum;                                         \ */
+/* OBSOLETE   register int frame_length =      /* 3 short, 2 long, 1 extended, 0 context *x/ \ */
+/* OBSOLETE       (read_memory_integer (fp + 4, 4) >> 25) & 3;          \ */
+/* OBSOLETE   char buf[8];                                                 \ */
+/* OBSOLETE   write_register (PC_REGNUM, read_memory_integer (fp, 4));  \ */
+/* OBSOLETE   write_register (PS_REGNUM, read_memory_integer (fp += 4, 4));  \ */
+/* OBSOLETE   write_register (FP_REGNUM, read_memory_integer (fp += 4, 4));  \ */
+/* OBSOLETE   write_register (AP_REGNUM, read_memory_integer (fp += 4, 4));  \ */
+/* OBSOLETE   if (frame_length < 3)                                 \ */
+/* OBSOLETE     for (regnum = A5_REGNUM; regnum < SP_REGNUM; ++regnum)   \ */
+/* OBSOLETE       write_register (regnum, read_memory_integer (fp += 4, 4)); \ */
+/* OBSOLETE   if (frame_length < 2)                                         \ */
+/* OBSOLETE     write_register (SP_REGNUM, read_memory_integer (fp += 4, 4)); \ */
+/* OBSOLETE   fp -= 4;                                                 \ */
+/* OBSOLETE   if (frame_length < 3)                                    \ */
+/* OBSOLETE     for (regnum = S7_REGNUM; regnum < S0_REGNUM; ++regnum) {       \ */
+/* OBSOLETE       read_memory (fp += 8, buf, 8);                               \ */
+/* OBSOLETE       write_register_bytes (REGISTER_BYTE (regnum), buf, 8);}   \ */
+/* OBSOLETE   if (frame_length < 2)    {                                       \ */
+/* OBSOLETE     read_memory (fp += 8, buf, 8);                         \ */
+/* OBSOLETE     write_register_bytes (REGISTER_BYTE (regnum), buf, 8);}     \ */
+/* OBSOLETE   else write_register (SP_REGNUM, fp + 8);                 \ */
+/* OBSOLETE   flush_cached_frames ();                                  \ */
+/* OBSOLETE } while (0) */
+/* OBSOLETE  */
+/* OBSOLETE /* This sequence of words is the instructions */
+/* OBSOLETE      mov sp,ap */
+/* OBSOLETE      pshea 69696969 */
+/* OBSOLETE      calls 32323232 */
+/* OBSOLETE      bkpt */
+/* OBSOLETE    Note this is 16 bytes.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define CALL_DUMMY {0x50860d4069696969LL,0x2140323232327d50LL} */
+/* OBSOLETE  */
+/* OBSOLETE #define CALL_DUMMY_LENGTH 16 */
+/* OBSOLETE  */
+/* OBSOLETE #define CALL_DUMMY_START_OFFSET 0 */
+/* OBSOLETE  */
+/* OBSOLETE /* Insert the specified number of args and function address */
+/* OBSOLETE    into a call sequence of the above form stored at DUMMYNAME.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p)   \ */
+/* OBSOLETE { *(int *)((char *) dummyname + 4) = nargs;        \ */
+/* OBSOLETE   *(int *)((char *) dummyname + 10) = fun; } */
+/* OBSOLETE \f */
+/* OBSOLETE /* Defs to read soff symbol tables, see dbxread.c *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define NUMBER_OF_SYMBOLS    ((long) opthdr.o_nsyms) */
+/* OBSOLETE #define STRING_TABLE_OFFSET  ((long) filehdr.h_strptr) */
+/* OBSOLETE #define SYMBOL_TABLE_OFFSET  ((long) opthdr.o_symptr) */
+/* OBSOLETE #define STRING_TABLE_SIZE    ((long) filehdr.h_strsiz) */
+/* OBSOLETE #define SIZE_OF_TEXT_SEGMENT ((long) txthdr.s_size) */
+/* OBSOLETE #define ENTRY_POINT          ((long) opthdr.o_entry) */
+/* OBSOLETE  */
+/* OBSOLETE #define READ_STRING_TABLE_SIZE(BUFFER) \ */
+/* OBSOLETE     (BUFFER = STRING_TABLE_SIZE) */
+/* OBSOLETE  */
+/* OBSOLETE #define DECLARE_FILE_HEADERS \ */
+/* OBSOLETE   FILEHDR filehdr;                                                 \ */
+/* OBSOLETE   OPTHDR opthdr;                                                   \ */
+/* OBSOLETE   SCNHDR txthdr */
+/* OBSOLETE  */
+/* OBSOLETE #define READ_FILE_HEADERS(DESC,NAME) \ */
+/* OBSOLETE {                                                                  \ */
+/* OBSOLETE   int n;                                                           \ */
+/* OBSOLETE   val = myread (DESC, &filehdr, sizeof filehdr);                   \ */
+/* OBSOLETE   if (val < 0)                                                             \ */
+/* OBSOLETE     perror_with_name (NAME);                                               \ */
+/* OBSOLETE   if (! IS_SOFF_MAGIC (filehdr.h_magic))                           \ */
+/* OBSOLETE     error ("%s: not an executable file.", NAME);                   \ */
+/* OBSOLETE   lseek (DESC, 0L, 0);                                                     \ */
+/* OBSOLETE   if (myread (DESC, &filehdr, sizeof filehdr) < 0)                 \ */
+/* OBSOLETE     perror_with_name (NAME);                                               \ */
+/* OBSOLETE   if (myread (DESC, &opthdr, filehdr.h_opthdr) <= 0)                       \ */
+/* OBSOLETE     perror_with_name (NAME);                                               \ */
+/* OBSOLETE   for (n = 0; n < filehdr.h_nscns; n++)                                    \ */
+/* OBSOLETE     {                                                                      \ */
+/* OBSOLETE       if (myread (DESC, &txthdr, sizeof txthdr) < 0)                       \ */
+/* OBSOLETE    perror_with_name (NAME);                                        \ */
+/* OBSOLETE       if ((txthdr.s_flags & S_TYPMASK) == S_TEXT)                  \ */
+/* OBSOLETE    break;                                                          \ */
+/* OBSOLETE     }                                                                      \ */
+/* OBSOLETE } */
index cfcee4e..8552a3a 100644 (file)
@@ -1,35 +1,35 @@
-/* Definitions to make GDB run on Convex Unix (4bsd)
-   Copyright 1989, 1991, 1992, 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.  */
-
-#define HOST_BYTE_ORDER BIG_ENDIAN
-
-#define ATTACH_DETACH
-#define HAVE_WAIT_STRUCT
-#define NO_SIGINTERRUPT
-
-/* Use SIGCONT rather than SIGTSTP because convex Unix occasionally
-   turkeys SIGTSTP.  I think.  */
-
-#define STOP_SIGNAL SIGCONT
-
-/* Hook to call after creating inferior process.  Now init_trace_fun
-   is in the same place.  So re-write this to use the init_trace_fun
-   (making convex a debugging target).  FIXME.  */
-
-#define CREATE_INFERIOR_HOOK create_inferior_hook
+/* OBSOLETE /* Definitions to make GDB run on Convex Unix (4bsd) */
+/* OBSOLETE    Copyright 1989, 1991, 1992, 1996  Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define HOST_BYTE_ORDER BIG_ENDIAN */
+/* OBSOLETE  */
+/* OBSOLETE #define ATTACH_DETACH */
+/* OBSOLETE #define HAVE_WAIT_STRUCT */
+/* OBSOLETE #define NO_SIGINTERRUPT */
+/* OBSOLETE  */
+/* OBSOLETE /* Use SIGCONT rather than SIGTSTP because convex Unix occasionally */
+/* OBSOLETE    turkeys SIGTSTP.  I think.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define STOP_SIGNAL SIGCONT */
+/* OBSOLETE  */
+/* OBSOLETE /* Hook to call after creating inferior process.  Now init_trace_fun */
+/* OBSOLETE    is in the same place.  So re-write this to use the init_trace_fun */
+/* OBSOLETE    (making convex a debugging target).  FIXME.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define CREATE_INFERIOR_HOOK create_inferior_hook */
index 1073751..51415be 100644 (file)
@@ -1,5 +1,5 @@
-# Host: Altos 3068 (m68k, System V release 2)
-
-XM_FILE= xm-altos.h
-XDEPFILES= infptrace.o inftarg.o fork-child.o altos-xdep.o
+# OBSOLETE # Host: Altos 3068 (m68k, System V release 2)
+# OBSOLETE 
+# OBSOLETE XM_FILE= xm-altos.h
+# OBSOLETE XDEPFILES= infptrace.o inftarg.o fork-child.o altos-xdep.o
 
index 521e958..7dc654b 100644 (file)
@@ -1,3 +1,3 @@
-# Target: Altos 3068 (m68k, System V release 2)
-TDEPFILES= m68k-tdep.o
-TM_FILE= tm-altos.h
+# OBSOLETE # Target: Altos 3068 (m68k, System V release 2)
+# OBSOLETE TDEPFILES= m68k-tdep.o
+# OBSOLETE TM_FILE= tm-altos.h
index 23c5653..4483aa0 100644 (file)
@@ -1,44 +1,44 @@
-/* Target definitions for GDB on an Altos 3068 (m68k running SVR2)
-   Copyright 1987, 1989, 1991, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-/* The child target can't deal with floating registers.  */
-#define CANNOT_STORE_REGISTER(regno) ((regno) >= FP0_REGNUM)
-
-/* 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 0xe
-
-/* Address of end of stack space.  */
-
-/*#define STACK_END_ADDR (0xffffff)*/
-#define STACK_END_ADDR (0x1000000)
-
-/* Amount PC must be decremented by after a breakpoint.
-   On the Altos, the kernel resets the pc to the trap instr */
-
-#define DECR_PC_AFTER_BREAK 0
-
-/* The only reason this is here is the tm-altos.h reference below.  It
-   was moved back here from tm-m68k.h.  FIXME? */
-
-extern CORE_ADDR altos_skip_prologue PARAMS ((CORE_ADDR));
-#define SKIP_PROLOGUE(pc) (altos_skip_prologue (pc))
-
-#include "m68k/tm-m68k.h"
+/* OBSOLETE /* Target definitions for GDB on an Altos 3068 (m68k running SVR2) */
+/* OBSOLETE    Copyright 1987, 1989, 1991, 1993 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* The child target can't deal with floating registers.  *x/ */
+/* OBSOLETE #define CANNOT_STORE_REGISTER(regno) ((regno) >= FP0_REGNUM) */
+/* OBSOLETE  */
+/* OBSOLETE /* Define BPT_VECTOR if it is different than the default. */
+/* OBSOLETE    This is the vector number used by traps to indicate a breakpoint. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define BPT_VECTOR 0xe */
+/* OBSOLETE  */
+/* OBSOLETE /* Address of end of stack space.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /*#define STACK_END_ADDR (0xffffff)*x/ */
+/* OBSOLETE #define STACK_END_ADDR (0x1000000) */
+/* OBSOLETE  */
+/* OBSOLETE /* Amount PC must be decremented by after a breakpoint. */
+/* OBSOLETE    On the Altos, the kernel resets the pc to the trap instr *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define DECR_PC_AFTER_BREAK 0 */
+/* OBSOLETE  */
+/* OBSOLETE /* The only reason this is here is the tm-altos.h reference below.  It */
+/* OBSOLETE    was moved back here from tm-m68k.h.  FIXME? *x/ */
+/* OBSOLETE  */
+/* OBSOLETE extern CORE_ADDR altos_skip_prologue PARAMS ((CORE_ADDR)); */
+/* OBSOLETE #define SKIP_PROLOGUE(pc) (altos_skip_prologue (pc)) */
+/* OBSOLETE  */
+/* OBSOLETE #include "m68k/tm-m68k.h" */
index ca93bd1..008f769 100644 (file)
-/* Definitions to make GDB run on an Altos 3068 (m68k running SVR2)
-   Copyright (C) 1987,1989 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.  */
-
-#define HOST_BYTE_ORDER BIG_ENDIAN
-
-/* The altos support would make a good base for a port to other USGR2 systems
-   (like the 3b1 and the Convergent miniframe).  */
-
-/* This is only needed in one file, but it's cleaner to put it here than
-   putting in more #ifdef's.  */
-#include <sys/page.h>
-#include <sys/net.h>
-
-#define USG
-
-#define HAVE_TERMIO
-
-#define CBREAK XTABS   /* It takes all kinds... */
-
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#define F_OK 0
-#endif
-
-/* Get sys/wait.h ie. from a Sun and edit it a little (mc68000 to m68k) */
-/* Why bother?  */
-#if 0
-#define HAVE_WAIT_STRUCT
-#endif
-
-/* This is the amount to subtract from u.u_ar0
-   to get the offset in the core file of the register values. */
-
-#define KERNEL_U_ADDR 0x1fbf000
-
-#define REGISTER_U_ADDR(addr, blockend, regno)         \
-{      if (regno <= SP_REGNUM) \
-         addr = blockend + regno * 4; \
-       else if (regno == PS_REGNUM) \
-         addr = blockend + regno * 4 + 4; \
-       else if (regno == PC_REGNUM) \
-         addr = blockend + regno * 4 + 2; \
-}
-
-#define REGISTER_ADDR(u_ar0, regno)                                    \
-  (((regno) < PS_REGNUM)                                               \
-   ? (&((struct exception_stack *) (u_ar0))->e_regs[(regno + R0)])     \
-   : (((regno) == PS_REGNUM)                                           \
-      ? ((int *) (&((struct exception_stack *) (u_ar0))->e_PS))                \
-      : (&((struct exception_stack *) (u_ar0))->e_PC)))
-
-#define FP_REGISTER_ADDR(u, regno)                                     \
-  (((char *)                                                           \
-    (((regno) < FPC_REGNUM)                                            \
-     ? (&u.u_pcb.pcb_mc68881[FMC68881_R0 + (((regno) - FP0_REGNUM) * 3)]) \
-     : (&u.u_pcb.pcb_mc68881[FMC68881_C + ((regno) - FPC_REGNUM)])))   \
-   - ((char *) (& u)))
-
-\f
-#ifndef __GNUC__
-#undef USE_GAS
-#define ALTOS_AS
-#else
-#define USE_GAS
-#endif
-
-/* Motorola assembly format */
-#if !defined(USE_GAS) && !defined(ALTOS)
-#define MOTOROLA
-#endif
-
-/* Interface definitions for kernel debugger KDB.  */
-
-/* Map machine fault codes into signal numbers.
-   First subtract 0, divide by 4, then index in a table.
-   Faults for which the entry in this table is 0
-   are not handled by KDB; the program's own trap handler
-   gets to handle then.  */
-
-#define FAULT_CODE_ORIGIN 0
-#define FAULT_CODE_UNITS 4
-#define FAULT_TABLE    \
-{ 0, 0, 0, 0, SIGTRAP, 0, 0, 0, \
-  0, SIGTRAP, 0, 0, 0, 0, 0, SIGKILL, \
-  0, 0, 0, 0, 0, 0, 0, 0, \
-  SIGILL }
-
-/* Start running with a stack stretching from BEG to END.
-   BEG and END should be symbols meaningful to the assembler.
-   This is used only for kdb.  */
-
-#ifdef MOTOROLA
-#define INIT_STACK(beg, end)  \
-{ asm (".globl end");         \
-  asm ("move.l $ end, sp");      \
-  asm ("clr.l fp"); }
-#else
-#ifdef ALTOS_AS
-#define INIT_STACK(beg, end)  \
-{ asm ("global end");         \
-  asm ("mov.l &end,%sp");      \
-  asm ("clr.l %fp"); }
-#else
-#define INIT_STACK(beg, end)  \
-{ asm (".globl end");         \
-  asm ("movel $ end, sp");      \
-  asm ("clrl fp"); }
-#endif
-#endif
-
-/* Push the frame pointer register on the stack.  */
-#ifdef MOTOROLA
-#define PUSH_FRAME_PTR        \
-  asm ("move.l fp, -(sp)");
-#else
-#ifdef ALTOS_AS
-#define PUSH_FRAME_PTR        \
-  asm ("mov.l %fp, -(%sp)");
-#else
-#define PUSH_FRAME_PTR        \
-  asm ("movel fp, -(sp)");
-#endif
-#endif
-
-/* Copy the top-of-stack to the frame pointer register.  */
-#ifdef MOTOROLA
-#define POP_FRAME_PTR  \
-  asm ("move.l (sp), fp");
-#else
-#ifdef ALTOS_AS
-#define POP_FRAME_PTR  \
-  asm ("mov.l (%sp), %fp");
-#else
-#define POP_FRAME_PTR  \
-  asm ("movl (sp), fp");
-#endif
-#endif
-
-/* After KDB is entered by a fault, push all registers
-   that GDB thinks about (all NUM_REGS of them),
-   so that they appear in order of ascending GDB register number.
-   The fault code will be on the stack beyond the last register.  */
-
-#ifdef MOTOROLA
-#define PUSH_REGISTERS        \
-{ asm ("clr.w -(sp)");       \
-  asm ("pea (10,sp)");       \
-  asm ("movem $ 0xfffe,-(sp)"); }
-#else
-#ifdef ALTOS_AS
-#define PUSH_REGISTERS        \
-{ asm ("clr.w -(%sp)");              \
-  asm ("pea (10,%sp)");              \
-  asm ("movm.l &0xfffe,-(%sp)"); }
-#else
-#define PUSH_REGISTERS        \
-{ asm ("clrw -(sp)");        \
-  asm ("pea 10(sp)");        \
-  asm ("movem $ 0xfffe,-(sp)"); }
-#endif
-#endif
-
-/* Assuming the registers (including processor status) have been
-   pushed on the stack in order of ascending GDB register number,
-   restore them and return to the address in the saved PC register.  */
-
-#ifdef MOTOROLA
-#define POP_REGISTERS          \
-{ asm ("subi.l $8,28(sp)");     \
-  asm ("movem (sp),$ 0xffff"); \
-  asm ("rte"); }
-#else
-#ifdef ALTOS_AS
-#define POP_REGISTERS          \
-{ asm ("sub.l &8,28(%sp)");     \
-  asm ("movem (%sp),&0xffff"); \
-  asm ("rte"); }
-#else
-#define POP_REGISTERS          \
-{ asm ("subil $8,28(sp)");     \
-  asm ("movem (sp),$ 0xffff"); \
-  asm ("rte"); }
-#endif
-#endif
+/* OBSOLETE /* Definitions to make GDB run on an Altos 3068 (m68k running SVR2) */
+/* OBSOLETE    Copyright (C) 1987,1989 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define HOST_BYTE_ORDER BIG_ENDIAN */
+/* OBSOLETE  */
+/* OBSOLETE /* The altos support would make a good base for a port to other USGR2 systems */
+/* OBSOLETE    (like the 3b1 and the Convergent miniframe).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* This is only needed in one file, but it's cleaner to put it here than */
+/* OBSOLETE    putting in more #ifdef's.  *x/ */
+/* OBSOLETE #include <sys/page.h> */
+/* OBSOLETE #include <sys/net.h> */
+/* OBSOLETE  */
+/* OBSOLETE #define USG */
+/* OBSOLETE  */
+/* OBSOLETE #define HAVE_TERMIO */
+/* OBSOLETE  */
+/* OBSOLETE #define CBREAK XTABS       /* It takes all kinds... *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #ifndef R_OK */
+/* OBSOLETE #define R_OK 4 */
+/* OBSOLETE #define W_OK 2 */
+/* OBSOLETE #define X_OK 1 */
+/* OBSOLETE #define F_OK 0 */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Get sys/wait.h ie. from a Sun and edit it a little (mc68000 to m68k) *x/ */
+/* OBSOLETE /* Why bother?  *x/ */
+/* OBSOLETE #if 0 */
+/* OBSOLETE #define HAVE_WAIT_STRUCT */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* This is the amount to subtract from u.u_ar0 */
+/* OBSOLETE    to get the offset in the core file of the register values. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define KERNEL_U_ADDR 0x1fbf000 */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_U_ADDR(addr, blockend, regno)             \ */
+/* OBSOLETE {  if (regno <= SP_REGNUM) \ */
+/* OBSOLETE      addr = blockend + regno * 4; \ */
+/* OBSOLETE    else if (regno == PS_REGNUM) \ */
+/* OBSOLETE      addr = blockend + regno * 4 + 4; \ */
+/* OBSOLETE    else if (regno == PC_REGNUM) \ */
+/* OBSOLETE      addr = blockend + regno * 4 + 2; \ */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE #define REGISTER_ADDR(u_ar0, regno)                                        \ */
+/* OBSOLETE   (((regno) < PS_REGNUM)                                           \ */
+/* OBSOLETE    ? (&((struct exception_stack *) (u_ar0))->e_regs[(regno + R0)]) \ */
+/* OBSOLETE    : (((regno) == PS_REGNUM)                                               \ */
+/* OBSOLETE       ? ((int *) (&((struct exception_stack *) (u_ar0))->e_PS))            \ */
+/* OBSOLETE       : (&((struct exception_stack *) (u_ar0))->e_PC))) */
+/* OBSOLETE  */
+/* OBSOLETE #define FP_REGISTER_ADDR(u, regno)                                 \ */
+/* OBSOLETE   (((char *)                                                               \ */
+/* OBSOLETE     (((regno) < FPC_REGNUM)                                                \ */
+/* OBSOLETE      ? (&u.u_pcb.pcb_mc68881[FMC68881_R0 + (((regno) - FP0_REGNUM) * 3)]) \ */
+/* OBSOLETE      : (&u.u_pcb.pcb_mc68881[FMC68881_C + ((regno) - FPC_REGNUM)])))       \ */
+/* OBSOLETE    - ((char *) (& u))) */
+/* OBSOLETE  */
+/* OBSOLETE \f */
+/* OBSOLETE #ifndef __GNUC__ */
+/* OBSOLETE #undef USE_GAS */
+/* OBSOLETE #define ALTOS_AS */
+/* OBSOLETE #else */
+/* OBSOLETE #define USE_GAS */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Motorola assembly format *x/ */
+/* OBSOLETE #if !defined(USE_GAS) && !defined(ALTOS) */
+/* OBSOLETE #define MOTOROLA */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Interface definitions for kernel debugger KDB.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* Map machine fault codes into signal numbers. */
+/* OBSOLETE    First subtract 0, divide by 4, then index in a table. */
+/* OBSOLETE    Faults for which the entry in this table is 0 */
+/* OBSOLETE    are not handled by KDB; the program's own trap handler */
+/* OBSOLETE    gets to handle then.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define FAULT_CODE_ORIGIN 0 */
+/* OBSOLETE #define FAULT_CODE_UNITS 4 */
+/* OBSOLETE #define FAULT_TABLE    \ */
+/* OBSOLETE { 0, 0, 0, 0, SIGTRAP, 0, 0, 0, \ */
+/* OBSOLETE   0, SIGTRAP, 0, 0, 0, 0, 0, SIGKILL, \ */
+/* OBSOLETE   0, 0, 0, 0, 0, 0, 0, 0, \ */
+/* OBSOLETE   SIGILL } */
+/* OBSOLETE  */
+/* OBSOLETE /* Start running with a stack stretching from BEG to END. */
+/* OBSOLETE    BEG and END should be symbols meaningful to the assembler. */
+/* OBSOLETE    This is used only for kdb.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #ifdef MOTOROLA */
+/* OBSOLETE #define INIT_STACK(beg, end)  \ */
+/* OBSOLETE { asm (".globl end");         \ */
+/* OBSOLETE   asm ("move.l $ end, sp");      \ */
+/* OBSOLETE   asm ("clr.l fp"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #ifdef ALTOS_AS */
+/* OBSOLETE #define INIT_STACK(beg, end)  \ */
+/* OBSOLETE { asm ("global end");         \ */
+/* OBSOLETE   asm ("mov.l &end,%sp");      \ */
+/* OBSOLETE   asm ("clr.l %fp"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #define INIT_STACK(beg, end)  \ */
+/* OBSOLETE { asm (".globl end");         \ */
+/* OBSOLETE   asm ("movel $ end, sp");      \ */
+/* OBSOLETE   asm ("clrl fp"); } */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Push the frame pointer register on the stack.  *x/ */
+/* OBSOLETE #ifdef MOTOROLA */
+/* OBSOLETE #define PUSH_FRAME_PTR        \ */
+/* OBSOLETE   asm ("move.l fp, -(sp)"); */
+/* OBSOLETE #else */
+/* OBSOLETE #ifdef ALTOS_AS */
+/* OBSOLETE #define PUSH_FRAME_PTR        \ */
+/* OBSOLETE   asm ("mov.l %fp, -(%sp)"); */
+/* OBSOLETE #else */
+/* OBSOLETE #define PUSH_FRAME_PTR        \ */
+/* OBSOLETE   asm ("movel fp, -(sp)"); */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Copy the top-of-stack to the frame pointer register.  *x/ */
+/* OBSOLETE #ifdef MOTOROLA */
+/* OBSOLETE #define POP_FRAME_PTR  \ */
+/* OBSOLETE   asm ("move.l (sp), fp"); */
+/* OBSOLETE #else */
+/* OBSOLETE #ifdef ALTOS_AS */
+/* OBSOLETE #define POP_FRAME_PTR  \ */
+/* OBSOLETE   asm ("mov.l (%sp), %fp"); */
+/* OBSOLETE #else */
+/* OBSOLETE #define POP_FRAME_PTR  \ */
+/* OBSOLETE   asm ("movl (sp), fp"); */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* After KDB is entered by a fault, push all registers */
+/* OBSOLETE    that GDB thinks about (all NUM_REGS of them), */
+/* OBSOLETE    so that they appear in order of ascending GDB register number. */
+/* OBSOLETE    The fault code will be on the stack beyond the last register.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #ifdef MOTOROLA */
+/* OBSOLETE #define PUSH_REGISTERS        \ */
+/* OBSOLETE { asm ("clr.w -(sp)");           \ */
+/* OBSOLETE   asm ("pea (10,sp)");           \ */
+/* OBSOLETE   asm ("movem $ 0xfffe,-(sp)"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #ifdef ALTOS_AS */
+/* OBSOLETE #define PUSH_REGISTERS        \ */
+/* OBSOLETE { asm ("clr.w -(%sp)");          \ */
+/* OBSOLETE   asm ("pea (10,%sp)");          \ */
+/* OBSOLETE   asm ("movm.l &0xfffe,-(%sp)"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #define PUSH_REGISTERS        \ */
+/* OBSOLETE { asm ("clrw -(sp)");            \ */
+/* OBSOLETE   asm ("pea 10(sp)");            \ */
+/* OBSOLETE   asm ("movem $ 0xfffe,-(sp)"); } */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Assuming the registers (including processor status) have been */
+/* OBSOLETE    pushed on the stack in order of ascending GDB register number, */
+/* OBSOLETE    restore them and return to the address in the saved PC register.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #ifdef MOTOROLA */
+/* OBSOLETE #define POP_REGISTERS          \ */
+/* OBSOLETE { asm ("subi.l $8,28(sp)");     \ */
+/* OBSOLETE   asm ("movem (sp),$ 0xffff"); \ */
+/* OBSOLETE   asm ("rte"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #ifdef ALTOS_AS */
+/* OBSOLETE #define POP_REGISTERS          \ */
+/* OBSOLETE { asm ("sub.l &8,28(%sp)");     \ */
+/* OBSOLETE   asm ("movem (%sp),&0xffff"); \ */
+/* OBSOLETE   asm ("rte"); } */
+/* OBSOLETE #else */
+/* OBSOLETE #define POP_REGISTERS          \ */
+/* OBSOLETE { asm ("subil $8,28(sp)");     \ */
+/* OBSOLETE   asm ("movem (sp),$ 0xffff"); \ */
+/* OBSOLETE   asm ("rte"); } */
+/* OBSOLETE #endif */
+/* OBSOLETE #endif */
index 0a4695f..50e4f6b 100644 (file)
@@ -11,7 +11,7 @@
 case "${host_cpu}" in
 
 alpha*)                        gdb_host_cpu=alpha ;;
-c[12])                 gdb_host_cpu=convex ;;
+# OBSOLETE c[12])              gdb_host_cpu=convex ;;
 hppa*)                 gdb_host_cpu=pa ;;
 i[3456]86*)            gdb_host_cpu=i386 ;;
 m68*)                  gdb_host_cpu=m68k ;;
@@ -37,7 +37,7 @@ alpha*-*-linux*)      gdb_host=alpha-linux ;;
 
 arm-*-*)               gdb_host=arm ;;
 
-c[12]-*-*)             gdb_host=convex ;;
+# OBSOLETE c[12]-*-*)          gdb_host=convex ;;
 
 hppa*-*-bsd*)          gdb_host=hppabsd ;;
 hppa*-*-hiux*)         gdb_host=hppahpux ;;
@@ -82,7 +82,7 @@ m680[01]0-sun-sunos3*)        gdb_host=sun2os3 ;;
 m680[01]0-sun-sunos4*) gdb_host=sun2os4 ;;
 m68030-sony-*)         gdb_host=news1000 ;;
 
-m68*-altos-*)          gdb_host=altos ;;
+# OBSOLETE m68*-altos-*)       gdb_host=altos ;;
 m68*-apollo*-sysv*)    gdb_host=apollo68v ;;
 m68*-apollo*-bsd*)     gdb_host=apollo68b ;;
 m68*-att-*)            gdb_host=3b1 ;;
index 38ac1e9..dbe822a 100644 (file)
@@ -13,7 +13,7 @@
 case "${target_cpu}" in
 
 alpha*)                        gdb_target_cpu=alpha ;;
-c[12])                 gdb_target_cpu=convex ;;
+# OBSOLETE c[12])              gdb_target_cpu=convex ;;
 hppa*)                 gdb_target_cpu=pa ;;
 i[3456]86*)            gdb_target_cpu=i386 ;;
 m68*)                  gdb_target_cpu=m68k ;;
@@ -53,8 +53,8 @@ arc-*-*)              gdb_target=arc ;;
 arm-*-* | thumb-*-* | strongarm-*-*)
                        gdb_target=arm ;;
 
-c1-*-*)                        gdb_target=convex ;;
-c2-*-*)                        gdb_target=convex ;;
+# OBSOLETE c1-*-*)             gdb_target=convex ;;
+# OBSOLETE c2-*-*)             gdb_target=convex ;;
 
 d10v-*-*)              gdb_target=d10v ;;
 d30v-*-*)              gdb_target=d30v ;;
@@ -126,7 +126,7 @@ m68*-apollo*-bsd*)  gdb_target=apollo68b ;;
 m68*-bull-sysv*)       gdb_target=dpx2 ;;
 m68*-hp-bsd*)          gdb_target=hp300bsd ;;
 m68*-hp-hpux*)         gdb_target=hp300hpux ;;
-m68*-altos-*)          gdb_target=altos ;;
+# OBSOLETE m68*-altos-*)       gdb_target=altos ;;
 m68*-att-*)            gdb_target=3b1 ;;
 m68*-cisco*-*)         gdb_target=cisco ;;
 m68*-ericsson-*)       gdb_target=es1800 ;;
index 66161e7..4e388d1 100644 (file)
-/* Convex stuff for GDB.
-   Copyright (C) 1990, 1991, 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 "defs.h"
-#include "command.h"
-#include "symtab.h"
-#include "value.h"
-#include "frame.h"
-#include "inferior.h"
-#include "wait.h"
-
-#include <signal.h>
-#include <fcntl.h>
-
-#include "gdbcore.h"
-#include <sys/param.h>
-#include <sys/dir.h>
-#include <sys/user.h>
-#include <sys/ioctl.h>
-#include <sys/pcntl.h>
-#include <sys/thread.h>
-#include <sys/proc.h>
-#include <sys/file.h>
-#include "gdb_stat.h"
-#include <sys/mman.h>
-
-#include "gdbcmd.h"
-
-CORE_ADDR
-convex_skip_prologue (pc)
-     CORE_ADDR pc;
-{
-  int op, ix;
-  op = read_memory_integer (pc, 2);
-  if ((op & 0xffc7) == 0x5ac0)
-    pc += 2;
-  else if (op == 0x1580)
-    pc += 4;
-  else if (op == 0x15c0)
-    pc += 6;
-  if ((read_memory_integer (pc, 2) & 0xfff8) == 0x7c40
-      && (read_memory_integer (pc + 2, 2) & 0xfff8) == 0x1240
-      && (read_memory_integer (pc + 8, 2) & 0xfff8) == 0x7c48)
-    pc += 10;
-  if (read_memory_integer (pc, 2) == 0x1240)
-    pc += 6;
-  for (;;)
-    {
-      op = read_memory_integer (pc, 2);
-      ix = (op >> 3) & 7;
-      if (ix != 6)
-       break;
-      if ((op & 0xfcc0) == 0x3000)
-       pc += 4;
-      else if ((op & 0xfcc0) == 0x3040)
-       pc += 6;
-      else if ((op & 0xfcc0) == 0x2800)
-       pc += 4;
-      else if ((op & 0xfcc0) == 0x2840)
-       pc += 6;
-      else
-       break;
-    }
-  return pc;
-}
-
-int
-convex_frameless_function_invocation (fi)
-     struct frame_info *fi;
-{
-  int frameless;
-  extern CORE_ADDR text_start, text_end;
-  CORE_ADDR call_addr = SAVED_PC_AFTER_CALL (FI);
-  frameless = (call_addr >= text_start && call_addr < text_end
-              && read_memory_integer (call_addr - 6, 1) == 0x22);
-  return frameless;
-}
-
-int
-convex_frame_num_args (fi)
-     struct frame_info *fi;
-{
-  int numargs = read_memory_integer (FRAME_ARGS_ADDRESS (fi) - 4, 4);
-  if (numargs < 0 || numargs >= 256)
-    numargs = -1;
-  return numargs;
-}
-
-exec_file_command (filename, from_tty)
-     char *filename;
-     int from_tty;
-{
-  int val;
-  int n;
-  struct stat st_exec;
-
-  /* Eliminate all traces of old exec file.
-     Mark text segment as empty.  */
-
-  if (execfile)
-    free (execfile);
-  execfile = 0;
-  data_start = 0;
-  data_end = 0;
-  text_start = 0;
-  text_end = 0;
-  exec_data_start = 0;
-  exec_data_end = 0;
-  if (execchan >= 0)
-    close (execchan);
-  execchan = -1;
-
-  n_exec = 0;
-
-  /* Now open and digest the file the user requested, if any.  */
-
-  if (filename)
-    {
-      filename = tilde_expand (filename);
-      make_cleanup (free, filename);
-      
-      execchan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
-                       &execfile);
-      if (execchan < 0)
-       perror_with_name (filename);
-
-      if (myread (execchan, &filehdr, sizeof filehdr) < 0)
-       perror_with_name (filename);
-
-      if (! IS_SOFF_MAGIC (filehdr.h_magic))
-       error ("%s: not an executable file.", filename);
-
-      if (myread (execchan, &opthdr, filehdr.h_opthdr) <= 0)
-       perror_with_name (filename);
-
-      /* Read through the section headers.
-        For text, data, etc, record an entry in the exec file map.
-        Record text_start and text_end.  */
-
-      lseek (execchan, (long) filehdr.h_scnptr, 0);
-
-      for (n = 0; n < filehdr.h_nscns; n++)
-       {
-         if (myread (execchan, &scnhdr, sizeof scnhdr) < 0)
-           perror_with_name (filename);
-
-         if ((scnhdr.s_flags & S_TYPMASK) >= S_TEXT
-             && (scnhdr.s_flags & S_TYPMASK) <= S_COMON)
-           {
-             exec_map[n_exec].mem_addr = scnhdr.s_vaddr;
-             exec_map[n_exec].mem_end = scnhdr.s_vaddr + scnhdr.s_size;
-             exec_map[n_exec].file_addr = scnhdr.s_scnptr;
-             exec_map[n_exec].type = scnhdr.s_flags & S_TYPMASK;
-             n_exec++;
-
-             if ((scnhdr.s_flags & S_TYPMASK) == S_TEXT)
-               {
-                 text_start = scnhdr.s_vaddr;
-                 text_end =  scnhdr.s_vaddr + scnhdr.s_size;
-               }
-           }
-       }
-
-      fstat (execchan, &st_exec);
-      exec_mtime = st_exec.st_mtime;
-      
-      validate_files ();
-    }
-  else if (from_tty)
-    printf_filtered ("No executable file now.\n");
-
-  /* Tell display code (if any) about the changed file name.  */
-  if (exec_file_display_hook)
-    (*exec_file_display_hook) (filename);
-}
-
-#if 0
-/* Read data from SOFF exec or core file.
-   Return 0 on success, EIO if address out of bounds. */
-
-int
-xfer_core_file (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-{
-  register int i;
-  register int n;
-  register int val;
-  int xferchan;
-  char **xferfile;
-  int fileptr;
-  int returnval = 0;
-
-  while (len > 0)
-    {
-      xferfile = 0;
-      xferchan = 0;
-
-      /* Determine which file the next bunch of addresses reside in,
-        and where in the file.  Set the file's read/write pointer
-        to point at the proper place for the desired address
-        and set xferfile and xferchan for the correct file.
-        If desired address is nonexistent, leave them zero.
-        i is set to the number of bytes that can be handled
-        along with the next address.  */
-
-      i = len;
-
-      for (n = 0; n < n_core; n++)
-       {
-         if (memaddr >= core_map[n].mem_addr && memaddr < core_map[n].mem_end
-             && (core_map[n].thread == -1
-                 || core_map[n].thread == inferior_thread))
-           {
-             i = min (len, core_map[n].mem_end - memaddr);
-             fileptr = core_map[n].file_addr + memaddr - core_map[n].mem_addr;
-             if (core_map[n].file_addr)
-               {
-                 xferfile = &corefile;
-                 xferchan = corechan;
-               }
-             break;
-           }
-         else if (core_map[n].mem_addr >= memaddr
-                  && core_map[n].mem_addr < memaddr + i)
-           i = core_map[n].mem_addr - memaddr;
-        }
-
-      if (!xferfile) 
-       for (n = 0; n < n_exec; n++)
-         {
-           if (memaddr >= exec_map[n].mem_addr
-               && memaddr < exec_map[n].mem_end)
-             {
-               i = min (len, exec_map[n].mem_end - memaddr);
-               fileptr = exec_map[n].file_addr + memaddr
-                 - exec_map[n].mem_addr;
-               if (exec_map[n].file_addr)
-                 {
-                   xferfile = &execfile;
-                   xferchan = execchan;
-                 }
-               break;
-             }
-           else if (exec_map[n].mem_addr >= memaddr
-                    && exec_map[n].mem_addr < memaddr + i)
-             i = exec_map[n].mem_addr - memaddr;
-         }
-
-      /* Now we know which file to use.
-        Set up its pointer and transfer the data.  */
-      if (xferfile)
-       {
-         if (*xferfile == 0)
-           if (xferfile == &execfile)
-             error ("No program file to examine.");
-           else
-             error ("No core dump file or running program to examine.");
-         val = lseek (xferchan, fileptr, 0);
-         if (val < 0)
-           perror_with_name (*xferfile);
-         val = myread (xferchan, myaddr, i);
-         if (val < 0)
-           perror_with_name (*xferfile);
-       }
-      /* If this address is for nonexistent memory,
-        read zeros if reading, or do nothing if writing.  */
-      else
-       {
-         memset (myaddr, '\0', i);
-         returnval = EIO;
-       }
-
-      memaddr += i;
-      myaddr += i;
-      len -= i;
-    }
-  return returnval;
-}
-#endif
-
-/* Here from info files command to print an address map.  */
-
-print_maps ()
-{
-  struct pmap ptrs[200];
-  int n;
-
-  /* ID strings for core and executable file sections */
-
-  static char *idstr[] =
-    {
-      "0", "text", "data", "tdata", "bss", "tbss", 
-      "common", "ttext", "ctx", "tctx", "10", "11", "12",
-    };
-
-  for (n = 0; n < n_core; n++)
-    {
-      core_map[n].which = 0;
-      ptrs[n] = core_map[n];
-    }
-  for (n = 0; n < n_exec; n++)
-    {
-      exec_map[n].which = 1;
-      ptrs[n_core+n] = exec_map[n];
-    }
-
-  qsort (ptrs, n_core + n_exec, sizeof *ptrs, ptr_cmp);
-
-  for (n = 0; n < n_core + n_exec; n++)
-    {
-      struct pmap *p = &ptrs[n];
-      if (n > 0)
-       {
-         if (p->mem_addr < ptrs[n-1].mem_end)
-           p->mem_addr = ptrs[n-1].mem_end;
-         if (p->mem_addr >= p->mem_end)
-           continue;
-       }
-      printf_filtered ("%08x .. %08x  %-6s  %s\n",
-                      p->mem_addr, p->mem_end, idstr[p->type],
-                      p->which ? execfile : corefile);
-    }
-}
-
-/* Compare routine to put file sections in order.
-   Sort into increasing order on address, and put core file sections
-   before exec file sections if both files contain the same addresses.  */
-
-static ptr_cmp (a, b)
-     struct pmap *a, *b;
-{
-  if (a->mem_addr != b->mem_addr) return a->mem_addr - b->mem_addr;
-  return a->which - b->which;
-}
-\f
-/* Trapped internal variables are used to handle special registers.
-   A trapped i.v. calls a hook here every time it is dereferenced,
-   to provide a new value for the variable, and it calls a hook here
-   when a new value is assigned, to do something with the value.
-   
-   The vector registers are $vl, $vs, $vm, $vN, $VN (N in 0..7).
-   The communication registers are $cN, $CN (N in 0..63).
-   They not handled as regular registers because it's expensive to
-   read them, and their size varies, and they have too many names.  */
-
-
-/* Return 1 if NAME is a trapped internal variable, else 0. */
-
-int
-is_trapped_internalvar (name)
-     char *name;
-{
-    if ((name[0] == 'c' || name[0] == 'C')
-       && name[1] >= '0' && name[1] <= '9'
-       && (name[2] == '\0'
-           || (name[2] >= '0' && name[2] <= '9'
-               && name[3] == '\0' && name[1] != '0'))
-       && atoi (&name[1]) < 64) return 1;
-
-  if ((name[0] == 'v' || name[0] == 'V')
-      && (((name[1] & -8) == '0' && name[2] == '\0')
-         || STREQ (name, "vl")
-         || STREQ (name, "vs") 
-         || STREQ (name, "vm")))
-    return 1;
-  else return 0;
-}
-
-/* Return the value of trapped internal variable VAR */
-
-value
-value_of_trapped_internalvar (var)
-     struct internalvar *var;
-{
-  char *name = var->name;
-  value val;
-  struct type *type;
-  struct type *range_type;
-  long len = *read_vector_register (VL_REGNUM);
-  if (len <= 0 || len > 128) len = 128;
-
-  if (STREQ (name, "vl"))
-    {
-      val = value_from_longest (builtin_type_int,
-                            (LONGEST) *read_vector_register_1 (VL_REGNUM));
-    }
-  else if (STREQ (name, "vs"))
-    {
-      val = value_from_longest (builtin_type_int,
-                            (LONGEST) *read_vector_register_1 (VS_REGNUM));
-    }
-  else if (STREQ (name, "vm"))
-    {
-      long vm[4];
-      long i, *p;
-      memcpy (vm, read_vector_register_1 (VM_REGNUM), sizeof vm);
-      range_type =
-       create_range_type ((struct type *) NULL, builtin_type_int, 0, len - 1);
-      type =
-       create_array_type ((struct type *) NULL, builtin_type_int, range_type);
-      val = allocate_value (type);
-      p = (long *) VALUE_CONTENTS (val);
-      for (i = 0; i < len; i++) 
-       *p++ = !! (vm[3 - (i >> 5)] & (1 << (i & 037)));
-    }
-  else if (name[0] == 'V')
-    {
-      range_type =
-       create_range_type ((struct type *) NULL, builtin_type_int 0, len - 1);
-      type =
-       create_array_type ((struct type *) NULL, builtin_type_long_long,
-                          range_type);
-      val = allocate_value (type);
-      memcpy (VALUE_CONTENTS (val),
-            read_vector_register_1 (name[1] - '0'),
-            TYPE_LENGTH (type));
-    }
-  else if (name[0] == 'v')
-    {
-      long *p1, *p2;
-      range_type =
-       create_range_type ((struct type *) NULL, builtin_type_int 0, len - 1);
-      type =
-       create_array_type ((struct type *) NULL, builtin_type_long,
-                          range_type);
-      val = allocate_value (type);
-      p1 = read_vector_register_1 (name[1] - '0');
-      p2 = (long *) VALUE_CONTENTS (val);
-      while (--len >= 0) {p1++; *p2++ = *p1++;}
-    }
-
-  else if (name[0] == 'c')
-    val = value_from_longest (builtin_type_int,
-                          read_comm_register (atoi (&name[1])));
-  else if (name[0] == 'C')
-    val = value_from_longest (builtin_type_long_long,
-                          read_comm_register (atoi (&name[1])));
-
-  VALUE_LVAL (val) = lval_internalvar;
-  VALUE_INTERNALVAR (val) = var;
-  return val;
-}
-
-/* Handle a new value assigned to a trapped internal variable */
-
-void
-set_trapped_internalvar (var, val, bitpos, bitsize, offset)
-     struct internalvar *var;
-     value val;
-     int bitpos, bitsize, offset;
-{ 
-  char *name = var->name;
-  long long newval = value_as_long (val);
-
-  if (STREQ (name, "vl")) 
-    write_vector_register (VL_REGNUM, 0, newval);
-  else if (STREQ (name, "vs"))
-    write_vector_register (VS_REGNUM, 0, newval);
-  else if (name[0] == 'c' || name[0] == 'C')
-    write_comm_register (atoi (&name[1]), newval);
-  else if (STREQ (name, "vm"))
-    error ("can't assign to $vm");
-  else
-    {
-      offset /= bitsize / 8;
-      write_vector_register (name[1] - '0', offset, newval);
-    }
-}
-
-/* Print an integer value when no format was specified.  gdb normally
-   prints these values in decimal, but the the leading 0x80000000 of
-   pointers produces intolerable 10-digit negative numbers.
-   If it looks like an address, print it in hex instead.  */
-
-decout (stream, type, val)
-     GDB_FILE *stream;
-     struct type *type;
-     LONGEST val;
-{
-  long lv = val;
-
-  switch (output_radix)
-    {
-    case 0:
-      if ((lv == val || (unsigned) lv == val)
-         && ((lv & 0xf0000000) == 0x80000000
-             || ((lv & 0xf0000000) == 0xf0000000 && lv < STACK_END_ADDR)))
-       {
-         print_longest (stream, "x", 0, val);
-         return;
-       }
-
-    case 10:
-      print_longest (stream, TYPE_UNSIGNED (type) ? "u" : "d", 0, val);
-      return;
-
-    case 8:
-      print_longest (stream, "o", 0, val);
-      return;
-
-    case 16:
-      print_longest (stream, "x", 0, val);
-      return;
-    }
-}
-
-/* Change the default output radix to 10 or 16, or set it to 0 (heuristic).
-   This command is mostly obsolete now that the print command allows
-   formats to apply to aggregates, but is still handy occasionally.  */
-
-static void
-set_base_command (arg)
-    char *arg;
-{
-  int new_radix;
-
-  if (!arg)
-    output_radix = 0;
-  else
-    {
-      new_radix = atoi (arg);
-      if (new_radix != 10 && new_radix != 16 && new_radix != 8) 
-       error ("base must be 8, 10 or 16, or null");
-      else output_radix = new_radix;
-    }
-}
-
-/* Turn pipelining on or off in the inferior. */
-
-static void
-set_pipelining_command (arg)
-    char *arg;
-{
-  if (!arg)
-    {
-      sequential = !sequential;
-      printf_filtered ("%s\n", sequential ? "off" : "on");
-    }
-  else if (STREQ (arg, "on"))
-    sequential = 0;
-  else if (STREQ (arg, "off"))
-    sequential = 1;
-  else error ("valid args are `on', to allow instructions to overlap, or\n\
-`off', to prevent it and thereby pinpoint exceptions.");
-}
-
-/* Enable, disable, or force parallel execution in the inferior.  */
-
-static void
-set_parallel_command (arg)
-     char *arg;
-{
-  struct rlimit rl;
-  int prevparallel = parallel;
-
-  if (!strncmp (arg, "fixed", strlen (arg)))
-    parallel = 2;  
-  else if (STREQ (arg, "on"))
-    parallel = 1;
-  else if (STREQ (arg, "off"))
-    parallel = 0;
-  else error ("valid args are `on', to allow multiple threads, or\n\
-`fixed', to force multiple threads, or\n\
-`off', to run with one thread only.");
-
-  if ((prevparallel == 0) != (parallel == 0) && inferior_pid)
-    printf_filtered ("will take effect at next run.\n");
-
-  getrlimit (RLIMIT_CONCUR, &rl);
-  rl.rlim_cur = parallel ? rl.rlim_max : 1;
-  setrlimit (RLIMIT_CONCUR, &rl);
-
-  if (inferior_pid)
-    set_fixed_scheduling (inferior_pid, parallel == 2);
-}
-
-/* Add a new name for an existing command.  */
-
-static void 
-alias_command (arg)
-    char *arg;
-{
-    static char *aliaserr = "usage is `alias NEW OLD', no args allowed";
-    char *newname = arg;
-    struct cmd_list_element *new, *old;
-
-    if (!arg)
-      error_no_arg ("newname oldname");
-       
-    new = lookup_cmd (&arg, cmdlist, "", -1);
-    if (new && !strncmp (newname, new->name, strlen (new->name)))
-      {
-       newname = new->name;
-       if (!(*arg == '-' 
-             || (*arg >= 'a' && *arg <= 'z')
-             || (*arg >= 'A' && *arg <= 'Z')
-             || (*arg >= '0' && *arg <= '9')))
-         error (aliaserr);
-      }
-    else
-      {
-       arg = newname;
-       while (*arg == '-' 
-              || (*arg >= 'a' && *arg <= 'z')
-              || (*arg >= 'A' && *arg <= 'Z')
-              || (*arg >= '0' && *arg <= '9'))
-         arg++;
-       if (*arg != ' ' && *arg != '\t')
-         error (aliaserr);
-       *arg = '\0';
-       arg++;
-      }
-
-    old = lookup_cmd (&arg, cmdlist, "", 0);
-
-    if (*arg != '\0')
-      error (aliaserr);
-
-    if (new && !strncmp (newname, new->name, strlen (new->name)))
-      {
-       char *tem;
-       if (new->class == (int) class_user || new->class == (int) class_alias)
-         tem = "Redefine command \"%s\"? ";
-       else
-         tem = "Really redefine built-in command \"%s\"? ";
-       if (!query (tem, new->name))
-         error ("Command \"%s\" not redefined.", new->name);
-      }
-
-    add_com (newname, class_alias, old->function, old->doc);
-}
-
-
-
-/* Print the current thread number, and any threads with signals in the
-   queue.  */
-
-thread_info ()
-{
-  struct threadpid *p;
-
-  if (have_inferior_p ())
-    {
-      ps.pi_buffer = (char *) &comm_registers;
-      ps.pi_nbytes = sizeof comm_registers;
-      ps.pi_offset = 0;
-      ps.pi_thread = inferior_thread;
-      ioctl (inferior_fd, PIXRDCREGS, &ps);
-    }
-
-  /* FIXME: stop_signal is from target.h but stop_sigcode is a
-     convex-specific thing.  */
-  printf_filtered ("Current thread %d stopped with signal %d.%d (%s).\n",
-                  inferior_thread, stop_signal, stop_sigcode,
-                  subsig_name (stop_signal, stop_sigcode));
-  
-  for (p = signal_stack; p->pid; p--)
-    printf_filtered ("Thread %d stopped with signal %d.%d (%s).\n",
-                    p->thread, p->signo, p->subsig,
-                    subsig_name (p->signo, p->subsig));
-               
-  if (iscrlbit (comm_registers.crctl.lbits.cc, 64+13))
-    printf_filtered ("New thread start pc %#x\n",
-                    (long) (comm_registers.crreg.pcpsw >> 32));
-}
-
-/* Return string describing a signal.subcode number */
-
-static char *
-subsig_name (signo, subcode)
-     int signo, subcode;
-{
-  static char *subsig4[] = {
-    "error exit", "privileged instruction", "unknown",
-    "unknown", "undefined opcode",
-    0};
-  static char *subsig5[] = {0,
-    "breakpoint", "single step", "fork trap", "exec trap", "pfork trap",
-    "join trap", "idle trap", "last thread", "wfork trap",
-    "process breakpoint", "trap instruction",
-    0};
-  static char *subsig8[] = {0,
-    "int overflow", "int divide check", "float overflow",
-    "float divide check", "float underflow", "reserved operand",
-    "sqrt error", "exp error", "ln error", "sin error", "cos error",
-    0};
-  static char *subsig10[] = {0,
-    "invalid inward ring address", "invalid outward ring call",
-    "invalid inward ring return", "invalid syscall gate",
-    "invalid rtn frame length", "invalid comm reg address",
-    "invalid trap gate",
-    0};
-  static char *subsig11[] = {0,
-    "read access denied", "write access denied", "execute access denied",
-    "segment descriptor fault", "page table fault", "data reference fault",
-    "i/o access denied", "levt pte invalid",
-    0};
-
-  static char **subsig_list[] = 
-    {0, 0, 0, 0, subsig4, subsig5, 0, 0, subsig8, 0, subsig10, subsig11, 0};
-
-  int i;
-  char *p;
-
-  if ((p = strsignal (signo)) == NULL)
-    p = "unknown";
-  if (signo >= (sizeof subsig_list / sizeof *subsig_list)
-      || !subsig_list[signo])
-    return p;
-  for (i = 1; subsig_list[signo][i]; i++)
-    if (i == subcode)
-      return subsig_list[signo][subcode];
-  return p;
-}
-
-
-/* Print a compact display of thread status, essentially x/i $pc
-   for all active threads.  */
-
-static void
-threadstat ()
-{
-  int t;
-
-  for (t = 0; t < n_threads; t++)
-    if (thread_state[t] == PI_TALIVE)
-      {
-       printf_filtered ("%d%c %08x%c %d.%d ", t,
-                        (t == inferior_thread ? '*' : ' '), thread_pc[t],
-                        (thread_is_in_kernel[t] ? '#' : ' '),
-                        thread_signal[t], thread_sigcode[t]);
-       print_insn (thread_pc[t], stdout);
-       printf_filtered ("\n");
-      }
-}
-
-/* Change the current thread to ARG.  */
-
-set_thread_command (arg)
-     char *arg;
-{
-    int thread;
-
-    if (!arg)
-      {
-       threadstat ();
-       return;
-      }
-
-    thread = parse_and_eval_address (arg);
-
-    if (thread < 0 || thread > n_threads || thread_state[thread] != PI_TALIVE)
-      error ("no such thread.");
-
-    select_thread (thread);
-
-    stop_pc = read_pc ();
-    flush_cached_frames ();
-    select_frame (get_current_frame (), 0);
-    print_stack_frame (selected_frame, selected_frame_level, -1);
-}
-
-/* Here on CONT command; gdb's dispatch address is changed to come here.
-   Set global variable ALL_CONTINUE to tell resume() that it should
-   start up all threads, and that a thread switch will not blow gdb's
-   mind.  */
-
-static void
-convex_cont_command (proc_count_exp, from_tty)
-     char *proc_count_exp;
-     int from_tty;
-{
-  all_continue = 1;
-  cont_command (proc_count_exp, from_tty);
-}
-
-/* Here on 1CONT command.  Resume only the current thread.  */
-
-one_cont_command (proc_count_exp, from_tty)
-     char *proc_count_exp;
-     int from_tty;
-{
-  cont_command (proc_count_exp, from_tty);
-}
-
-/* Print the contents and lock bits of all communication registers,
-   or just register ARG if ARG is a communication register,
-   or the 3-word resource structure in memory at address ARG.  */
-
-comm_registers_info (arg)
-    char *arg;
-{
-  int i, regnum;
-
-  if (arg)
-    {
-             if (sscanf (arg, "$c%d", &regnum) == 1) {
-       ;
-      } else if (sscanf (arg, "$C%d", &regnum) == 1) {
-       ;
-      } else {
-       regnum = parse_and_eval_address (arg);
-       if (regnum > 0)
-         regnum &= ~0x8000;
-      }
-
-      if (regnum >= 64)
-       error ("%s: invalid register name.", arg);
-
-      /* if we got a (user) address, examine the resource struct there */
-
-      if (regnum < 0)
-       {
-         static int buf[3];
-         read_memory (regnum, buf, sizeof buf);
-         printf_filtered ("%08x  %08x%08x%s\n", regnum, buf[1], buf[2],
-                          buf[0] & 0xff ? " locked" : "");
-         return;
-       }
-    }
-
-  ps.pi_buffer = (char *) &comm_registers;
-  ps.pi_nbytes = sizeof comm_registers;
-  ps.pi_offset = 0;
-  ps.pi_thread = inferior_thread;
-  ioctl (inferior_fd, PIXRDCREGS, &ps);
-
-  for (i = 0; i < 64; i++)
-    if (!arg || i == regnum)
-      printf_filtered ("%2d 0x8%03x %016llx%s\n", i, i,
-                      comm_registers.crreg.r4[i],
-                      (iscrlbit (comm_registers.crctl.lbits.cc, i)
-                       ? " locked" : ""));
-}
-
-/* Print the psw */
-
-static void 
-psw_info (arg)
-    char *arg;
-{
-  struct pswbit
-    {
-      int bit;
-      int pos;
-      char *text;
-    };
-
-  static struct pswbit pswbit[] =
-    {
-      { 0x80000000, -1, "A carry" }, 
-      { 0x40000000, -1, "A integer overflow" }, 
-      { 0x20000000, -1, "A zero divide" }, 
-      { 0x10000000, -1, "Integer overflow enable" }, 
-      { 0x08000000, -1, "Trace" }, 
-      { 0x06000000, 25, "Frame length" }, 
-      { 0x01000000, -1, "Sequential" }, 
-      { 0x00800000, -1, "S carry" }, 
-      { 0x00400000, -1, "S integer overflow" }, 
-      { 0x00200000, -1, "S zero divide" }, 
-      { 0x00100000, -1, "Zero divide enable" }, 
-      { 0x00080000, -1, "Floating underflow" }, 
-      { 0x00040000, -1, "Floating overflow" }, 
-      { 0x00020000, -1, "Floating reserved operand" }, 
-      { 0x00010000, -1, "Floating zero divide" }, 
-      { 0x00008000, -1, "Floating error enable" }, 
-      { 0x00004000, -1, "Floating underflow enable" }, 
-      { 0x00002000, -1, "IEEE" }, 
-      { 0x00001000, -1, "Sequential stores" }, 
-      { 0x00000800, -1, "Intrinsic error" }, 
-      { 0x00000400, -1, "Intrinsic error enable" }, 
-      { 0x00000200, -1, "Trace thread creates" }, 
-      { 0x00000100, -1, "Thread init trap" }, 
-      { 0x000000e0,  5, "Reserved" },
-      { 0x0000001f,  0, "Intrinsic error code" },
-      {0, 0, 0},
-    };
-
-  long psw;
-  struct pswbit *p;
-
-  if (arg)
-    psw = parse_and_eval_address (arg);
-  else
-    psw = read_register (PS_REGNUM);
-
-  for (p = pswbit; p->bit; p++)
-    {
-      if (p->pos < 0)
-       printf_filtered ("%08x  %s  %s\n", p->bit,
-                        (psw & p->bit) ? "yes" : "no ", p->text);
-      else
-       printf_filtered ("%08x %3d   %s\n", p->bit,
-                        (psw & p->bit) >> p->pos, p->text);
-    }
-}
-\f
-#include "symtab.h"
-
-/* reg (fmt_field, inst_field) --
-   the {first,second,third} operand of instruction as fmt_field = [ijk]
-   gets the value of the field from the [ijk] position of the instruction */
-
-#define reg(a,b) ((char (*)[3])(op[fmt->a]))[inst.f0.b]
-
-/* lit (fmt_field) -- field [ijk] is a literal (PSW, VL, eg) */
-
-#define lit(i) op[fmt->i]
-
-/* aj[j] -- name for A register j */
-
-#define aj ((char (*)[3])(op[A]))
-\f
-union inst {
-    struct {
-       unsigned   : 7;
-       unsigned i : 3;
-       unsigned j : 3;
-       unsigned k : 3;
-       unsigned   : 16;
-       unsigned   : 32;
-    } f0;
-    struct {
-       unsigned   : 8;
-       unsigned indir : 1;
-       unsigned len : 1;
-       unsigned j : 3;
-       unsigned k : 3;
-       unsigned   : 16;
-       unsigned   : 32;
-    } f1;
-    unsigned char byte[8];
-    unsigned short half[4];
-    char signed_byte[8];
-    short signed_half[4];
-};
-
-struct opform {
-    int mask;                  /* opcode mask */
-    int shift;                 /* opcode align */
-    struct formstr *formstr[3];        /* ST, E0, E1 */
-};
-
-struct formstr {
-    unsigned lop:8, rop:5;     /* opcode */
-    unsigned fmt:5;            /* inst format */
-    unsigned i:5, j:5, k:2;    /* operand formats */
-};
-
-#include "opcode/convex.h"
-
-CONST unsigned char formdecode [] = {
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-    4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,8,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-};
-
-CONST struct opform opdecode[] = {
-    0x7e00, 9, format0, e0_format0, e1_format0,
-    0x3f00, 8, format1, e0_format1, e1_format1,
-    0x1fc0, 6, format2, e0_format2, e1_format2,
-    0x0fc0, 6, format3, e0_format3, e1_format3,
-    0x0700, 8, format4, e0_format4, e1_format4,
-    0x03c0, 6, format5, e0_format5, e1_format5,
-    0x01f8, 3, format6, e0_format6, e1_format6,
-    0x00f8, 3, format7, e0_format7, e1_format7,
-    0x0000, 0, formatx, formatx, formatx,
-    0x0f80, 7, formatx, formatx, formatx,
-    0x0f80, 7, formatx, formatx, formatx,
-};
-\f
-/* Print the instruction at address MEMADDR in debugged memory,
-   on STREAM.  Returns length of the instruction, in bytes.  */
-
-int
-convex_print_insn (memaddr, stream)
-     CORE_ADDR memaddr;
-     FILE *stream;
-{
-  union inst inst;
-  struct formstr *fmt;
-  register int format, op1, pfx;
-  int l;
-
-  read_memory (memaddr, &inst, sizeof inst);
-
-  /* Remove and note prefix, if present */
-    
-  pfx = inst.half[0];
-  if ((pfx & 0xfff0) == 0x7ef0)
-    {
-      pfx = ((pfx >> 3) & 1) + 1;
-      *(long long *) &inst = *(long long *) &inst.half[1];
-    }
-  else pfx = 0;
-
-  /* Split opcode into format.op1 and look up in appropriate table */
-
-  format = formdecode[inst.byte[0]];
-  op1 = (inst.half[0] & opdecode[format].mask) >> opdecode[format].shift;
-  if (format == 9)
-    {
-      if (pfx)
-       fmt = formatx;
-      else if (inst.f1.j == 0)
-       fmt = &format1a[op1];
-      else if (inst.f1.j == 1)
-       fmt = &format1b[op1];
-      else
-       fmt = formatx;
-    }
-  else
-    fmt = &opdecode[format].formstr[pfx][op1];
-
-  /* Print it */
-
-  if (fmt->fmt == xxx)
-    {
-      /* noninstruction */
-      fprintf (stream, "0x%04x", pfx ? pfx : inst.half[0]);
-      return 2;
-    }
-
-  if (pfx)
-    pfx = 2;
-
-  fprintf (stream, "%s%s%s", lop[fmt->lop], rop[fmt->rop],
-          &"        "[strlen(lop[fmt->lop]) + strlen(rop[fmt->rop])]);
-
-  switch (fmt->fmt)
-    {
-    case rrr:                  /* three register */
-      fprintf (stream, "%s,%s,%s", reg(i,i), reg(j,j), reg(k,k));
-      return pfx + 2;
-
-    case rr:                   /* two register */
-      fprintf (stream, "%s,%s", reg(i,j), reg(j,k));
-      return pfx + 2;
-
-    case rxr:                  /* two register, reversed i and j fields */
-      fprintf (stream, "%s,%s", reg(i,k), reg(j,j));
-      return pfx + 2;
-
-    case r:                    /* one register */
-      fprintf (stream, "%s", reg(i,k));
-      return pfx + 2;
-
-    case nops:                 /* no operands */
-      return pfx + 2;
-
-    case nr:                   /* short immediate, one register */
-      fprintf (stream, "#%d,%s", inst.f0.j, reg(i,k));
-      return pfx + 2;
-
-    case pcrel:                        /* pc relative */
-      print_address (memaddr + 2 * inst.signed_byte[1], stream);
-      return pfx + 2;
-
-    case lr:                   /* literal, one register */
-      fprintf (stream, "%s,%s", lit(i), reg(j,k));
-      return pfx + 2;
-
-    case rxl:                  /* one register, literal */
-      fprintf (stream, "%s,%s", reg(i,k), lit(j));
-      return pfx + 2;
-
-    case rlr:                  /* register, literal, register */
-      fprintf (stream, "%s,%s,%s", reg(i,j), lit(j), reg(k,k));
-      return pfx + 2;
-
-    case rrl:                  /* register, register, literal */
-      fprintf (stream, "%s,%s,%s", reg(i,j), reg(j,k), lit(k));
-      return pfx + 2;
-
-    case iml:                  /* immediate, literal */
-      if (inst.f1.len)
-       {
-         fprintf (stream, "#%#x,%s",
-                  (inst.signed_half[1] << 16) + inst.half[2], lit(i));
-         return pfx + 6;
-       }
-      else
-       {
-         fprintf (stream, "#%d,%s", inst.signed_half[1], lit(i));
-         return pfx + 4;
-       }
-
-    case imr:                  /* immediate, register */
-      if (inst.f1.len)
-       {
-         fprintf (stream, "#%#x,%s",
-                  (inst.signed_half[1] << 16) + inst.half[2], reg(i,k));
-         return pfx + 6;
-       }
-      else
-       {
-         fprintf (stream, "#%d,%s", inst.signed_half[1], reg(i,k));
-         return pfx + 4;
-       }
-
-    case a1r:                  /* memory, register */
-      l = print_effa (inst, stream);
-      fprintf (stream, ",%s", reg(i,k));
-      return pfx + l;
-
-    case a1l:                  /* memory, literal  */
-      l = print_effa (inst, stream);
-      fprintf (stream, ",%s", lit(i));
-      return pfx + l;
-
-    case a2r:                  /* register, memory */
-      fprintf (stream, "%s,", reg(i,k));
-      return pfx + print_effa (inst, stream);
-
-    case a2l:                  /* literal, memory */
-      fprintf (stream, "%s,", lit(i));
-      return pfx + print_effa (inst, stream);
-
-    case a3:                   /* memory */
-      return pfx + print_effa (inst, stream);
-
-    case a4:                   /* system call */
-      l = 29; goto a4a5;
-    case a5:                   /* trap */
-      l = 27;
-    a4a5:
-      if (inst.f1.len)
-       {
-         unsigned int m = (inst.signed_half[1] << 16) + inst.half[2];
-         fprintf (stream, "#%d,#%d", m >> l, m & (-1 >> (32-l)));
-         return pfx + 6;
-       }
-      else
-       {
-         unsigned int m = inst.signed_half[1];
-         fprintf (stream, "#%d,#%d", m >> l, m & (-1 >> (32-l)));
-         return pfx + 4;
-       }
-    }
-}
-
-
-/* print effective address @nnn(aj), return instruction length */
-
-int print_effa (inst, stream)
-     union inst inst;
-     FILE *stream;
-{
-  int n, l;
-
-  if (inst.f1.len)
-    {
-      n = (inst.signed_half[1] << 16) + inst.half[2];
-      l = 6;
-    }
-  else
-    {
-      n = inst.signed_half[1];
-      l = 4;
-    }
-       
-  if (inst.f1.indir)
-    printf ("@");
-
-  if (!inst.f1.j)
-    {
-      print_address (n, stream);
-      return l;
-    }
-
-  fprintf (stream, (n & 0xf0000000) == 0x80000000 ? "%#x(%s)" : "%d(%s)",
-          n, aj[inst.f1.j]);
-
-  return l;
-}
-
-\f
-void
-_initialize_convex_dep ()
-{
-  add_com ("alias", class_support, alias_command,
-          "Add a new name for an existing command.");
-
-  add_cmd ("base", class_vars, set_base_command,
-          "Change the integer output radix to 8, 10 or 16\n\
-or use just `set base' with no args to return to the ad-hoc default,\n\
-which is 16 for integers that look like addresses, 10 otherwise.",
-          &setlist);
-
-  add_cmd ("pipeline", class_run, set_pipelining_command,
-          "Enable or disable overlapped execution of instructions.\n\
-With `set pipe off', exceptions are reported with\n\
-$pc pointing at the instruction after the faulting one.\n\
-The default is `set pipe on', which runs faster.",
-          &setlist);
-
-  add_cmd ("parallel", class_run, set_parallel_command,
-          "Enable or disable multi-threaded execution of parallel code.\n\
-`set parallel off' means run the program on a single CPU.\n\
-`set parallel fixed' means run the program with all CPUs assigned to it.\n\
-`set parallel on' means run the program on any CPUs that are available.",
-          &setlist);
-
-  add_com ("1cont", class_run, one_cont_command,
-          "Continue the program, activating only the current thread.\n\
-Args are the same as the `cont' command.");
-
-  add_com ("thread", class_run, set_thread_command,
-          "Change the current thread, the one under scrutiny and control.\n\
-With no arg, show the active threads, the current one marked with *.");
-
-  add_info ("threads", thread_info,
-           "List status of active threads.");
-
-  add_info ("comm-registers", comm_registers_info,
-           "List communication registers and their contents.\n\
-A communication register name as argument means describe only that register.\n\
-An address as argument means describe the resource structure at that address.\n\
-`Locked' means that the register has been sent to but not yet received from.");
-
-  add_info ("psw", psw_info, 
-           "Display $ps, the processor status word, bit by bit.\n\
-An argument means display that value's interpretation as a psw.");
-
-  add_cmd ("convex", no_class, 0, "Convex-specific commands.\n\
-32-bit registers  $pc $ps $sp $ap $fp $a1-5 $s0-7 $v0-7 $vl $vs $vm $c0-63\n\
-64-bit registers  $S0-7 $V0-7 $C0-63\n\
-\n\
-info threads       display info on stopped threads waiting to signal\n\
-thread             display list of active threads\n\
-thread N           select thread N (its registers, stack, memory, etc.)\n\
-step, next, etc     step selected thread only\n\
-1cont              continue selected thread only\n\
-cont               continue all threads\n\
-info comm-registers display contents of comm register(s) or a resource struct\n\
-info psw           display processor status word $ps\n\
-set base N         change integer radix used by `print' without a format\n\
-set pipeline off    exceptions are precise, $pc points after the faulting insn\n\
-set pipeline on     normal mode, $pc is somewhere ahead of faulting insn\n\
-set parallel off    program runs on a single CPU\n\
-set parallel fixed  all CPUs are assigned to the program\n\
-set parallel on     normal mode, parallel execution on random available CPUs\n\
-",
-          &cmdlist);
-
-}
+/* OBSOLETE /* Convex stuff for GDB. */
+/* OBSOLETE    Copyright (C) 1990, 1991, 1996 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #include "defs.h" */
+/* OBSOLETE #include "command.h" */
+/* OBSOLETE #include "symtab.h" */
+/* OBSOLETE #include "value.h" */
+/* OBSOLETE #include "frame.h" */
+/* OBSOLETE #include "inferior.h" */
+/* OBSOLETE #include "wait.h" */
+/* OBSOLETE  */
+/* OBSOLETE #include <signal.h> */
+/* OBSOLETE #include <fcntl.h> */
+/* OBSOLETE  */
+/* OBSOLETE #include "gdbcore.h" */
+/* OBSOLETE #include <sys/param.h> */
+/* OBSOLETE #include <sys/dir.h> */
+/* OBSOLETE #include <sys/user.h> */
+/* OBSOLETE #include <sys/ioctl.h> */
+/* OBSOLETE #include <sys/pcntl.h> */
+/* OBSOLETE #include <sys/thread.h> */
+/* OBSOLETE #include <sys/proc.h> */
+/* OBSOLETE #include <sys/file.h> */
+/* OBSOLETE #include "gdb_stat.h" */
+/* OBSOLETE #include <sys/mman.h> */
+/* OBSOLETE  */
+/* OBSOLETE #include "gdbcmd.h" */
+/* OBSOLETE  */
+/* OBSOLETE CORE_ADDR */
+/* OBSOLETE convex_skip_prologue (pc) */
+/* OBSOLETE      CORE_ADDR pc; */
+/* OBSOLETE { */
+/* OBSOLETE   int op, ix; */
+/* OBSOLETE   op = read_memory_integer (pc, 2); */
+/* OBSOLETE   if ((op & 0xffc7) == 0x5ac0) */
+/* OBSOLETE     pc += 2; */
+/* OBSOLETE   else if (op == 0x1580) */
+/* OBSOLETE     pc += 4; */
+/* OBSOLETE   else if (op == 0x15c0) */
+/* OBSOLETE     pc += 6; */
+/* OBSOLETE   if ((read_memory_integer (pc, 2) & 0xfff8) == 0x7c40 */
+/* OBSOLETE       && (read_memory_integer (pc + 2, 2) & 0xfff8) == 0x1240 */
+/* OBSOLETE       && (read_memory_integer (pc + 8, 2) & 0xfff8) == 0x7c48) */
+/* OBSOLETE     pc += 10; */
+/* OBSOLETE   if (read_memory_integer (pc, 2) == 0x1240) */
+/* OBSOLETE     pc += 6; */
+/* OBSOLETE   for (;;) */
+/* OBSOLETE     { */
+/* OBSOLETE       op = read_memory_integer (pc, 2); */
+/* OBSOLETE       ix = (op >> 3) & 7; */
+/* OBSOLETE       if (ix != 6) */
+/* OBSOLETE    break; */
+/* OBSOLETE       if ((op & 0xfcc0) == 0x3000) */
+/* OBSOLETE    pc += 4; */
+/* OBSOLETE       else if ((op & 0xfcc0) == 0x3040) */
+/* OBSOLETE    pc += 6; */
+/* OBSOLETE       else if ((op & 0xfcc0) == 0x2800) */
+/* OBSOLETE    pc += 4; */
+/* OBSOLETE       else if ((op & 0xfcc0) == 0x2840) */
+/* OBSOLETE    pc += 6; */
+/* OBSOLETE       else */
+/* OBSOLETE    break; */
+/* OBSOLETE     } */
+/* OBSOLETE   return pc; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE convex_frameless_function_invocation (fi) */
+/* OBSOLETE      struct frame_info *fi; */
+/* OBSOLETE { */
+/* OBSOLETE   int frameless; */
+/* OBSOLETE   extern CORE_ADDR text_start, text_end; */
+/* OBSOLETE   CORE_ADDR call_addr = SAVED_PC_AFTER_CALL (FI); */
+/* OBSOLETE   frameless = (call_addr >= text_start && call_addr < text_end */
+/* OBSOLETE           && read_memory_integer (call_addr - 6, 1) == 0x22); */
+/* OBSOLETE   return frameless; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE convex_frame_num_args (fi) */
+/* OBSOLETE      struct frame_info *fi; */
+/* OBSOLETE { */
+/* OBSOLETE   int numargs = read_memory_integer (FRAME_ARGS_ADDRESS (fi) - 4, 4); */
+/* OBSOLETE   if (numargs < 0 || numargs >= 256) */
+/* OBSOLETE     numargs = -1; */
+/* OBSOLETE   return numargs; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE exec_file_command (filename, from_tty) */
+/* OBSOLETE      char *filename; */
+/* OBSOLETE      int from_tty; */
+/* OBSOLETE { */
+/* OBSOLETE   int val; */
+/* OBSOLETE   int n; */
+/* OBSOLETE   struct stat st_exec; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Eliminate all traces of old exec file. */
+/* OBSOLETE      Mark text segment as empty.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (execfile) */
+/* OBSOLETE     free (execfile); */
+/* OBSOLETE   execfile = 0; */
+/* OBSOLETE   data_start = 0; */
+/* OBSOLETE   data_end = 0; */
+/* OBSOLETE   text_start = 0; */
+/* OBSOLETE   text_end = 0; */
+/* OBSOLETE   exec_data_start = 0; */
+/* OBSOLETE   exec_data_end = 0; */
+/* OBSOLETE   if (execchan >= 0) */
+/* OBSOLETE     close (execchan); */
+/* OBSOLETE   execchan = -1; */
+/* OBSOLETE  */
+/* OBSOLETE   n_exec = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Now open and digest the file the user requested, if any.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (filename) */
+/* OBSOLETE     { */
+/* OBSOLETE       filename = tilde_expand (filename); */
+/* OBSOLETE       make_cleanup (free, filename); */
+/* OBSOLETE        */
+/* OBSOLETE       execchan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0, */
+/* OBSOLETE                    &execfile); */
+/* OBSOLETE       if (execchan < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (myread (execchan, &filehdr, sizeof filehdr) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (! IS_SOFF_MAGIC (filehdr.h_magic)) */
+/* OBSOLETE    error ("%s: not an executable file.", filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (myread (execchan, &opthdr, filehdr.h_opthdr) <= 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       /* Read through the section headers. */
+/* OBSOLETE     For text, data, etc, record an entry in the exec file map. */
+/* OBSOLETE     Record text_start and text_end.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       lseek (execchan, (long) filehdr.h_scnptr, 0); */
+/* OBSOLETE  */
+/* OBSOLETE       for (n = 0; n < filehdr.h_nscns; n++) */
+/* OBSOLETE    { */
+/* OBSOLETE      if (myread (execchan, &scnhdr, sizeof scnhdr) < 0) */
+/* OBSOLETE        perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE      if ((scnhdr.s_flags & S_TYPMASK) >= S_TEXT */
+/* OBSOLETE          && (scnhdr.s_flags & S_TYPMASK) <= S_COMON) */
+/* OBSOLETE        { */
+/* OBSOLETE          exec_map[n_exec].mem_addr = scnhdr.s_vaddr; */
+/* OBSOLETE          exec_map[n_exec].mem_end = scnhdr.s_vaddr + scnhdr.s_size; */
+/* OBSOLETE          exec_map[n_exec].file_addr = scnhdr.s_scnptr; */
+/* OBSOLETE          exec_map[n_exec].type = scnhdr.s_flags & S_TYPMASK; */
+/* OBSOLETE          n_exec++; */
+/* OBSOLETE  */
+/* OBSOLETE          if ((scnhdr.s_flags & S_TYPMASK) == S_TEXT) */
+/* OBSOLETE            { */
+/* OBSOLETE              text_start = scnhdr.s_vaddr; */
+/* OBSOLETE              text_end =  scnhdr.s_vaddr + scnhdr.s_size; */
+/* OBSOLETE            } */
+/* OBSOLETE        } */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       fstat (execchan, &st_exec); */
+/* OBSOLETE       exec_mtime = st_exec.st_mtime; */
+/* OBSOLETE        */
+/* OBSOLETE       validate_files (); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (from_tty) */
+/* OBSOLETE     printf_filtered ("No executable file now.\n"); */
+/* OBSOLETE  */
+/* OBSOLETE   /* Tell display code (if any) about the changed file name.  *x/ */
+/* OBSOLETE   if (exec_file_display_hook) */
+/* OBSOLETE     (*exec_file_display_hook) (filename); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE #if 0 */
+/* OBSOLETE /* Read data from SOFF exec or core file. */
+/* OBSOLETE    Return 0 on success, EIO if address out of bounds. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE xfer_core_file (memaddr, myaddr, len) */
+/* OBSOLETE      CORE_ADDR memaddr; */
+/* OBSOLETE      char *myaddr; */
+/* OBSOLETE      int len; */
+/* OBSOLETE { */
+/* OBSOLETE   register int i; */
+/* OBSOLETE   register int n; */
+/* OBSOLETE   register int val; */
+/* OBSOLETE   int xferchan; */
+/* OBSOLETE   char **xferfile; */
+/* OBSOLETE   int fileptr; */
+/* OBSOLETE   int returnval = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   while (len > 0) */
+/* OBSOLETE     { */
+/* OBSOLETE       xferfile = 0; */
+/* OBSOLETE       xferchan = 0; */
+/* OBSOLETE  */
+/* OBSOLETE       /* Determine which file the next bunch of addresses reside in, */
+/* OBSOLETE     and where in the file.  Set the file's read/write pointer */
+/* OBSOLETE     to point at the proper place for the desired address */
+/* OBSOLETE     and set xferfile and xferchan for the correct file. */
+/* OBSOLETE     If desired address is nonexistent, leave them zero. */
+/* OBSOLETE     i is set to the number of bytes that can be handled */
+/* OBSOLETE     along with the next address.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       i = len; */
+/* OBSOLETE  */
+/* OBSOLETE       for (n = 0; n < n_core; n++) */
+/* OBSOLETE    { */
+/* OBSOLETE      if (memaddr >= core_map[n].mem_addr && memaddr < core_map[n].mem_end */
+/* OBSOLETE          && (core_map[n].thread == -1 */
+/* OBSOLETE              || core_map[n].thread == inferior_thread)) */
+/* OBSOLETE        { */
+/* OBSOLETE          i = min (len, core_map[n].mem_end - memaddr); */
+/* OBSOLETE          fileptr = core_map[n].file_addr + memaddr - core_map[n].mem_addr; */
+/* OBSOLETE          if (core_map[n].file_addr) */
+/* OBSOLETE            { */
+/* OBSOLETE              xferfile = &corefile; */
+/* OBSOLETE              xferchan = corechan; */
+/* OBSOLETE            } */
+/* OBSOLETE          break; */
+/* OBSOLETE        } */
+/* OBSOLETE      else if (core_map[n].mem_addr >= memaddr */
+/* OBSOLETE               && core_map[n].mem_addr < memaddr + i) */
+/* OBSOLETE        i = core_map[n].mem_addr - memaddr; */
+/* OBSOLETE         } */
+/* OBSOLETE  */
+/* OBSOLETE       if (!xferfile)  */
+/* OBSOLETE    for (n = 0; n < n_exec; n++) */
+/* OBSOLETE      { */
+/* OBSOLETE        if (memaddr >= exec_map[n].mem_addr */
+/* OBSOLETE            && memaddr < exec_map[n].mem_end) */
+/* OBSOLETE          { */
+/* OBSOLETE            i = min (len, exec_map[n].mem_end - memaddr); */
+/* OBSOLETE            fileptr = exec_map[n].file_addr + memaddr */
+/* OBSOLETE              - exec_map[n].mem_addr; */
+/* OBSOLETE            if (exec_map[n].file_addr) */
+/* OBSOLETE              { */
+/* OBSOLETE                xferfile = &execfile; */
+/* OBSOLETE                xferchan = execchan; */
+/* OBSOLETE              } */
+/* OBSOLETE            break; */
+/* OBSOLETE          } */
+/* OBSOLETE        else if (exec_map[n].mem_addr >= memaddr */
+/* OBSOLETE                 && exec_map[n].mem_addr < memaddr + i) */
+/* OBSOLETE          i = exec_map[n].mem_addr - memaddr; */
+/* OBSOLETE      } */
+/* OBSOLETE  */
+/* OBSOLETE       /* Now we know which file to use. */
+/* OBSOLETE     Set up its pointer and transfer the data.  *x/ */
+/* OBSOLETE       if (xferfile) */
+/* OBSOLETE    { */
+/* OBSOLETE      if (*xferfile == 0) */
+/* OBSOLETE        if (xferfile == &execfile) */
+/* OBSOLETE          error ("No program file to examine."); */
+/* OBSOLETE        else */
+/* OBSOLETE          error ("No core dump file or running program to examine."); */
+/* OBSOLETE      val = lseek (xferchan, fileptr, 0); */
+/* OBSOLETE      if (val < 0) */
+/* OBSOLETE        perror_with_name (*xferfile); */
+/* OBSOLETE      val = myread (xferchan, myaddr, i); */
+/* OBSOLETE      if (val < 0) */
+/* OBSOLETE        perror_with_name (*xferfile); */
+/* OBSOLETE    } */
+/* OBSOLETE       /* If this address is for nonexistent memory, */
+/* OBSOLETE     read zeros if reading, or do nothing if writing.  *x/ */
+/* OBSOLETE       else */
+/* OBSOLETE    { */
+/* OBSOLETE      memset (myaddr, '\0', i); */
+/* OBSOLETE      returnval = EIO; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       memaddr += i; */
+/* OBSOLETE       myaddr += i; */
+/* OBSOLETE       len -= i; */
+/* OBSOLETE     } */
+/* OBSOLETE   return returnval; */
+/* OBSOLETE } */
+/* OBSOLETE #endif */
+/* OBSOLETE  */
+/* OBSOLETE /* Here from info files command to print an address map.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE print_maps () */
+/* OBSOLETE { */
+/* OBSOLETE   struct pmap ptrs[200]; */
+/* OBSOLETE   int n; */
+/* OBSOLETE  */
+/* OBSOLETE   /* ID strings for core and executable file sections *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   static char *idstr[] = */
+/* OBSOLETE     { */
+/* OBSOLETE       "0", "text", "data", "tdata", "bss", "tbss",  */
+/* OBSOLETE       "common", "ttext", "ctx", "tctx", "10", "11", "12", */
+/* OBSOLETE     }; */
+/* OBSOLETE  */
+/* OBSOLETE   for (n = 0; n < n_core; n++) */
+/* OBSOLETE     { */
+/* OBSOLETE       core_map[n].which = 0; */
+/* OBSOLETE       ptrs[n] = core_map[n]; */
+/* OBSOLETE     } */
+/* OBSOLETE   for (n = 0; n < n_exec; n++) */
+/* OBSOLETE     { */
+/* OBSOLETE       exec_map[n].which = 1; */
+/* OBSOLETE       ptrs[n_core+n] = exec_map[n]; */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   qsort (ptrs, n_core + n_exec, sizeof *ptrs, ptr_cmp); */
+/* OBSOLETE  */
+/* OBSOLETE   for (n = 0; n < n_core + n_exec; n++) */
+/* OBSOLETE     { */
+/* OBSOLETE       struct pmap *p = &ptrs[n]; */
+/* OBSOLETE       if (n > 0) */
+/* OBSOLETE    { */
+/* OBSOLETE      if (p->mem_addr < ptrs[n-1].mem_end) */
+/* OBSOLETE        p->mem_addr = ptrs[n-1].mem_end; */
+/* OBSOLETE      if (p->mem_addr >= p->mem_end) */
+/* OBSOLETE        continue; */
+/* OBSOLETE    } */
+/* OBSOLETE       printf_filtered ("%08x .. %08x  %-6s  %s\n", */
+/* OBSOLETE                   p->mem_addr, p->mem_end, idstr[p->type], */
+/* OBSOLETE                   p->which ? execfile : corefile); */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Compare routine to put file sections in order. */
+/* OBSOLETE    Sort into increasing order on address, and put core file sections */
+/* OBSOLETE    before exec file sections if both files contain the same addresses.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static ptr_cmp (a, b) */
+/* OBSOLETE      struct pmap *a, *b; */
+/* OBSOLETE { */
+/* OBSOLETE   if (a->mem_addr != b->mem_addr) return a->mem_addr - b->mem_addr; */
+/* OBSOLETE   return a->which - b->which; */
+/* OBSOLETE } */
+/* OBSOLETE \f */
+/* OBSOLETE /* Trapped internal variables are used to handle special registers. */
+/* OBSOLETE    A trapped i.v. calls a hook here every time it is dereferenced, */
+/* OBSOLETE    to provide a new value for the variable, and it calls a hook here */
+/* OBSOLETE    when a new value is assigned, to do something with the value. */
+/* OBSOLETE     */
+/* OBSOLETE    The vector registers are $vl, $vs, $vm, $vN, $VN (N in 0..7). */
+/* OBSOLETE    The communication registers are $cN, $CN (N in 0..63). */
+/* OBSOLETE    They not handled as regular registers because it's expensive to */
+/* OBSOLETE    read them, and their size varies, and they have too many names.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE /* Return 1 if NAME is a trapped internal variable, else 0. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE is_trapped_internalvar (name) */
+/* OBSOLETE      char *name; */
+/* OBSOLETE { */
+/* OBSOLETE     if ((name[0] == 'c' || name[0] == 'C') */
+/* OBSOLETE    && name[1] >= '0' && name[1] <= '9' */
+/* OBSOLETE    && (name[2] == '\0' */
+/* OBSOLETE        || (name[2] >= '0' && name[2] <= '9' */
+/* OBSOLETE            && name[3] == '\0' && name[1] != '0')) */
+/* OBSOLETE    && atoi (&name[1]) < 64) return 1; */
+/* OBSOLETE  */
+/* OBSOLETE   if ((name[0] == 'v' || name[0] == 'V') */
+/* OBSOLETE       && (((name[1] & -8) == '0' && name[2] == '\0') */
+/* OBSOLETE      || STREQ (name, "vl") */
+/* OBSOLETE      || STREQ (name, "vs")  */
+/* OBSOLETE      || STREQ (name, "vm"))) */
+/* OBSOLETE     return 1; */
+/* OBSOLETE   else return 0; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Return the value of trapped internal variable VAR *x/ */
+/* OBSOLETE  */
+/* OBSOLETE value */
+/* OBSOLETE value_of_trapped_internalvar (var) */
+/* OBSOLETE      struct internalvar *var; */
+/* OBSOLETE { */
+/* OBSOLETE   char *name = var->name; */
+/* OBSOLETE   value val; */
+/* OBSOLETE   struct type *type; */
+/* OBSOLETE   struct type *range_type; */
+/* OBSOLETE   long len = *read_vector_register (VL_REGNUM); */
+/* OBSOLETE   if (len <= 0 || len > 128) len = 128; */
+/* OBSOLETE  */
+/* OBSOLETE   if (STREQ (name, "vl")) */
+/* OBSOLETE     { */
+/* OBSOLETE       val = value_from_longest (builtin_type_int, */
+/* OBSOLETE                         (LONGEST) *read_vector_register_1 (VL_REGNUM)); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (STREQ (name, "vs")) */
+/* OBSOLETE     { */
+/* OBSOLETE       val = value_from_longest (builtin_type_int, */
+/* OBSOLETE                         (LONGEST) *read_vector_register_1 (VS_REGNUM)); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (STREQ (name, "vm")) */
+/* OBSOLETE     { */
+/* OBSOLETE       long vm[4]; */
+/* OBSOLETE       long i, *p; */
+/* OBSOLETE       memcpy (vm, read_vector_register_1 (VM_REGNUM), sizeof vm); */
+/* OBSOLETE       range_type = */
+/* OBSOLETE    create_range_type ((struct type *) NULL, builtin_type_int, 0, len - 1); */
+/* OBSOLETE       type = */
+/* OBSOLETE    create_array_type ((struct type *) NULL, builtin_type_int, range_type); */
+/* OBSOLETE       val = allocate_value (type); */
+/* OBSOLETE       p = (long *) VALUE_CONTENTS (val); */
+/* OBSOLETE       for (i = 0; i < len; i++)  */
+/* OBSOLETE    *p++ = !! (vm[3 - (i >> 5)] & (1 << (i & 037))); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (name[0] == 'V') */
+/* OBSOLETE     { */
+/* OBSOLETE       range_type = */
+/* OBSOLETE    create_range_type ((struct type *) NULL, builtin_type_int 0, len - 1); */
+/* OBSOLETE       type = */
+/* OBSOLETE    create_array_type ((struct type *) NULL, builtin_type_long_long, */
+/* OBSOLETE                       range_type); */
+/* OBSOLETE       val = allocate_value (type); */
+/* OBSOLETE       memcpy (VALUE_CONTENTS (val), */
+/* OBSOLETE         read_vector_register_1 (name[1] - '0'), */
+/* OBSOLETE         TYPE_LENGTH (type)); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (name[0] == 'v') */
+/* OBSOLETE     { */
+/* OBSOLETE       long *p1, *p2; */
+/* OBSOLETE       range_type = */
+/* OBSOLETE    create_range_type ((struct type *) NULL, builtin_type_int 0, len - 1); */
+/* OBSOLETE       type = */
+/* OBSOLETE    create_array_type ((struct type *) NULL, builtin_type_long, */
+/* OBSOLETE                       range_type); */
+/* OBSOLETE       val = allocate_value (type); */
+/* OBSOLETE       p1 = read_vector_register_1 (name[1] - '0'); */
+/* OBSOLETE       p2 = (long *) VALUE_CONTENTS (val); */
+/* OBSOLETE       while (--len >= 0) {p1++; *p2++ = *p1++;} */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   else if (name[0] == 'c') */
+/* OBSOLETE     val = value_from_longest (builtin_type_int, */
+/* OBSOLETE                       read_comm_register (atoi (&name[1]))); */
+/* OBSOLETE   else if (name[0] == 'C') */
+/* OBSOLETE     val = value_from_longest (builtin_type_long_long, */
+/* OBSOLETE                       read_comm_register (atoi (&name[1]))); */
+/* OBSOLETE  */
+/* OBSOLETE   VALUE_LVAL (val) = lval_internalvar; */
+/* OBSOLETE   VALUE_INTERNALVAR (val) = var; */
+/* OBSOLETE   return val; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Handle a new value assigned to a trapped internal variable *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE set_trapped_internalvar (var, val, bitpos, bitsize, offset) */
+/* OBSOLETE      struct internalvar *var; */
+/* OBSOLETE      value val; */
+/* OBSOLETE      int bitpos, bitsize, offset; */
+/* OBSOLETE {  */
+/* OBSOLETE   char *name = var->name; */
+/* OBSOLETE   long long newval = value_as_long (val); */
+/* OBSOLETE  */
+/* OBSOLETE   if (STREQ (name, "vl"))  */
+/* OBSOLETE     write_vector_register (VL_REGNUM, 0, newval); */
+/* OBSOLETE   else if (STREQ (name, "vs")) */
+/* OBSOLETE     write_vector_register (VS_REGNUM, 0, newval); */
+/* OBSOLETE   else if (name[0] == 'c' || name[0] == 'C') */
+/* OBSOLETE     write_comm_register (atoi (&name[1]), newval); */
+/* OBSOLETE   else if (STREQ (name, "vm")) */
+/* OBSOLETE     error ("can't assign to $vm"); */
+/* OBSOLETE   else */
+/* OBSOLETE     { */
+/* OBSOLETE       offset /= bitsize / 8; */
+/* OBSOLETE       write_vector_register (name[1] - '0', offset, newval); */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Print an integer value when no format was specified.  gdb normally */
+/* OBSOLETE    prints these values in decimal, but the the leading 0x80000000 of */
+/* OBSOLETE    pointers produces intolerable 10-digit negative numbers. */
+/* OBSOLETE    If it looks like an address, print it in hex instead.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE decout (stream, type, val) */
+/* OBSOLETE      GDB_FILE *stream; */
+/* OBSOLETE      struct type *type; */
+/* OBSOLETE      LONGEST val; */
+/* OBSOLETE { */
+/* OBSOLETE   long lv = val; */
+/* OBSOLETE  */
+/* OBSOLETE   switch (output_radix) */
+/* OBSOLETE     { */
+/* OBSOLETE     case 0: */
+/* OBSOLETE       if ((lv == val || (unsigned) lv == val) */
+/* OBSOLETE      && ((lv & 0xf0000000) == 0x80000000 */
+/* OBSOLETE          || ((lv & 0xf0000000) == 0xf0000000 && lv < STACK_END_ADDR))) */
+/* OBSOLETE    { */
+/* OBSOLETE      print_longest (stream, "x", 0, val); */
+/* OBSOLETE      return; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE     case 10: */
+/* OBSOLETE       print_longest (stream, TYPE_UNSIGNED (type) ? "u" : "d", 0, val); */
+/* OBSOLETE       return; */
+/* OBSOLETE  */
+/* OBSOLETE     case 8: */
+/* OBSOLETE       print_longest (stream, "o", 0, val); */
+/* OBSOLETE       return; */
+/* OBSOLETE  */
+/* OBSOLETE     case 16: */
+/* OBSOLETE       print_longest (stream, "x", 0, val); */
+/* OBSOLETE       return; */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Change the default output radix to 10 or 16, or set it to 0 (heuristic). */
+/* OBSOLETE    This command is mostly obsolete now that the print command allows */
+/* OBSOLETE    formats to apply to aggregates, but is still handy occasionally.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE set_base_command (arg) */
+/* OBSOLETE     char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE   int new_radix; */
+/* OBSOLETE  */
+/* OBSOLETE   if (!arg) */
+/* OBSOLETE     output_radix = 0; */
+/* OBSOLETE   else */
+/* OBSOLETE     { */
+/* OBSOLETE       new_radix = atoi (arg); */
+/* OBSOLETE       if (new_radix != 10 && new_radix != 16 && new_radix != 8)  */
+/* OBSOLETE    error ("base must be 8, 10 or 16, or null"); */
+/* OBSOLETE       else output_radix = new_radix; */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Turn pipelining on or off in the inferior. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE set_pipelining_command (arg) */
+/* OBSOLETE     char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE   if (!arg) */
+/* OBSOLETE     { */
+/* OBSOLETE       sequential = !sequential; */
+/* OBSOLETE       printf_filtered ("%s\n", sequential ? "off" : "on"); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (STREQ (arg, "on")) */
+/* OBSOLETE     sequential = 0; */
+/* OBSOLETE   else if (STREQ (arg, "off")) */
+/* OBSOLETE     sequential = 1; */
+/* OBSOLETE   else error ("valid args are `on', to allow instructions to overlap, or\n\ */
+/* OBSOLETE `off', to prevent it and thereby pinpoint exceptions."); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Enable, disable, or force parallel execution in the inferior.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE set_parallel_command (arg) */
+/* OBSOLETE      char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE   struct rlimit rl; */
+/* OBSOLETE   int prevparallel = parallel; */
+/* OBSOLETE  */
+/* OBSOLETE   if (!strncmp (arg, "fixed", strlen (arg))) */
+/* OBSOLETE     parallel = 2;   */
+/* OBSOLETE   else if (STREQ (arg, "on")) */
+/* OBSOLETE     parallel = 1; */
+/* OBSOLETE   else if (STREQ (arg, "off")) */
+/* OBSOLETE     parallel = 0; */
+/* OBSOLETE   else error ("valid args are `on', to allow multiple threads, or\n\ */
+/* OBSOLETE `fixed', to force multiple threads, or\n\ */
+/* OBSOLETE `off', to run with one thread only."); */
+/* OBSOLETE  */
+/* OBSOLETE   if ((prevparallel == 0) != (parallel == 0) && inferior_pid) */
+/* OBSOLETE     printf_filtered ("will take effect at next run.\n"); */
+/* OBSOLETE  */
+/* OBSOLETE   getrlimit (RLIMIT_CONCUR, &rl); */
+/* OBSOLETE   rl.rlim_cur = parallel ? rl.rlim_max : 1; */
+/* OBSOLETE   setrlimit (RLIMIT_CONCUR, &rl); */
+/* OBSOLETE  */
+/* OBSOLETE   if (inferior_pid) */
+/* OBSOLETE     set_fixed_scheduling (inferior_pid, parallel == 2); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Add a new name for an existing command.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void  */
+/* OBSOLETE alias_command (arg) */
+/* OBSOLETE     char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE     static char *aliaserr = "usage is `alias NEW OLD', no args allowed"; */
+/* OBSOLETE     char *newname = arg; */
+/* OBSOLETE     struct cmd_list_element *new, *old; */
+/* OBSOLETE  */
+/* OBSOLETE     if (!arg) */
+/* OBSOLETE       error_no_arg ("newname oldname"); */
+/* OBSOLETE     */
+/* OBSOLETE     new = lookup_cmd (&arg, cmdlist, "", -1); */
+/* OBSOLETE     if (new && !strncmp (newname, new->name, strlen (new->name))) */
+/* OBSOLETE       { */
+/* OBSOLETE    newname = new->name; */
+/* OBSOLETE    if (!(*arg == '-'  */
+/* OBSOLETE          || (*arg >= 'a' && *arg <= 'z') */
+/* OBSOLETE          || (*arg >= 'A' && *arg <= 'Z') */
+/* OBSOLETE          || (*arg >= '0' && *arg <= '9'))) */
+/* OBSOLETE      error (aliaserr); */
+/* OBSOLETE       } */
+/* OBSOLETE     else */
+/* OBSOLETE       { */
+/* OBSOLETE    arg = newname; */
+/* OBSOLETE    while (*arg == '-'  */
+/* OBSOLETE           || (*arg >= 'a' && *arg <= 'z') */
+/* OBSOLETE           || (*arg >= 'A' && *arg <= 'Z') */
+/* OBSOLETE           || (*arg >= '0' && *arg <= '9')) */
+/* OBSOLETE      arg++; */
+/* OBSOLETE    if (*arg != ' ' && *arg != '\t') */
+/* OBSOLETE      error (aliaserr); */
+/* OBSOLETE    *arg = '\0'; */
+/* OBSOLETE    arg++; */
+/* OBSOLETE       } */
+/* OBSOLETE  */
+/* OBSOLETE     old = lookup_cmd (&arg, cmdlist, "", 0); */
+/* OBSOLETE  */
+/* OBSOLETE     if (*arg != '\0') */
+/* OBSOLETE       error (aliaserr); */
+/* OBSOLETE  */
+/* OBSOLETE     if (new && !strncmp (newname, new->name, strlen (new->name))) */
+/* OBSOLETE       { */
+/* OBSOLETE    char *tem; */
+/* OBSOLETE    if (new->class == (int) class_user || new->class == (int) class_alias) */
+/* OBSOLETE      tem = "Redefine command \"%s\"? "; */
+/* OBSOLETE    else */
+/* OBSOLETE      tem = "Really redefine built-in command \"%s\"? "; */
+/* OBSOLETE    if (!query (tem, new->name)) */
+/* OBSOLETE      error ("Command \"%s\" not redefined.", new->name); */
+/* OBSOLETE       } */
+/* OBSOLETE  */
+/* OBSOLETE     add_com (newname, class_alias, old->function, old->doc); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE /* Print the current thread number, and any threads with signals in the */
+/* OBSOLETE    queue.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE thread_info () */
+/* OBSOLETE { */
+/* OBSOLETE   struct threadpid *p; */
+/* OBSOLETE  */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       ps.pi_buffer = (char *) &comm_registers; */
+/* OBSOLETE       ps.pi_nbytes = sizeof comm_registers; */
+/* OBSOLETE       ps.pi_offset = 0; */
+/* OBSOLETE       ps.pi_thread = inferior_thread; */
+/* OBSOLETE       ioctl (inferior_fd, PIXRDCREGS, &ps); */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   /* FIXME: stop_signal is from target.h but stop_sigcode is a */
+/* OBSOLETE      convex-specific thing.  *x/ */
+/* OBSOLETE   printf_filtered ("Current thread %d stopped with signal %d.%d (%s).\n", */
+/* OBSOLETE               inferior_thread, stop_signal, stop_sigcode, */
+/* OBSOLETE               subsig_name (stop_signal, stop_sigcode)); */
+/* OBSOLETE    */
+/* OBSOLETE   for (p = signal_stack; p->pid; p--) */
+/* OBSOLETE     printf_filtered ("Thread %d stopped with signal %d.%d (%s).\n", */
+/* OBSOLETE                 p->thread, p->signo, p->subsig, */
+/* OBSOLETE                 subsig_name (p->signo, p->subsig)); */
+/* OBSOLETE             */
+/* OBSOLETE   if (iscrlbit (comm_registers.crctl.lbits.cc, 64+13)) */
+/* OBSOLETE     printf_filtered ("New thread start pc %#x\n", */
+/* OBSOLETE                 (long) (comm_registers.crreg.pcpsw >> 32)); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Return string describing a signal.subcode number *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static char * */
+/* OBSOLETE subsig_name (signo, subcode) */
+/* OBSOLETE      int signo, subcode; */
+/* OBSOLETE { */
+/* OBSOLETE   static char *subsig4[] = { */
+/* OBSOLETE     "error exit", "privileged instruction", "unknown", */
+/* OBSOLETE     "unknown", "undefined opcode", */
+/* OBSOLETE     0}; */
+/* OBSOLETE   static char *subsig5[] = {0, */
+/* OBSOLETE     "breakpoint", "single step", "fork trap", "exec trap", "pfork trap", */
+/* OBSOLETE     "join trap", "idle trap", "last thread", "wfork trap", */
+/* OBSOLETE     "process breakpoint", "trap instruction", */
+/* OBSOLETE     0}; */
+/* OBSOLETE   static char *subsig8[] = {0, */
+/* OBSOLETE     "int overflow", "int divide check", "float overflow", */
+/* OBSOLETE     "float divide check", "float underflow", "reserved operand", */
+/* OBSOLETE     "sqrt error", "exp error", "ln error", "sin error", "cos error", */
+/* OBSOLETE     0}; */
+/* OBSOLETE   static char *subsig10[] = {0, */
+/* OBSOLETE     "invalid inward ring address", "invalid outward ring call", */
+/* OBSOLETE     "invalid inward ring return", "invalid syscall gate", */
+/* OBSOLETE     "invalid rtn frame length", "invalid comm reg address", */
+/* OBSOLETE     "invalid trap gate", */
+/* OBSOLETE     0}; */
+/* OBSOLETE   static char *subsig11[] = {0, */
+/* OBSOLETE     "read access denied", "write access denied", "execute access denied", */
+/* OBSOLETE     "segment descriptor fault", "page table fault", "data reference fault", */
+/* OBSOLETE     "i/o access denied", "levt pte invalid", */
+/* OBSOLETE     0}; */
+/* OBSOLETE  */
+/* OBSOLETE   static char **subsig_list[] =  */
+/* OBSOLETE     {0, 0, 0, 0, subsig4, subsig5, 0, 0, subsig8, 0, subsig10, subsig11, 0}; */
+/* OBSOLETE  */
+/* OBSOLETE   int i; */
+/* OBSOLETE   char *p; */
+/* OBSOLETE  */
+/* OBSOLETE   if ((p = strsignal (signo)) == NULL) */
+/* OBSOLETE     p = "unknown"; */
+/* OBSOLETE   if (signo >= (sizeof subsig_list / sizeof *subsig_list) */
+/* OBSOLETE       || !subsig_list[signo]) */
+/* OBSOLETE     return p; */
+/* OBSOLETE   for (i = 1; subsig_list[signo][i]; i++) */
+/* OBSOLETE     if (i == subcode) */
+/* OBSOLETE       return subsig_list[signo][subcode]; */
+/* OBSOLETE   return p; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE /* Print a compact display of thread status, essentially x/i $pc */
+/* OBSOLETE    for all active threads.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE threadstat () */
+/* OBSOLETE { */
+/* OBSOLETE   int t; */
+/* OBSOLETE  */
+/* OBSOLETE   for (t = 0; t < n_threads; t++) */
+/* OBSOLETE     if (thread_state[t] == PI_TALIVE) */
+/* OBSOLETE       { */
+/* OBSOLETE    printf_filtered ("%d%c %08x%c %d.%d ", t, */
+/* OBSOLETE                     (t == inferior_thread ? '*' : ' '), thread_pc[t], */
+/* OBSOLETE                     (thread_is_in_kernel[t] ? '#' : ' '), */
+/* OBSOLETE                     thread_signal[t], thread_sigcode[t]); */
+/* OBSOLETE    print_insn (thread_pc[t], stdout); */
+/* OBSOLETE    printf_filtered ("\n"); */
+/* OBSOLETE       } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Change the current thread to ARG.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE set_thread_command (arg) */
+/* OBSOLETE      char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE     int thread; */
+/* OBSOLETE  */
+/* OBSOLETE     if (!arg) */
+/* OBSOLETE       { */
+/* OBSOLETE    threadstat (); */
+/* OBSOLETE    return; */
+/* OBSOLETE       } */
+/* OBSOLETE  */
+/* OBSOLETE     thread = parse_and_eval_address (arg); */
+/* OBSOLETE  */
+/* OBSOLETE     if (thread < 0 || thread > n_threads || thread_state[thread] != PI_TALIVE) */
+/* OBSOLETE       error ("no such thread."); */
+/* OBSOLETE  */
+/* OBSOLETE     select_thread (thread); */
+/* OBSOLETE  */
+/* OBSOLETE     stop_pc = read_pc (); */
+/* OBSOLETE     flush_cached_frames (); */
+/* OBSOLETE     select_frame (get_current_frame (), 0); */
+/* OBSOLETE     print_stack_frame (selected_frame, selected_frame_level, -1); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Here on CONT command; gdb's dispatch address is changed to come here. */
+/* OBSOLETE    Set global variable ALL_CONTINUE to tell resume() that it should */
+/* OBSOLETE    start up all threads, and that a thread switch will not blow gdb's */
+/* OBSOLETE    mind.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE convex_cont_command (proc_count_exp, from_tty) */
+/* OBSOLETE      char *proc_count_exp; */
+/* OBSOLETE      int from_tty; */
+/* OBSOLETE { */
+/* OBSOLETE   all_continue = 1; */
+/* OBSOLETE   cont_command (proc_count_exp, from_tty); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Here on 1CONT command.  Resume only the current thread.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE one_cont_command (proc_count_exp, from_tty) */
+/* OBSOLETE      char *proc_count_exp; */
+/* OBSOLETE      int from_tty; */
+/* OBSOLETE { */
+/* OBSOLETE   cont_command (proc_count_exp, from_tty); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Print the contents and lock bits of all communication registers, */
+/* OBSOLETE    or just register ARG if ARG is a communication register, */
+/* OBSOLETE    or the 3-word resource structure in memory at address ARG.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE comm_registers_info (arg) */
+/* OBSOLETE     char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE   int i, regnum; */
+/* OBSOLETE  */
+/* OBSOLETE   if (arg) */
+/* OBSOLETE     { */
+/* OBSOLETE              if (sscanf (arg, "$c%d", &regnum) == 1) { */
+/* OBSOLETE    ; */
+/* OBSOLETE       } else if (sscanf (arg, "$C%d", &regnum) == 1) { */
+/* OBSOLETE    ; */
+/* OBSOLETE       } else { */
+/* OBSOLETE    regnum = parse_and_eval_address (arg); */
+/* OBSOLETE    if (regnum > 0) */
+/* OBSOLETE      regnum &= ~0x8000; */
+/* OBSOLETE       } */
+/* OBSOLETE  */
+/* OBSOLETE       if (regnum >= 64) */
+/* OBSOLETE    error ("%s: invalid register name.", arg); */
+/* OBSOLETE  */
+/* OBSOLETE       /* if we got a (user) address, examine the resource struct there *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       if (regnum < 0) */
+/* OBSOLETE    { */
+/* OBSOLETE      static int buf[3]; */
+/* OBSOLETE      read_memory (regnum, buf, sizeof buf); */
+/* OBSOLETE      printf_filtered ("%08x  %08x%08x%s\n", regnum, buf[1], buf[2], */
+/* OBSOLETE                       buf[0] & 0xff ? " locked" : ""); */
+/* OBSOLETE      return; */
+/* OBSOLETE    } */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   ps.pi_buffer = (char *) &comm_registers; */
+/* OBSOLETE   ps.pi_nbytes = sizeof comm_registers; */
+/* OBSOLETE   ps.pi_offset = 0; */
+/* OBSOLETE   ps.pi_thread = inferior_thread; */
+/* OBSOLETE   ioctl (inferior_fd, PIXRDCREGS, &ps); */
+/* OBSOLETE  */
+/* OBSOLETE   for (i = 0; i < 64; i++) */
+/* OBSOLETE     if (!arg || i == regnum) */
+/* OBSOLETE       printf_filtered ("%2d 0x8%03x %016llx%s\n", i, i, */
+/* OBSOLETE                   comm_registers.crreg.r4[i], */
+/* OBSOLETE                   (iscrlbit (comm_registers.crctl.lbits.cc, i) */
+/* OBSOLETE                    ? " locked" : "")); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Print the psw *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void  */
+/* OBSOLETE psw_info (arg) */
+/* OBSOLETE     char *arg; */
+/* OBSOLETE { */
+/* OBSOLETE   struct pswbit */
+/* OBSOLETE     { */
+/* OBSOLETE       int bit; */
+/* OBSOLETE       int pos; */
+/* OBSOLETE       char *text; */
+/* OBSOLETE     }; */
+/* OBSOLETE  */
+/* OBSOLETE   static struct pswbit pswbit[] = */
+/* OBSOLETE     { */
+/* OBSOLETE       { 0x80000000, -1, "A carry" },  */
+/* OBSOLETE       { 0x40000000, -1, "A integer overflow" },  */
+/* OBSOLETE       { 0x20000000, -1, "A zero divide" },  */
+/* OBSOLETE       { 0x10000000, -1, "Integer overflow enable" },  */
+/* OBSOLETE       { 0x08000000, -1, "Trace" },  */
+/* OBSOLETE       { 0x06000000, 25, "Frame length" },  */
+/* OBSOLETE       { 0x01000000, -1, "Sequential" },  */
+/* OBSOLETE       { 0x00800000, -1, "S carry" },  */
+/* OBSOLETE       { 0x00400000, -1, "S integer overflow" },  */
+/* OBSOLETE       { 0x00200000, -1, "S zero divide" },  */
+/* OBSOLETE       { 0x00100000, -1, "Zero divide enable" },  */
+/* OBSOLETE       { 0x00080000, -1, "Floating underflow" },  */
+/* OBSOLETE       { 0x00040000, -1, "Floating overflow" },  */
+/* OBSOLETE       { 0x00020000, -1, "Floating reserved operand" },  */
+/* OBSOLETE       { 0x00010000, -1, "Floating zero divide" },  */
+/* OBSOLETE       { 0x00008000, -1, "Floating error enable" },  */
+/* OBSOLETE       { 0x00004000, -1, "Floating underflow enable" },  */
+/* OBSOLETE       { 0x00002000, -1, "IEEE" },  */
+/* OBSOLETE       { 0x00001000, -1, "Sequential stores" },  */
+/* OBSOLETE       { 0x00000800, -1, "Intrinsic error" },  */
+/* OBSOLETE       { 0x00000400, -1, "Intrinsic error enable" },  */
+/* OBSOLETE       { 0x00000200, -1, "Trace thread creates" },  */
+/* OBSOLETE       { 0x00000100, -1, "Thread init trap" },  */
+/* OBSOLETE       { 0x000000e0,  5, "Reserved" }, */
+/* OBSOLETE       { 0x0000001f,  0, "Intrinsic error code" }, */
+/* OBSOLETE       {0, 0, 0}, */
+/* OBSOLETE     }; */
+/* OBSOLETE  */
+/* OBSOLETE   long psw; */
+/* OBSOLETE   struct pswbit *p; */
+/* OBSOLETE  */
+/* OBSOLETE   if (arg) */
+/* OBSOLETE     psw = parse_and_eval_address (arg); */
+/* OBSOLETE   else */
+/* OBSOLETE     psw = read_register (PS_REGNUM); */
+/* OBSOLETE  */
+/* OBSOLETE   for (p = pswbit; p->bit; p++) */
+/* OBSOLETE     { */
+/* OBSOLETE       if (p->pos < 0) */
+/* OBSOLETE    printf_filtered ("%08x  %s  %s\n", p->bit, */
+/* OBSOLETE                     (psw & p->bit) ? "yes" : "no ", p->text); */
+/* OBSOLETE       else */
+/* OBSOLETE    printf_filtered ("%08x %3d   %s\n", p->bit, */
+/* OBSOLETE                     (psw & p->bit) >> p->pos, p->text); */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE \f */
+/* OBSOLETE #include "symtab.h" */
+/* OBSOLETE  */
+/* OBSOLETE /* reg (fmt_field, inst_field) -- */
+/* OBSOLETE    the {first,second,third} operand of instruction as fmt_field = [ijk] */
+/* OBSOLETE    gets the value of the field from the [ijk] position of the instruction *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define reg(a,b) ((char (*)[3])(op[fmt->a]))[inst.f0.b] */
+/* OBSOLETE  */
+/* OBSOLETE /* lit (fmt_field) -- field [ijk] is a literal (PSW, VL, eg) *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define lit(i) op[fmt->i] */
+/* OBSOLETE  */
+/* OBSOLETE /* aj[j] -- name for A register j *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define aj ((char (*)[3])(op[A])) */
+/* OBSOLETE \f */
+/* OBSOLETE union inst { */
+/* OBSOLETE     struct { */
+/* OBSOLETE    unsigned   : 7; */
+/* OBSOLETE    unsigned i : 3; */
+/* OBSOLETE    unsigned j : 3; */
+/* OBSOLETE    unsigned k : 3; */
+/* OBSOLETE    unsigned   : 16; */
+/* OBSOLETE    unsigned   : 32; */
+/* OBSOLETE     } f0; */
+/* OBSOLETE     struct { */
+/* OBSOLETE    unsigned   : 8; */
+/* OBSOLETE    unsigned indir : 1; */
+/* OBSOLETE    unsigned len : 1; */
+/* OBSOLETE    unsigned j : 3; */
+/* OBSOLETE    unsigned k : 3; */
+/* OBSOLETE    unsigned   : 16; */
+/* OBSOLETE    unsigned   : 32; */
+/* OBSOLETE     } f1; */
+/* OBSOLETE     unsigned char byte[8]; */
+/* OBSOLETE     unsigned short half[4]; */
+/* OBSOLETE     char signed_byte[8]; */
+/* OBSOLETE     short signed_half[4]; */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE struct opform { */
+/* OBSOLETE     int mask;                      /* opcode mask *x/ */
+/* OBSOLETE     int shift;                     /* opcode align *x/ */
+/* OBSOLETE     struct formstr *formstr[3];    /* ST, E0, E1 *x/ */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE struct formstr { */
+/* OBSOLETE     unsigned lop:8, rop:5; /* opcode *x/ */
+/* OBSOLETE     unsigned fmt:5;                /* inst format *x/ */
+/* OBSOLETE     unsigned i:5, j:5, k:2;        /* operand formats *x/ */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE #include "opcode/convex.h" */
+/* OBSOLETE  */
+/* OBSOLETE CONST unsigned char formdecode [] = { */
+/* OBSOLETE     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, */
+/* OBSOLETE     9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, */
+/* OBSOLETE     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, */
+/* OBSOLETE     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, */
+/* OBSOLETE     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, */
+/* OBSOLETE     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, */
+/* OBSOLETE     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, */
+/* OBSOLETE     4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,8, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE CONST struct opform opdecode[] = { */
+/* OBSOLETE     0x7e00, 9, format0, e0_format0, e1_format0, */
+/* OBSOLETE     0x3f00, 8, format1, e0_format1, e1_format1, */
+/* OBSOLETE     0x1fc0, 6, format2, e0_format2, e1_format2, */
+/* OBSOLETE     0x0fc0, 6, format3, e0_format3, e1_format3, */
+/* OBSOLETE     0x0700, 8, format4, e0_format4, e1_format4, */
+/* OBSOLETE     0x03c0, 6, format5, e0_format5, e1_format5, */
+/* OBSOLETE     0x01f8, 3, format6, e0_format6, e1_format6, */
+/* OBSOLETE     0x00f8, 3, format7, e0_format7, e1_format7, */
+/* OBSOLETE     0x0000, 0, formatx, formatx, formatx, */
+/* OBSOLETE     0x0f80, 7, formatx, formatx, formatx, */
+/* OBSOLETE     0x0f80, 7, formatx, formatx, formatx, */
+/* OBSOLETE }; */
+/* OBSOLETE \f */
+/* OBSOLETE /* Print the instruction at address MEMADDR in debugged memory, */
+/* OBSOLETE    on STREAM.  Returns length of the instruction, in bytes.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE convex_print_insn (memaddr, stream) */
+/* OBSOLETE      CORE_ADDR memaddr; */
+/* OBSOLETE      FILE *stream; */
+/* OBSOLETE { */
+/* OBSOLETE   union inst inst; */
+/* OBSOLETE   struct formstr *fmt; */
+/* OBSOLETE   register int format, op1, pfx; */
+/* OBSOLETE   int l; */
+/* OBSOLETE  */
+/* OBSOLETE   read_memory (memaddr, &inst, sizeof inst); */
+/* OBSOLETE  */
+/* OBSOLETE   /* Remove and note prefix, if present *x/ */
+/* OBSOLETE      */
+/* OBSOLETE   pfx = inst.half[0]; */
+/* OBSOLETE   if ((pfx & 0xfff0) == 0x7ef0) */
+/* OBSOLETE     { */
+/* OBSOLETE       pfx = ((pfx >> 3) & 1) + 1; */
+/* OBSOLETE       *(long long *) &inst = *(long long *) &inst.half[1]; */
+/* OBSOLETE     } */
+/* OBSOLETE   else pfx = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Split opcode into format.op1 and look up in appropriate table *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   format = formdecode[inst.byte[0]]; */
+/* OBSOLETE   op1 = (inst.half[0] & opdecode[format].mask) >> opdecode[format].shift; */
+/* OBSOLETE   if (format == 9) */
+/* OBSOLETE     { */
+/* OBSOLETE       if (pfx) */
+/* OBSOLETE    fmt = formatx; */
+/* OBSOLETE       else if (inst.f1.j == 0) */
+/* OBSOLETE    fmt = &format1a[op1]; */
+/* OBSOLETE       else if (inst.f1.j == 1) */
+/* OBSOLETE    fmt = &format1b[op1]; */
+/* OBSOLETE       else */
+/* OBSOLETE    fmt = formatx; */
+/* OBSOLETE     } */
+/* OBSOLETE   else */
+/* OBSOLETE     fmt = &opdecode[format].formstr[pfx][op1]; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Print it *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (fmt->fmt == xxx) */
+/* OBSOLETE     { */
+/* OBSOLETE       /* noninstruction *x/ */
+/* OBSOLETE       fprintf (stream, "0x%04x", pfx ? pfx : inst.half[0]); */
+/* OBSOLETE       return 2; */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   if (pfx) */
+/* OBSOLETE     pfx = 2; */
+/* OBSOLETE  */
+/* OBSOLETE   fprintf (stream, "%s%s%s", lop[fmt->lop], rop[fmt->rop], */
+/* OBSOLETE       &"        "[strlen(lop[fmt->lop]) + strlen(rop[fmt->rop])]); */
+/* OBSOLETE  */
+/* OBSOLETE   switch (fmt->fmt) */
+/* OBSOLETE     { */
+/* OBSOLETE     case rrr:                      /* three register *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s,%s", reg(i,i), reg(j,j), reg(k,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case rr:                       /* two register *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s", reg(i,j), reg(j,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case rxr:                      /* two register, reversed i and j fields *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s", reg(i,k), reg(j,j)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case r:                        /* one register *x/ */
+/* OBSOLETE       fprintf (stream, "%s", reg(i,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case nops:                     /* no operands *x/ */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case nr:                       /* short immediate, one register *x/ */
+/* OBSOLETE       fprintf (stream, "#%d,%s", inst.f0.j, reg(i,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case pcrel:                    /* pc relative *x/ */
+/* OBSOLETE       print_address (memaddr + 2 * inst.signed_byte[1], stream); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case lr:                       /* literal, one register *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s", lit(i), reg(j,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case rxl:                      /* one register, literal *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s", reg(i,k), lit(j)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case rlr:                      /* register, literal, register *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s,%s", reg(i,j), lit(j), reg(k,k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case rrl:                      /* register, register, literal *x/ */
+/* OBSOLETE       fprintf (stream, "%s,%s,%s", reg(i,j), reg(j,k), lit(k)); */
+/* OBSOLETE       return pfx + 2; */
+/* OBSOLETE  */
+/* OBSOLETE     case iml:                      /* immediate, literal *x/ */
+/* OBSOLETE       if (inst.f1.len) */
+/* OBSOLETE    { */
+/* OBSOLETE      fprintf (stream, "#%#x,%s", */
+/* OBSOLETE               (inst.signed_half[1] << 16) + inst.half[2], lit(i)); */
+/* OBSOLETE      return pfx + 6; */
+/* OBSOLETE    } */
+/* OBSOLETE       else */
+/* OBSOLETE    { */
+/* OBSOLETE      fprintf (stream, "#%d,%s", inst.signed_half[1], lit(i)); */
+/* OBSOLETE      return pfx + 4; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE     case imr:                      /* immediate, register *x/ */
+/* OBSOLETE       if (inst.f1.len) */
+/* OBSOLETE    { */
+/* OBSOLETE      fprintf (stream, "#%#x,%s", */
+/* OBSOLETE               (inst.signed_half[1] << 16) + inst.half[2], reg(i,k)); */
+/* OBSOLETE      return pfx + 6; */
+/* OBSOLETE    } */
+/* OBSOLETE       else */
+/* OBSOLETE    { */
+/* OBSOLETE      fprintf (stream, "#%d,%s", inst.signed_half[1], reg(i,k)); */
+/* OBSOLETE      return pfx + 4; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE     case a1r:                      /* memory, register *x/ */
+/* OBSOLETE       l = print_effa (inst, stream); */
+/* OBSOLETE       fprintf (stream, ",%s", reg(i,k)); */
+/* OBSOLETE       return pfx + l; */
+/* OBSOLETE  */
+/* OBSOLETE     case a1l:                      /* memory, literal  *x/ */
+/* OBSOLETE       l = print_effa (inst, stream); */
+/* OBSOLETE       fprintf (stream, ",%s", lit(i)); */
+/* OBSOLETE       return pfx + l; */
+/* OBSOLETE  */
+/* OBSOLETE     case a2r:                      /* register, memory *x/ */
+/* OBSOLETE       fprintf (stream, "%s,", reg(i,k)); */
+/* OBSOLETE       return pfx + print_effa (inst, stream); */
+/* OBSOLETE  */
+/* OBSOLETE     case a2l:                      /* literal, memory *x/ */
+/* OBSOLETE       fprintf (stream, "%s,", lit(i)); */
+/* OBSOLETE       return pfx + print_effa (inst, stream); */
+/* OBSOLETE  */
+/* OBSOLETE     case a3:                       /* memory *x/ */
+/* OBSOLETE       return pfx + print_effa (inst, stream); */
+/* OBSOLETE  */
+/* OBSOLETE     case a4:                       /* system call *x/ */
+/* OBSOLETE       l = 29; goto a4a5; */
+/* OBSOLETE     case a5:                       /* trap *x/ */
+/* OBSOLETE       l = 27; */
+/* OBSOLETE     a4a5: */
+/* OBSOLETE       if (inst.f1.len) */
+/* OBSOLETE    { */
+/* OBSOLETE      unsigned int m = (inst.signed_half[1] << 16) + inst.half[2]; */
+/* OBSOLETE      fprintf (stream, "#%d,#%d", m >> l, m & (-1 >> (32-l))); */
+/* OBSOLETE      return pfx + 6; */
+/* OBSOLETE    } */
+/* OBSOLETE       else */
+/* OBSOLETE    { */
+/* OBSOLETE      unsigned int m = inst.signed_half[1]; */
+/* OBSOLETE      fprintf (stream, "#%d,#%d", m >> l, m & (-1 >> (32-l))); */
+/* OBSOLETE      return pfx + 4; */
+/* OBSOLETE    } */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE /* print effective address @nnn(aj), return instruction length *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int print_effa (inst, stream) */
+/* OBSOLETE      union inst inst; */
+/* OBSOLETE      FILE *stream; */
+/* OBSOLETE { */
+/* OBSOLETE   int n, l; */
+/* OBSOLETE  */
+/* OBSOLETE   if (inst.f1.len) */
+/* OBSOLETE     { */
+/* OBSOLETE       n = (inst.signed_half[1] << 16) + inst.half[2]; */
+/* OBSOLETE       l = 6; */
+/* OBSOLETE     } */
+/* OBSOLETE   else */
+/* OBSOLETE     { */
+/* OBSOLETE       n = inst.signed_half[1]; */
+/* OBSOLETE       l = 4; */
+/* OBSOLETE     } */
+/* OBSOLETE     */
+/* OBSOLETE   if (inst.f1.indir) */
+/* OBSOLETE     printf ("@"); */
+/* OBSOLETE  */
+/* OBSOLETE   if (!inst.f1.j) */
+/* OBSOLETE     { */
+/* OBSOLETE       print_address (n, stream); */
+/* OBSOLETE       return l; */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   fprintf (stream, (n & 0xf0000000) == 0x80000000 ? "%#x(%s)" : "%d(%s)", */
+/* OBSOLETE       n, aj[inst.f1.j]); */
+/* OBSOLETE  */
+/* OBSOLETE   return l; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE \f */
+/* OBSOLETE void */
+/* OBSOLETE _initialize_convex_dep () */
+/* OBSOLETE { */
+/* OBSOLETE   add_com ("alias", class_support, alias_command, */
+/* OBSOLETE       "Add a new name for an existing command."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_cmd ("base", class_vars, set_base_command, */
+/* OBSOLETE       "Change the integer output radix to 8, 10 or 16\n\ */
+/* OBSOLETE or use just `set base' with no args to return to the ad-hoc default,\n\ */
+/* OBSOLETE which is 16 for integers that look like addresses, 10 otherwise.", */
+/* OBSOLETE       &setlist); */
+/* OBSOLETE  */
+/* OBSOLETE   add_cmd ("pipeline", class_run, set_pipelining_command, */
+/* OBSOLETE       "Enable or disable overlapped execution of instructions.\n\ */
+/* OBSOLETE With `set pipe off', exceptions are reported with\n\ */
+/* OBSOLETE $pc pointing at the instruction after the faulting one.\n\ */
+/* OBSOLETE The default is `set pipe on', which runs faster.", */
+/* OBSOLETE       &setlist); */
+/* OBSOLETE  */
+/* OBSOLETE   add_cmd ("parallel", class_run, set_parallel_command, */
+/* OBSOLETE       "Enable or disable multi-threaded execution of parallel code.\n\ */
+/* OBSOLETE `set parallel off' means run the program on a single CPU.\n\ */
+/* OBSOLETE `set parallel fixed' means run the program with all CPUs assigned to it.\n\ */
+/* OBSOLETE `set parallel on' means run the program on any CPUs that are available.", */
+/* OBSOLETE       &setlist); */
+/* OBSOLETE  */
+/* OBSOLETE   add_com ("1cont", class_run, one_cont_command, */
+/* OBSOLETE       "Continue the program, activating only the current thread.\n\ */
+/* OBSOLETE Args are the same as the `cont' command."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_com ("thread", class_run, set_thread_command, */
+/* OBSOLETE       "Change the current thread, the one under scrutiny and control.\n\ */
+/* OBSOLETE With no arg, show the active threads, the current one marked with *."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_info ("threads", thread_info, */
+/* OBSOLETE        "List status of active threads."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_info ("comm-registers", comm_registers_info, */
+/* OBSOLETE        "List communication registers and their contents.\n\ */
+/* OBSOLETE A communication register name as argument means describe only that register.\n\ */
+/* OBSOLETE An address as argument means describe the resource structure at that address.\n\ */
+/* OBSOLETE `Locked' means that the register has been sent to but not yet received from."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_info ("psw", psw_info,  */
+/* OBSOLETE        "Display $ps, the processor status word, bit by bit.\n\ */
+/* OBSOLETE An argument means display that value's interpretation as a psw."); */
+/* OBSOLETE  */
+/* OBSOLETE   add_cmd ("convex", no_class, 0, "Convex-specific commands.\n\ */
+/* OBSOLETE 32-bit registers  $pc $ps $sp $ap $fp $a1-5 $s0-7 $v0-7 $vl $vs $vm $c0-63\n\ */
+/* OBSOLETE 64-bit registers  $S0-7 $V0-7 $C0-63\n\ */
+/* OBSOLETE \n\ */
+/* OBSOLETE info threads           display info on stopped threads waiting to signal\n\ */
+/* OBSOLETE thread                 display list of active threads\n\ */
+/* OBSOLETE thread N       select thread N (its registers, stack, memory, etc.)\n\ */
+/* OBSOLETE step, next, etc     step selected thread only\n\ */
+/* OBSOLETE 1cont                  continue selected thread only\n\ */
+/* OBSOLETE cont                   continue all threads\n\ */
+/* OBSOLETE info comm-registers display contents of comm register(s) or a resource struct\n\ */
+/* OBSOLETE info psw       display processor status word $ps\n\ */
+/* OBSOLETE set base N     change integer radix used by `print' without a format\n\ */
+/* OBSOLETE set pipeline off    exceptions are precise, $pc points after the faulting insn\n\ */
+/* OBSOLETE set pipeline on     normal mode, $pc is somewhere ahead of faulting insn\n\ */
+/* OBSOLETE set parallel off    program runs on a single CPU\n\ */
+/* OBSOLETE set parallel fixed  all CPUs are assigned to the program\n\ */
+/* OBSOLETE set parallel on     normal mode, parallel execution on random available CPUs\n\ */
+/* OBSOLETE ", */
+/* OBSOLETE       &cmdlist); */
+/* OBSOLETE  */
+/* OBSOLETE } */
index ad128c1..60117ce 100644 (file)
-/* Convex host-dependent code for GDB.
-   Copyright 1990, 1991, 1992 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 "defs.h"
-#include "command.h"
-#include "symtab.h"
-#include "value.h"
-#include "frame.h"
-#include "inferior.h"
-#include "wait.h"
-
-#include <signal.h>
-#include <fcntl.h>
-#include "gdbcore.h"
-
-#include <sys/param.h>
-#include <sys/dir.h>
-#include <sys/user.h>
-#include <sys/ioctl.h>
-#include <sys/pcntl.h>
-#include <sys/thread.h>
-#include <sys/proc.h>
-#include <sys/file.h>
-#include "gdb_stat.h"
-#include <sys/mman.h>
-
-#include <convex/vmparam.h>
-#include <convex/filehdr.h>
-#include <convex/opthdr.h>
-#include <convex/scnhdr.h>
-#include <convex/core.h>
-
-/* Per-thread data, read from the inferior at each stop and written
-   back at each resume.  */
-
-/* Number of active threads.
-   Tables are valid for thread numbers less than this.  */
-
-static int n_threads;
-
-#define MAXTHREADS 8
-               
-/* Thread state.  The remaining data is valid only if this is PI_TALIVE.  */
-
-static int thread_state[MAXTHREADS];
-
-/* Stop pc, signal, signal subcode */
-
-static int thread_pc[MAXTHREADS];
-static int thread_signal[MAXTHREADS];
-static int thread_sigcode[MAXTHREADS]; 
-
-/* Thread registers.
-   If thread is selected, the regs are in registers[] instead.  */
-
-static char thread_regs[MAXTHREADS][REGISTER_BYTES];
-
-/* 1 if the top frame on the thread's stack was a context frame,
-   meaning that the kernel is up to something and we should not
-   touch the thread at all except to resume it.  */
-
-static char thread_is_in_kernel[MAXTHREADS];
-
-/* The currently selected thread's number.  */
-
-static int inferior_thread;
-
-/* Inferior process's file handle and a process control block
-   to feed args to ioctl with.  */
-
-static int inferior_fd;
-static struct pcntl ps;
-
-/* SOFF file headers for exec or core file.  */
-
-static FILEHDR filehdr;
-static OPTHDR opthdr;
-static SCNHDR scnhdr;
-
-/* Address maps constructed from section headers of exec and core files.
-   Defines process address -> file address translation.  */
-
-struct pmap 
-{
-    long mem_addr;             /* process start address */
-    long mem_end;              /* process end+1 address */
-    long file_addr;            /* file start address */
-    long thread;               /* -1 shared; 0,1,... thread-local */
-    long type;                 /* S_TEXT S_DATA S_BSS S_TBSS etc */
-    long which;                        /* used to sort map for info files */
-};
-
-static int n_exec, n_core;
-static struct pmap exec_map[100];
-static struct pmap core_map[100];
-
-/* Offsets in the core file of core_context and core_tcontext blocks.  */
-
-static int context_offset;
-static int tcontext_offset[MAXTHREADS];
-
-/* Core file control blocks.  */
-
-static struct core_context_v70 c;
-static struct core_tcontext_v70 tc;
-static struct user u;
-static thread_t th;
-static proc_t pr;
-
-
-/* Vector and communication registers from core dump or from inferior.
-   These are read on demand, ie, not normally valid.  */
-
-static struct vecst vector_registers;
-static struct creg_ctx comm_registers;
-
-/* Flag, set on a vanilla CONT command and cleared when the inferior
-   is continued.  */
-
-static int all_continue;
-
-/* Flag, set when the inferior is continued by a vanilla CONT command,
-   cleared if it is continued for any other purpose.  */
-
-static int thread_switch_ok;
-
-/* Stack of signals recieved from threads but not yet delivered to gdb.  */
-
-struct threadpid 
-{
-    int pid;
-    int thread;
-    int signo;
-    int subsig;
-    int pc;
-};
-
-static struct threadpid signal_stack_bot[100];
-static struct threadpid *signal_stack = signal_stack_bot;
-
-/* How to detect empty stack -- bottom frame is all zero.  */
-
-#define signal_stack_is_empty() (signal_stack->pid == 0)
-
-/* Mode controlled by SET PIPE command, controls the psw SEQ bit
-   which forces each instruction to complete before the next one starts.  */
-
-static int sequential = 0;
-
-/* Mode controlled by the SET PARALLEL command.  Values are:
-   0  concurrency limit 1 thread, dynamic scheduling
-   1  no concurrency limit, dynamic scheduling
-   2  no concurrency limit, fixed scheduling  */
-
-static int parallel = 1;
-
-/* Mode controlled by SET BASE command, output radix for unformatted
-   integer typeout, as in argument lists, aggregates, and so on.
-   Zero means guess whether it's an address (hex) or not (decimal).  */
-
-static int output_radix = 0;
-
-/* Signal subcode at last thread stop.  */
-
-static int stop_sigcode;
-
-/* Hack, see wait() below.  */
-
-static int exec_trap_timer;
-
-#include "gdbcmd.h"
-
-static struct type *vector_type ();
-static long *read_vector_register ();
-static long *read_vector_register_1 ();
-static void write_vector_register ();
-static ULONGEST read_comm_register ();
-static void write_comm_register ();
-static void convex_cont_command ();
-static void thread_continue ();
-static void select_thread ();
-static void scan_stack ();
-static void set_fixed_scheduling ();
-static char *subsig_name ();
-static void psw_info ();
-static sig_noop ();
-static ptr_cmp ();
-
-\f
-/* Execute ptrace.  Convex V7 replaced ptrace with pattach.
-   Allow ptrace (0) as a no-op.  */
-
-int
-call_ptrace (request, pid, procaddr, buf)
-     int request, pid;
-     PTRACE_ARG3_TYPE procaddr;
-     int buf;
-{
-  if (request == 0)
-    return;
-  error ("no ptrace");
-}
-
-/* Replacement for system execle routine.
-   Convert it to an equivalent exect, which pattach insists on.  */
-
-execle (name, argv)
-     char *name, *argv;
-{
-  char ***envp = (char ***) &argv;
-  while (*envp++) ;
-
-  signal (SIGTRAP, sig_noop);
-  exect (name, &argv, *envp);
-}
-
-/* Stupid handler for stupid trace trap that otherwise causes
-   startup to stupidly hang.  */
-
-static sig_noop () 
-{}
-
-/* Read registers from inferior into registers[] array.
-   For convex, they are already there, read in when the inferior stops.  */
-
-void
-fetch_inferior_registers (regno)
-     int regno;
-{
-}
-
-/* Store our register values back into the inferior.
-   For Convex, do this only once, right before resuming inferior.  */
-
-void
-store_inferior_registers (regno)
-     int regno;
-{
-}
-
-/* Copy LEN bytes from inferior's memory starting at MEMADDR
-   to debugger memory starting at MYADDR. 
-   On failure (cannot read from inferior, usually because address is out
-   of bounds) returns the value of errno. */
-
-int
-read_inferior_memory (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-{
-  errno = 0;
-  while (len > 0)
-    {
-      /* little-known undocumented max request size */
-      int i = (len < 12288) ? len : 12288;
-
-      lseek (inferior_fd, memaddr, 0);
-      read (inferior_fd, myaddr, i);
-
-      memaddr += i;
-      myaddr += i;
-      len -= i;
-    }
-  if (errno) 
-    memset (myaddr, '\0', len);
-  return errno;
-}
-
-/* Copy LEN bytes of data from debugger memory at MYADDR
-   to inferior's memory at MEMADDR.
-   Returns errno on failure (cannot write the inferior) */
-
-int
-write_inferior_memory (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-{
-  errno = 0;
-  lseek (inferior_fd, memaddr, 0);
-  write (inferior_fd, myaddr, len);
-  return errno;
-}
-
-/* Here from create_inferior when the inferior process has been created
-   and started up.  We must do a pattach to grab it for debugging.
-
-   Also, intercept the CONT command by altering its dispatch address.  */
-/* FIXME: This used to be called from a macro CREATE_INFERIOR_HOOK.
-   But now init_trace_fun is in the same place.  So re-write this to
-   use the init_trace_fun (making convex a debugging target).  */
-
-create_inferior_hook (pid)
-    int pid;
-{
-  static char cont[] = "cont";
-  static char cont1[] = "c";
-  char *linep = cont;
-  char *linep1 = cont1;
-  char **line = &linep;
-  char **line1 = &linep1;
-  struct cmd_list_element *c;
-
-  c = lookup_cmd (line, cmdlist, "", 0);
-  c->function = convex_cont_command;
-  c = lookup_cmd (line1, cmdlist, "", 0);
-  c->function = convex_cont_command;
-
-  inferior_fd = pattach (pid, O_EXCL);
-  if (inferior_fd < 0)
-    perror_with_name ("pattach");
-  inferior_thread = 0;
-  set_fixed_scheduling (pid, parallel == 2);
-}
-
-/* Attach process PID for debugging.  */
-
-attach (pid)
-    int pid;
-{
-  int fd = pattach (pid, O_EXCL);
-  if (fd < 0)
-    perror_with_name ("pattach");
-  attach_flag = 1;
-  /* wait for strange kernel reverberations to go away */
-  sleep (1);
-
-  setpgrp (pid, pid);
-
-  inferior_fd = fd;
-  inferior_thread = 0;
-  return pid;
-}
-
-/* Stop debugging the process whose number is PID
-   and continue it with signal number SIGNAL.
-   SIGNAL = 0 means just continue it.  */
-
-void
-detach (signal)
-     int signal;
-{
-  signal_stack = signal_stack_bot;
-  thread_continue (-1, 0, signal);
-  ioctl (inferior_fd, PIXDETACH, &ps);
-  close (inferior_fd);
-  inferior_fd = 0;
-  attach_flag = 0;
-}
-
-/* Kill off the inferior process.  */
-
-kill_inferior ()
-{
-  if (inferior_pid == 0)
-    return;
-  ioctl (inferior_fd, PIXTERMINATE, 0);
-  wait (0);
-  target_mourn_inferior ();
-}
-
-/* Read vector register REG, and return a pointer to the value.  */
-
-static long *
-read_vector_register (reg)
-    int reg;
-{
-  if (have_inferior_p ())
-    {
-      errno = 0;
-      ps.pi_buffer = (char *) &vector_registers;
-      ps.pi_nbytes = sizeof vector_registers;
-      ps.pi_offset = 0;
-      ps.pi_thread = inferior_thread;
-      ioctl (inferior_fd, PIXRDVREGS, &ps);
-      if (errno)
-       memset (&vector_registers, '\0', sizeof vector_registers);
-    }
-  else if (corechan >= 0)
-    {
-      lseek (corechan, tcontext_offset[inferior_thread], 0);
-      if (myread (corechan, &tc, sizeof tc) < 0)
-       perror_with_name (corefile);
-      lseek (corechan, tc.core_thread_p, 0);
-      if (myread (corechan, &th, sizeof th) < 0)
-       perror_with_name (corefile);
-      lseek (corechan, tc.core_vregs_p, 0);
-      if (myread (corechan, &vector_registers, 16*128) < 0)
-       perror_with_name (corefile);
-      vector_registers.vm[0] = th.t_vect_ctx.vc_vm[0];
-      vector_registers.vm[1] = th.t_vect_ctx.vc_vm[1];
-      vector_registers.vls = th.t_vect_ctx.vc_vls;
-    }
-
-  return read_vector_register_1 (reg);
-}
-
-/* Return a pointer to vector register REG, which must already have been
-   fetched from the inferior or core file.  */
-
-static long *
-read_vector_register_1 (reg) 
-    int reg;
-{
-  switch (reg)
-    {
-    case VM_REGNUM:
-      return (long *) vector_registers.vm;
-    case VS_REGNUM:
-      return (long *) &vector_registers.vls;
-    case VL_REGNUM:
-      return 1 + (long *) &vector_registers.vls;
-    default:
-      return (long *) &vector_registers.vr[reg];
-    }
-}
-
-/* Write vector register REG, element ELEMENT, new value VAL.
-   NB: must use read-modify-write on the entire vector state,
-   since pattach does not do offsetted writes correctly.  */
-
-static void
-write_vector_register (reg, element, val)
-    int reg, element;
-    ULONGEST val;
-{
-  if (have_inferior_p ())
-    {
-      errno = 0;
-      ps.pi_thread = inferior_thread;
-      ps.pi_offset = 0;
-      ps.pi_buffer = (char *) &vector_registers;
-      ps.pi_nbytes = sizeof vector_registers;
-
-      ioctl (inferior_fd, PIXRDVREGS, &ps);
-
-      switch (reg)
-       {
-       case VL_REGNUM:
-         vector_registers.vls =
-           (vector_registers.vls & 0xffffffff00000000LL)
-             + (unsigned long) val;
-         break;
-
-       case VS_REGNUM:
-         vector_registers.vls =
-           (val << 32) + (unsigned long) vector_registers.vls;
-         break;
-           
-       default:
-         vector_registers.vr[reg].el[element] = val;
-         break;
-       }
-
-      ioctl (inferior_fd, PIXWRVREGS, &ps);
-
-      if (errno)
-       perror_with_name ("writing vector register");
-    }
-}
-
-/* Return the contents of communication register NUM.  */ 
-
-static ULONGEST 
-read_comm_register (num)
-     int num;
-{
-  if (have_inferior_p ())
-    {
-      ps.pi_buffer = (char *) &comm_registers;
-      ps.pi_nbytes = sizeof comm_registers;
-      ps.pi_offset = 0;
-      ps.pi_thread = inferior_thread;
-      ioctl (inferior_fd, PIXRDCREGS, &ps);
-    }
-  return comm_registers.crreg.r4[num];
-}
-
-/* Store a new value VAL into communication register NUM.  
-   NB: Must use read-modify-write on the whole comm register set
-   since pattach does not do offsetted writes correctly.  */
-
-static void
-write_comm_register (num, val)
-     int num;
-     ULONGEST val;
-{
-  if (have_inferior_p ())
-    {
-      ps.pi_buffer = (char *) &comm_registers;
-      ps.pi_nbytes = sizeof comm_registers;
-      ps.pi_offset = 0;
-      ps.pi_thread = inferior_thread;
-      ioctl (inferior_fd, PIXRDCREGS, &ps);
-      comm_registers.crreg.r4[num] = val;
-      ioctl (inferior_fd, PIXWRCREGS, &ps);
-    }
-}
-
-/* Resume execution of the inferior process.
-   If STEP is nonzero, single-step it.
-   If SIGNAL is nonzero, give it that signal.  */
-
-void
-resume (step, signal)
-     int step;
-     int signal;
-{
-  errno = 0;
-  if (step || signal)
-    thread_continue (inferior_thread, step, signal);
-  else
-    thread_continue (-1, 0, 0);
-}
-
-/* Maybe resume some threads.
-   THREAD is which thread to resume, or -1 to resume them all.
-   STEP and SIGNAL are as in resume.
-
-   Global variable ALL_CONTINUE is set when we are here to do a
-   `cont' command; otherwise we may be doing `finish' or a call or
-   something else that will not tolerate an automatic thread switch.
-
-   If there are stopped threads waiting to deliver signals, and
-   ALL_CONTINUE, do not actually resume anything.  gdb will do a wait
-   and see one of the stopped threads in the queue.  */
-
-static void
-thread_continue (thread, step, signal)
-     int thread, step, signal;
-{
-  int n;
-
-  /* If we are to continue all threads, but not for the CONTINUE command,
-     pay no attention and continue only the selected thread.  */
-
-  if (thread < 0 && ! all_continue)
-    thread = inferior_thread;
-
-  /* If we are not stepping, we have now executed the continue part
-     of a CONTINUE command.  */
-
-  if (! step)
-    all_continue = 0;
-
-  /* Allow wait() to switch threads if this is an all-out continue.  */
-
-  thread_switch_ok = thread < 0;
-
-  /* If there are threads queued up, don't resume.  */
-
-  if (thread_switch_ok && ! signal_stack_is_empty ())
-    return;
-
-  /* OK, do it.  */
-
-  for (n = 0; n < n_threads; n++)
-    if (thread_state[n] == PI_TALIVE)
-      {
-       select_thread (n);
-
-       if ((thread < 0 || n == thread) && ! thread_is_in_kernel[n])
-         {
-           /* Blam the trace bits in the stack's saved psws to match 
-              the desired step mode.  This is required so that
-              single-stepping a return doesn't restore a psw with a
-              clear trace bit and fly away, and conversely,
-              proceeding through a return in a routine that was
-              stepped into doesn't cause a phantom break by restoring
-              a psw with the trace bit set. */
-           scan_stack (PSW_T_BIT, step);
-           scan_stack (PSW_S_BIT, sequential);
-         }
-
-       ps.pi_buffer = registers;
-       ps.pi_nbytes = REGISTER_BYTES;
-       ps.pi_offset = 0;
-       ps.pi_thread = n;
-       if (! thread_is_in_kernel[n])
-         if (ioctl (inferior_fd, PIXWRREGS, &ps))
-           perror_with_name ("PIXWRREGS");
-
-       if (thread < 0 || n == thread)
-         {
-           ps.pi_pc = 1;
-           ps.pi_signo = signal;
-           if (ioctl (inferior_fd, step ? PIXSTEP : PIXCONTINUE, &ps) < 0)
-             perror_with_name ("PIXCONTINUE");
-         }
-      }
-
-  if (ioctl (inferior_fd, PIXRUN, &ps) < 0)
-    perror_with_name ("PIXRUN");
-}
-
-/* Replacement for system wait routine.  
-
-   The system wait returns with one or more threads stopped by
-   signals.  Put stopped threads on a stack and return them one by
-   one, so that it appears that wait returns one thread at a time.
-
-   Global variable THREAD_SWITCH_OK is set when gdb can tolerate wait
-   returning a new thread.  If it is false, then only one thread is
-   running; we will do a real wait, the thread will do something, and
-   we will return that.  */
-
-pid_t
-wait (w)
-    union wait *w;
-{
-  int pid;
-
-  if (!w)
-    return wait3 (0, 0, 0);
-
-  /* Do a real wait if we were told to, or if there are no queued threads.  */
-
-  if (! thread_switch_ok || signal_stack_is_empty ())
-    {
-      int thread;
-
-      pid = wait3 (w, 0, 0);
-
-      if (!WIFSTOPPED (*w) || pid != inferior_pid)
-       return pid;
-
-      /* The inferior has done something and stopped.  Read in all the
-        threads' registers, and queue up any signals that happened.  */
-
-      if (ioctl (inferior_fd, PIXGETTHCOUNT, &ps) < 0)
-       perror_with_name ("PIXGETTHCOUNT");
-      
-      n_threads = ps.pi_othdcnt;
-      for (thread = 0; thread < n_threads; thread++)
-       {
-         ps.pi_thread = thread;
-         if (ioctl (inferior_fd, PIXGETSUBCODE, &ps) < 0)
-           perror_with_name ("PIXGETSUBCODE");
-         thread_state[thread] = ps.pi_otstate;
-
-         if (ps.pi_otstate == PI_TALIVE)
-           {
-             select_thread (thread);
-             ps.pi_buffer = registers;
-             ps.pi_nbytes = REGISTER_BYTES;
-             ps.pi_offset = 0;
-             ps.pi_thread = thread;
-             if (ioctl (inferior_fd, PIXRDREGS, &ps) < 0)
-               perror_with_name ("PIXRDREGS");
-
-             registers_fetched ();
-
-             thread_pc[thread] = read_pc ();
-             thread_signal[thread] = ps.pi_osigno;
-             thread_sigcode[thread] = ps.pi_osigcode;
-
-             /* If the thread's stack has a context frame
-                on top, something fucked is going on.  I do not
-                know what, but do I know this: the only thing you
-                can do with such a thread is continue it.  */
-
-             thread_is_in_kernel[thread] = 
-               ((read_register (PS_REGNUM) >> 25) & 3) == 0;
-
-             /* Signals push an extended frame and then fault
-                with a ridiculous pc.  Pop the frame.  */
-
-             if (thread_pc[thread] > STACK_END_ADDR)
-               {
-                 POP_FRAME;
-                 if (is_break_pc (thread_pc[thread]))
-                   thread_pc[thread] = read_pc () - 2;
-                 else
-                   thread_pc[thread] = read_pc ();
-                 write_register (PC_REGNUM, thread_pc[thread]);
-               }
-             
-             if (ps.pi_osigno || ps.pi_osigcode)
-               {
-                 signal_stack++;
-                 signal_stack->pid = pid;
-                 signal_stack->thread = thread;
-                 signal_stack->signo = thread_signal[thread];
-                 signal_stack->subsig = thread_sigcode[thread];
-                 signal_stack->pc = thread_pc[thread];
-               }
-
-             /* The following hackery is caused by a unix 7.1 feature:
-                the inferior's fixed scheduling mode is cleared when
-                it execs the shell (since the shell is not a parallel
-                program).  So, note the 5.4 trap we get when
-                the shell does its exec, then catch the 5.0 trap 
-                that occurs when the debuggee starts, and set fixed
-                scheduling mode properly.  */
-
-             if (ps.pi_osigno == 5 && ps.pi_osigcode == 4)
-               exec_trap_timer = 1;
-             else
-               exec_trap_timer--;
-             
-             if (ps.pi_osigno == 5 && exec_trap_timer == 0)
-               set_fixed_scheduling (pid, parallel == 2);
-           }
-       }
-
-      if (signal_stack_is_empty ())
-       error ("no active threads?!");
-    }
-
-  /* Select the thread that stopped, and return *w saying why.  */
-
-  select_thread (signal_stack->thread);
-
- FIXME: need to convert from host sig.
-  stop_signal = signal_stack->signo;
-  stop_sigcode = signal_stack->subsig;
-
-  WSETSTOP (*w, signal_stack->signo);
-  w->w_thread = signal_stack->thread;
-  return (signal_stack--)->pid;
-}
-
-/* Select thread THREAD -- its registers, stack, per-thread memory.
-   This is the only routine that may assign to inferior_thread
-   or thread_regs[].  */
-
-static void
-select_thread (thread)
-     int thread;
-{
-  if (thread == inferior_thread)
-    return;
-
-  memcpy (thread_regs[inferior_thread], registers, REGISTER_BYTES);
-  ps.pi_thread = inferior_thread = thread;
-  if (have_inferior_p ())
-    ioctl (inferior_fd, PISETRWTID, &ps);
-  memcpy (registers, thread_regs[thread], REGISTER_BYTES);
-}
-  
-/* Routine to set or clear a psw bit in the psw and also all psws
-   saved on the stack.  Quits when we get to a frame in which the
-   saved psw is correct. */
-
-static void
-scan_stack (bit, val)
-    long bit, val;
-{
-  long ps = read_register (PS_REGNUM);
-  long fp;
-  if (val ? !(ps & bit) : (ps & bit))
-    {    
-      ps ^= bit;
-      write_register (PS_REGNUM, ps);
-
-      fp = read_register (FP_REGNUM);
-      while (fp & 0x80000000)
-       {
-         ps = read_memory_integer (fp + 4, 4);
-         if (val ? (ps & bit) : !(ps & bit))
-           break;
-         ps ^= bit;
-         write_memory (fp + 4, &ps, 4);
-         fp = read_memory_integer (fp + 8, 4);
-       }
-    }
-}
-
-/* Set fixed scheduling (alliant mode) of process PID to ARG (0 or 1).  */
-
-static void
-set_fixed_scheduling (pid, arg)
-      int arg;
-{
-  struct pattributes pattr;
-  getpattr (pid, &pattr);
-  pattr.pattr_pfixed = arg;
-  setpattr (pid, &pattr);
-}
-\f
-void
-core_file_command (filename, from_tty)
-     char *filename;
-     int from_tty;
-{
-  int n;
-
-  /* Discard all vestiges of any previous core file
-     and mark data and stack spaces as empty.  */
-
-  if (corefile)
-    free (corefile);
-  corefile = 0;
-
-  if (corechan >= 0)
-    close (corechan);
-  corechan = -1;
-
-  data_start = 0;
-  data_end = 0;
-  stack_start = STACK_END_ADDR;
-  stack_end = STACK_END_ADDR;
-  n_core = 0;
-
-  /* Now, if a new core file was specified, open it and digest it.  */
-
-  if (filename)
-    {
-      filename = tilde_expand (filename);
-      make_cleanup (free, filename);
-      
-      if (have_inferior_p ())
-       error ("To look at a core file, you must kill the program with \"kill\".");
-      corechan = open (filename, O_RDONLY, 0);
-      if (corechan < 0)
-       perror_with_name (filename);
-
-      if (myread (corechan, &filehdr, sizeof filehdr) < 0)
-       perror_with_name (filename);
-
-      if (!IS_CORE_SOFF_MAGIC (filehdr.h_magic))
-       error ("%s: not a core file.\n", filename);
-
-      if (myread (corechan, &opthdr, filehdr.h_opthdr) < 0)
-       perror_with_name (filename);
-
-      /* Read through the section headers.
-        For text, data, etc, record an entry in the core file map.
-        For context and tcontext, record the file address of
-        the context blocks.  */
-
-      lseek (corechan, (long) filehdr.h_scnptr, 0);
-
-      n_threads = 0;
-      for (n = 0; n < filehdr.h_nscns; n++)
-       {
-         if (myread (corechan, &scnhdr, sizeof scnhdr) < 0)
-           perror_with_name (filename);
-         if ((scnhdr.s_flags & S_TYPMASK) >= S_TEXT
-             && (scnhdr.s_flags & S_TYPMASK) <= S_COMON)
-           {
-             core_map[n_core].mem_addr = scnhdr.s_vaddr;
-             core_map[n_core].mem_end = scnhdr.s_vaddr + scnhdr.s_size;
-             core_map[n_core].file_addr = scnhdr.s_scnptr;
-             core_map[n_core].type = scnhdr.s_flags & S_TYPMASK;
-             if (core_map[n_core].type != S_TBSS
-                 && core_map[n_core].type != S_TDATA
-                 && core_map[n_core].type != S_TTEXT)
-               core_map[n_core].thread = -1;
-             else if (n_core == 0
-                      || core_map[n_core-1].mem_addr != scnhdr.s_vaddr)
-               core_map[n_core].thread = 0;
-             else 
-               core_map[n_core].thread = core_map[n_core-1].thread + 1;
-             n_core++;
-           }
-         else if ((scnhdr.s_flags & S_TYPMASK) == S_CONTEXT)
-           context_offset = scnhdr.s_scnptr;
-         else if ((scnhdr.s_flags & S_TYPMASK) == S_TCONTEXT) 
-           tcontext_offset[n_threads++] = scnhdr.s_scnptr;
-       }
-
-      /* Read the context block, struct user, struct proc,
-        and the comm regs.  */
-
-      lseek (corechan, context_offset, 0);
-      if (myread (corechan, &c, sizeof c) < 0)
-       perror_with_name (filename);
-      lseek (corechan, c.core_user_p, 0);
-      if (myread (corechan, &u, sizeof u) < 0)
-       perror_with_name (filename);
-      lseek (corechan, c.core_proc_p, 0);
-      if (myread (corechan, &pr, sizeof pr) < 0)
-       perror_with_name (filename);
-      comm_registers = pr.p_creg;
-
-      /* Core file apparently is really there.  Make it really exist
-        for xfer_core_file so we can do read_memory on it. */
-
-      if (filename[0] == '/')
-       corefile = savestring (filename, strlen (filename));
-      else
-       corefile = concat (current_directory, "/", filename, NULL);
-
-      printf_filtered ("Program %s ", u.u_comm);
-
-      /* Read the thread registers and fill in the thread_xxx[] data.  */
-
-      for (n = 0; n < n_threads; n++)
-       {
-         select_thread (n);
-
-         lseek (corechan, tcontext_offset[n], 0);
-         if (myread (corechan, &tc, sizeof tc) < 0)
-           perror_with_name (corefile);
-         lseek (corechan, tc.core_thread_p, 0);
-         if (myread (corechan, &th, sizeof th) < 0)
-           perror_with_name (corefile);
-
-         lseek (corechan, tc.core_syscall_context_p, 0);
-         if (myread (corechan, registers, REGISTER_BYTES) < 0)
-           perror_with_name (corefile);
-
-         thread_signal[n] = th.t_cursig;
-         thread_sigcode[n] = th.t_code;
-         thread_state[n] = th.t_state;
-         thread_pc[n] = read_pc ();
-
-         if (thread_pc[n] > STACK_END_ADDR)
-           {
-             POP_FRAME;
-             if (is_break_pc (thread_pc[n]))
-               thread_pc[n] = read_pc () - 2;
-             else
-               thread_pc[n] = read_pc ();
-             write_register (PC_REGNUM, thread_pc[n]);
-           }
-
-         printf_filtered ("thread %d received signal %d, %s\n",
-                          n, thread_signal[n],
-                          safe_strsignal (thread_signal[n]));
-       }
-
-      /* Select an interesting thread -- also-rans died with SIGKILL,
-        so find one that didn't.  */
-
-      for (n = 0; n < n_threads; n++)
-       if (thread_signal[n] != 0 && thread_signal[n] != SIGKILL)
-         {
-           select_thread (n);
-           stop_signal = thread_signal[n];
-           stop_sigcode = thread_sigcode[n];
-           break;
-         }
-
-      core_aouthdr.a_magic = 0;
-
-      flush_cached_frames ();
-      select_frame (get_current_frame (), 0);
-      validate_files ();
-
-      print_stack_frame (selected_frame, selected_frame_level, -1);
-    }
-  else if (from_tty)
-    printf_filtered ("No core file now.\n");
-}
+/* OBSOLETE /* Convex host-dependent code for GDB. */
+/* OBSOLETE    Copyright 1990, 1991, 1992 Free Software Foundation, Inc. */
+/* OBSOLETE  */
+/* OBSOLETE This file is part of GDB. */
+/* OBSOLETE  */
+/* OBSOLETE This program is free software; you can redistribute it and/or modify */
+/* OBSOLETE it under the terms of the GNU General Public License as published by */
+/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */
+/* OBSOLETE (at your option) any later version. */
+/* OBSOLETE  */
+/* OBSOLETE This program is distributed in the hope that it will be useful, */
+/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
+/* OBSOLETE GNU General Public License for more details. */
+/* OBSOLETE  */
+/* OBSOLETE You should have received a copy of the GNU General Public License */
+/* OBSOLETE along with this program; if not, write to the Free Software */
+/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #include "defs.h" */
+/* OBSOLETE #include "command.h" */
+/* OBSOLETE #include "symtab.h" */
+/* OBSOLETE #include "value.h" */
+/* OBSOLETE #include "frame.h" */
+/* OBSOLETE #include "inferior.h" */
+/* OBSOLETE #include "wait.h" */
+/* OBSOLETE  */
+/* OBSOLETE #include <signal.h> */
+/* OBSOLETE #include <fcntl.h> */
+/* OBSOLETE #include "gdbcore.h" */
+/* OBSOLETE  */
+/* OBSOLETE #include <sys/param.h> */
+/* OBSOLETE #include <sys/dir.h> */
+/* OBSOLETE #include <sys/user.h> */
+/* OBSOLETE #include <sys/ioctl.h> */
+/* OBSOLETE #include <sys/pcntl.h> */
+/* OBSOLETE #include <sys/thread.h> */
+/* OBSOLETE #include <sys/proc.h> */
+/* OBSOLETE #include <sys/file.h> */
+/* OBSOLETE #include "gdb_stat.h" */
+/* OBSOLETE #include <sys/mman.h> */
+/* OBSOLETE  */
+/* OBSOLETE #include <convex/vmparam.h> */
+/* OBSOLETE #include <convex/filehdr.h> */
+/* OBSOLETE #include <convex/opthdr.h> */
+/* OBSOLETE #include <convex/scnhdr.h> */
+/* OBSOLETE #include <convex/core.h> */
+/* OBSOLETE  */
+/* OBSOLETE /* Per-thread data, read from the inferior at each stop and written */
+/* OBSOLETE    back at each resume.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE /* Number of active threads. */
+/* OBSOLETE    Tables are valid for thread numbers less than this.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int n_threads; */
+/* OBSOLETE  */
+/* OBSOLETE #define MAXTHREADS 8 */
+/* OBSOLETE             */
+/* OBSOLETE /* Thread state.  The remaining data is valid only if this is PI_TALIVE.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int thread_state[MAXTHREADS]; */
+/* OBSOLETE  */
+/* OBSOLETE /* Stop pc, signal, signal subcode *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int thread_pc[MAXTHREADS]; */
+/* OBSOLETE static int thread_signal[MAXTHREADS]; */
+/* OBSOLETE static int thread_sigcode[MAXTHREADS];      */
+/* OBSOLETE  */
+/* OBSOLETE /* Thread registers. */
+/* OBSOLETE    If thread is selected, the regs are in registers[] instead.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static char thread_regs[MAXTHREADS][REGISTER_BYTES]; */
+/* OBSOLETE  */
+/* OBSOLETE /* 1 if the top frame on the thread's stack was a context frame, */
+/* OBSOLETE    meaning that the kernel is up to something and we should not */
+/* OBSOLETE    touch the thread at all except to resume it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static char thread_is_in_kernel[MAXTHREADS]; */
+/* OBSOLETE  */
+/* OBSOLETE /* The currently selected thread's number.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int inferior_thread; */
+/* OBSOLETE  */
+/* OBSOLETE /* Inferior process's file handle and a process control block */
+/* OBSOLETE    to feed args to ioctl with.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int inferior_fd; */
+/* OBSOLETE static struct pcntl ps; */
+/* OBSOLETE  */
+/* OBSOLETE /* SOFF file headers for exec or core file.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static FILEHDR filehdr; */
+/* OBSOLETE static OPTHDR opthdr; */
+/* OBSOLETE static SCNHDR scnhdr; */
+/* OBSOLETE  */
+/* OBSOLETE /* Address maps constructed from section headers of exec and core files. */
+/* OBSOLETE    Defines process address -> file address translation.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE struct pmap  */
+/* OBSOLETE { */
+/* OBSOLETE     long mem_addr;         /* process start address *x/ */
+/* OBSOLETE     long mem_end;          /* process end+1 address *x/ */
+/* OBSOLETE     long file_addr;                /* file start address *x/ */
+/* OBSOLETE     long thread;           /* -1 shared; 0,1,... thread-local *x/ */
+/* OBSOLETE     long type;                     /* S_TEXT S_DATA S_BSS S_TBSS etc *x/ */
+/* OBSOLETE     long which;                    /* used to sort map for info files *x/ */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE static int n_exec, n_core; */
+/* OBSOLETE static struct pmap exec_map[100]; */
+/* OBSOLETE static struct pmap core_map[100]; */
+/* OBSOLETE  */
+/* OBSOLETE /* Offsets in the core file of core_context and core_tcontext blocks.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int context_offset; */
+/* OBSOLETE static int tcontext_offset[MAXTHREADS]; */
+/* OBSOLETE  */
+/* OBSOLETE /* Core file control blocks.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static struct core_context_v70 c; */
+/* OBSOLETE static struct core_tcontext_v70 tc; */
+/* OBSOLETE static struct user u; */
+/* OBSOLETE static thread_t th; */
+/* OBSOLETE static proc_t pr; */
+/* OBSOLETE  */
+/* OBSOLETE  */
+/* OBSOLETE /* Vector and communication registers from core dump or from inferior. */
+/* OBSOLETE    These are read on demand, ie, not normally valid.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static struct vecst vector_registers; */
+/* OBSOLETE static struct creg_ctx comm_registers; */
+/* OBSOLETE  */
+/* OBSOLETE /* Flag, set on a vanilla CONT command and cleared when the inferior */
+/* OBSOLETE    is continued.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int all_continue; */
+/* OBSOLETE  */
+/* OBSOLETE /* Flag, set when the inferior is continued by a vanilla CONT command, */
+/* OBSOLETE    cleared if it is continued for any other purpose.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int thread_switch_ok; */
+/* OBSOLETE  */
+/* OBSOLETE /* Stack of signals recieved from threads but not yet delivered to gdb.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE struct threadpid  */
+/* OBSOLETE { */
+/* OBSOLETE     int pid; */
+/* OBSOLETE     int thread; */
+/* OBSOLETE     int signo; */
+/* OBSOLETE     int subsig; */
+/* OBSOLETE     int pc; */
+/* OBSOLETE }; */
+/* OBSOLETE  */
+/* OBSOLETE static struct threadpid signal_stack_bot[100]; */
+/* OBSOLETE static struct threadpid *signal_stack = signal_stack_bot; */
+/* OBSOLETE  */
+/* OBSOLETE /* How to detect empty stack -- bottom frame is all zero.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE #define signal_stack_is_empty() (signal_stack->pid == 0) */
+/* OBSOLETE  */
+/* OBSOLETE /* Mode controlled by SET PIPE command, controls the psw SEQ bit */
+/* OBSOLETE    which forces each instruction to complete before the next one starts.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int sequential = 0; */
+/* OBSOLETE  */
+/* OBSOLETE /* Mode controlled by the SET PARALLEL command.  Values are: */
+/* OBSOLETE    0  concurrency limit 1 thread, dynamic scheduling */
+/* OBSOLETE    1  no concurrency limit, dynamic scheduling */
+/* OBSOLETE    2  no concurrency limit, fixed scheduling  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int parallel = 1; */
+/* OBSOLETE  */
+/* OBSOLETE /* Mode controlled by SET BASE command, output radix for unformatted */
+/* OBSOLETE    integer typeout, as in argument lists, aggregates, and so on. */
+/* OBSOLETE    Zero means guess whether it's an address (hex) or not (decimal).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int output_radix = 0; */
+/* OBSOLETE  */
+/* OBSOLETE /* Signal subcode at last thread stop.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int stop_sigcode; */
+/* OBSOLETE  */
+/* OBSOLETE /* Hack, see wait() below.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static int exec_trap_timer; */
+/* OBSOLETE  */
+/* OBSOLETE #include "gdbcmd.h" */
+/* OBSOLETE  */
+/* OBSOLETE static struct type *vector_type (); */
+/* OBSOLETE static long *read_vector_register (); */
+/* OBSOLETE static long *read_vector_register_1 (); */
+/* OBSOLETE static void write_vector_register (); */
+/* OBSOLETE static ULONGEST read_comm_register (); */
+/* OBSOLETE static void write_comm_register (); */
+/* OBSOLETE static void convex_cont_command (); */
+/* OBSOLETE static void thread_continue (); */
+/* OBSOLETE static void select_thread (); */
+/* OBSOLETE static void scan_stack (); */
+/* OBSOLETE static void set_fixed_scheduling (); */
+/* OBSOLETE static char *subsig_name (); */
+/* OBSOLETE static void psw_info (); */
+/* OBSOLETE static sig_noop (); */
+/* OBSOLETE static ptr_cmp (); */
+/* OBSOLETE  */
+/* OBSOLETE \f */
+/* OBSOLETE /* Execute ptrace.  Convex V7 replaced ptrace with pattach. */
+/* OBSOLETE    Allow ptrace (0) as a no-op.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE call_ptrace (request, pid, procaddr, buf) */
+/* OBSOLETE      int request, pid; */
+/* OBSOLETE      PTRACE_ARG3_TYPE procaddr; */
+/* OBSOLETE      int buf; */
+/* OBSOLETE { */
+/* OBSOLETE   if (request == 0) */
+/* OBSOLETE     return; */
+/* OBSOLETE   error ("no ptrace"); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Replacement for system execle routine. */
+/* OBSOLETE    Convert it to an equivalent exect, which pattach insists on.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE execle (name, argv) */
+/* OBSOLETE      char *name, *argv; */
+/* OBSOLETE { */
+/* OBSOLETE   char ***envp = (char ***) &argv; */
+/* OBSOLETE   while (*envp++) ; */
+/* OBSOLETE  */
+/* OBSOLETE   signal (SIGTRAP, sig_noop); */
+/* OBSOLETE   exect (name, &argv, *envp); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Stupid handler for stupid trace trap that otherwise causes */
+/* OBSOLETE    startup to stupidly hang.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static sig_noop ()  */
+/* OBSOLETE {} */
+/* OBSOLETE  */
+/* OBSOLETE /* Read registers from inferior into registers[] array. */
+/* OBSOLETE    For convex, they are already there, read in when the inferior stops.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE fetch_inferior_registers (regno) */
+/* OBSOLETE      int regno; */
+/* OBSOLETE { */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Store our register values back into the inferior. */
+/* OBSOLETE    For Convex, do this only once, right before resuming inferior.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE store_inferior_registers (regno) */
+/* OBSOLETE      int regno; */
+/* OBSOLETE { */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Copy LEN bytes from inferior's memory starting at MEMADDR */
+/* OBSOLETE    to debugger memory starting at MYADDR.  */
+/* OBSOLETE    On failure (cannot read from inferior, usually because address is out */
+/* OBSOLETE    of bounds) returns the value of errno. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE read_inferior_memory (memaddr, myaddr, len) */
+/* OBSOLETE      CORE_ADDR memaddr; */
+/* OBSOLETE      char *myaddr; */
+/* OBSOLETE      int len; */
+/* OBSOLETE { */
+/* OBSOLETE   errno = 0; */
+/* OBSOLETE   while (len > 0) */
+/* OBSOLETE     { */
+/* OBSOLETE       /* little-known undocumented max request size *x/ */
+/* OBSOLETE       int i = (len < 12288) ? len : 12288; */
+/* OBSOLETE  */
+/* OBSOLETE       lseek (inferior_fd, memaddr, 0); */
+/* OBSOLETE       read (inferior_fd, myaddr, i); */
+/* OBSOLETE  */
+/* OBSOLETE       memaddr += i; */
+/* OBSOLETE       myaddr += i; */
+/* OBSOLETE       len -= i; */
+/* OBSOLETE     } */
+/* OBSOLETE   if (errno)  */
+/* OBSOLETE     memset (myaddr, '\0', len); */
+/* OBSOLETE   return errno; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Copy LEN bytes of data from debugger memory at MYADDR */
+/* OBSOLETE    to inferior's memory at MEMADDR. */
+/* OBSOLETE    Returns errno on failure (cannot write the inferior) *x/ */
+/* OBSOLETE  */
+/* OBSOLETE int */
+/* OBSOLETE write_inferior_memory (memaddr, myaddr, len) */
+/* OBSOLETE      CORE_ADDR memaddr; */
+/* OBSOLETE      char *myaddr; */
+/* OBSOLETE      int len; */
+/* OBSOLETE { */
+/* OBSOLETE   errno = 0; */
+/* OBSOLETE   lseek (inferior_fd, memaddr, 0); */
+/* OBSOLETE   write (inferior_fd, myaddr, len); */
+/* OBSOLETE   return errno; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Here from create_inferior when the inferior process has been created */
+/* OBSOLETE    and started up.  We must do a pattach to grab it for debugging. */
+/* OBSOLETE  */
+/* OBSOLETE    Also, intercept the CONT command by altering its dispatch address.  *x/ */
+/* OBSOLETE /* FIXME: This used to be called from a macro CREATE_INFERIOR_HOOK. */
+/* OBSOLETE    But now init_trace_fun is in the same place.  So re-write this to */
+/* OBSOLETE    use the init_trace_fun (making convex a debugging target).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE create_inferior_hook (pid) */
+/* OBSOLETE     int pid; */
+/* OBSOLETE { */
+/* OBSOLETE   static char cont[] = "cont"; */
+/* OBSOLETE   static char cont1[] = "c"; */
+/* OBSOLETE   char *linep = cont; */
+/* OBSOLETE   char *linep1 = cont1; */
+/* OBSOLETE   char **line = &linep; */
+/* OBSOLETE   char **line1 = &linep1; */
+/* OBSOLETE   struct cmd_list_element *c; */
+/* OBSOLETE  */
+/* OBSOLETE   c = lookup_cmd (line, cmdlist, "", 0); */
+/* OBSOLETE   c->function = convex_cont_command; */
+/* OBSOLETE   c = lookup_cmd (line1, cmdlist, "", 0); */
+/* OBSOLETE   c->function = convex_cont_command; */
+/* OBSOLETE  */
+/* OBSOLETE   inferior_fd = pattach (pid, O_EXCL); */
+/* OBSOLETE   if (inferior_fd < 0) */
+/* OBSOLETE     perror_with_name ("pattach"); */
+/* OBSOLETE   inferior_thread = 0; */
+/* OBSOLETE   set_fixed_scheduling (pid, parallel == 2); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Attach process PID for debugging.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE attach (pid) */
+/* OBSOLETE     int pid; */
+/* OBSOLETE { */
+/* OBSOLETE   int fd = pattach (pid, O_EXCL); */
+/* OBSOLETE   if (fd < 0) */
+/* OBSOLETE     perror_with_name ("pattach"); */
+/* OBSOLETE   attach_flag = 1; */
+/* OBSOLETE   /* wait for strange kernel reverberations to go away *x/ */
+/* OBSOLETE   sleep (1); */
+/* OBSOLETE  */
+/* OBSOLETE   setpgrp (pid, pid); */
+/* OBSOLETE  */
+/* OBSOLETE   inferior_fd = fd; */
+/* OBSOLETE   inferior_thread = 0; */
+/* OBSOLETE   return pid; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Stop debugging the process whose number is PID */
+/* OBSOLETE    and continue it with signal number SIGNAL. */
+/* OBSOLETE    SIGNAL = 0 means just continue it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE detach (signal) */
+/* OBSOLETE      int signal; */
+/* OBSOLETE { */
+/* OBSOLETE   signal_stack = signal_stack_bot; */
+/* OBSOLETE   thread_continue (-1, 0, signal); */
+/* OBSOLETE   ioctl (inferior_fd, PIXDETACH, &ps); */
+/* OBSOLETE   close (inferior_fd); */
+/* OBSOLETE   inferior_fd = 0; */
+/* OBSOLETE   attach_flag = 0; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Kill off the inferior process.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE kill_inferior () */
+/* OBSOLETE { */
+/* OBSOLETE   if (inferior_pid == 0) */
+/* OBSOLETE     return; */
+/* OBSOLETE   ioctl (inferior_fd, PIXTERMINATE, 0); */
+/* OBSOLETE   wait (0); */
+/* OBSOLETE   target_mourn_inferior (); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Read vector register REG, and return a pointer to the value.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static long * */
+/* OBSOLETE read_vector_register (reg) */
+/* OBSOLETE     int reg; */
+/* OBSOLETE { */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       errno = 0; */
+/* OBSOLETE       ps.pi_buffer = (char *) &vector_registers; */
+/* OBSOLETE       ps.pi_nbytes = sizeof vector_registers; */
+/* OBSOLETE       ps.pi_offset = 0; */
+/* OBSOLETE       ps.pi_thread = inferior_thread; */
+/* OBSOLETE       ioctl (inferior_fd, PIXRDVREGS, &ps); */
+/* OBSOLETE       if (errno) */
+/* OBSOLETE    memset (&vector_registers, '\0', sizeof vector_registers); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (corechan >= 0) */
+/* OBSOLETE     { */
+/* OBSOLETE       lseek (corechan, tcontext_offset[inferior_thread], 0); */
+/* OBSOLETE       if (myread (corechan, &tc, sizeof tc) < 0) */
+/* OBSOLETE    perror_with_name (corefile); */
+/* OBSOLETE       lseek (corechan, tc.core_thread_p, 0); */
+/* OBSOLETE       if (myread (corechan, &th, sizeof th) < 0) */
+/* OBSOLETE    perror_with_name (corefile); */
+/* OBSOLETE       lseek (corechan, tc.core_vregs_p, 0); */
+/* OBSOLETE       if (myread (corechan, &vector_registers, 16*128) < 0) */
+/* OBSOLETE    perror_with_name (corefile); */
+/* OBSOLETE       vector_registers.vm[0] = th.t_vect_ctx.vc_vm[0]; */
+/* OBSOLETE       vector_registers.vm[1] = th.t_vect_ctx.vc_vm[1]; */
+/* OBSOLETE       vector_registers.vls = th.t_vect_ctx.vc_vls; */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   return read_vector_register_1 (reg); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Return a pointer to vector register REG, which must already have been */
+/* OBSOLETE    fetched from the inferior or core file.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static long * */
+/* OBSOLETE read_vector_register_1 (reg)  */
+/* OBSOLETE     int reg; */
+/* OBSOLETE { */
+/* OBSOLETE   switch (reg) */
+/* OBSOLETE     { */
+/* OBSOLETE     case VM_REGNUM: */
+/* OBSOLETE       return (long *) vector_registers.vm; */
+/* OBSOLETE     case VS_REGNUM: */
+/* OBSOLETE       return (long *) &vector_registers.vls; */
+/* OBSOLETE     case VL_REGNUM: */
+/* OBSOLETE       return 1 + (long *) &vector_registers.vls; */
+/* OBSOLETE     default: */
+/* OBSOLETE       return (long *) &vector_registers.vr[reg]; */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Write vector register REG, element ELEMENT, new value VAL. */
+/* OBSOLETE    NB: must use read-modify-write on the entire vector state, */
+/* OBSOLETE    since pattach does not do offsetted writes correctly.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE write_vector_register (reg, element, val) */
+/* OBSOLETE     int reg, element; */
+/* OBSOLETE     ULONGEST val; */
+/* OBSOLETE { */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       errno = 0; */
+/* OBSOLETE       ps.pi_thread = inferior_thread; */
+/* OBSOLETE       ps.pi_offset = 0; */
+/* OBSOLETE       ps.pi_buffer = (char *) &vector_registers; */
+/* OBSOLETE       ps.pi_nbytes = sizeof vector_registers; */
+/* OBSOLETE  */
+/* OBSOLETE       ioctl (inferior_fd, PIXRDVREGS, &ps); */
+/* OBSOLETE  */
+/* OBSOLETE       switch (reg) */
+/* OBSOLETE    { */
+/* OBSOLETE    case VL_REGNUM: */
+/* OBSOLETE      vector_registers.vls = */
+/* OBSOLETE        (vector_registers.vls & 0xffffffff00000000LL) */
+/* OBSOLETE          + (unsigned long) val; */
+/* OBSOLETE      break; */
+/* OBSOLETE  */
+/* OBSOLETE    case VS_REGNUM: */
+/* OBSOLETE      vector_registers.vls = */
+/* OBSOLETE        (val << 32) + (unsigned long) vector_registers.vls; */
+/* OBSOLETE      break; */
+/* OBSOLETE         */
+/* OBSOLETE    default: */
+/* OBSOLETE      vector_registers.vr[reg].el[element] = val; */
+/* OBSOLETE      break; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       ioctl (inferior_fd, PIXWRVREGS, &ps); */
+/* OBSOLETE  */
+/* OBSOLETE       if (errno) */
+/* OBSOLETE    perror_with_name ("writing vector register"); */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Return the contents of communication register NUM.  *x/  */
+/* OBSOLETE  */
+/* OBSOLETE static ULONGEST  */
+/* OBSOLETE read_comm_register (num) */
+/* OBSOLETE      int num; */
+/* OBSOLETE { */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       ps.pi_buffer = (char *) &comm_registers; */
+/* OBSOLETE       ps.pi_nbytes = sizeof comm_registers; */
+/* OBSOLETE       ps.pi_offset = 0; */
+/* OBSOLETE       ps.pi_thread = inferior_thread; */
+/* OBSOLETE       ioctl (inferior_fd, PIXRDCREGS, &ps); */
+/* OBSOLETE     } */
+/* OBSOLETE   return comm_registers.crreg.r4[num]; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Store a new value VAL into communication register NUM.   */
+/* OBSOLETE    NB: Must use read-modify-write on the whole comm register set */
+/* OBSOLETE    since pattach does not do offsetted writes correctly.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE write_comm_register (num, val) */
+/* OBSOLETE      int num; */
+/* OBSOLETE      ULONGEST val; */
+/* OBSOLETE { */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       ps.pi_buffer = (char *) &comm_registers; */
+/* OBSOLETE       ps.pi_nbytes = sizeof comm_registers; */
+/* OBSOLETE       ps.pi_offset = 0; */
+/* OBSOLETE       ps.pi_thread = inferior_thread; */
+/* OBSOLETE       ioctl (inferior_fd, PIXRDCREGS, &ps); */
+/* OBSOLETE       comm_registers.crreg.r4[num] = val; */
+/* OBSOLETE       ioctl (inferior_fd, PIXWRCREGS, &ps); */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Resume execution of the inferior process. */
+/* OBSOLETE    If STEP is nonzero, single-step it. */
+/* OBSOLETE    If SIGNAL is nonzero, give it that signal.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE void */
+/* OBSOLETE resume (step, signal) */
+/* OBSOLETE      int step; */
+/* OBSOLETE      int signal; */
+/* OBSOLETE { */
+/* OBSOLETE   errno = 0; */
+/* OBSOLETE   if (step || signal) */
+/* OBSOLETE     thread_continue (inferior_thread, step, signal); */
+/* OBSOLETE   else */
+/* OBSOLETE     thread_continue (-1, 0, 0); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Maybe resume some threads. */
+/* OBSOLETE    THREAD is which thread to resume, or -1 to resume them all. */
+/* OBSOLETE    STEP and SIGNAL are as in resume. */
+/* OBSOLETE  */
+/* OBSOLETE    Global variable ALL_CONTINUE is set when we are here to do a */
+/* OBSOLETE    `cont' command; otherwise we may be doing `finish' or a call or */
+/* OBSOLETE    something else that will not tolerate an automatic thread switch. */
+/* OBSOLETE  */
+/* OBSOLETE    If there are stopped threads waiting to deliver signals, and */
+/* OBSOLETE    ALL_CONTINUE, do not actually resume anything.  gdb will do a wait */
+/* OBSOLETE    and see one of the stopped threads in the queue.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE thread_continue (thread, step, signal) */
+/* OBSOLETE      int thread, step, signal; */
+/* OBSOLETE { */
+/* OBSOLETE   int n; */
+/* OBSOLETE  */
+/* OBSOLETE   /* If we are to continue all threads, but not for the CONTINUE command, */
+/* OBSOLETE      pay no attention and continue only the selected thread.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (thread < 0 && ! all_continue) */
+/* OBSOLETE     thread = inferior_thread; */
+/* OBSOLETE  */
+/* OBSOLETE   /* If we are not stepping, we have now executed the continue part */
+/* OBSOLETE      of a CONTINUE command.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (! step) */
+/* OBSOLETE     all_continue = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Allow wait() to switch threads if this is an all-out continue.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   thread_switch_ok = thread < 0; */
+/* OBSOLETE  */
+/* OBSOLETE   /* If there are threads queued up, don't resume.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (thread_switch_ok && ! signal_stack_is_empty ()) */
+/* OBSOLETE     return; */
+/* OBSOLETE  */
+/* OBSOLETE   /* OK, do it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   for (n = 0; n < n_threads; n++) */
+/* OBSOLETE     if (thread_state[n] == PI_TALIVE) */
+/* OBSOLETE       { */
+/* OBSOLETE    select_thread (n); */
+/* OBSOLETE  */
+/* OBSOLETE    if ((thread < 0 || n == thread) && ! thread_is_in_kernel[n]) */
+/* OBSOLETE      { */
+/* OBSOLETE        /* Blam the trace bits in the stack's saved psws to match  */
+/* OBSOLETE           the desired step mode.  This is required so that */
+/* OBSOLETE           single-stepping a return doesn't restore a psw with a */
+/* OBSOLETE           clear trace bit and fly away, and conversely, */
+/* OBSOLETE           proceeding through a return in a routine that was */
+/* OBSOLETE           stepped into doesn't cause a phantom break by restoring */
+/* OBSOLETE           a psw with the trace bit set. *x/ */
+/* OBSOLETE        scan_stack (PSW_T_BIT, step); */
+/* OBSOLETE        scan_stack (PSW_S_BIT, sequential); */
+/* OBSOLETE      } */
+/* OBSOLETE  */
+/* OBSOLETE    ps.pi_buffer = registers; */
+/* OBSOLETE    ps.pi_nbytes = REGISTER_BYTES; */
+/* OBSOLETE    ps.pi_offset = 0; */
+/* OBSOLETE    ps.pi_thread = n; */
+/* OBSOLETE    if (! thread_is_in_kernel[n]) */
+/* OBSOLETE      if (ioctl (inferior_fd, PIXWRREGS, &ps)) */
+/* OBSOLETE        perror_with_name ("PIXWRREGS"); */
+/* OBSOLETE  */
+/* OBSOLETE    if (thread < 0 || n == thread) */
+/* OBSOLETE      { */
+/* OBSOLETE        ps.pi_pc = 1; */
+/* OBSOLETE        ps.pi_signo = signal; */
+/* OBSOLETE        if (ioctl (inferior_fd, step ? PIXSTEP : PIXCONTINUE, &ps) < 0) */
+/* OBSOLETE          perror_with_name ("PIXCONTINUE"); */
+/* OBSOLETE      } */
+/* OBSOLETE       } */
+/* OBSOLETE  */
+/* OBSOLETE   if (ioctl (inferior_fd, PIXRUN, &ps) < 0) */
+/* OBSOLETE     perror_with_name ("PIXRUN"); */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Replacement for system wait routine.   */
+/* OBSOLETE  */
+/* OBSOLETE    The system wait returns with one or more threads stopped by */
+/* OBSOLETE    signals.  Put stopped threads on a stack and return them one by */
+/* OBSOLETE    one, so that it appears that wait returns one thread at a time. */
+/* OBSOLETE  */
+/* OBSOLETE    Global variable THREAD_SWITCH_OK is set when gdb can tolerate wait */
+/* OBSOLETE    returning a new thread.  If it is false, then only one thread is */
+/* OBSOLETE    running; we will do a real wait, the thread will do something, and */
+/* OBSOLETE    we will return that.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE pid_t */
+/* OBSOLETE wait (w) */
+/* OBSOLETE     union wait *w; */
+/* OBSOLETE { */
+/* OBSOLETE   int pid; */
+/* OBSOLETE  */
+/* OBSOLETE   if (!w) */
+/* OBSOLETE     return wait3 (0, 0, 0); */
+/* OBSOLETE  */
+/* OBSOLETE   /* Do a real wait if we were told to, or if there are no queued threads.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (! thread_switch_ok || signal_stack_is_empty ()) */
+/* OBSOLETE     { */
+/* OBSOLETE       int thread; */
+/* OBSOLETE  */
+/* OBSOLETE       pid = wait3 (w, 0, 0); */
+/* OBSOLETE  */
+/* OBSOLETE       if (!WIFSTOPPED (*w) || pid != inferior_pid) */
+/* OBSOLETE    return pid; */
+/* OBSOLETE  */
+/* OBSOLETE       /* The inferior has done something and stopped.  Read in all the */
+/* OBSOLETE     threads' registers, and queue up any signals that happened.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       if (ioctl (inferior_fd, PIXGETTHCOUNT, &ps) < 0) */
+/* OBSOLETE    perror_with_name ("PIXGETTHCOUNT"); */
+/* OBSOLETE        */
+/* OBSOLETE       n_threads = ps.pi_othdcnt; */
+/* OBSOLETE       for (thread = 0; thread < n_threads; thread++) */
+/* OBSOLETE    { */
+/* OBSOLETE      ps.pi_thread = thread; */
+/* OBSOLETE      if (ioctl (inferior_fd, PIXGETSUBCODE, &ps) < 0) */
+/* OBSOLETE        perror_with_name ("PIXGETSUBCODE"); */
+/* OBSOLETE      thread_state[thread] = ps.pi_otstate; */
+/* OBSOLETE  */
+/* OBSOLETE      if (ps.pi_otstate == PI_TALIVE) */
+/* OBSOLETE        { */
+/* OBSOLETE          select_thread (thread); */
+/* OBSOLETE          ps.pi_buffer = registers; */
+/* OBSOLETE          ps.pi_nbytes = REGISTER_BYTES; */
+/* OBSOLETE          ps.pi_offset = 0; */
+/* OBSOLETE          ps.pi_thread = thread; */
+/* OBSOLETE          if (ioctl (inferior_fd, PIXRDREGS, &ps) < 0) */
+/* OBSOLETE            perror_with_name ("PIXRDREGS"); */
+/* OBSOLETE  */
+/* OBSOLETE          registers_fetched (); */
+/* OBSOLETE  */
+/* OBSOLETE          thread_pc[thread] = read_pc (); */
+/* OBSOLETE          thread_signal[thread] = ps.pi_osigno; */
+/* OBSOLETE          thread_sigcode[thread] = ps.pi_osigcode; */
+/* OBSOLETE  */
+/* OBSOLETE          /* If the thread's stack has a context frame */
+/* OBSOLETE             on top, something fucked is going on.  I do not */
+/* OBSOLETE             know what, but do I know this: the only thing you */
+/* OBSOLETE             can do with such a thread is continue it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE          thread_is_in_kernel[thread] =  */
+/* OBSOLETE            ((read_register (PS_REGNUM) >> 25) & 3) == 0; */
+/* OBSOLETE  */
+/* OBSOLETE          /* Signals push an extended frame and then fault */
+/* OBSOLETE             with a ridiculous pc.  Pop the frame.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE          if (thread_pc[thread] > STACK_END_ADDR) */
+/* OBSOLETE            { */
+/* OBSOLETE              POP_FRAME; */
+/* OBSOLETE              if (is_break_pc (thread_pc[thread])) */
+/* OBSOLETE                thread_pc[thread] = read_pc () - 2; */
+/* OBSOLETE              else */
+/* OBSOLETE                thread_pc[thread] = read_pc (); */
+/* OBSOLETE              write_register (PC_REGNUM, thread_pc[thread]); */
+/* OBSOLETE            } */
+/* OBSOLETE           */
+/* OBSOLETE          if (ps.pi_osigno || ps.pi_osigcode) */
+/* OBSOLETE            { */
+/* OBSOLETE              signal_stack++; */
+/* OBSOLETE              signal_stack->pid = pid; */
+/* OBSOLETE              signal_stack->thread = thread; */
+/* OBSOLETE              signal_stack->signo = thread_signal[thread]; */
+/* OBSOLETE              signal_stack->subsig = thread_sigcode[thread]; */
+/* OBSOLETE              signal_stack->pc = thread_pc[thread]; */
+/* OBSOLETE            } */
+/* OBSOLETE  */
+/* OBSOLETE          /* The following hackery is caused by a unix 7.1 feature: */
+/* OBSOLETE             the inferior's fixed scheduling mode is cleared when */
+/* OBSOLETE             it execs the shell (since the shell is not a parallel */
+/* OBSOLETE             program).  So, note the 5.4 trap we get when */
+/* OBSOLETE             the shell does its exec, then catch the 5.0 trap  */
+/* OBSOLETE             that occurs when the debuggee starts, and set fixed */
+/* OBSOLETE             scheduling mode properly.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE          if (ps.pi_osigno == 5 && ps.pi_osigcode == 4) */
+/* OBSOLETE            exec_trap_timer = 1; */
+/* OBSOLETE          else */
+/* OBSOLETE            exec_trap_timer--; */
+/* OBSOLETE           */
+/* OBSOLETE          if (ps.pi_osigno == 5 && exec_trap_timer == 0) */
+/* OBSOLETE            set_fixed_scheduling (pid, parallel == 2); */
+/* OBSOLETE        } */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       if (signal_stack_is_empty ()) */
+/* OBSOLETE    error ("no active threads?!"); */
+/* OBSOLETE     } */
+/* OBSOLETE  */
+/* OBSOLETE   /* Select the thread that stopped, and return *w saying why.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   select_thread (signal_stack->thread); */
+/* OBSOLETE  */
+/* OBSOLETE  FIXME: need to convert from host sig. */
+/* OBSOLETE   stop_signal = signal_stack->signo; */
+/* OBSOLETE   stop_sigcode = signal_stack->subsig; */
+/* OBSOLETE  */
+/* OBSOLETE   WSETSTOP (*w, signal_stack->signo); */
+/* OBSOLETE   w->w_thread = signal_stack->thread; */
+/* OBSOLETE   return (signal_stack--)->pid; */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Select thread THREAD -- its registers, stack, per-thread memory. */
+/* OBSOLETE    This is the only routine that may assign to inferior_thread */
+/* OBSOLETE    or thread_regs[].  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE select_thread (thread) */
+/* OBSOLETE      int thread; */
+/* OBSOLETE { */
+/* OBSOLETE   if (thread == inferior_thread) */
+/* OBSOLETE     return; */
+/* OBSOLETE  */
+/* OBSOLETE   memcpy (thread_regs[inferior_thread], registers, REGISTER_BYTES); */
+/* OBSOLETE   ps.pi_thread = inferior_thread = thread; */
+/* OBSOLETE   if (have_inferior_p ()) */
+/* OBSOLETE     ioctl (inferior_fd, PISETRWTID, &ps); */
+/* OBSOLETE   memcpy (registers, thread_regs[thread], REGISTER_BYTES); */
+/* OBSOLETE } */
+/* OBSOLETE    */
+/* OBSOLETE /* Routine to set or clear a psw bit in the psw and also all psws */
+/* OBSOLETE    saved on the stack.  Quits when we get to a frame in which the */
+/* OBSOLETE    saved psw is correct. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE scan_stack (bit, val) */
+/* OBSOLETE     long bit, val; */
+/* OBSOLETE { */
+/* OBSOLETE   long ps = read_register (PS_REGNUM); */
+/* OBSOLETE   long fp; */
+/* OBSOLETE   if (val ? !(ps & bit) : (ps & bit)) */
+/* OBSOLETE     {     */
+/* OBSOLETE       ps ^= bit; */
+/* OBSOLETE       write_register (PS_REGNUM, ps); */
+/* OBSOLETE  */
+/* OBSOLETE       fp = read_register (FP_REGNUM); */
+/* OBSOLETE       while (fp & 0x80000000) */
+/* OBSOLETE    { */
+/* OBSOLETE      ps = read_memory_integer (fp + 4, 4); */
+/* OBSOLETE      if (val ? (ps & bit) : !(ps & bit)) */
+/* OBSOLETE        break; */
+/* OBSOLETE      ps ^= bit; */
+/* OBSOLETE      write_memory (fp + 4, &ps, 4); */
+/* OBSOLETE      fp = read_memory_integer (fp + 8, 4); */
+/* OBSOLETE    } */
+/* OBSOLETE     } */
+/* OBSOLETE } */
+/* OBSOLETE  */
+/* OBSOLETE /* Set fixed scheduling (alliant mode) of process PID to ARG (0 or 1).  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE static void */
+/* OBSOLETE set_fixed_scheduling (pid, arg) */
+/* OBSOLETE       int arg; */
+/* OBSOLETE { */
+/* OBSOLETE   struct pattributes pattr; */
+/* OBSOLETE   getpattr (pid, &pattr); */
+/* OBSOLETE   pattr.pattr_pfixed = arg; */
+/* OBSOLETE   setpattr (pid, &pattr); */
+/* OBSOLETE } */
+/* OBSOLETE \f */
+/* OBSOLETE void */
+/* OBSOLETE core_file_command (filename, from_tty) */
+/* OBSOLETE      char *filename; */
+/* OBSOLETE      int from_tty; */
+/* OBSOLETE { */
+/* OBSOLETE   int n; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Discard all vestiges of any previous core file */
+/* OBSOLETE      and mark data and stack spaces as empty.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (corefile) */
+/* OBSOLETE     free (corefile); */
+/* OBSOLETE   corefile = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   if (corechan >= 0) */
+/* OBSOLETE     close (corechan); */
+/* OBSOLETE   corechan = -1; */
+/* OBSOLETE  */
+/* OBSOLETE   data_start = 0; */
+/* OBSOLETE   data_end = 0; */
+/* OBSOLETE   stack_start = STACK_END_ADDR; */
+/* OBSOLETE   stack_end = STACK_END_ADDR; */
+/* OBSOLETE   n_core = 0; */
+/* OBSOLETE  */
+/* OBSOLETE   /* Now, if a new core file was specified, open it and digest it.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE   if (filename) */
+/* OBSOLETE     { */
+/* OBSOLETE       filename = tilde_expand (filename); */
+/* OBSOLETE       make_cleanup (free, filename); */
+/* OBSOLETE        */
+/* OBSOLETE       if (have_inferior_p ()) */
+/* OBSOLETE    error ("To look at a core file, you must kill the program with \"kill\"."); */
+/* OBSOLETE       corechan = open (filename, O_RDONLY, 0); */
+/* OBSOLETE       if (corechan < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (myread (corechan, &filehdr, sizeof filehdr) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (!IS_CORE_SOFF_MAGIC (filehdr.h_magic)) */
+/* OBSOLETE    error ("%s: not a core file.\n", filename); */
+/* OBSOLETE  */
+/* OBSOLETE       if (myread (corechan, &opthdr, filehdr.h_opthdr) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE  */
+/* OBSOLETE       /* Read through the section headers. */
+/* OBSOLETE     For text, data, etc, record an entry in the core file map. */
+/* OBSOLETE     For context and tcontext, record the file address of */
+/* OBSOLETE     the context blocks.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       lseek (corechan, (long) filehdr.h_scnptr, 0); */
+/* OBSOLETE  */
+/* OBSOLETE       n_threads = 0; */
+/* OBSOLETE       for (n = 0; n < filehdr.h_nscns; n++) */
+/* OBSOLETE    { */
+/* OBSOLETE      if (myread (corechan, &scnhdr, sizeof scnhdr) < 0) */
+/* OBSOLETE        perror_with_name (filename); */
+/* OBSOLETE      if ((scnhdr.s_flags & S_TYPMASK) >= S_TEXT */
+/* OBSOLETE          && (scnhdr.s_flags & S_TYPMASK) <= S_COMON) */
+/* OBSOLETE        { */
+/* OBSOLETE          core_map[n_core].mem_addr = scnhdr.s_vaddr; */
+/* OBSOLETE          core_map[n_core].mem_end = scnhdr.s_vaddr + scnhdr.s_size; */
+/* OBSOLETE          core_map[n_core].file_addr = scnhdr.s_scnptr; */
+/* OBSOLETE          core_map[n_core].type = scnhdr.s_flags & S_TYPMASK; */
+/* OBSOLETE          if (core_map[n_core].type != S_TBSS */
+/* OBSOLETE              && core_map[n_core].type != S_TDATA */
+/* OBSOLETE              && core_map[n_core].type != S_TTEXT) */
+/* OBSOLETE            core_map[n_core].thread = -1; */
+/* OBSOLETE          else if (n_core == 0 */
+/* OBSOLETE                   || core_map[n_core-1].mem_addr != scnhdr.s_vaddr) */
+/* OBSOLETE            core_map[n_core].thread = 0; */
+/* OBSOLETE          else  */
+/* OBSOLETE            core_map[n_core].thread = core_map[n_core-1].thread + 1; */
+/* OBSOLETE          n_core++; */
+/* OBSOLETE        } */
+/* OBSOLETE      else if ((scnhdr.s_flags & S_TYPMASK) == S_CONTEXT) */
+/* OBSOLETE        context_offset = scnhdr.s_scnptr; */
+/* OBSOLETE      else if ((scnhdr.s_flags & S_TYPMASK) == S_TCONTEXT)  */
+/* OBSOLETE        tcontext_offset[n_threads++] = scnhdr.s_scnptr; */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       /* Read the context block, struct user, struct proc, */
+/* OBSOLETE     and the comm regs.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       lseek (corechan, context_offset, 0); */
+/* OBSOLETE       if (myread (corechan, &c, sizeof c) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE       lseek (corechan, c.core_user_p, 0); */
+/* OBSOLETE       if (myread (corechan, &u, sizeof u) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE       lseek (corechan, c.core_proc_p, 0); */
+/* OBSOLETE       if (myread (corechan, &pr, sizeof pr) < 0) */
+/* OBSOLETE    perror_with_name (filename); */
+/* OBSOLETE       comm_registers = pr.p_creg; */
+/* OBSOLETE  */
+/* OBSOLETE       /* Core file apparently is really there.  Make it really exist */
+/* OBSOLETE     for xfer_core_file so we can do read_memory on it. *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       if (filename[0] == '/') */
+/* OBSOLETE    corefile = savestring (filename, strlen (filename)); */
+/* OBSOLETE       else */
+/* OBSOLETE    corefile = concat (current_directory, "/", filename, NULL); */
+/* OBSOLETE  */
+/* OBSOLETE       printf_filtered ("Program %s ", u.u_comm); */
+/* OBSOLETE  */
+/* OBSOLETE       /* Read the thread registers and fill in the thread_xxx[] data.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       for (n = 0; n < n_threads; n++) */
+/* OBSOLETE    { */
+/* OBSOLETE      select_thread (n); */
+/* OBSOLETE  */
+/* OBSOLETE      lseek (corechan, tcontext_offset[n], 0); */
+/* OBSOLETE      if (myread (corechan, &tc, sizeof tc) < 0) */
+/* OBSOLETE        perror_with_name (corefile); */
+/* OBSOLETE      lseek (corechan, tc.core_thread_p, 0); */
+/* OBSOLETE      if (myread (corechan, &th, sizeof th) < 0) */
+/* OBSOLETE        perror_with_name (corefile); */
+/* OBSOLETE  */
+/* OBSOLETE      lseek (corechan, tc.core_syscall_context_p, 0); */
+/* OBSOLETE      if (myread (corechan, registers, REGISTER_BYTES) < 0) */
+/* OBSOLETE        perror_with_name (corefile); */
+/* OBSOLETE  */
+/* OBSOLETE      thread_signal[n] = th.t_cursig; */
+/* OBSOLETE      thread_sigcode[n] = th.t_code; */
+/* OBSOLETE      thread_state[n] = th.t_state; */
+/* OBSOLETE      thread_pc[n] = read_pc (); */
+/* OBSOLETE  */
+/* OBSOLETE      if (thread_pc[n] > STACK_END_ADDR) */
+/* OBSOLETE        { */
+/* OBSOLETE          POP_FRAME; */
+/* OBSOLETE          if (is_break_pc (thread_pc[n])) */
+/* OBSOLETE            thread_pc[n] = read_pc () - 2; */
+/* OBSOLETE          else */
+/* OBSOLETE            thread_pc[n] = read_pc (); */
+/* OBSOLETE          write_register (PC_REGNUM, thread_pc[n]); */
+/* OBSOLETE        } */
+/* OBSOLETE  */
+/* OBSOLETE      printf_filtered ("thread %d received signal %d, %s\n", */
+/* OBSOLETE                       n, thread_signal[n], */
+/* OBSOLETE                       safe_strsignal (thread_signal[n])); */
+/* OBSOLETE    } */
+/* OBSOLETE  */
+/* OBSOLETE       /* Select an interesting thread -- also-rans died with SIGKILL, */
+/* OBSOLETE     so find one that didn't.  *x/ */
+/* OBSOLETE  */
+/* OBSOLETE       for (n = 0; n < n_threads; n++) */
+/* OBSOLETE    if (thread_signal[n] != 0 && thread_signal[n] != SIGKILL) */
+/* OBSOLETE      { */
+/* OBSOLETE        select_thread (n); */
+/* OBSOLETE        stop_signal = thread_signal[n]; */
+/* OBSOLETE        stop_sigcode = thread_sigcode[n]; */
+/* OBSOLETE        break; */
+/* OBSOLETE      } */
+/* OBSOLETE  */
+/* OBSOLETE       core_aouthdr.a_magic = 0; */
+/* OBSOLETE  */
+/* OBSOLETE       flush_cached_frames (); */
+/* OBSOLETE       select_frame (get_current_frame (), 0); */
+/* OBSOLETE       validate_files (); */
+/* OBSOLETE  */
+/* OBSOLETE       print_stack_frame (selected_frame, selected_frame_level, -1); */
+/* OBSOLETE     } */
+/* OBSOLETE   else if (from_tty) */
+/* OBSOLETE     printf_filtered ("No core file now.\n"); */
+/* OBSOLETE } */
index 11124c7..10e4ef7 100644 (file)
@@ -1,3 +1,29 @@
+Fri Jun 25 11:47:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote.texi (Communication Protocol): ``v'' is in use. Fix
+       numerous formatting errors.  Clarify ``i''.  Mark ``i'', ``Z'',
+       ``z'' and ``qRcmd'' as draft instead of reserved.  Identify
+       packets that are not supported on all hosts. Expand examples.
+       Spell check.
+
+1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+       * Makefile.in: Recognize html, install-html.  Add targets
+       to build HTML versions of documentation via texi2html.
+
+Thu Jun 24 15:59:03 1999  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * gdbint.texinfo (Testsuite): New chapter, information about the
+       testsuite.
+
+Fri Jun 25 02:40:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote.texi (Communication Protocol): Rewrite.
+
+Thu Jun 24 16:59:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * stabs.texinfo: Fix uses of xref.
+
 Thu Jun 17 17:23:25 1999  Stan Shebs  <shebs@andros.cygnus.com>
 
        * gdbint.texinfo: Add an anti-printf exhortation, and update the
index 4bcd62e..f81e583 100644 (file)
@@ -23,6 +23,7 @@ VPATH = @srcdir@
 prefix = @prefix@
 
 infodir = @infodir@
+htmldir = $(prefix)/html
 
 SHELL = @SHELL@
 
@@ -39,6 +40,9 @@ TEXIDIR=${gdbdir}/../texinfo
 # where to find makeinfo, preferably one designed for texinfo-2
 MAKEINFO=makeinfo
 
+MAKEHTML = texi2html
+MAKEHTMLFLAGS = -glossary -menu -split_chapter
+
 # where to find texi2roff, ditto
 TEXI2ROFF=texi2roff
 
@@ -94,6 +98,7 @@ all install:
 info: gdb.info gdbint.info stabs.info
 dvi: gdb.dvi gdbint.dvi stabs.dvi refcard.dvi
 ps: gdb.ps gdbint.ps stabs.ps refcard.ps
+html: gdb_toc.html gdbint_toc.html stabs_toc.html
 all-doc: info dvi ps
 
 install-info: info
@@ -101,6 +106,11 @@ install-info: info
                $(INSTALL_DATA) $$i $(infodir)/$$i ; \
        done
 
+install-html: html
+       for i in *.html ; do \
+               $(INSTALL_DATA) $$i $(htmldir)/$$i ; \
+       done
+
 STAGESTUFF = *.info* gdb-all.texi GDBvn.texi *.ps *.dvi
 
 # Copy the object files from a particular stage into a subdirectory.
@@ -152,7 +162,7 @@ distclean: clean
 # "clean" or "distclean".  Use maintainer-clean to remove them.
 
 maintainer-clean realclean: distclean
-       rm -f GDBvn.texi *.info* *.dvi *.ps
+       rm -f GDBvn.texi *.info* *.dvi *.ps *.html
 
 # GDB QUICK REFERENCE (dvi output)
 refcard.dvi : refcard.tex $(REFEDITS)
@@ -303,6 +313,11 @@ gdb.mm: $(SFILES_LOCAL) links2roff rluser.texinfo inc-hist.texi
        sed -e 's/---/\\(em/g' \
        >gdb.mm 
 
+# GDB MANUAL: HTML file
+
+gdb_toc.html: ${SFILES_DOC}
+       $(MAKEHTML) $(MAKEHTMLFLAGS) -I ${READLINE_DIR} -I $(srcdir) $(srcdir)/gdb.texinfo
+
 
 # GDB INTERNALS MANUAL: TeX dvi file
 gdbint.dvi : gdbint.texinfo
@@ -320,9 +335,19 @@ gdbint.ps : gdbint.dvi
 gdbint.info: gdbint.texinfo
        $(MAKEINFO) -o gdbint.info $(srcdir)/gdbint.texinfo
 
+# GDB INTERNALS MANUAL: HTML file
+
+gdbint_toc.html: gdbint.texinfo
+       $(MAKEHTML) $(MAKEHTMLFLAGS) $(srcdir)/gdbint.texinfo
+
 stabs.info: stabs.texinfo
        $(MAKEINFO) -o stabs.info $(srcdir)/stabs.texinfo
 
+# STABS DOCUMENTATION: HTML file
+
+stabs_toc.html: stabs.texinfo
+       $(MAKEHTML) $(MAKEHTMLFLAGS) $(srcdir)/stabs.texinfo
+
 # STABS DOCUMENTATION: TeX dvi file
 stabs.dvi : stabs.texinfo
        $(SET_TEXINPUTS) $(TEX) stabs.texinfo
index daafaaf..6067813 100644 (file)
@@ -46,7 +46,7 @@ regarded as a program in the language TeX).
 @page
 @tex
 \def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
-\xdef\manvers{\$Revision: 1.1.1.8 $}  % For use in headers, footers too
+\xdef\manvers{\$Revision: 1.1.1.9 $}  % For use in headers, footers too
 {\parskip=0pt
 \hfill Cygnus Solutions\par
 \hfill \manvers\par
@@ -86,6 +86,7 @@ as the mechanisms that adapt GDB to specific hosts and targets.
 * Support Libraries::
 * Coding::
 * Porting GDB::
+* Testsuite::
 * Hints::
 @end menu
 
@@ -2559,6 +2560,149 @@ files @file{gdb.info*} in the distribution.  Note the plural;
 @code{makeinfo} will split the document into one overall file and five
 or so included files.
 
+@node Testsuite
+
+@chapter Testsuite
+
+The testsuite is an important component of the GDB package.  While it is
+always worthwhile to encourage user testing, in practice this is rarely
+sufficient; users typically use only a small subset of the available
+commands, and it has proven all too common for a change to cause a
+significant regression that went unnoticed for some time.
+
+The GDB testsuite uses the DejaGNU testing framework.  DejaGNU is built
+using tcl and expect.  The tests themselves are calls to various tcl
+procs; the framework runs all the procs and summarizes the passes and
+fails.
+
+@section Using the Testsuite
+
+To run the testsuite, simply go to the GDB object directory (or to the
+testsuite's objdir) and type @code{make check}.  This just sets up some
+environment variables and invokes DejaGNU's @code{runtest} script.  While
+the testsuite is running, you'll get mentions of which test file is in use,
+and a mention of any unexpected passes or fails.  When the testsuite is
+finished, you'll get a summary that looks like this:
+@example
+                === gdb Summary ===
+
+# of expected passes            6016
+# of unexpected failures        58
+# of unexpected successes       5
+# of expected failures          183
+# of unresolved testcases       3
+# of untested testcases         5
+@end example
+The ideal test run consists of expected passes only; however, reality
+conspires to keep us from this ideal.  Unexpected failures indicate
+real problems, whether in GDB or in the testsuite.  Expected failures
+are still failures, but ones which have been decided are too hard to
+deal with at the time; for instance, a test case might work everywhere
+except on AIX, and there is no prospect of the AIX case being fixed in
+the near future.  Expected failures should not be added lightly, since
+you may be masking serious bugs in GDB.  Unexpected successes are expected
+fails that are passing for some reason, while unresolved and untested
+cases often indicate some minor catastrophe, such as the compiler being
+unable to deal with a test program.
+
+When making any significant change to GDB, you should run the testsuite
+before and after the change, to confirm that there are no regressions.
+Note that truly complete testing would require that you run the
+testsuite with all supported configurations and a variety of compilers;
+however this is more than really necessary.  In many cases testing with
+a single configuration is sufficient.  Other useful options are to test
+one big-endian (Sparc) and one little-endian (x86) host, a cross config
+with a builtin simulator (powerpc-eabi, mips-elf), or a 64-bit host
+(Alpha).
+
+If you add new functionality to GDB, please consider adding tests for it
+as well; this way future GDB hackers can detect and fix their changes
+that break the functionality you added.  Similarly, if you fix a bug
+that was not previously reported as a test failure, please add a test
+case for it.  Some cases are extremely difficult to test, such as code
+that handles host OS failures or bugs in particular versions of
+compilers, and it's OK not to try to write tests for all of those.
+
+@section Testsuite Organization
+
+The testsuite is entirely contained in @file{gdb/testsuite}.  While the
+testsuite includes some makefiles and configury, these are very minimal,
+and used for little besides cleaning up, since the tests themselves
+handle the compilation of the programs that GDB will run.  The file
+@file{testsuite/lib/gdb.exp} contains common utility procs useful for
+all GDB tests, while the directory @file{testsuite/config} contains
+configuration-specific files, typically used for special-purpose
+definitions of procs like @code{gdb_load} and @code{gdb_start}.
+
+The tests themselves are to be found in @file{testsuite/gdb.*} and
+subdirectories of those.  The names of the test files must always end
+with @file{.exp}.  DejaGNU collects the test files by wildcarding
+in the test directories, so both subdirectories and individual files
+get chosen and run in alphabetical order.
+
+The following table lists the main types of subdirectories and what they
+are for.  Since DejaGNU finds test files no matter where they are
+located, and since each test file sets up its own compilation and
+execution environment, this organization is simply for convenience and
+intelligibility.
+
+@table @code
+
+@item gdb.base
+
+This is the base testsuite.  The tests in it should apply to all
+configurations of GDB (but generic native-only tests may live here).
+The test programs should be in the subset of C that is valid K&R,
+ANSI/ISO, and C++ (ifdefs are allowed if necessary, for instance
+for prototypes).
+
+@item gdb.@var{lang}
+
+Language-specific tests for all languages besides C.  Examples are
+@file{gdb.c++} and @file{gdb.java}.
+
+@item gdb.@var{platform}
+
+Non-portable tests.  The tests are specific to a specific configuration
+(host or target), such as HP-UX or eCos.  Example is @file{gdb.hp}, for
+HP-UX.
+
+@item gdb.@var{compiler}
+
+Tests specific to a particular compiler.  As of this writing (June
+1999), there aren't currently any groups of tests in this category that
+couldn't just as sensibly be made platform-specific, but one could
+imagine a gdb.gcc, for tests of GDB's handling of GCC extensions.
+
+@item gdb.@var{subsystem}
+
+Tests that exercise a specific GDB subsystem in more depth.  For
+instance, @file{gdb.disasm} exercises various disassemblers, while
+@file{gdb.stabs} tests pathways through the stabs symbol reader.
+
+@end table
+
+@section Writing Tests
+
+In many areas, the GDB tests are already quite comprehensive; you
+should be able to copy existing tests to handle new cases.
+
+You should try to use @code{gdb_test} whenever possible, since it
+includes cases to handle all the unexpected errors that might happen.
+However, it doesn't cost anything to add new test procedures; for
+instance, @file{gdb.base/exprs.exp} defines a @code{test_expr} that
+calls @code{gdb_test} multiple times.
+
+Only use @code{send_gdb} and @code{gdb_expect} when absolutely
+necessary, such as when GDB has several valid responses to a command.
+
+The source language programs do @emph{not} need to be in a consistent
+style.  Since GDB is used to debug programs written in many different
+styles, it's worth having a mix of styles in the testsuite; for
+instance, some GDB bugs involving the display of source lines would
+never manifest themselves if the programs used GNU coding style
+uniformly.
+
 @node Hints
 
 @chapter Hints
index adf8e00..7b3c057 100644 (file)
@@ -95,7 +95,7 @@ recently added stubs.
 * Stub Contents::       What the stub can do for you
 * Bootstrapping::       What you must do for the stub
 * Debug Session::       Putting it all together
-* Protocol::            Outline of the communication protocol
+* Protocol::            Definition of the communication protocol
 * Server::             Using the `gdbserver' program
 * NetWare::            Using the `gdbserve.nlm' program
 @end menu
@@ -365,79 +365,620 @@ the protocol---for example, if there is only one serial port to your
 target machine, you might want your program to do something special if
 it recognizes a packet meant for @value{GDBN}.
 
+In the examples below, @samp{<-} and @samp{->} are used to indicate
+transmitted and received data respectfully.
+
 @cindex protocol, @value{GDBN} remote serial
 @cindex serial protocol, @value{GDBN} remote
 @cindex remote serial protocol
-All @value{GDBN} commands and responses (other than acknowledgements, which
-are single characters) are sent as a packet which includes a
-checksum.  A packet is introduced with the character @samp{$}, and ends
-with the character @samp{#} followed by a two-digit checksum:
+All @value{GDBN} commands and responses (other than acknowledgments)
+are sent as a @var{packet}.  A @var{packet} is introduced with the
+character @samp{$}, this is followed by an optional two-digit
+@var{sequence-id} and the character @samp{:}, the actual
+@var{packet-data}, and the terminating character @samp{#} followed by a
+two-digit @var{checksum}:
 
 @example
-$@var{packet info}#@var{checksum}
+@code{$}@var{packet-data}@code{#}@var{checksum}
+@end example
+@noindent
+or, with the optional @var{sequence-id}:
+@example
+@code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
 @end example
 
 @cindex checksum, for @value{GDBN} remote
 @noindent
-@var{checksum} is computed as the modulo 256 sum of the @var{packet
-info} characters.
+The two-digit @var{checksum} is computed as the modulo 256 sum of all
+characters between the leading @samp{$} and the trailing @samp{#} (that
+consisting of both the optional @var{sequence-id}@code{:} and the actual
+@var{packet-data}).
+
+@cindex sequence-id, for @value{GDBN} remote
+@noindent
+The two-digit @var{sequence-id}, when present, is returned with the
+acknowledgment.  Beyond that its meaning is poorly defined.
+@value{GDBN} is not known to output @var{sequence-id}s.
 
 When either the host or the target machine receives a packet, the first
-response expected is an acknowledgement: a single character, either
-@samp{+} (to indicate the package was received correctly) or @samp{-}
-(to request retransmission).
+response expected is an acknowledgment: either @samp{+} (to indicate
+the package was received correctly) or @samp{-} (to request
+retransmission):
 
-The host (@value{GDBN}) sends commands, and the target (the debugging stub
-incorporated in your program) sends data in response.  The target also
-sends data when your program stops.
+@example
+<- @code{$}@var{packet-data}@code{#}@var{checksum}
+-> @code{+}
+@end example
+@noindent
+If the received packet included a @var{sequence-id} than that is
+appended to a positive acknowledgment:
 
-Command packets are distinguished by their first character, which
-identifies the kind of command.
+@example
+<- @code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
+-> @code{+}@var{sequence-id}
+@end example
 
-These are some of the commands currently supported (for a complete list of 
-commands, look in @file{gdb/remote.c.}):
+The host (@value{GDBN}) sends @var{command}s, and the target (the
+debugging stub incorporated in your program) sends a @var{response}.  In
+the case of step and continue @var{command}s, the response is only sent
+when the operation has completed (the target has again stopped).
+
+@var{packet-data} consists of a sequence of characters with the
+exception of @samp{#} and @samp{$} (see @samp{X} packet for an
+exception). @samp{:} can not appear as the third character in a packet.
+Fields within the packet should be separated using @samp{,} and @samp{;}
+(unfortunately some packets chose to use @samp{:}).  Except where
+otherwise noted all numbers are represented in HEX with leading zeros
+suppressed.
+
+Response @var{data} can be run-length encoded to save space.  A @samp{*}
+means that the next character is an ASCII encoding giving a repeat count
+which stands for that many repetitions of the character preceding the
+@samp{*}.  The encoding is @code{n+29}, yielding a printable character
+where @code{n >=3} (which is where rle starts to win).  Don't use an
+@code{n > 126}.
+
+So:
+@example
+"@code{0* }"
+@end example
+@noindent
+means the same as "0000".
 
-@table @code
-@item g
-Requests the values of CPU registers.
+The error response, returned for some packets includes a two character
+error number.  That number is not well defined.
 
-@item G
-Sets the values of CPU registers.
+For any @var{command} not supported by the stub, an empty response
+(@samp{$#00}) should be returned.  That way it is possible to extend the
+protocol.  A newer @value{GDBN} can tell if a packet is supported based
+on the response.
 
-@item m@var{addr},@var{count}
-Read @var{count} bytes at location @var{addr}.
+Below is a complete list of all currently defined @var{command}s and
+their corresponding response @var{data}:
 
-@item M@var{addr},@var{count}:@dots{}
-Write @var{count} bytes at location @var{addr}.
+@multitable @columnfractions .30 .30 .40
+@item Packet
+@tab Request
+@tab Description
 
-@need 500
-@item c
-@itemx c@var{addr}
-Resume execution at the current address (or at @var{addr} if supplied).
+@item extended ops @emph{(optional)}
+@tab @code{!}
+@tab
+Use the extended remote protocol. Sticky -- only needs to be set once.
+The extended remote protocol support the @samp{R} packet.
+@item
+@tab reply @samp{}
+@tab
+Stubs that support the extended remote protocol return @samp{} which,
+unfortunately, is identical to the response returned by stubs that do not
+support protocol extensions.
+
+@item last signal
+@tab @code{?}
+@tab
+Reply the current reason for stopping.  This is the same reply as is
+generated for step or cont : @code{S}@var{AA} where @var{AA} is the
+signal number.
+
+@item reserved
+@tab @code{a}
+@tab Reserved for future use 
+
+@item set program arguments @strong{(reserved)} @emph{(optional)}
+@tab @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,...}
+@tab
+Initialized @samp{argv[]} array passed into program. @var{arglen}
+specifies the number of bytes in the hex encoded byte stream @var{arg}.
+@item
+@tab reply @code{OK}
+@item
+@tab reply @code{E}@var{NN}
+
+@item set baud @strong{(deprecated)}
+@tab @code{b}@var{baud}
+@tab
+Change the serial line speed to @var{baud}.  JTC: @emph{When does the
+transport layer state change?  When it's received, or after the ACK is
+transmitted.  In either case, there are problems if the command or the
+acknowledgment packet is dropped.} Stan: @emph{If people really wanted
+to add something like this, and get it working for the first time, they
+ought to modify ser-unix.c to send some kind of out-of-band message to a
+specially-setup stub and have the switch happen "in between" packets, so
+that from remote protocol's point of view, nothing actually
+happened.}
+
+@item set breakpoint @strong{(deprecated)}
+@tab @code{B}@var{addr},@var{mode}
+@tab
+Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a
+breakpoint at @var{addr}.  @emph{This has been replaced by the @samp{Z} and
+@samp{z} packets.}
+
+@item continue
+@tab @code{c}@var{addr}
+@tab
+@var{addr} is address to resume. If @var{addr} is omitted, resume at
+current address.
+@item
+@tab reply
+@tab see below
+
+@item continue with signal @emph{(optional)}
+@tab @code{C}@var{sig}@code{;}@var{addr}
+@tab
+Continue with signal @var{sig} (hex signal number).  If
+@code{;}@var{addr} is omitted, resume at same address.
+@item
+@tab reply
+@tab see below
 
-@need 500
-@item s
-@itemx s@var{addr}
-Step the target program for one instruction, from either the current
-program counter or from @var{addr} if supplied.
-
-@item k
-Kill the target program.
-
-@item ?
-Report the most recent signal.  To allow you to take advantage of the
-@value{GDBN} signal handling commands, one of the functions of the debugging
-stub is to report CPU traps as the corresponding POSIX signal values.
-
-@item T
-Allows the remote stub to send only the registers that @value{GDBN} needs
-to make a quick decision about single-stepping or conditional breakpoints.
-This eliminates the need to fetch the entire register set for each instruction
-being stepped through.
-
-@value{GDBN} now implements a write-through cache for registers and only
-re-reads the registers if the target has run.
-@end table
+@item toggle debug @emph{(optional)}
+@tab @code{d}
+@tab
+toggle debug flag (see 386 & 68k stubs)
+
+@item detach @emph{(optional)}
+@tab @code{D}
+@tab Reply OK.
+
+@item reserved
+@tab @code{e}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{E}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{f}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{F}
+@tab Reserved for future use 
+
+@item read registers
+@tab @code{g}
+@tab Read general registers.
+@item
+@tab reply @var{XX...}
+@tab
+Each byte of register data is described by two hex digits.  The bytes
+with the register are transmitted in target byte order.  The size of
+each register and their position within the @samp{g} @var{packet} is
+determined by the @var{REGISTER_RAW_SIZE} and @var{REGISTER_NAME}
+macros.
+@item
+@tab @code{E}@var{NN}
+@tab for an error.
+
+@item write regs
+@tab @code{G}@var{XX...}
+@tab
+See @samp{g} for a description of the @var{XX...} data.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item reserved
+@tab @code{h}
+@tab Reserved for future use 
+
+@item set thread @emph{(optional)}
+@tab @code{H}@var{c}@var{t...}
+@tab
+Set thread for subsequent operations.  @var{c} = @samp{c} for thread
+used in step and continue; @var{t...} can be -1 for all threads.
+@var{c} = @samp{g} for thread used in other operations.  If zero, pick a
+thread, any thread.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item cycle step @strong{(draft)} @emph{(optional)}
+@tab @code{i}@var{addr}@code{,}@var{nnn}
+@tab
+Step the remote target by a single clock cycle.  If @code{,}@var{nnn} is
+present, cycle step @var{nnn} cycles.  If @var{addr} is present, cycle
+step starting at that address.
+
+@item signal then cycle step @strong{(reserved)} @emph{(optional)}
+@tab @code{I}
+@tab
+See @samp{i} and @samp{S} for likely syntax and semantics.
+
+@item reserved
+@tab @code{j}
+@tab Reserved for future use
+
+@item reserved
+@tab @code{J}
+@tab Reserved for future use 
+
+@item kill request @emph{(optional)}
+@tab @code{k}
+@tab
+
+@item reserved
+@tab @code{l}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{L}
+@tab Reserved for future use 
+
+@item read memory
+@tab @code{m}@var{addr}@code{,}@var{length}
+@tab
+Read @var{length} bytes of memory starting at address @var{addr}.
+@item
+@tab reply @var{XX...}
+@tab
+@var{XX...} is mem contents. Can be fewer bytes than requested if able to
+read only part of the data.
+@item
+@tab reply @code{E}@var{NN}
+@tab @var{NN} is errno
+
+@item write mem
+@tab @code{M}@var{addr},@var{length}@code{:}@var{XX...}
+@tab
+Write @var{length} bytes of memory starting at address @var{addr}.
+@var{XX...} is the data.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab
+for an error (this includes the case where only part of the data was
+written).
+
+@item reserved
+@tab @code{n}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{N}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{o}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{O}
+@tab Reserved for future use 
+
+@item read reg @strong{(reserved)}
+@tab @code{p}@var{n...}
+@tab
+See write register.
+@item
+@tab return @var{r....}
+@tab The hex encoded value of the register in target byte order.
+
+@item write reg @emph{(optional)}
+@tab @code{P}@var{n...}@code{=}@var{r...}
+@tab
+Write register @var{n...} with value @var{r...}, which contains two hex
+digits for each byte in the register (target byte order).
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item general query @emph{(optional)}
+@tab @code{q}@var{query}
+@tab
+Request info about @var{query}. In general @value{GDBN} @var{query}'s
+have a leading upper case letter.  Custom vendor queries should use a
+leading lower case letter and a company prefix, ex: @samp{qfsf.var}.
+@var{query} may optionally be followed by a @samp{,} or @samp{;}
+separated list.  Stubs should ensure that they fully match any
+@var{query} name.
+@item
+@tab reply @code{XX...}
+@tab Hex encoded data from query. The reply can not be empty.
+@item
+@tab reply @code{E}@var{NN}
+@tab error reply
+@item
+@tab reply @samp{}
+@tab Indicating an unrecognized @var{query}.
+
+@item current thread
+@tab @code{q}@code{C}
+@tab Return the current thread id.
+@item
+@tab reply @code{QC}@var{pid}
+@tab
+Where @var{pid} is a HEX encoded 16 bit process id.
+@item
+@tab reply *
+@tab Any other reply implies the old pid.
+
+@item compute CRC of memory block
+@tab @code{q}@code{CRC:}@var{addr}@code{,}@var{length}
+@tab
+@item
+@tab reply @code{E}@var{NN}
+@tab An error (such as memory fault)
+@item
+@tab reply @code{C}@var{CRC32}
+@tab A 32 bit cyclic redundancy check of the specified memory region.
+
+@item query @var{LIST} or @var{threadLIST}
+@tab @code{q}@code{L}@var{startflag}@var{threadcount}@var{nextthread}
+@tab
+Obtain thread information from RTOS.  @var{startflag} is one hex digit;
+@var{threadcount} is two hex digits; and @var{nextthread} is 16 hex
+digits.
+@item
+@tab reply *
+@tab
+See @code{remote.c:parse_threadlist_response()}.
+
+@item query sect offs
+@tab @code{q}@code{Offsets}
+@tab Get section offsets.
+@item
+@tab reply @code{Text=}@var{xxx}@code{;Data=}@var{yyy}@code{;Bss=}@var{zzz}
+
+@item thread info request
+@tab @code{q}@code{P}@var{mode}@var{threadid}
+@tab
+Returns information on @var{threadid}.  Where: @var{mode} is a hex
+encoded 32 bit mode; @var{threadid} is a hex encoded 64 bit thread ID.
+@item
+@tab reply *
+@tab
+See @code{remote.c:remote_unpack_thread_info_response()}.
+
+@item remote command @strong{(reserved)}
+@tab @code{q}@code{Rcmd,}@var{COMMAND}
+@tab
+@var{COMMAND} (hex encoded) is passed to the local interpreter for
+execution.  @emph{Implementors should note that providing access to a
+stubs's interpreter may have security implications}.
+@item
+@tab reply @var{OUTPUT}
+@tab
+The @var{OUTPUT} (hex encoded).  Must be non-empty.
+@item
+@tab reply @samp{}
+@tab
+When @samp{q}@samp{Rcmd} is not recognized.
+
+@item general set @emph{(optional)}
+@tab @code{Q}@var{var}@code{=}@var{val}
+@tab
+Set value of @var{var} to @var{val}.  See @samp{q} for a discussing of
+naming conventions.
+
+@item reset @emph{(optional)}
+@tab r
+@tab reset -- see sparc stub.
+
+@item remote restart @emph{(optional)}
+@tab @code{R}@var{XX}
+@tab
+Restart the remote server. @var{XX} while needed has no clear
+definition.
+
+@item step @emph{(optional)}
+@tab @code{s}@var{addr}
+@tab
+@var{addr} is address to resume.  If @var{addr} is omitted, resume at
+same address.
+@item
+@tab reply
+@tab see below
+
+@item step with signal @emph{(optional)}
+@tab @code{S}@var{sig}@code{;}@var{addr}
+@tab
+Like @samp{C} but step not continue.
+@item
+@tab reply
+@tab see below
+
+@item search @emph{(optional)}
+@tab @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM}
+@tab
+Search backwards starting at address @var{addr} for a match with pattern
+@var{PP} and mask @var{MM}.  @var{PP} and @var{MM} are 4
+bytes. @var{addr} must be at least 3 digits.
+
+@item thread alive @emph{(optional)}
+@tab @code{T}@var{XX}
+@tab Find out if the thread XX is alive.
+@item
+@tab reply @code{OK}
+@tab thread is still alive
+@item
+@tab reply @code{E}@var{NN}
+@tab thread is dead
+       
+@item reserved
+@tab @code{u}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{U}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{v}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{V}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{w}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{W}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{x}
+@tab Reserved for future use 
+
+@item write mem (binary) @emph{(optional)}
+@tab @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX...}
+@tab
+@var{addr} is address, @var{length} is number of bytes, @var{XX...} is
+binary data.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item reserved
+@tab @code{y}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{Y}
+@tab Reserved for future use 
+
+@item remove break or watchpoint @strong{(draft)} @emph{(optional)}
+@tab @code{z}@var{t}@code{,}@var{addr}@code{,}@var{length}
+@tab
+See @samp{Z}.
+
+@item insert break or watchpoint @strong{(draft)} @emph{(optional)}
+@tab @code{Z}@var{t}@code{,}@var{addr}@code{,}@var{length}
+@tab
+@var{t} is type: @samp{0} - software breakpoint, @samp{1} - hardware
+breakpoint, @samp{2} - write watchpoint, @samp{3} - read watchpoint,
+@samp{4} - access watchpoint; @var{addr} is address; @var{length} is in
+bytes.  For a software breakpoint, @var{length} specifies the size of
+the instruction to be patched.  For hardware breakpoints and watchpoints
+@var{length} specifies the memory region to be monitored.
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab @samp{}
+@tab If not supported.
+
+@item reserved
+@tab <other>
+@tab Reserved for future use 
+
+@end multitable
+
+In the case of the @samp{C}, @samp{c}, @samp{S} and @samp{s} packets,
+there is no immediate response.  The reply, described below, comes when
+the machine stops:
+
+@multitable @columnfractions .4 .6
+
+@item @code{S}@var{AA}
+@tab @var{AA} is the signal number
+
+@item @code{T}@var{AA}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}
+@tab
+@var{AA} = two hex digit signal number; @var{n...} = register number
+(hex), @var{r...}  = target byte ordered register contents, size defined
+by @code{REGISTER_RAW_SIZE}; @var{n...} = @samp{thread}, @var{r...} =
+thread process ID, this is a hex integer; @var{n...} = other string not
+starting with valid hex digit. @value{GDBN} should ignore this
+@var{n...}, @var{r...} pair and go on to the next.  This way we can
+extend the protocol.
+
+@item @code{W}@var{AA}
+@tab
+The process exited, and @var{AA} is the exit status.  This is only
+applicable for certains sorts of targets.
+
+@item @code{X}@var{AA}
+@tab
+The process terminated with signal @var{AA}.
+
+@item @code{N}@var{AA}@code{;}@var{tttttttt}@code{;}@var{dddddddd}@code{;}@var{bbbbbbbb} @strong{(obsolete)}
+@tab
+@var{AA} = signal number; @var{tttttttt} = address of symbol "_start";
+@var{dddddddd} = base of data section; @var{bbbbbbbb} = base of bss
+section. @emph{Note: only used by Cisco Systems targets.  The difference
+between this reply and the "qOffsets" query is that the 'N' packet may
+arrive spontaneously whereas the 'qOffsets' is a query initiated by the
+host debugger.}
+
+@item @code{O}@var{XX...}
+@tab
+@var{XX...} is hex encoding of ASCII data. This can happen at any time
+while the program is running and the debugger should continue to wait
+for 'W', 'T', etc.
+
+@end multitable
+
+Example sequence of a target being re-started.  Notice how the restart
+does not get any direct output:
+
+@example
+<- @code{R00}
+-> @code{+}
+@emph{target restarts}
+<- @code{?}
+-> @code{+}
+-> @code{T001:1234123412341234}
+<- @code{+}
+@end example
+
+Example sequence of a target being stepped by a single instruction:
+
+@example
+<- @code{G1445...}
+-> @code{+}
+<- @code{s}
+-> @code{+}
+@emph{time passes}
+-> @code{T001:1234123412341234}
+<- @code{+}
+<- @code{g}
+-> @code{+}
+-> @code{1455...}
+<- @code{+}
+@end example
 
 @kindex set remotedebug
 @kindex show remotedebug
index 21156ca..645b0fd 100644 (file)
@@ -43,7 +43,7 @@ regarded as a program in the language TeX).
 @page
 @tex
 \def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
-\xdef\manvers{\$Revision: 1.1.1.2 $}  % For use in headers, footers too
+\xdef\manvers{\$Revision: 1.1.1.3 $}  % For use in headers, footers too
 {\parskip=0pt
 \hfill Cygnus Support\par
 \hfill \manvers\par
@@ -872,7 +872,7 @@ produces the following stabs:
 .stabn 224,0,0,LBE2             # @r{224 is N_RBRAC}
 @end example
 
-@xref{Procedures} for more information on the @code{N_FUN} stab, and
+See @ref{Procedures} for more information on the @code{N_FUN} stab, and
 @ref{Block Structure} for more information on the @code{N_LBRAC} and
 @code{N_RBRAC} stabs.
 
@@ -3370,7 +3370,7 @@ for more information about their use.
 Variable on the stack; see @ref{Stack Variables}.
 
 @item :
-C++ nested symbol; see @xref{Nested Symbols}
+C++ nested symbol; see @xref{Nested Symbols}.
 
 @item a
 Parameter passed by reference in register; see @ref{Reference Parameters}.
index fc20df1..1e22e06 100644 (file)
@@ -119,8 +119,10 @@ sighandler_list;
    function. */
 static int async_handler_ready = 0;
 
+static void create_file_handler PARAMS ((int, int, file_handler_func *, gdb_client_data));
 static void invoke_async_signal_handler PARAMS ((void));
 static int gdb_wait_for_event PARAMS ((void));
+static int gdb_do_one_event PARAMS ((void));
 static int check_async_ready PARAMS ((void));
 \f
 
@@ -236,7 +238,7 @@ process_event ()
    wait for something to happen (via gdb_wait_for_event), then process
    it.  Returns 1 if something was done otherwise returns 0 (this can
    happen if there are no event sources to wait for). */
-int
+static int
 gdb_do_one_event ()
 {
   int result = 0;
@@ -278,6 +280,9 @@ gdb_do_one_event ()
        }                       /* end of if !set_top_level */
       else
        {
+         /* FIXME: this should really be a call to a hook that is
+            interface specific, because interfaces can display the
+            prompt in their own way. */
          display_gdb_prompt (0);
          /* Maybe better to set a flag to be checked somewhere as to
             whether display the prompt or not. */
@@ -285,8 +290,42 @@ gdb_do_one_event ()
     }
   return result;
 }
+
+/* Start up the event loop. This is the entry point to the event loop
+   from the command loop. */
+void 
+start_event_loop ()
+{
+  /* Loop until there is something to do. This is the entry point to
+     the event loop engine. gdb_do_one_event will process one event
+     for each invocation.  It always returns 1, unless there are no
+     more event sources registered. In this case it returns 0.  */
+  while (gdb_do_one_event () != 0)
+    ;
+
+  /* We are done with the event loop. There are no more event sources
+     to listen to.  So we exit GDB. */
+  return;
+}
+
 \f
 
+/* Wrapper function for create_file_handler, so that the caller
+   doesn't have to know implementation details about the use of poll
+   vs. select. */
+void 
+add_file_handler (fd, proc, client_data)
+     int fd;
+     file_handler_func *proc;
+     gdb_client_data client_data;
+{
+#ifdef HAVE_POLL
+  create_file_handler (fd, POLLIN, (file_handler_func *) proc, client_data);
+#else
+  create_file_handler (fd, GDB_READABLE, (file_handler_func *) proc, client_data);
+#endif
+}
+
 /* Add a file handler/descriptor to the list of descriptors we are
    interested in.  
    FD is the file descriptor for the file/stream to be listened to.  
@@ -297,7 +336,7 @@ gdb_do_one_event ()
    For the select case, MASK is a combination of READABLE, WRITABLE, EXCEPTION.
    PROC is the procedure that will be called when an event occurs for
    FD.  CLIENT_DATA is the argument to pass to PROC. */
-void
+static void
 create_file_handler (fd, mask, proc, client_data)
      int fd;
      int mask;
index 5305a67..e06fb8c 100644 (file)
@@ -222,28 +222,33 @@ struct prompts
 #define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
 #define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
 
-/* Exported functions from event-top.c */
+/* Exported functions from event-loop.c */
 
+extern void start_event_loop PARAMS ((void));
 extern void delete_file_handler PARAMS ((int));
-extern void 
-  create_file_handler PARAMS ((int, int, file_handler_func, gdb_client_data));
-extern int gdb_do_one_event PARAMS ((void));
+extern void add_file_handler PARAMS ((int, file_handler_func, gdb_client_data));
 extern void mark_async_signal_handler PARAMS ((async_signal_handler *));
 extern async_signal_handler *
   create_async_signal_handler PARAMS ((async_handler_func *, gdb_client_data));
 extern void delete_async_signal_handler PARAMS ((async_signal_handler *async_handler_ptr));
+
+/* Exported functions from event-top.c. 
+   FIXME: these should really go into top.h. */
+
 extern void display_gdb_prompt PARAMS ((char*));
-extern void start_event_loop PARAMS ((void));
 extern void async_init_signals PARAMS ((void));
 extern void set_async_editing_command PARAMS ((char *, int, struct cmd_list_element *));
 extern void set_async_annotation_level PARAMS ((char *, int, struct cmd_list_element *));
 extern void set_async_prompt PARAMS ((char *, int, struct cmd_list_element *));
 extern void handle_stop_sig PARAMS ((int));
+extern void gdb_readline2 PARAMS ((void));
 
-/* Exported variables from event-top.c */
+/* Exported variables from event-top.c.
+   FIXME: these should really go into top.h. */
 
 extern int async_command_editing_p;
 extern char *async_annotation_suffix;
 extern char *new_async_prompt;
 extern struct prompts the_prompts;
-
+extern void (*call_readline) PARAMS ((void));
+extern void (*input_handler) PARAMS ((char *));
index f658b71..223e670 100644 (file)
@@ -20,9 +20,6 @@
 
 #include "defs.h"
 #include "top.h"
-#ifdef HAVE_POLL
-#include <poll.h>
-#endif
 #include "inferior.h"
 #include "terminal.h" /* for job_control*/
 #include <signal.h>
@@ -38,7 +35,7 @@
 extern void _initialize_event_loop PARAMS ((void));
 
 static void command_line_handler PARAMS ((char *));
-static void gdb_readline2 PARAMS ((void));
+void gdb_readline2 PARAMS ((void));
 static void pop_prompt PARAMS ((void));
 static void push_prompt PARAMS ((char *, char *, char *));
 static void change_line_handler PARAMS ((void));
@@ -160,9 +157,9 @@ readline_input_state;
 \f
 
 /* Initialize all the necessary variables, start the event loop,
-   register readline, and stdin. */
+   register readline, and stdin, start the loop. */
 void
-start_event_loop ()
+cli_command_loop ()
 {
   int length;
   char *a_prompt;
@@ -185,16 +182,8 @@ start_event_loop ()
   else
     display_gdb_prompt (0);
 
-  /* Loop until there is something to do. This is the entry point to
-     the event loop engine. gdb_do_one_event will process one event
-     for each invocation.  It always returns 1, unless there are no
-     more event sources registered. In this case it returns 0.  */
-  while (gdb_do_one_event () != 0)
-    ;
-
-  /* We are done with the event loop. There are no more event sources
-     to listen to.  So we exit GDB. */
-  return;
+  /* Now it's time to start the event loop. */
+  start_event_loop ();
 }
 
 /* Change the function to be invoked every time there is a character
@@ -227,14 +216,13 @@ change_line_handler ()
      input file descriptor, we need to create a new event source,
      corresponding to the same fd, but with a new event handler
      function. */
+  /* NOTE: this operates on input_fd, not instream. If we are reading
+     commands from a file, instream will point to the file. However in
+     async mode, we always read commands from a file with editing
+     off. This means that the 'set editing on/off' will have effect
+     only on the interactive session. */
   delete_file_handler (input_fd);
-#ifdef HAVE_POLL
-  create_file_handler (input_fd, POLLIN,
-                      (file_handler_func *) call_readline, 0);
-#else
-  create_file_handler (input_fd, GDB_READABLE,
-                      (file_handler_func *) call_readline, 0);
-#endif
+  add_file_handler (input_fd, (file_handler_func *) call_readline, 0);
 }
 
 /* Displays the prompt. The prompt that is displayed is the current
@@ -682,7 +670,7 @@ command_line_handler (rl)
 /* NOTE: 1999-04-30 Asynchronous version of gdb_readline. gdb_readline
    will become obsolete when the event loop is made the default
    execution for gdb. */
-static void
+void
 gdb_readline2 ()
 {
   int c;
@@ -1001,9 +989,12 @@ _initialize_event_loop ()
       rl_instream = instream;
 
       /* Get a file descriptor for the input stream, so that we can
-        register it with the event loop. */
+         register it with the event loop. */
       input_fd = fileno (instream);
 
+      /* Tell gdb to use the cli_command_loop as the main loop. */
+      command_loop_hook = cli_command_loop;
+
       /* Now we need to create the event sources for the input file
          descriptor. */
       /* At this point in time, this is the only event source that we
@@ -1011,13 +1002,12 @@ _initialize_event_loop ()
         the target program (inferior), but that must be registered
         only when it actually exists (I.e. after we say 'run' or
         after we connect to a remote target. */
-#ifdef HAVE_POLL
-      create_file_handler (input_fd, POLLIN,
-                          (file_handler_func *) call_readline, 0);
-#else
-      create_file_handler (input_fd, GDB_READABLE,
-                          (file_handler_func *) call_readline, 0);
-#endif
+      add_file_handler (input_fd, (file_handler_func *) call_readline, 0);
+      
+      /* Tell gdb that we will be using the readline library. This
+        could be overwritten by a command in .gdbinit like 'set
+        editing on' or 'off'. */
+      async_command_editing_p = 1;
     }
 }
 
index f15d65d..b00d8f1 100644 (file)
@@ -245,7 +245,7 @@ extern void generic_fix_call_dummy PARAMS ((char *dummy, CORE_ADDR pc, CORE_ADDR
                                            int nargs, struct value **args,
                                            struct type *type, int gcc_p));
 
-#ifdef __GNUC__
+#ifdef __STDC__
 /* Some native compilers, even ones that are supposed to be ANSI and for which __STDC__
    is true, complain about forward decls of enums. */
 enum lval_type;
index b016e13..d55050f 100644 (file)
@@ -37,6 +37,7 @@ man7dir = $(mandir)/man7
 man8dir = $(mandir)/man8
 man9dir = $(mandir)/man9
 infodir = $(prefix)/info
+htmldir = $(prefix)/html
 includedir = $(prefix)/include
 
 SHELL = /bin/sh
@@ -159,6 +160,8 @@ installcheck:
 check:
 info dvi:
 install-info:
+html:
+install-html:
 clean-info:
 
 gdbserver: $(OBS) ${ADD_DEPS} ${CDEPS}
index 12522ff..09f4cff 100644 (file)
@@ -1,5 +1,5 @@
 /* Top level stuff for GDB, the GNU debugger.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
+   Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1999
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -48,7 +48,7 @@ int display_space;
 invoked on the command line with the -nw --async options.  In this
 version, the usual command_loop is substituted by and event loop which
 processes UI events asynchronously. */
-int async_p = 0;
+int async_p = 1;
 
 /* Whether this is the command line version or not */
 int tui_version = 0;
@@ -390,10 +390,6 @@ main (argc, argv)
       quiet = 1;
   }
 
-  /* Get ready to invoke the event loop instead of the
-     command_loop. See event-loop.h for more details.*/
-  if (async_p)
-    command_loop_hook = start_event_loop;
 #if defined(TUI)
   /* Should this be moved to tui-top.c:_initialize_tui()? */
   if (tui_version)
index 5451138..b494da9 100644 (file)
@@ -41,6 +41,7 @@ man7dir = $(mandir)/man7
 man8dir = $(mandir)/man8
 man9dir = $(mandir)/man9
 infodir = @infodir@
+htmldir = $(prefix)/html
 includedir = @includedir@
 
 SHELL = @SHELL@
@@ -115,6 +116,8 @@ check:
 info dvi:
 install-info:
 clean-info:
+html:
+install-html:
 
 gdbserve.nlm:  gdbserve.O $(srcdir)/gdbserve.def
        ${NLMCONV_FOR_TARGET} -T $(srcdir)/gdbserve.def
index 1141005..33274da 100644 (file)
@@ -28,6 +28,7 @@ sharedstatedir = @sharedstatedir@
 localstatedir = @localstatedir@
 libdir = @libdir@
 infodir = @infodir@
+htmldir = $(prefix)/html
 mandir = @mandir@
 includedir = @includedir@
 oldincludedir = /usr/include
@@ -234,6 +235,8 @@ distdir: $(DISTFILES)
 info:
 dvi:
 check:
+html:
+install-html:
 installcheck:
 install-info:
 install-exec: 
index e1b0b1e..8fadca8 100644 (file)
@@ -485,7 +485,7 @@ set_thread (th, gen)
      int th;
      int gen;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
   int state = gen ? general_thread : continue_thread;
 
   if (state == th)
@@ -1059,7 +1059,7 @@ remote_get_threadinfo (threadid, fieldset, info)
      struct gdb_ext_thread_info *info;
 {
   int result;
-  char threadinfo_pkt[PBUFSIZ];
+  char *threadinfo_pkt = alloca (PBUFSIZ);
 
   pack_threadinfo_request (threadinfo_pkt, fieldset, threadid);
   putpkt (threadinfo_pkt);
@@ -1146,8 +1146,8 @@ remote_get_threadlist (startflag, nextthread, result_limit,
 
 {
   static threadref echo_nextthread;
-  char threadlist_packet[PBUFSIZ];
-  char t_response[PBUFSIZ];
+  char *threadlist_packet = alloca (PBUFSIZ);
+  char *t_response = alloca (PBUFSIZ);
   int result = 1;
 
   /* Trancate result limit to be smaller than the packet size */
@@ -1267,7 +1267,7 @@ static int
 remote_current_thread (oldpid)
      int oldpid;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   putpkt ("qC");
   getpkt (buf, 0);
@@ -1291,7 +1291,8 @@ remote_find_new_threads ()
 static void
 remote_threads_info (void)
 {
-  char buf[PBUFSIZ], *bufp;
+  char *buf = alloca (PBUFSIZ);
+  char *bufp;
   int tid;
 
   if (remote_desc == 0)                /* paranoia */
@@ -1323,7 +1324,7 @@ remote_threads_info (void)
 static void
 extended_remote_restart ()
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   /* Send the restart command; for reasons I don't understand the
      remote side really expects a number after the "R".  */
@@ -1354,7 +1355,8 @@ remote_close (quitting)
 static void
 get_offsets ()
 {
-  char buf[PBUFSIZ], *ptr;
+  char *buf = alloca (PBUFSIZ);
+  char *ptr;
   int lose;
   CORE_ADDR text_addr, data_addr, bss_addr;
   struct section_offsets *offs;
@@ -1414,7 +1416,7 @@ get_offsets ()
   if (symfile_objfile == NULL)
     return;
 
-  offs = (struct section_offsets *) alloca (sizeof (struct section_offsets)
+  offs = alloca (sizeof (struct section_offsets)
                                            + symfile_objfile->num_sections
                                            * sizeof (offs->offsets));
   memcpy (offs, symfile_objfile->section_offsets,
@@ -1697,7 +1699,7 @@ serial device is attached to the remote system (e.g. /dev/ttya).");
   if (extended_p)
     {
       /* tell the remote that we're using the extended protocol.  */
-      char buf[PBUFSIZ];
+      char *buf = alloca (PBUFSIZ);
       putpkt ("!");
       getpkt (buf, 0);
     }
@@ -1713,7 +1715,7 @@ remote_detach (args, from_tty)
      char *args;
      int from_tty;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   if (args)
     error ("Argument given to \"detach\" when remotely debugging.");
@@ -1766,7 +1768,7 @@ remote_resume (pid, step, siggnal)
      int pid, step;
      enum target_signal siggnal;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   if (pid == -1)
     set_thread (0, 0);         /* run any thread */
@@ -1896,7 +1898,7 @@ remote_wait (pid, status)
      int pid;
      struct target_waitstatus *status;
 {
-  unsigned char buf[PBUFSIZ];
+  unsigned char *buf = alloca (PBUFSIZ);
   int thread_num = -1;
 
   status->kind = TARGET_WAITKIND_EXITED;
@@ -2119,7 +2121,7 @@ static void
 remote_fetch_registers (regno)
      int regno;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
   int i;
   char *p;
   char regs[REGISTER_BYTES];
@@ -2207,7 +2209,7 @@ static void
 remote_store_registers (regno)
      int regno;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
   int i;
   char *p;
 
@@ -2360,7 +2362,8 @@ check_binary_download (addr)
 {
   if (remote_binary_download && !remote_binary_checked)
     {
-      char buf[PBUFSIZ], *p;
+      char *buf = alloca (PBUFSIZ);
+      char *p;
       remote_binary_checked = 1;
 
       p = buf;
@@ -2403,6 +2406,7 @@ remote_write_bytes (memaddr, myaddr, len)
      char *myaddr;
      int len;
 {
+  unsigned char *buf = alloca (PBUFSIZ);
   int max_buf_size;            /* Max size of packet output buffer */
   int origlen;
 
@@ -2421,7 +2425,6 @@ remote_write_bytes (memaddr, myaddr, len)
   origlen = len;
   while (len > 0)
     {
-      unsigned char buf[PBUFSIZ];
       unsigned char *p, *plen;
       int todo;
       int i;
@@ -2534,6 +2537,7 @@ remote_read_bytes (memaddr, myaddr, len)
      char *myaddr;
      int len;
 {
+  char *buf = alloca (PBUFSIZ);
   int max_buf_size;            /* Max size of packet output buffer */
   int origlen;
 
@@ -2546,7 +2550,6 @@ remote_read_bytes (memaddr, myaddr, len)
   origlen = len;
   while (len > 0)
     {
-      char buf[PBUFSIZ];
       char *p;
       int todo;
       int i;
@@ -2647,7 +2650,7 @@ remote_search (len, data, mask, startaddr, increment, lorange, hirange
       long mask_long, data_long;
       long data_found_long;
       CORE_ADDR addr_we_found;
-      char buf[PBUFSIZ];
+      char *buf = alloca (PBUFSIZ);
       long returned_long[2];
       char *p;
 
@@ -2779,7 +2782,9 @@ putpkt_binary (buf, cnt)
 {
   int i;
   unsigned char csum = 0;
-  char buf2[PBUFSIZ];
+  char *buf2 = alloca (PBUFSIZ);
+  char *junkbuf = alloca (PBUFSIZ);
+
   int ch;
   int tcount = 0;
   char *p;
@@ -2850,8 +2855,6 @@ putpkt_binary (buf, cnt)
              break;            /* Retransmit buffer */
            case '$':
              {
-               char junkbuf[PBUFSIZ];
-
              /* It's probably an old response, and we're out of sync.
                 Just gobble up the packet and ignore it.  */
                getpkt (junkbuf, 0);
@@ -2956,7 +2959,7 @@ read_frame (buf)
              {
                if (remote_cisco_mode)  /* variant run-length-encoding */
                  {
-                   char tmp_buf[PBUFSIZ];
+                   char *tmp_buf = alloca (PBUFSIZ);
 
                    remote_cisco_expand (buf, tmp_buf);
                    strcpy (buf, tmp_buf);
@@ -3329,7 +3332,10 @@ compare_sections_command (args, from_tty)
   unsigned long host_crc, target_crc;
   extern bfd *exec_bfd;
   struct cleanup *old_chain;
-  char *tmp, *sectdata, *sectname, buf[PBUFSIZ];
+  char *tmp;
+  char *sectdata;
+  char *sectname;
+  char *buf = alloca (PBUFSIZ);
   bfd_size_type size;
   bfd_vma lma;
   int matched = 0;
@@ -3403,7 +3409,7 @@ remote_query (query_type, buf, outbuf, bufsiz)
      int *bufsiz;
 {
   int i;
-  char buf2[PBUFSIZ];
+  char *buf2 = alloca (PBUFSIZ);
   char *p2 = &buf2[0];
   char *p = buf;
 
@@ -3470,7 +3476,7 @@ packet_command (args, from_tty)
      char *args;
      int from_tty;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   if (! remote_desc)
     error ("command can only be used with remote target");
@@ -3726,7 +3732,7 @@ remote_info_process (args, from_tty)
      char *args;
      int from_tty;
 {
-  char buf[PBUFSIZ];
+  char *buf = alloca (PBUFSIZ);
 
   if (remote_desc == 0)
     error ("Command can only be used when connected to the remote target.");
index aa2dd46..2bd8a2e 100644 (file)
@@ -1306,11 +1306,35 @@ solib_address (address)
 /* Called by free_all_symtabs */
 
 void 
-clear_solib()
+clear_solib ()
 {
   struct so_list *next;
   char *bfd_filename;
 
+  /* This function is expected to handle ELF shared libraries.  It is
+     also used on Solaris, which can run either ELF or a.out binaries
+     (for compatibility with SunOS 4), both of which can use shared
+     libraries.  So we don't know whether we have an ELF executable or
+     an a.out executable until the user chooses an executable file.
+
+     ELF shared libraries don't get mapped into the address space
+     until after the program starts, so we'd better not try to insert
+     breakpoints in them immediately.  We have to wait until the
+     dynamic linker has loaded them; we'll hit a bp_shlib_event
+     breakpoint (look for calls to create_solib_event_breakpoint) when
+     it's ready.
+
+     SunOS shared libraries seem to be different --- they're present
+     as soon as the process begins execution, so there's no need to
+     put off inserting breakpoints.  There's also nowhere to put a
+     bp_shlib_event breakpoint, so if we put it off, we'll never get
+     around to it.
+
+     So: disable breakpoints only if we're using ELF shared libs.  */
+  if (exec_bfd != NULL
+      && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
+    disable_breakpoints_in_shlibs (1);
+
   while (so_list_head)
     {
       if (so_list_head -> sections)
index b51d214..58da789 100644 (file)
@@ -2408,6 +2408,8 @@ build_canonical_line_spec (sal, symname, canonical)
    FILE:FUNCTION -- likewise, but prefer functions in that file.
    *EXPR -- line in which address EXPR appears.
 
+   This may all be followed by an "if EXPR", which we ignore.
+
    FUNCTION may be an undebuggable function found in minimal symbol table.
 
    If the argument FUNFIRSTLINE is nonzero, we want the first line
index 93630d2..376c575 100644 (file)
@@ -1,3 +1,105 @@
+1999-06-25  Stan Shebs  <shebs@andros.cygnus.com>
+
+       From Jimmy Guo <guo@cup.hp.com> and others at HP:
+       * lib/gdb.exp (get_compiler_info): Add detection for assorted
+       HP compilers, also set the globals $true and $false.
+
+       * gdb.base/annota1.c, bitfields.c, break.c, call-ar-st.c,
+       call-rt-st.c, call-strs.c, callfuncs.c, callfuncs2.c, condbreak.c,
+       coremaker.c, ending-run.c, exprs.c, funcargs.c, interrupt.c,
+       jump.c, langs0.c, langs1.c, langs2.c, list0.c, list1.c,
+       long_long.c, mips_pro.c, nodebug.c, opaque0.c, opaque1.c,
+       printcmds.c, ptype.c, recurse.c, restore.c, return.c, run.c,
+       scope0.c, scope1.c, setshow.c, setvar.c, shmain.c, shr1.c, shr2.c,
+       sigall.c, signals.c, so-impl-ld.c, so-indr-cl.c, solib.c,
+       solib1.c, solib2.c, step-test.c, twice.c, varargs.c, watchpoint.c,
+       whatis.c} Add C++ compatible function definitions and return
+       types, add includes for library functions.
+       * gdb.base/ptype.c (my_false, my_true): Use instead of false/true.
+       * gdb.base/step-test.c (myglob): Rename from glob.
+       * gdb.base/attach.c, attach2.c, average.c, execd-prog.c,
+       foll-exec.c, foll-fork.c, foll-vfork.c, sum.c, vforked-prog.c: New
+       files, move here from gdb.hp.
+       * gdb.base/annota1.exp, break.exp, call-ar-st.exp, call-rt-st.exp,
+       commands.exp, condbreak.exp, define.exp, ena-dis-br.exp,
+       ending-run.exp, jump.exp. list.exp, long_long.exp, so-impl-ld.exp:
+       Adjust line numbers in regexps.
+
+       * gdb.base/all-bin.exp, eval-skip.exp, exprs.exp, logical.exp,
+       miscexprs.exp, pointers.exp, relational.exp: Use $true and $false
+       instead of 0/1.
+
+       * gdb.base/attach.exp, dbx.exp, foll-exec.exp, foll-fork.exp,
+       foll-vfork.exp: New files, move here from gdb.hp.
+       * gdb.base/page.exp: New file, test of pagination command.
+
+       * gdb.base/watchpoint.c (recurser): New function, for watchpoint
+       recursion test.
+       * gdb.base/watchpoint.exp: Add more test cases for watchpoints.
+
+       * gdb.base/so-impl-ld.exp, gdb.base/so-indr-cl.exp,
+       gdb.base/solib.exp: Fix compiler invocation process.
+
+       * gdb.base/callfuncs.exp, gdb.base/callfuncs2.exp: Don't xfail for
+       HP-UX 11, turn off overload resolution explicitly.
+       * gdb.base/commands.exp: Set argument list explicitly, add
+       watchpoint test.
+       * gdb.base/completion.exp: Enable if HP-UX, tweak tests to make
+       them work.
+       * gdb.base/constvars.exp, gdb.base/volatile.exp: Escape the
+       expressions properly.
+       * gdb.base/corefile.exp: Loosen the match slightly.
+       * gdb.base/default.exp: Allow "Error accessing memory" message
+       also.
+       * gdb.base/display.exp: Skip over x/0 j if PA64.
+       * gdb.base/funcargs.exp: Add xfails for HP-UX.
+       * gdb.base/interrupt.exp: Ditto.
+       * gdb.base/langs.exp: Add symbolic matches governed by compiler
+       in use.
+       * gdb.base/list.exp: Add xfails for HP-UX.
+       * gdb.base/long_long.exp: Refine some of the numeric matches.
+       * gdb.base/mips_pro.exp: Xfail on HP-UX.
+       * gdb.base/miscexprs.exp: Add PA2.0 case for array size test.
+       * gdb.base/nodebug.exp: Succeed on more varieties of output.
+       * gdb.base/opaque.exp: Remove some HP-UX xfails.
+       * gdb.base/ptype.exp: Succeed on more varieties of output.
+       * gdb.base/scope.exp: Add xfails for HP-UX.
+       * gdb.base/sect-cmd.exp: Add more cases.
+       * gdb.base/setvar.exp: Add xfails for HP-UX.
+       * gdb.base/shlib-call.exp: Loosen some matches slightly.
+       * gdb.base/signals.exp: Match on void symbolically.
+       * gdb.base/step-test.exp: Add case for PA64.
+       * gdb.base/term.exp: Add exit and restart.
+       * gdb.base/twice.exp: Clean up after self.
+       * gdb.base/varargs.exp: Disable overload resolution explicitly.
+       * gdb.base/whatis.exp: Allow more ways to pass tests.
+
+       * gdb.base/smoke.exp, gdb.base/smoke.c, gdb.base/smoke.cc: Remove,
+       no longer useful.
+
+Fri Jun 25 19:27:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * lib/gdb.exp (proc gdb_expect_list): New procedure.  Matches a
+       list of patterns.
+       * gdb.base/call-ar-st.exp: Use gdb_expect_list in "print
+       print_double_array(double_array)", "continuing to breakpoint
+       1018", "print print_double_array(array_d)" and "continuing to
+       1034" tests.
+       
+1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+        * Makefile.in: Add empty html and install-html targets.
+
+1999-06-24  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * config/mt-*: Remove, these haven't been used since 1996.
+
+1999-06-22  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * gdb.base/call-strs.c, gdb.base/ending-run.c,
+       gdb.base/step-test.c: Include stdlib.h and string.h as needed.
+       * gdb.c++/member-ptr.exp: Skip over these tests if using G++.
+
 1999-06-18  Stan Shebs  <shebs@andros.cygnus.com>
 
        * gdb.c++/overload.exp: XFAIL everything if using G++, add a
index d763450..c3b94f7 100644 (file)
@@ -89,6 +89,8 @@ INFODIRS=doc
 info:
 install-info:
 dvi:
+html:
+install-html:
 
 install:
 
index 4d6662b..5208ef3 100644 (file)
@@ -45,6 +45,10 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
     }
 
+if [get_compiler_info ${binfile}] {
+    return -1
+}
+
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
@@ -206,7 +210,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_short\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int<=v_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_short" }
@@ -236,7 +240,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_signed_short\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int<=v_signed_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_short" }
@@ -246,7 +250,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_unsigned_short\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int<=v_unsigned_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_short" }
@@ -256,7 +260,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_signed_int\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_signed_int"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_int" }
@@ -266,7 +270,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_unsigned_int\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_unsigned_int"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_int" }
@@ -276,7 +280,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_long\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_long" }
@@ -286,7 +290,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_signed_long\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_signed_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_signed_long" }
@@ -296,7 +300,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_unsigned_long\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_unsigned_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_unsigned_long" }
@@ -306,7 +310,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_float\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_float"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_float" }
@@ -316,7 +320,7 @@ gdb_expect {
 
 send_gdb "print v_int <= v_double\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int<=v_double"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int<=v_double" }
@@ -335,7 +339,7 @@ gdb_test "set variable v_unsigned_long=0" "" "set v_unsigned_long=0"
 
 send_gdb "print v_int && v_char\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int&&v_char"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_char" }
@@ -344,7 +348,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_short\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_short" }
@@ -354,7 +358,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_signed_char\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_signed_char"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_char" }
@@ -364,7 +368,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_unsigned_char\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_unsigned_char"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_char" }
@@ -374,7 +378,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_signed_short\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_signed_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_short" }
@@ -384,7 +388,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_unsigned_short\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_unsigned_short"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_short" }
@@ -394,7 +398,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_signed_int\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_signed_int"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_int" }
@@ -404,7 +408,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_unsigned_int\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_unsigned_int"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_int" }
@@ -414,7 +418,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_long\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_long" }
@@ -424,7 +428,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_signed_long\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_signed_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_signed_long" }
@@ -434,7 +438,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_unsigned_long\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int&&v_unsigned_long"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_unsigned_long" }
@@ -444,7 +448,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_float\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of v_int&&v_float"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_float" }
@@ -454,7 +458,7 @@ gdb_expect {
 
 send_gdb "print v_int && v_double\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of v_int&&v_double"
       }
     -re ".*$gdb_prompt $" { fail "print value of v_int&&v_double" }
index 7eeee77..7d423e0 100644 (file)
@@ -6,16 +6,28 @@
 #endif
 
 
+#ifdef PROTOTYPES
+void
+handle_USR1 (int sig)
+{
+}
+#else
 void
 handle_USR1 (sig)
      int sig;
 {
 }
+#endif
 
 int value;
 
+#ifdef PROTOTYPES
+int
+main (void)
+#else
 int
 main ()
+#endif
 {
   int my_array[3] = { 1, 2, 3 };
   
index 4239822..ba24fe9 100644 (file)
@@ -62,7 +62,7 @@ if [target_info exists gdb_stub] {
 #
 # the line at which break main will put the breakpoint
 #
-set main_line 20
+set main_line 32
 
 # The commands we test here produce many lines of output; disable "press 
 # <return> to continue" prompts.
@@ -143,7 +143,7 @@ gdb_expect {
 #exp_internal 1
 send_gdb "run\n"
   gdb_expect {
-    -re "\r\n\032\032post-prompt\r\nStarting program: $binfile \(\r\n\r\n\032\032frames-invalid\)+\(\r\n\r\n\032\032breakpoints-invalid\)*.*\(\r\n\r\n\032\032frames-invalid\)*\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+    -re "\r\n\032\032post-prompt\r\nStarting program: $binfile \(\r\n\r\n\032\032frames-invalid\)+\(\r\n\r\n\032\032breakpoints-invalid\)*.*\(\r\n\r\n\032\032frames-invalid\)*\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" \
                            { pass "run until main breakpoint" }
     -re ".*$gdb_prompt$"       { fail "run until main breakpoint" }
     timeout                { fail "run until main breakpoint (timeout)" }
@@ -258,7 +258,7 @@ gdb_expect {
 #
 send_gdb "signal SIGUSR1\n"
 gdb_expect {
-  -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${srcdir}/${subdir}/${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:185:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+  -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${srcdir}/${subdir}/${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
        { pass "send SIGUSR1" }
   -re ".*$gdb_prompt$"     { fail "send SIGUSR1" }
   timeout                  { fail "send SIGUSR1 (timeout)" }
index 930b244..3e6b2e6 100644 (file)
@@ -5,7 +5,7 @@
    this may cause some tests to fail.  But at least we can still compile
    the test program and run the tests... */
 
-#ifndef __STDC__
+#if !defined(__STDC__) && !defined(__cplusplus)
 #define signed  /**/
 #endif
 
index 491d6e5..6acbf9b 100644 (file)
@@ -29,6 +29,7 @@ char *arg;
 
 #else /* ! vxworks */
 #  include <stdio.h>
+#  include <stdlib.h>
 #endif /* ! vxworks */
 
 /*
@@ -38,20 +39,34 @@ char *arg;
  * of gcc have or have had problems with this).
  */
 
+#ifdef PROTOTYPES
+int marker1 (void) { return (0); }
+int marker2 (int a) { return (1); }
+void marker3 (char *a, char *b) {}
+void marker4 (long d) {}
+#else
 int marker1 () { return (0); }
 int marker2 (a) int a; { return (1); }
 void marker3 (a, b) char *a, *b; {}
 void marker4 (d) long d; {}
+#endif
 
 /*
  *     This simple classical example of recursion is useful for
  *     testing stack backtraces and such.
  */
 
+#ifdef PROTOTYPES
+int factorial(int);
+
+int
+main (int argc, char **argv, char **envp)
+#else
 int
 main (argc, argv, envp)
 int argc;
 char *argv[], **envp;
+#endif
 {
 #ifdef usestubs
     set_debug_traps();
@@ -70,8 +85,12 @@ char *argv[], **envp;
     return 0;
 }
 
+#ifdef PROTOTYPES
+int factorial (int value)
+#else
 int factorial (value)
 int value;
+#endif
 {
     if (value > 1) {
        value *= factorial (value - 1);
index 300a4e6..115cd80 100644 (file)
@@ -39,6 +39,10 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+if [get_compiler_info ${binfile}] {
+    return -1
+}
+
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
@@ -88,22 +92,22 @@ gdb_test "break $srcfile:factorial" \
 #
 # test break at line number
 #
-gdb_test "break 64" \
-    "Breakpoint.*at.* file .*$srcfile, line 64\\." \
+gdb_test "break 79" \
+    "Breakpoint.*at.* file .*$srcfile, line 79\\." \
     "breakpoint line number"
 
 #
 # test duplicate breakpoint
 #
-gdb_test "break 64" \
-    "Note: breakpoint \[0-9\]+ also set at pc.*Breakpoint \[0-9\]+ at.* file .*$srcfile, line 64\\." \
+gdb_test "break 79" \
+    "Note: breakpoint \[0-9\]+ also set at pc.*Breakpoint \[0-9\]+ at.* file .*$srcfile, line 79\\." \
     "breakpoint duplicate"
 
 #
 # test break at line number in file
 #
-gdb_test "break $srcfile:70" \
-    "Breakpoint.*at.* file .*$srcfile, line 70\\." \
+gdb_test "break $srcfile:85" \
+    "Breakpoint.*at.* file .*$srcfile, line 85\\." \
     "breakpoint line number in file"
 
 
@@ -111,18 +115,23 @@ gdb_test "break $srcfile:70" \
 # check to see what breakpoints are set
 #
 if [target_info exists gdb_stub] {
-    set main_line 57
+    set main_line 72
 } else {
-    set main_line 60
+    set main_line 75
 }
 
+if {$hp_aCC_compiler} {
+    set proto "\\(int\\)"
+} else {
+    set proto ""
+}
 gdb_test "info break" \
     "Num Type\[ \]+Disp Enb Address\[ \]+What.*
 \[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$main_line.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in factorial at .*$srcfile:76.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:64.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:64.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:70" \
+\[0-9\]+\[\t \]+breakpoint     keep y.* in factorial$proto at .*$srcfile:95.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:79.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:79.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:85" \
     "breakpoint info"
 
 
@@ -150,35 +159,35 @@ if ![target_info exists use_gdb_stub] {
        send_gdb "y\n"
        exp_continue
     }
-    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:60.*60\[\t \]+if .argc.* \{.*$gdb_prompt $"\
+    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:75.*75\[\t \]+if .argc.* \{.*$gdb_prompt $"\
                            { pass "run until function breakpoint" }
     -re ".*$gdb_prompt $"       { fail "run until function breakpoint" }
     timeout                { fail "run until function breakpoint (timeout)" }
   }
 } else {
     if ![target_info exists gdb_stub] {
-       gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:60.*60\[\t \]+if .argc.*\{" "stub continue"
+       gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:75.*75\[\t \]+if .argc.*\{" "stub continue"
     }
 }
 
 #
 # run until the breakpoint at a line number
 #
-gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:64.*64\[\t \]+printf.*factorial.*" \
+gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:79.*79\[\t \]+printf.*factorial.*" \
                        "run until breakpoint set at a line number"
 
 #
 # Run until the breakpoint set in a function in a file
 #
 for {set i 6} {$i >= 1} {incr i -1} {
-       gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, factorial \\(value=$i\\) at .*$srcfile:76.*76\[\t \]+if .value > 1. \{" \
+       gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, factorial \\(value=$i\\) at .*$srcfile:95.*95\[\t \]+.*if .value > 1. \{.*" \
                        "run until file:function($i) breakpoint"
 }
 
 #
 # run until the file:function breakpoint at a line number in a file
 #
-gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:70.*70\[\t \]+return 0;" \
+gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:85.*85\[\t \]+return 0;" \
                "run until file:linenum breakpoint"
 
 #
@@ -202,31 +211,38 @@ gdb_test "tbreak $srcfile:factorial" "Breakpoint.*at.* file .*$srcfile, line.*"
 #
 # test break at line number
 #
-send_gdb "tbreak 64\n"
+send_gdb "tbreak 79\n"
 gdb_expect {
-    -re "Breakpoint.*at.* file .*$srcfile, line 64.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
+    -re "Breakpoint.*at.* file .*$srcfile, line 79.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
        -re ".*$gdb_prompt $"   { pass "Temporary breakpoint line number #1" }
        timeout     { fail "breakpoint line number #1 (timeout)" }
 }
 
-gdb_test "tbreak 60" "Breakpoint.*at.* file .*$srcfile, line 60.*" "Temporary breakpoint line number #2"
+gdb_test "tbreak 75" "Breakpoint.*at.* file .*$srcfile, line 75.*" "Temporary breakpoint line number #2"
 
 #
 # test break at line number in file
 #
-send_gdb "tbreak $srcfile:70\n"
+send_gdb "tbreak $srcfile:85\n"
 gdb_expect {
-    -re "Breakpoint.*at.* file .*$srcfile, line 70.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
+    -re "Breakpoint.*at.* file .*$srcfile, line 85.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
        -re ".*$gdb_prompt $"   { pass "Temporary breakpoint line number in file #1" }
        timeout     { fail "Temporary breakpoint line number in file #1 (timeout)" }
 }
 
-gdb_test  "tbreak $srcfile:66" "Breakpoint.*at.* file .*$srcfile, line 66.*" "Temporary breakpoint line number in file #2"
+gdb_test  "tbreak $srcfile:81" "Breakpoint.*at.* file .*$srcfile, line 81.*" "Temporary breakpoint line number in file #2"
 
 #
 # check to see what breakpoints are set (temporary this time)
 #
-gdb_test "info break" "Num Type.*Disp Enb Address.*What.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$main_line.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint     del.*y.*in factorial at .*$srcfile:76.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:64.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:70.*" "Temporary breakpoint info"
+gdb_test "info break" "Num Type.*Disp Enb Address.*What.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$main_line.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in factorial$proto at .*$srcfile:95.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:79.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:75.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:85.*\[\r\n\]
+\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:81.*" \
+    "Temporary breakpoint info"
 
 
 #***********
@@ -301,18 +317,18 @@ gdb_expect {
 # Verify that "until <location>" works.  (This is really just syntactic
 # sugar for "tbreak <location>; continue".)
 #
-send_gdb "until 64\n"
+send_gdb "until 79\n"
 gdb_expect {
-  -re "main .* at .*:64.*$gdb_prompt $"\
-          {pass "until 64"}
+  -re "main .* at .*:79.*$gdb_prompt $"\
+          {pass "until 79"}
   -re "$gdb_prompt $"\
-          {fail "until 64"}
-  timeout {fail "(timeout) until 64"}
+          {fail "until 79"}
+  timeout {fail "(timeout) until 79"}
 }
 
 # Verify that a malformed "until" is gracefully caught.
 #
-send_gdb "until 65 then stop\n"
+send_gdb "until 80 then stop\n"
 gdb_expect {
   -re "Junk at end of arguments..*$gdb_prompt $"\
           {pass "malformed until"}
@@ -379,13 +395,13 @@ gdb_expect {
 #
 if ![runto_main] then { fail "break tests suppressed" }
 
-send_gdb "break 64\n"
+send_gdb "break 79\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 64.*$gdb_prompt $"\
-          {pass "set to-be-silent break 64"}
+  -re "Breakpoint (\[0-9\]*) at .*, line 79.*$gdb_prompt $"\
+          {pass "set to-be-silent break 79"}
   -re "$gdb_prompt $"\
-          {fail "set to-be-silent break 64"}
-  timeout {fail "(timeout) set to-be-silent break 64"}
+          {fail "set to-be-silent break 79"}
+  timeout {fail "(timeout) set to-be-silent break 79"}
 }
 
 send_gdb "commands $expect_out(1,string)\n"
@@ -393,33 +409,33 @@ send_gdb "silent\n"
 send_gdb "end\n"
 gdb_expect {
   -re ".*$gdb_prompt $"\
-          {pass "set silent break 64"}
-  timeout {fail "(timeout) set silent break 64"}
+          {pass "set silent break 79"}
+  timeout {fail "(timeout) set silent break 79"}
 }
 
 send_gdb "info break $expect_out(1,string)\n"
 gdb_expect {
-  -re "\[0-9\]*\[ \t\]*breakpoint.*:64\r\n\[ \t\]*silent.*$gdb_prompt $"\
-          {pass "info silent break 64"}
+  -re "\[0-9\]*\[ \t\]*breakpoint.*:79\r\n\[ \t\]*silent.*$gdb_prompt $"\
+          {pass "info silent break 79"}
   -re "$gdb_prompt $"\
-          {fail "info silent break 64"}
-  timeout {fail "(timeout) info silent break 64"}
+          {fail "info silent break 79"}
+  timeout {fail "(timeout) info silent break 79"}
 }
 send_gdb "continue\n"
 gdb_expect {
   -re "Continuing.\r\n$gdb_prompt $"\
-          {pass "hit silent break 64"}
+          {pass "hit silent break 79"}
   -re "$gdb_prompt $"\
-          {fail "hit silent break 64"}
-  timeout {fail "(timeout) hit silent break 64"}
+          {fail "hit silent break 79"}
+  timeout {fail "(timeout) hit silent break 79"}
 }
 send_gdb "bt\n"
 gdb_expect {
-  -re "#0  main .* at .*:64.*$gdb_prompt $"\
-          {pass "stopped for silent break 64"}
+  -re "#0  main .* at .*:79.*$gdb_prompt $"\
+          {pass "stopped for silent break 79"}
   -re "$gdb_prompt $"\
-          {fail "stopped for silent break 64"}
-  timeout {fail "(timeout) stopped for silent break 64"}
+          {fail "stopped for silent break 79"}
+  timeout {fail "(timeout) stopped for silent break 79"}
 }
 
 # Verify that GDB can at least parse a breakpoint with the
@@ -427,7 +443,7 @@ gdb_expect {
 # thread-specific breakpoint really triggers appropriately.
 # The gdb.threads subdirectory contains tests for that.)
 #
-send_gdb "break 65 thread 999\n"
+send_gdb "break 80 thread 999\n"
 gdb_expect {
   -re "Unknown thread 999.*$gdb_prompt $"\
           {pass "thread-specific breakpoint on non-existent thread disallowed"}
@@ -435,7 +451,7 @@ gdb_expect {
           {fail "thread-specific breakpoint on non-existent thread disallowed"}
   timeout {fail "(timeout) thread-specific breakpoint on non-existent thread disallowed"}
 }
-send_gdb "break 65 thread foo\n"
+send_gdb "break 80 thread foo\n"
 gdb_expect {
   -re "Junk after thread keyword..*$gdb_prompt $"\
           {pass "thread-specific breakpoint on bogus thread ID disallowed"}
@@ -447,7 +463,7 @@ gdb_expect {
 # Verify that GDB responds gracefully to a breakpoint command with
 # trailing garbage.
 #
-send_gdb "break 65 foo\n"
+send_gdb "break 80 foo\n"
 gdb_expect {
   -re "Junk at end of arguments..*$gdb_prompt $"\
           {pass "breakpoint with trailing garbage disallowed"}
@@ -466,9 +482,9 @@ gdb_expect {
           {pass "step over breakpoint"}
   timeout {fail "(timeout) step over breakpoint"}
 }
-send_gdb "clear 66\n"
+send_gdb "clear 81\n"
 gdb_expect {
-  -re "No breakpoint at 66..*$gdb_prompt $"\
+  -re "No breakpoint at 81..*$gdb_prompt $"\
           {pass "clear line has no breakpoint disallowed"}
   -re "$gdb_prompt $"\
           {fail "clear line has no breakpoint disallowed"}
@@ -485,15 +501,15 @@ gdb_expect {
 
 # Verify that a breakpoint can be set via a convenience variable.
 #
-send_gdb "set \$foo=66\n"
+send_gdb "set \$foo=81\n"
 gdb_expect {
   -re "$gdb_prompt $"\
-          {pass "set convenience variable \$foo to 66"}
-  timeout {fail "(timeout) set convenience variable \$foo to 66"}
+          {pass "set convenience variable \$foo to 81"}
+  timeout {fail "(timeout) set convenience variable \$foo to 81"}
 }
 send_gdb "break \$foo\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 66.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 81.*$gdb_prompt $"\
           {pass "set breakpoint via convenience variable"}
   -re "$gdb_prompt $"\
           {fail "set breakpoint via convenience variable"}
@@ -503,11 +519,11 @@ gdb_expect {
 # Verify that GDB responds gracefully to an attempt to set a
 # breakpoint via a convenience variable whose type is not integer.
 #
-send_gdb "set \$foo=66.5\n"
+send_gdb "set \$foo=81.5\n"
 gdb_expect {
   -re "$gdb_prompt $"\
-          {pass "set convenience variable \$foo to 66.5"}
-  timeout {fail "(timeout) set convenience variable \$foo to 66.5"}
+          {pass "set convenience variable \$foo to 81.5"}
+  timeout {fail "(timeout) set convenience variable \$foo to 81.5"}
 }
 send_gdb "break \$foo\n"
 gdb_expect {
@@ -522,7 +538,7 @@ gdb_expect {
 #
 send_gdb "break marker2\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 42.*$gdb_prompt $"\
+    -re "Breakpoint (\[0-9\]*) at .*, line 4\[49\].*$gdb_prompt $"\
           {pass "set breakpoint on to-be-called function"}
   -re "$gdb_prompt $"\
           {fail "set breakpoint on to-be-called function"}
@@ -530,7 +546,7 @@ gdb_expect {
 }
 send_gdb "print marker2(99)\n"
 gdb_expect {
-  -re "The program being debugged stopped while in a function called from GDB.\r\nWhen the function .marker2. is done executing, GDB will silently\r\nstop .instead of continuing to evaluate the expression containing\r\nthe function call...*$gdb_prompt $"\
+  -re "The program being debugged stopped while in a function called from GDB.\r\nWhen the function .marker2$proto. is done executing, GDB will silently\r\nstop .instead of continuing to evaluate the expression containing\r\nthe function call...*$gdb_prompt $"\
           {pass "hit breakpoint on called function"}
   -re "$gdb_prompt $"\
           {fail "hit breakpoint on called function"}
@@ -543,7 +559,9 @@ gdb_expect {
 if [istarget "hppa*-*-hpux*"] then {
   send_gdb "bt\n"
   gdb_expect {
-    -re "#0\[ \t\]*marker2.*:42\r\n#1.*_sr4export.*$gdb_prompt $"\
+      -re "#0\[ \t\]*marker2.*:4\[49\]\r\n#1.*_sr4export.*$gdb_prompt $"\
+            {pass "backtrace while in called function"}
+      -re "#0\[ \t\]*marker2.*:4\[49\]\r\n#1.*function called from gdb.*$gdb_prompt $"\
             {pass "backtrace while in called function"}
     -re "$gdb_prompt $"\
             {fail "backtrace while in called function"}
@@ -551,7 +569,9 @@ if [istarget "hppa*-*-hpux*"] then {
   }
   send_gdb "finish\n"
   gdb_expect {
-    -re "Run till exit from .*marker2.* at .*42\r\n.* in _sr4export.*$gdb_prompt $"\
+      -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.* in _sr4export.*$gdb_prompt $"\
+            {pass "finish from called function"}
+      -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.*function called from gdb.*$gdb_prompt $"\
             {pass "finish from called function"}
     -re "$gdb_prompt $"\
             {fail "finish from called function"}
index bb30e50..6d1b999 100644 (file)
@@ -141,9 +141,13 @@ struct int_char_combo_t {
  * IN     id_int student       -- enumerated type
  * IN     colors shirt         -- enumerated type
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_student_id_shirt_color (id_int student, colors shirt)
+#else
 void print_student_id_shirt_color ( student, shirt ) 
  id_int student;
  colors shirt;
+#endif
 {
 
  printf("student id : %d\t", student);
@@ -192,9 +196,12 @@ void print_student_id_shirt_color ( student, shirt )
  * PRINT_CHAR_ARRAY : 
  * IN     char  array_c[]      -- character array 
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_char_array (char array_c[])
+#else
 void print_char_array ( array_c ) 
      char    array_c[];
-
+#endif
 {
 
   int index;
@@ -212,9 +219,12 @@ void print_char_array ( array_c )
  * PRINT_DOUBLE_ARRAY : 
  * IN     double array_d[]      -- array of doubles
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_double_array (double  array_d[])
+#else
 void print_double_array (array_d) 
      double  array_d[];
-
+#endif
 {
 
   int index;
@@ -232,9 +242,12 @@ void print_double_array (array_d)
  * PRINT_FLOAT_ARRAY: 
  * IN     float array_f[]      -- array of floats 
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_float_array (float array_f[])
+#else
 void print_float_array ( array_f )
      float array_f[];
-
+#endif
 {
 
   int index;
@@ -253,9 +266,12 @@ void print_float_array ( array_f )
  * PRINT_INT_ARRAY: 
  * IN     int  array_i[]      -- array of integers 
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_int_array (int array_i[])
+#else
 void print_int_array ( array_i )
      int array_i[];
-
+#endif
 {
 
   int index;
@@ -277,12 +293,15 @@ void print_int_array ( array_i )
  * IN     float array_f[]      -- array of floats 
  * IN     double array_d[]      -- array of doubles 
  *****************************************************************/
+#ifdef PROTOTYPES
+void print_all_arrays(int array_i[], char array_c[], float array_f[], double array_d[])
+#else
 void print_all_arrays( array_i, array_c, array_f, array_d )
      int array_i[];
      char array_c[];
      float array_f[];
      double array_d[];
-
+#endif
 {
   print_int_array(array_i);
   print_char_array(array_c);
@@ -306,8 +325,12 @@ void loop_count () {
  * A do nothing function. Used to provide a point at which calls can be made.  
  * IN  int seed
  *****************************************************************/
+#ifdef PROTOTYPES
+void compute_with_small_structs (int seed)
+#else
 void compute_with_small_structs ( seed ) 
  int seed;
+#endif
 {
 
      struct small_rep_info_t array[4];
@@ -337,6 +360,9 @@ void compute_with_small_structs ( seed )
  * IN  unsigned e  -- 0 or 1 
  * IN  unsigned o  -- 0 or 1 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_bit_flags (struct bit_flags_t *bit_flags, unsigned a, unsigned b, unsigned g, unsigned d, unsigned e, unsigned o)
+#else
 void init_bit_flags ( bit_flags, a, b, g, d, e, o )
 struct bit_flags_t *bit_flags;
 unsigned a;
@@ -345,6 +371,7 @@ unsigned g;
 unsigned d;
 unsigned e;
 unsigned o; 
+#endif
 {
 
    bit_flags->alpha = a;
@@ -370,6 +397,9 @@ unsigned o;
  * IN  unsigned e  -- 0 or 1 
  * IN  unsigned o  -- 0 or 1 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_bit_flags_combo (struct bit_flags_combo_t *bit_flags_combo, unsigned a, unsigned b, char ch1, unsigned g, unsigned d, char ch2, unsigned e, unsigned o)
+#else
 void init_bit_flags_combo ( bit_flags_combo, a, b, ch1, g, d, ch2, e, o )
      struct bit_flags_combo_t *bit_flags_combo;
      unsigned a;
@@ -380,6 +410,7 @@ void init_bit_flags_combo ( bit_flags_combo, a, b, ch1, g, d, ch2, e, o )
      char     ch2;
      unsigned e;
      unsigned o; 
+#endif
 {
 
    bit_flags_combo->alpha = a;
@@ -398,9 +429,13 @@ void init_bit_flags_combo ( bit_flags_combo, a, b, ch1, g, d, ch2, e, o )
  * OUT  struct one_double_t *one_double  -- structure to fill 
  * IN   double init_val
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_one_double (struct one_double_t *one_double, double init_val)
+#else
 void init_one_double ( one_double, init_val )
      struct one_double_t *one_double;
      double init_val; 
+#endif
 {
 
      one_double->double1  = init_val;
@@ -412,10 +447,14 @@ void init_one_double ( one_double, init_val )
  * IN  float init_val1 
  * IN  float init_val2 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_two_floats (struct two_floats_t *two_floats, float init_val1, float init_val2)
+#else
 void init_two_floats ( two_floats, init_val1, init_val2 )
      struct two_floats_t *two_floats; 
      float init_val1;
      float init_val2;
+#endif
 {
      two_floats->float1 = init_val1;
      two_floats->float2 = init_val2;
@@ -427,10 +466,14 @@ void init_two_floats ( two_floats, init_val1, init_val2 )
  * IN  char init_val1 
  * IN  char init_val2 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_two_chars (struct two_char_t *two_char, char init_val1, char init_val2)
+#else
 void init_two_chars ( two_char, init_val1, init_val2 )
      struct two_char_t *two_char;
      char init_val1;
      char init_val2; 
+#endif
 {
 
      two_char->ch1 = init_val1;
@@ -444,11 +487,15 @@ void init_two_chars ( two_char, init_val1, init_val2 )
  * IN  char init_val2 
  * IN  char init_val3 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_three_chars (struct three_char_t *three_char, char init_val1, char init_val2, char init_val3)
+#else
 void init_three_chars ( three_char, init_val1, init_val2, init_val3 )  
      struct three_char_t *three_char; 
      char init_val1;
      char init_val2;
      char init_val3;
+#endif
 {
 
      three_char->ch1 = init_val1;
@@ -465,6 +512,9 @@ void init_three_chars ( three_char, init_val1, init_val2, init_val3 )
  * IN  char init_val4 
  * IN  char init_val5 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_five_chars (struct five_char_t *five_char, char init_val1, char init_val2, char init_val3, char init_val4, char init_val5)
+#else
 void init_five_chars ( five_char, init_val1, init_val2, init_val3,init_val4,init_val5 )
      struct five_char_t *five_char;
      char init_val1;
@@ -472,6 +522,7 @@ void init_five_chars ( five_char, init_val1, init_val2, init_val3,init_val4,init
      char init_val3;
      char init_val4;
      char init_val5;
+#endif
 {
      five_char->ch1 = init_val1;
      five_char->ch2 = init_val2;
@@ -486,10 +537,14 @@ void init_five_chars ( five_char, init_val1, init_val2, init_val3,init_val4,init
  * IN  int  init_val1 
  * IN  char init_val2 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_int_char_combo (struct int_char_combo_t *combo, int init_val1, char init_val2)
+#else
 void init_int_char_combo ( combo, init_val1, init_val2 )
      struct int_char_combo_t *combo;
      int init_val1; 
      char init_val2; 
+#endif
 {
 
      combo->int1 = init_val1;
@@ -501,10 +556,13 @@ void init_int_char_combo ( combo, init_val1, init_val2 )
  * OUT struct small_rep_into_t *small_struct -- structure to be filled
  * IN  int  seed 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_struct_rep(struct small_rep_info_t *small_struct, int seed)
+#else
 void init_struct_rep( small_struct, seed )
      struct small_rep_info_t *small_struct;
      int    seed;
-
+#endif
 {
 
       small_struct->value = 2 + (seed*2); 
@@ -516,6 +574,24 @@ void init_struct_rep( small_struct, seed )
  * Takes all the small structures as input and calls the appropriate
  * initialization routine for each structure
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_small_structs (
+     struct small_rep_info_t  *struct1,
+     struct small_rep_info_t  *struct2,
+     struct small_rep_info_t  *struct3,
+     struct small_rep_info_t  *struct4,
+     struct bit_flags_t       *flags,
+     struct bit_flags_combo_t *flags_combo,
+     struct three_char_t      *three_char,
+     struct five_char_t       *five_char,
+     struct int_char_combo_t  *int_char_combo,
+     struct one_double_t      *d1,
+     struct one_double_t      *d2,
+     struct one_double_t      *d3,
+     struct two_floats_t      *f1,
+     struct two_floats_t      *f2,
+     struct two_floats_t      *f3)
+#else
 void init_small_structs (struct1, struct2, struct3,struct4,flags,flags_combo,
 three_char, five_char,int_char_combo, d1, d2,d3,f1,f2,f3)
      struct small_rep_info_t  *struct1;
@@ -533,7 +609,7 @@ three_char, five_char,int_char_combo, d1, d2,d3,f1,f2,f3)
      struct two_floats_t      *f1;
      struct two_floats_t      *f2;
      struct two_floats_t      *f3;
-
+#endif
 {
 
      init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1, 
@@ -560,6 +636,19 @@ three_char, five_char,int_char_combo, d1, d2,d3,f1,f2,f3)
  * PRINT_TEN_DOUBLES : 
  * ?????????????????????????????
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_ten_doubles (
+     double d1,
+     double d2,
+     double d3,
+     double d4,
+     double d5,
+     double d6,
+     double d7,
+     double d8,
+     double d9,
+     double d10)
+#else
 void print_ten_doubles ( d1, d2, d3, d4, d5, d6, d7, d8, d9, d10 )
      double d1;
      double d2;
@@ -571,6 +660,7 @@ void print_ten_doubles ( d1, d2, d3, d4, d5, d6, d7, d8, d9, d10 )
      double d8;
      double d9;
      double d10; 
+#endif
 {
 
   printf("Two Doubles : %f\t%f\n", d1, d2);
@@ -584,8 +674,12 @@ void print_ten_doubles ( d1, d2, d3, d4, d5, d6, d7, d8, d9, d10 )
  * PRINT_BIT_FLAGS : 
  * IN struct bit_flags_t bit_flags 
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_bit_flags (struct bit_flags_t bit_flags)
+#else
 void print_bit_flags ( bit_flags )
 struct bit_flags_t bit_flags;
+#endif
 {
 
      if (bit_flags.alpha) printf("alpha\n");
@@ -600,8 +694,12 @@ struct bit_flags_t bit_flags;
  * PRINT_BIT_FLAGS_COMBO : 
  * IN struct bit_flags_combo_t bit_flags_combo 
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_bit_flags_combo (struct bit_flags_combo_t bit_flags_combo)
+#else
 void print_bit_flags_combo ( bit_flags_combo )
-struct bit_flags_combo_t bit_flags_combo;
+     struct bit_flags_combo_t bit_flags_combo;
+#endif
 {
 
      if (bit_flags_combo.alpha) printf("alpha\n");
@@ -617,8 +715,12 @@ struct bit_flags_combo_t bit_flags_combo;
  * PRINT_ONE_DOUBLE : 
  * IN struct one_double_t one_double 
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_one_double (struct one_double_t one_double)
+#else
 void print_one_double ( one_double )
 struct one_double_t one_double;
+#endif
 {
 
      printf("Contents of one_double_t: \n\n");
@@ -629,8 +731,12 @@ struct one_double_t one_double;
  * PRINT_TWO_FLOATS : 
  * IN struct two_floats_t two_floats 
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_two_floats (struct two_floats_t two_floats)
+#else
 void print_two_floats ( two_floats )
 struct two_floats_t two_floats; 
+#endif
 {
 
      printf("Contents of two_floats_t: \n\n");
@@ -641,8 +747,12 @@ struct two_floats_t two_floats;
  * PRINT_TWO_CHARS : 
  * IN struct two_char_t two_char
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_two_chars (struct two_char_t two_char)
+#else
 void print_two_chars ( two_char )
 struct two_char_t two_char; 
+#endif
 {
 
      printf("Contents of two_char_t: \n\n");
@@ -653,8 +763,12 @@ struct two_char_t two_char;
  * PRINT_THREE_CHARS : 
  * IN struct three_char_t three_char
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_three_chars (struct three_char_t three_char)
+#else
 void print_three_chars ( three_char )
 struct three_char_t three_char;
+#endif
 {
 
      printf("Contents of three_char_t: \n\n");
@@ -665,8 +779,12 @@ struct three_char_t three_char;
  * PRINT_FIVE_CHARS : 
  * IN struct five_char_t five_char
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_five_chars (struct five_char_t five_char)
+#else
 void print_five_chars ( five_char ) 
 struct five_char_t five_char; 
+#endif
 {
 
      printf("Contents of five_char_t: \n\n");
@@ -679,8 +797,12 @@ struct five_char_t five_char;
  * PRINT_INT_CHAR_COMBO : 
  * IN struct int_char_combo_t int_char_combo
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_int_char_combo (struct int_char_combo_t int_char_combo)
+#else
 void print_int_char_combo ( int_char_combo )
 struct int_char_combo_t int_char_combo;
+#endif
 {
 
      printf("Contents of int_char_combo_t: \n\n");
@@ -695,11 +817,17 @@ struct int_char_combo_t int_char_combo;
  * IN struct small_rep_info_t  struct2
  * IN struct small_rep_info_t  struct3
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_struct_rep(
+     struct small_rep_info_t struct1,
+     struct small_rep_info_t struct2,
+     struct small_rep_info_t struct3)
+#else
 void print_struct_rep( struct1, struct2, struct3)
      struct small_rep_info_t struct1;
      struct small_rep_info_t struct2;
      struct small_rep_info_t struct3;
-
+#endif
 {
 
 
@@ -721,13 +849,21 @@ void print_struct_rep( struct1, struct2, struct3)
  * IN struct small_rep_info_t  struct3
  * IN struct small_rep_info_t  struct4
  ****************************************************************/
+#ifdef PROTOTYPES
+void sum_struct_print (
+     int seed,
+     struct small_rep_info_t struct1,
+     struct small_rep_info_t struct2, 
+     struct small_rep_info_t struct3,
+     struct small_rep_info_t struct4)
+#else
 void sum_struct_print ( seed, struct1, struct2, struct3, struct4) 
      int seed;
      struct small_rep_info_t struct1;
      struct small_rep_info_t struct2; 
      struct small_rep_info_t struct3; 
      struct small_rep_info_t struct4; 
-
+#endif
 {
      int sum;
 
@@ -742,6 +878,24 @@ void sum_struct_print ( seed, struct1, struct2, struct3, struct4)
  * All of the small structures of odd sizes (40 bits, 8bits, etc.)
  * are pushed onto the stack.
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_small_structs (
+     struct small_rep_info_t  struct1,
+     struct small_rep_info_t  struct2,
+     struct small_rep_info_t  struct3,
+     struct small_rep_info_t  struct4,
+     struct bit_flags_t       flags,
+     struct bit_flags_combo_t flags_combo,
+     struct three_char_t      three_char,
+     struct five_char_t       five_char,
+     struct int_char_combo_t  int_char_combo,
+     struct one_double_t      d1,
+     struct one_double_t      d2,
+     struct one_double_t      d3,
+     struct two_floats_t      f1,
+     struct two_floats_t      f2,
+     struct two_floats_t      f3)
+#else
 void print_small_structs ( struct1, struct2, struct3,  struct4, flags, 
 flags_combo, three_char, five_char, int_char_combo, d1, d2,d3,f1,f2,f3)
      struct small_rep_info_t  struct1;
@@ -759,6 +913,7 @@ flags_combo, three_char, five_char, int_char_combo, d1, d2,d3,f1,f2,f3)
      struct two_floats_t      f1;
      struct two_floats_t      f2;
      struct two_floats_t      f3;
+#endif
 {
    print_bit_flags(flags);
    print_bit_flags_combo(flags_combo);
@@ -784,6 +939,30 @@ flags_combo, three_char, five_char, int_char_combo, d1, d2,d3,f1,f2,f3)
  * may force more space to be pushed onto the stack as part of the callers
  * frame.
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_long_arg_list (
+     double a,
+     double b,
+     int c,
+     int d,
+     int e,
+     int f,
+     struct small_rep_info_t  struct1,
+     struct small_rep_info_t  struct2,
+     struct small_rep_info_t  struct3,
+     struct small_rep_info_t  struct4,
+     struct bit_flags_t       flags,
+     struct bit_flags_combo_t flags_combo,
+     struct three_char_t      three_char,
+     struct five_char_t       five_char,
+     struct int_char_combo_t  int_char_combo,
+     struct one_double_t      d1,
+     struct one_double_t      d2,
+     struct one_double_t      d3,
+     struct two_floats_t      f1,
+     struct two_floats_t      f2,
+     struct two_floats_t      f3)
+#else
 void print_long_arg_list ( a, b, c, d, e, f, struct1, struct2, struct3, 
 struct4, flags, flags_combo, three_char, five_char, int_char_combo, d1,d2,d3,
 f1, f2, f3 )
@@ -808,7 +987,7 @@ f1, f2, f3 )
      struct two_floats_t      f1;
      struct two_floats_t      f2;
      struct two_floats_t      f3;
-
+#endif
 {
     printf("double : %f\n", a);
     printf("double : %f\n", b);
@@ -822,9 +1001,12 @@ f1, f2, f3 )
 }
 
 
+#ifdef PROTOTYPES
+void print_one_large_struct (struct array_rep_info_t linked_list1)
+#else
 void print_one_large_struct( linked_list1 )
      struct array_rep_info_t linked_list1;
-
+#endif
 {
 
  /* printf("Contents of linked list1: \n\n");
@@ -845,11 +1027,17 @@ void print_one_large_struct( linked_list1 )
  * IN struct array_rep_info_t linked_list2
  * IN struct array_rep_info_t linked_list3
  ****************************************************************/
+#ifdef PROTOTYPES
+void print_array_rep(
+     struct array_rep_info_t linked_list1,
+     struct array_rep_info_t linked_list2,
+     struct array_rep_info_t linked_list3)
+#else
 void print_array_rep( linked_list1, linked_list2, linked_list3 )
      struct array_rep_info_t linked_list1;
      struct array_rep_info_t linked_list2;
      struct array_rep_info_t linked_list3;
-
+#endif
 {
 
   int index;
@@ -895,13 +1083,21 @@ void print_array_rep( linked_list1, linked_list2, linked_list3 )
  * IN struct array_rep_info_t linked_list3
  * IN struct array_rep_info_t linked_list4
  ****************************************************************/
+#ifdef PROTOTYPES
+void sum_array_print (
+     int seed,
+     struct array_rep_info_t linked_list1,
+     struct array_rep_info_t linked_list2,
+     struct array_rep_info_t linked_list3,
+     struct array_rep_info_t linked_list4)
+#else
 void sum_array_print ( seed, linked_list1, linked_list2, linked_list3,linked_list4)
      int seed;
      struct array_rep_info_t linked_list1;
      struct array_rep_info_t linked_list2;
      struct array_rep_info_t linked_list3;
      struct array_rep_info_t linked_list4;
-
+#endif
 {
      int index;
      int sum;
@@ -925,10 +1121,15 @@ void sum_array_print ( seed, linked_list1, linked_list2, linked_list3,linked_lis
  * IN struct array_rep_info_t *linked_list
  * IN int    seed
  ****************************************************************/
+#ifdef PROTOTYPES
+void init_array_rep(
+     struct array_rep_info_t *linked_list,
+     int    seed)
+#else
 void init_array_rep( linked_list, seed )
      struct array_rep_info_t *linked_list;
      int    seed;
-
+#endif
 {
 
   int index;
@@ -994,7 +1195,8 @@ int main ()  {
   for (index = 0; index < 120; index++) {
       if ((index%2) == 0) char_array[index] = 'Z';
         else char_array[index] = 'a';
-  } char_array[120] = '\0'; /* call-ar-st.exp uses line numbers everywhere */
+  }
+  char_array[120] = '\0';
 
   for (index = 0; index < 100; index++) {
       double_array[index] = index*23.4567;
index d737219..5662eb7 100644 (file)
@@ -101,25 +101,36 @@ if ![runto_main] then {
     continue
 }
 
-#go -until 1007
-gdb_test "tbreak 1007" \
-    "Breakpoint \[0-9\]+.*file.*$srcfile, line 1007.*" \
-    "tbreakpoint line 1007"
+#go -until 1209
+gdb_test "tbreak 1209" \
+    "Breakpoint \[0-9\]+.*file.*$srcfile, line 1209.*" \
+    "tbreakpoint line 1209"
 
 gdb_test continue \
-"Continuing\\..*main \\(\\) at.*$srcfile:1007.*" \
+"Continuing\\..*main \\(\\) at.*$srcfile:1209.*" \
 "run until breakpoint set at a line"
 
 
 #call print_double_array(double_array)
 if {![target_info exists gdb,skip_float_tests]} {
   send_gdb "print print_double_array(double_array)\n"
-  gdb_expect {
-    -re "array_d :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+0.000000\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200\[ \t\r\n\]+2275.299900  2298.756600  2322.213300\[ \t\r\n\]+\[ \t\r\n\]+.*$gdb_prompt $" {
-      pass "print print_double_array(double_array)"
-    }
-    -re ".*$gdb_prompt $" { fail "print print_double_array(double_array)" }
-    timeout           { fail "(timeout) print print_double_array(double_array)" }
+  gdb_expect_list "print print_double_array(double_array)" ".*$gdb_prompt $" {
+       "\[ \t\r\n\]+array_d :"
+       "\[ \t\r\n\]+========="
+       "\[ \t\r\n\]+0.000000"
+       "\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600"
+       "\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200"
+       "\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800"
+       "\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400"
+       "\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000"
+       "\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600"
+       "\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200"
+       "\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800"
+       "\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400"
+       "\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000"
+       "\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600"
+       "\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200"
+       "\[ \t\r\n\]+2275.299900  2298.756600  2322.213300\[ \t\r\n\]+\[ \t\r\n\]+"
   }
 }
 
@@ -136,18 +147,18 @@ gdb_expect {
 
 
 
-#go -until 1014
-gdb_test "tbreak 1014" \
-"Breakpoint.*file.*$srcfile, line 1014.*" \
-"tbreakpoint line 1014"
+#go -until 1216
+gdb_test "tbreak 1216" \
+"Breakpoint.*file.*$srcfile, line 1216.*" \
+"tbreakpoint line 1216"
 
 send_gdb "continue\n"
 gdb_expect {
-    -re "array_c :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+Z\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa\[ \t\r\n\]+\[ \t\r\n\]+\[ \t\r\n\]+main.*at.*$srcfile:1014\[ \t\r\n\]+.*print_double_array\\(double_array\\).*$gdb_prompt $" {
-        pass "continue to 1014"
+    -re "array_c :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+Z\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa\[ \t\r\n\]+\[ \t\r\n\]+\[ \t\r\n\]+main.*at.*$srcfile:1216\[ \t\r\n\]+.*print_double_array\\(double_array\\).*$gdb_prompt $" {
+        pass "continue to 1216"
       }
-    -re ".*$gdb_prompt $" { fail "continue to 1014" }
-    timeout           { fail "(timeout) continue to 1014" }
+    -re ".*$gdb_prompt $" { fail "continue to 1216" }
+    timeout           { fail "(timeout) continue to 1216" }
 }
 
 # I am disabling this test, because it takes too long. I verified by
@@ -163,19 +174,40 @@ gdb_expect {
 #  }
 
 #set timeout $oldtimeout
-#go -until 1018
-gdb_test "tbreak 1018" \
-    "Breakpoint.* file .*$srcfile, line 1018.*" \
-    "tbreakpoint line 1018"
+#go -until 1220
+gdb_test "tbreak 1220" \
+    "Breakpoint.* file .*$srcfile, line 1220.*" \
+    "tbreakpoint line 1220"
 
-gdb_test continue \
-"Continuing\\..*array_d :.*array_f :.*student id :\[\t \]+.*YELLOW.*array_i :.*main \\(\\) at .*call-ar-st.c:1018\[ \t\r\n\]+.*print_all_arrays\\(integer_array, char_array, float_array, double_array\\)." \
-"continuing to breakpoint 1018"
+send_gdb "continue\n"
+gdb_expect_list "continuing to breakpoint 1220" ".*$gdb_prompt $" {
+    "Continuing\\."
+    "\[ \t\r\n\]+array_d :"
+    "\[ \t\r\n\]+========="
+    "\[ \t\r\n\]+0.000000"
+    "\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600"
+    "\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200"
+    "\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800"
+    "\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400"
+    "\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000"
+    "\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600"
+    "\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200"
+    "\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800"
+    "\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400"
+    "\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000"
+    "\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600"
+    "\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200"
+    "\[ \t\r\n\]+2275.299900  2298.756600  2322.213300\[ \t\r\n\]+\[ \t\r\n\]+"
+    ".*array_f :"
+    ".*student id :\[\t \]+.*YELLOW"
+    ".*array_i :"
+    ".*main \\(\\) at .*call-ar-st.c:1220\[ \t\r\n\]+.*print_all_arrays\\(integer_array, char_array, float_array, double_array\\)."
+}
 
 #step
     send_gdb "step\n"
     gdb_expect {
-        -re "print_all_arrays \\(array_i=, array_c=.ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa., array_f=, array_d=\\) at .*call-ar-st.c:287\[ \t\r\n\]+287.*print_int_array\\(array_i\\);.*$gdb_prompt $" {pass "step inside print_all_arrays"}
+        -re "print_all_arrays \\(array_i=, array_c=.ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa., array_f=, array_d=\\) at .*call-ar-st.c:306\[ \t\r\n\]+306.*print_int_array\\(array_i\\);.*$gdb_prompt $" {pass "step inside print_all_arrays"}
         -re ".*$gdb_prompt $" { fail "step inside print_all_arrays" }
         timeout { fail "step inside print_all_arrays (timeout)" }
     }
@@ -184,7 +216,7 @@ gdb_test continue \
 #step -over
     send_gdb "next\n"
     gdb_expect {
-        -re "array_i :.*288.*print_char_array\\(array_c\\);.*$gdb_prompt $" {pass "next over print_int_array in print-all_arrays"}
+        -re "array_i :.*307.*print_char_array\\(array_c\\);.*$gdb_prompt $" {pass "next over print_int_array in print-all_arrays"}
         -re ".*$gdb_prompt $" { fail "next over print_int_array in print-all_arrays" }
         timeout { fail "next over print_int_array in print-all_arrays (timeout)" }
     }
@@ -194,21 +226,52 @@ gdb_test continue \
 #call print_double_array(array_d)
 if {![target_info exists gdb,skip_float_tests]} {
   send_gdb "print print_double_array(array_d)\n"
-  gdb_expect {
-    -re "array_d :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+0.000000\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200\[ \t\r\n\]+2275.299900  2298.756600  2322.213300\[ \t\r\n\]+\[ \t\r\n\]+.*$gdb_prompt $" {
-      pass "print print_double_array(array_d)"
-    }
-    -re ".*$gdb_prompt $" { fail "print print_double_array(array_d)" }
-    timeout           { fail "(timeout) print print_double_array(array_d)" }
+  gdb_expect_list "print print_double_array(array_d)" ".*$gdb_prompt $" {
+      "array_d :"
+      "\[ \t\r\n\]+========="
+      "\[ \t\r\n\]+\[ \t\r\n\]+0.000000"
+      "\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600"
+      "\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200"
+      "\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800"
+      "\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400"
+      "\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000"
+      "\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600"
+      "\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200"
+      "\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800"
+      "\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400"
+      "\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000"
+      "\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600"
+      "\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200"
+      "\[ \t\r\n\]+2275.299900  2298.756600  2322.213300\[ \t\r\n\]+\[ \t\r\n\]+"
   }
 }
 
-#go -until 1034
-gdb_test "tbreak 1034" \
-"Breakpoint.* file .*$srcfile, line 1034.*" \
-"tbreakpoint line 1034"
+#go -until 1236
+gdb_test "tbreak 1236" \
+"Breakpoint.* file .*$srcfile, line 1236.*" \
+"tbreakpoint line 1236"
 
-gdb_test continue "Continuing\\..*array_c.*array_f.*array_d.*HELLO WORLD.*main \\(\\) at .*call-ar-st.c:1034.*printf\\(.BYE BYE FOR NOW.n.\\)." "continuing to 1034"
+send_gdb "continue\n"
+gdb_expect_list "continuing to 1236"  ".*$gdb_prompt $" {
+    "Continuing\\..*array_c"
+    ".*array_f"
+    "\[ \t\r\n\]+array_d :"
+    "\[ \t\r\n\]+========="
+    "\[ \t\r\n\]+0.000000"
+    "\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600"
+    "\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200"
+    "\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800"
+    "\[ \t\r\n\]+586.417500  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400"
+    "\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000"
+    "\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600"
+    "\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200"
+    "\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800"
+    "\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400"
+    "\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000"
+    "\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600"
+    "\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200"
+    "\[ \t\r\n\]+2275.299900  2298.756600  2322.213300.*HELLO WORLD.*main \\(\\) at .*call-ar-st.c:1236.*printf\\(.BYE BYE FOR NOW.n.\\)."
+}
 
 
 #call sum_array_print(10, *list1, *list2, *list3, *list4)
@@ -225,9 +288,9 @@ gdb_expect {
 #step over
 send_gdb "n\n"
 gdb_expect {
-    -re ".*BYE BYE FOR NOW.*1035.*printf\\(.VERY GREEN GRASS.n.\\);.*$gdb_prompt $" { pass "next to 1035"}
-    -re ".*$gdb_prompt $" { fail "next to 1035" }
-    timeout { fail "next to 1035(timeout)" }
+    -re ".*BYE BYE FOR NOW.*1237.*printf\\(.VERY GREEN GRASS.n.\\);.*$gdb_prompt $" { pass "next to 1237"}
+    -re ".*$gdb_prompt $" { fail "next to 1237" }
+    timeout { fail "next to 1237(timeout)" }
 }
 
 #call print_array_rep(\*list1, \*list2, \*list3)
@@ -241,17 +304,17 @@ gdb_expect {
     timeout           { fail "(timeout) print print_array_rep(*list1, *list2, *list3)" }
   }
 
-#go -until 1039
-gdb_test "tbreak 1039" \
-    "Breakpoint..* file .*$srcfile, line 1039.*" \
-    "tbreakpoint line 1039"
+#go -until 1241
+gdb_test "tbreak 1241" \
+    "Breakpoint..* file .*$srcfile, line 1241.*" \
+    "tbreakpoint line 1241"
 
 send_gdb  "continue\n"
 gdb_expect {
- -re ".*main \\(\\) at .*call-ar-st.c:1039\r\n1039\t\[ \]+sum_array_print\\(10, \\*list1, \\*list2, \\*list3, \\*list4\\);.*$gdb_prompt $" {
-                   pass "continue to 1039"}
- -re ".*$gdb_prompt $" { fail "continue to 1039"}
- timeout           { fail "(timeout) continue to 1039"}
+ -re ".*main \\(\\) at .*call-ar-st.c:1241\r\n1241\t\[ \]+sum_array_print\\(10, \\*list1, \\*list2, \\*list3, \\*list4\\);.*$gdb_prompt $" {
+                   pass "continue to 1241"}
+ -re ".*$gdb_prompt $" { fail "continue to 1241"}
+ timeout           { fail "(timeout) continue to 1241"}
 }
 
 
@@ -268,7 +331,7 @@ gdb_test "break sum_array_print" \
        ".*Breakpoint ${decimal}: file .*call-ar-st.c, line.*" \
        "set breakpoint in sum_array_print"
 gdb_test "continue" \
-       ".*Breakpoint ${decimal}, sum_array_print \\(seed=10, linked_list1=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .4, 6, 8, 10, 12, 14, 16, 18, 20, 22., head = 0., linked_list2=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .8, 10, 12, 14, 16, 18, 20, 22, 24, 26., head = 0., linked_list3=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .10, 12, 14, 16, 18, 20, 22, 24, 26, 28., head = 0., linked_list4=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .20, 22, 24, 26, 28, 30, 32, 34, 36, 38., head = 0.\\) at .*call-ar-st.c:909\[ \t\n\r\]+909.*printf\\(.Sum of 4 arrays, by element \\(add in seed as well\\).*\\);.*" \
+       ".*Breakpoint ${decimal}, sum_array_print \\(seed=10, linked_list1=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .4, 6, 8, 10, 12, 14, 16, 18, 20, 22., head = 0., linked_list2=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .8, 10, 12, 14, 16, 18, 20, 22, 24, 26., head = 0., linked_list3=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .10, 12, 14, 16, 18, 20, 22, 24, 26, 28., head = 0., linked_list4=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .20, 22, 24, 26, 28, 30, 32, 34, 36, 38., head = 0.\\) at .*call-ar-st.c:1105\[ \t\n\r\]+1105.*printf\\(.Sum of 4 arrays, by element \\(add in seed as well\\).*\\);.*" \
        "check args of sum_array_print"
 
 #call print_array_rep(linked_list1, linked_list2, linked_list3)
@@ -285,17 +348,17 @@ gdb_test "continue" \
 #}
 
 
-#go -until 1079
-gdb_test "tbreak 1079" \
-    "Breakpoint.* file .*call-ar-st.c, line 1079.*" \
-    "tbreakpoint line 1079"
+#go -until 1281
+gdb_test "tbreak 1281" \
+    "Breakpoint.* file .*call-ar-st.c, line 1281.*" \
+    "tbreakpoint line 1281"
 
 send_gdb "continue\n"
 gdb_expect {
- -re  "Continuing\\..*Sum of 4 arrays.*Contents of linked list1.*Contents of two_floats_t.*main \\(\\) at .*call-ar-st.c:1079.*c = 0.*$gdb_prompt $" {
-                 pass "continue to 1079"}
-      -re ".*$gdb_prompt $" { fail "continue to 1079"}           
-      timeout           { fail "(timeout) continue to 1079"}
+ -re  "Continuing\\..*Sum of 4 arrays.*Contents of linked list1.*Contents of two_floats_t.*main \\(\\) at .*call-ar-st.c:1281.*c = 0.*$gdb_prompt $" {
+                 pass "continue to 1281"}
+      -re ".*$gdb_prompt $" { fail "continue to 1281"}           
+      timeout           { fail "(timeout) continue to 1281"}
 }
 
 #call print_small_structs(*struct1, *struct2, *struct3, *struct4,*flags, *flags_combo,
@@ -334,30 +397,51 @@ if {![target_info exists gdb,skip_float_tests]} {
   }
 }
 
-#go -until 1084
-gdb_test "tbreak 1084" \
-    "Breakpoint .* file .*call-ar-st.c, line 1084.*" \
-    "tbreakpoint line 1084"
-
-gdb_test continue "Continuing\\..*main \\(.*\\) at.*call-ar-st.c:1084\[\t\r\n \]+1084.*print_long_arg_list \\( a, b, c, d, e, f, .struct1, .struct2, .struct3, .struct4,.*" "continue to 1084"
-
-# We can't just assume that a "step" will get us into print_long_arg_list here,either.
-gdb_test "tbreak print_long_arg_list" \
-  "Breakpoint .* file .*call-ar-st.c, line .*" \
-  "tbreak in print_long_arg_list after stepping into memcpy"
-send_gdb "continue\n"
-if {![target_info exists gdb,skip_float_tests]} {
-  gdb_expect {
-    -re ".*print_long_arg_list \\(a=22.219999999999999, b=33.332999999999998, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}, five_char=\{ch1 = 108 \'l\', ch2 = 109 \'m\', ch3 = 110 \'n\', ch4 = 111 \'o\', ch5 = 112 \'p\'\}, int_char_combo=\{int1 = 123, ch1 = 122 \'z\'\}, d1=\{double1 = 10.5\}, d2=\{double1 = -3.3399999999999999\}, d3=\{double1 = 675.09123\}, f1=\{float1 = 45.2340012, float2 = 43.5999985\}, f2=\{float1 = 78.0100021, float2 = 122.099998\}, f3=\{float1 = -1232.34497, float2 = -199.210007\}\\) at ${srcdir}/${subdir}/${srcfile}:813\[\r\n\]+813\[ \t\]+printf\\(\"double :.*\", a\\);.*$gdb_prompt $" {pass "step into print_long_arg_list"}
-    -re ".*$gdb_prompt $" { fail "step into print_long_arg_list" }
-    timeout { fail "step into print_long_arg_list (timeout)" }
-  }
+#go -until 1286
+gdb_test "tbreak 1286" \
+    "Breakpoint .* file .*call-ar-st.c, line 1286.*" \
+    "tbreakpoint line 1286"
+
+gdb_test continue "Continuing\\..*main \\(.*\\) at.*call-ar-st.c:1286\[\t\r\n \]+1286.*print_long_arg_list \\( a, b, c, d, e, f, .struct1, .struct2, .struct3, .struct4,.*" "continue to 1286"
+
+if { [istarget "hppa*-*-hpux*"] } {
+    #
+    # NOTE:(FIXME)
+    # the aCC demangler cannot demangle the name of a function with >10 args.
+    # so I added a .* after the name of the function, to match the
+    # incredibly long mangled name 
+    # (getting aCC's libdemangle.a bundled w/ the system?)
+    # DTS CLLbs16994  coulter 990114
+    # 
+    # FIXME: use step for hppa* testing for now
+    # guo 990621
+    #
+    send_gdb "step\n"
+    gdb_expect {
+        -re ".*print_long_arg_list.*\\(a=22.219999999999999, b=33.332999999999998, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}, five_char=\{ch1 = 108 \'l\', ch2 = 109 \'m\', ch3 = 110 \'n\', ch4 = 111 \'o\', ch5 = 112 \'p\'\}, int_char_combo=\{int1 = 123, ch1 = 122 \'z\'\}, d1=\{double1 = 10.5\}, d2=\{double1 = -3.3399999999999999\}, d3=\{double1 = 675.09123\}, f1=\{float1 = 45.2340012, float2 = 43.5999985\}, f2=\{float1 = 78.0100021, float2 = 122.099998\}, f3=\{float1 = -1232.34497, float2 = -199.210007\}\\) at ${srcdir}/${subdir}/${srcfile}:992\[\r\n\]+992\[ \t\]+printf\\(\"double :.*\", a\\);.*$gdb_prompt $" {pass "step into print_long_arg_list"}
+        -re ".*$gdb_prompt $" { fail "step into print_long_arg_list" }
+        timeout { fail "step into print_long_arg_list (timeout)" }
+    }
 } else {
-  gdb_expect {
-    -re ".*print_long_arg_list \\(.*\\).*$gdb_prompt $" { pass "step into print_long_arg_list" }
-    -re ".*$gdb_prompt $" { fail "step into print_long_arg_list" }
-    timeout { fail "step into print_long_arg_list (timeout)" }
-  }
+
+    # We can't just assume that a "step" will get us into print_long_arg_list here,either.
+    gdb_test "tbreak print_long_arg_list" \
+       "Breakpoint .* file .*call-ar-st.c, line .*" \
+       "tbreak in print_long_arg_list after stepping into memcpy"
+    send_gdb "continue\n"
+    if {![target_info exists gdb,skip_float_tests]} {
+       gdb_expect {
+           -re ".*print_long_arg_list \\(a=22.219999999999999, b=33.332999999999998, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}, five_char=\{ch1 = 108 \'l\', ch2 = 109 \'m\', ch3 = 110 \'n\', ch4 = 111 \'o\', ch5 = 112 \'p\'\}, int_char_combo=\{int1 = 123, ch1 = 122 \'z\'\}, d1=\{double1 = 10.5\}, d2=\{double1 = -3.3399999999999999\}, d3=\{double1 = 675.09123\}, f1=\{float1 = 45.2340012, float2 = 43.5999985\}, f2=\{float1 = 78.0100021, float2 = 122.099998\}, f3=\{float1 = -1232.34497, float2 = -199.210007\}\\) at ${srcdir}/${subdir}/${srcfile}:992\[\r\n\]+992\[ \t\]+printf\\(\"double :.*\", a\\);.*$gdb_prompt $" {pass "step into print_long_arg_list"}
+           -re ".*$gdb_prompt $" { fail "step into print_long_arg_list" }
+           timeout { fail "step into print_long_arg_list (timeout)" }
+       }
+    } else {
+       gdb_expect {
+           -re ".*print_long_arg_list \\(.*\\).*$gdb_prompt $" { pass "step into print_long_arg_list" }
+           -re ".*$gdb_prompt $" { fail "step into print_long_arg_list" }
+           timeout { fail "step into print_long_arg_list (timeout)" }
+       }
+    }
 }
 
 #call print_small_structs(struct1, struct2, struct3, struct4, flags, flags_combo, three_char, five_char, int_char_combo, d1, d2, d3, f1, f2, f3)
@@ -373,19 +457,25 @@ if {![target_info exists gdb,skip_float_tests]} {
 }
 
 
-#go -until 1098
-gdb_test "tbreak 1098" \
-    "Breakpoint.* file .*call-ar-st.c, line 1098.*" \
-    "tbreakpoint line 1098"
+#go -until 1300
+gdb_test "tbreak 1300" \
+    "Breakpoint.* file .*call-ar-st.c, line 1300.*" \
+    "tbreakpoint line 1300"
+
+gdb_test continue "Continuing\\..*Contents of two_floats_t:.*main \\(\\) at.*call-ar-st.c:1300.*1300.*init_bit_flags_combo\\(flags_combo, \\(unsigned\\)1, \\(unsigned\\)0, .y.,.*" \
+  "continue to 1300"
+
 
-gdb_test continue "Continuing\\..*Contents of two_floats_t:.*main \\(\\) at.*call-ar-st.c:1098.*1098.*init_bit_flags_combo\\(flags_combo, \\(unsigned\\)1, \\(unsigned\\)0, .y.,.*" \
-  "continue to 1098"
+# FIXME:
+# HP aCC demangler currently does not handle hp aCC functions with >10 args
+# DTS CLLbs16994  coulter 990114
 
+if {$hp_aCC_compiler} {setup_xfail "hppa*-*-*"}
 #step
     send_gdb "step\n"
     gdb_expect {
         -re "
-init_bit_flags_combo \\(bit_flags_combo=, a=1, b=0, ch1=121 .y., g=1, d=0, ch2=110 .n., e=1, o=0\\) at .*call-ar-st.c:385\[ \t\n\r\]+385.*bit_flags_combo->alpha = a;.*$gdb_prompt $" {
+init_bit_flags_combo \\(bit_flags_combo=, a=1, b=0, ch1=121 .y., g=1, d=0, ch2=110 .n., e=1, o=0\\) at .*call-ar-st.c:416\[ \t\n\r\]+416.*bit_flags_combo->alpha = a;.*$gdb_prompt $" {
                             pass "step into init_bit_flags_combo"}
         -re ".*$gdb_prompt $" { fail "step into init_bit_flags_combo" }
         timeout { fail "step into init_bit_flags_combo (timeout)" }
@@ -402,13 +492,13 @@ gdb_expect {
   }
 
 
-#go -until 1103
-gdb_test "tbreak 1103" \
-    "Breakpoint.* file .*call-ar-st.c, line 1103.*" \
-    "tbreakpoint line 1103"
+#go -until 1305
+gdb_test "tbreak 1305" \
+    "Breakpoint.* file .*call-ar-st.c, line 1305.*" \
+    "tbreakpoint line 1305"
 
-gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1103\[\r\n\t \]+1103.*init_int_char_combo\\(int_char_combo, 13, .!.\\);" \
-"continue to 1103"
+gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1305\[\r\n\t \]+1305.*init_int_char_combo\\(int_char_combo, 13, .!.\\);" \
+"continue to 1305"
 
 #call print_long_arg_list(a, b, c, d, e, f, *struct1, *struct2, *struct3, *struct4, *flags, *flags_combo, *three_char, *five_char, *int_char_combo, *d1, *d2, *d3, *f1, *f2, *f3)
 if {![target_info exists gdb,skip_float_tests]} {
@@ -423,13 +513,13 @@ if {![target_info exists gdb,skip_float_tests]} {
 }
 
 
-#go -until 1109
-gdb_test "tbreak 1109" \
-    "Breakpoint.* file .*call-ar-st.c, line 1109.*" \
-    "tbreakpoint line 1109"
+#go -until 1311
+gdb_test "tbreak 1311" \
+    "Breakpoint.* file .*call-ar-st.c, line 1311.*" \
+    "tbreakpoint line 1311"
 
-gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1109\[ \t\n\r\]+1109.*compute_with_small_structs\\(35\\);" \
-"continue to 1109"
+gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1311\[ \t\n\r\]+1311.*compute_with_small_structs\\(35\\);" \
+"continue to 1311"
 
 
 #call sum_struct_print(10, *struct1, *struct2, *struct3, *struct4)
index ad40a70..712f70e 100644 (file)
@@ -119,6 +119,16 @@ void loop_count () {
  * IN  unsigned e  -- 0 or 1 
  * IN  unsigned o  -- 0 or 1 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_bit_flags (
+struct bit_flags_t *bit_flags,
+unsigned a,
+unsigned b,
+unsigned g,
+unsigned d,
+unsigned e,
+unsigned o)
+#else
 void init_bit_flags (bit_flags,a,b,g,d,e,o) 
 struct bit_flags_t *bit_flags;
 unsigned a;
@@ -127,6 +137,7 @@ unsigned g;
 unsigned d;
 unsigned e;
 unsigned o; 
+#endif
 {
 
    bit_flags->alpha = a;
@@ -152,6 +163,18 @@ unsigned o;
  * IN  unsigned e  -- 0 or 1 
  * IN  unsigned o  -- 0 or 1 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_bit_flags_combo (
+struct bit_flags_combo_t *bit_flags_combo,
+unsigned a,
+unsigned b,
+char ch1,
+unsigned g,
+unsigned d,
+char ch2,
+unsigned e,
+unsigned o)
+#else
 void init_bit_flags_combo (bit_flags_combo, a, b, ch1, g, d, ch2, e, o)
 struct bit_flags_combo_t *bit_flags_combo;
 unsigned a;
@@ -162,6 +185,7 @@ unsigned d;
 char ch2;
 unsigned e;
 unsigned o;
+#endif
 {
 
    bit_flags_combo->alpha = a;
@@ -180,9 +204,13 @@ unsigned o;
  * OUT  struct one_double_t *one_double  -- structure to fill 
  * IN   double init_val
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_one_double ( struct one_double_t *one_double, double init_val)
+#else
 void init_one_double (one_double, init_val)
 struct one_double_t *one_double; 
 double init_val;
+#endif
 {
 
      one_double->double1  = init_val;
@@ -194,10 +222,17 @@ double init_val;
  * IN  float init_val1 
  * IN  float init_val2 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_two_floats (
+     struct two_floats_t *two_floats,
+     float init_val1,
+     float init_val2)
+#else
 void init_two_floats (two_floats, init_val1, init_val2)
 struct two_floats_t *two_floats;
 float init_val1;
 float init_val2;
+#endif
 {
 
      two_floats->float1 = init_val1;
@@ -211,11 +246,19 @@ float init_val2;
  * IN  char init_val2 
  * IN  char init_val3 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_three_chars (
+struct three_char_t *three_char,
+char init_val1,
+char init_val2,
+char init_val3)
+#else
 void init_three_chars ( three_char, init_val1, init_val2, init_val3)
 struct three_char_t *three_char;
 char init_val1;
 char init_val2;
 char init_val3;
+#endif
 {
 
      three_char->ch1 = init_val1;
@@ -232,6 +275,15 @@ char init_val3;
  * IN  char init_val4 
  * IN  char init_val5 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_five_chars (
+struct five_char_t *five_char,
+char init_val1,
+char init_val2,
+char init_val3,
+char init_val4,
+char init_val5)
+#else
 void init_five_chars ( five_char, init_val1, init_val2, init_val3, init_val4, init_val5)
 struct five_char_t *five_char;
 char init_val1;
@@ -239,6 +291,7 @@ char init_val2;
 char init_val3;
 char init_val4;
 char init_val5;
+#endif
 {
 
      five_char->ch1 = init_val1;
@@ -254,10 +307,17 @@ char init_val5;
  * IN  int  init_val1 
  * IN  char init_val2 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_int_char_combo (
+struct int_char_combo_t *combo,
+int init_val1,
+char init_val2)
+#else
 void init_int_char_combo ( combo, init_val1, init_val2)
 struct int_char_combo_t *combo;
 int init_val1;
 char init_val2;
+#endif
 {
 
      combo->int1 = init_val1;
@@ -269,10 +329,15 @@ char init_val2;
  * OUT struct small_rep_into_t *small_struct -- structure to be filled
  * IN  int  seed 
  *****************************************************************/
+#ifdef PROTOTYPES
+void init_struct_rep(
+     struct small_rep_info_t *small_struct,
+     int seed)
+#else
 void init_struct_rep( small_struct, seed)
 struct small_rep_info_t *small_struct;
 int    seed;
-
+#endif
 {
 
       small_struct->value = 2 + (seed*2); 
@@ -283,8 +348,12 @@ int    seed;
  * PRINT_BIT_FLAGS : 
  * IN struct bit_flags_t bit_flags 
  ****************************************************************/
+#ifdef PROTOTYPES
+struct bit_flags_t print_bit_flags (struct bit_flags_t bit_flags)
+#else
 struct bit_flags_t print_bit_flags ( bit_flags)
 struct bit_flags_t bit_flags;
+#endif
 {
 
      if (bit_flags.alpha) printf("alpha\n");
@@ -301,8 +370,12 @@ struct bit_flags_t bit_flags;
  * PRINT_BIT_FLAGS_COMBO : 
  * IN struct bit_flags_combo_t bit_flags_combo 
  ****************************************************************/
+#ifdef PROTOTYPES
+struct bit_flags_combo_t print_bit_flags_combo (struct bit_flags_combo_t bit_flags_combo)
+#else
 struct bit_flags_combo_t print_bit_flags_combo ( bit_flags_combo )
 struct bit_flags_combo_t bit_flags_combo;
+#endif
 {
 
      if (bit_flags_combo.alpha) printf("alpha\n");
@@ -320,8 +393,12 @@ struct bit_flags_combo_t bit_flags_combo;
  * PRINT_ONE_DOUBLE : 
  * IN struct one_double_t one_double 
  ****************************************************************/
+#ifdef PROTOTYPES
+struct one_double_t print_one_double (struct one_double_t one_double)
+#else
 struct one_double_t print_one_double ( one_double )
 struct one_double_t one_double;
+#endif
 {
 
      printf("Contents of one_double_t: \n\n");
@@ -334,8 +411,12 @@ struct one_double_t one_double;
  * PRINT_TWO_FLOATS : 
  * IN struct two_floats_t two_floats 
  ****************************************************************/
+#ifdef PROTOTYPES
+struct two_floats_t print_two_floats (struct two_floats_t two_floats)
+#else
 struct two_floats_t print_two_floats ( two_floats ) 
 struct two_floats_t two_floats;
+#endif
 {
 
      printf("Contents of two_floats_t: \n\n");
@@ -348,8 +429,12 @@ struct two_floats_t two_floats;
  * PRINT_THREE_CHARS : 
  * IN struct three_char_t three_char
  ****************************************************************/
+#ifdef PROTOTYPES
+struct three_char_t print_three_chars (struct three_char_t three_char)
+#else
 struct three_char_t print_three_chars ( three_char ) 
 struct three_char_t three_char;
+#endif
 {
 
      printf("Contents of three_char_t: \n\n");
@@ -362,8 +447,12 @@ struct three_char_t three_char;
  * PRINT_FIVE_CHARS : 
  * IN struct five_char_t five_char
  ****************************************************************/
+#ifdef PROTOTYPES
+struct five_char_t print_five_chars (struct five_char_t five_char)
+#else
 struct five_char_t print_five_chars ( five_char )
 struct five_char_t five_char;
+#endif
 {
 
      printf("Contents of five_char_t: \n\n");
@@ -378,8 +467,12 @@ struct five_char_t five_char;
  * PRINT_INT_CHAR_COMBO : 
  * IN struct int_char_combo_t int_char_combo
  ****************************************************************/
+#ifdef PROTOTYPES
+struct int_char_combo_t print_int_char_combo (struct int_char_combo_t int_char_combo)
+#else
 struct int_char_combo_t print_int_char_combo ( int_char_combo )
 struct int_char_combo_t int_char_combo;
+#endif
 {
 
      printf("Contents of int_char_combo_t: \n\n");
@@ -391,9 +484,12 @@ struct int_char_combo_t int_char_combo;
 /*****************************************************************
  * PRINT_STRUCT_REP : 
  ****************************************************************/
+#ifdef PROTOTYPES
+struct small_rep_info_t print_struct_rep(struct small_rep_info_t struct1)
+#else
 struct small_rep_info_t print_struct_rep( struct1 )
 struct small_rep_info_t struct1;
-
+#endif
 {
 
   printf("Contents of struct1: \n\n");
@@ -406,8 +502,12 @@ struct small_rep_info_t struct1;
 }
 
 
+#ifdef PROTOTYPES
+struct array_rep_info_t print_one_large_struct(struct array_rep_info_t linked_list1)
+#else
 struct array_rep_info_t print_one_large_struct( linked_list1 )
 struct array_rep_info_t linked_list1;
+#endif
 {
 
 
@@ -423,10 +523,13 @@ struct array_rep_info_t linked_list1;
  * IN struct array_rep_info_t *linked_list
  * IN int    seed
  ****************************************************************/
+#ifdef PROTOTYPES
+void init_array_rep(struct array_rep_info_t *linked_list, int seed)
+#else
 void init_array_rep( linked_list, seed )
 struct array_rep_info_t *linked_list;
 int    seed;
-
+#endif
 {
 
   int index;
index 2c419ae..a1cca70 100644 (file)
@@ -122,8 +122,10 @@ gdb_expect {
 
 send_gdb "finish\n"
 gdb_expect {
- -re  "Run till exit from .0  loop_count \\(\\) at.*call-rt-st.c:106\[ \t\r\n\]+main \\(\\) at.*call-rt-st.c:514\[ \t\r\n\]+514\[\t \]+return 0;.*$gdb_prompt $" {
-                 pass "finish out from  loop_count"}
+ -re  "Run till exit from .0  loop_count \\(\\) at.*call-rt-st.c:106\[ \t\r\n\]+main \\(\\) at.*call-rt-st.c:617\[ \t\r\n\]+617\[\t \]+return 0;.*$gdb_prompt $" {
+                 pass "finish out from  loop_count (line 617)"}
+ -re  "Run till exit from .0  loop_count \\(\\) at.*call-rt-st.c:106\[ \t\r\n\]+main \\(\\) at.*call-rt-st.c:615\[ \t\r\n\]+615\[\t \]+loop_count.*$gdb_prompt $" {
+                 pass "finish out from  loop_count (line 615)"}
       -re ".*$gdb_prompt $" { fail "finish out from loop_count"}           
       timeout           { fail "(timeout)finish out from loop_count"}
 }
index 02870e0..f3bc8da 100644 (file)
@@ -1,16 +1,33 @@
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 char buf[100];
 char bigbuf[1000];
 char * s;
 
+#ifdef PROTOTYPES
+char * str_func1(char *s1)
+#else
 char * str_func1(s1)
 char *s1;
+#endif
 {
   printf("first string arg is: %s\n", s1);
   strcpy(bigbuf, s1);
   return bigbuf;
 }
 
+#ifdef PROTOTYPES
+char * str_func(
+char * s1, 
+char * s2,
+char * s3,
+char * s4,
+char * s5,
+char * s6,
+char * s7)
+#else
 char * str_func(s1, 
                 s2,
                s3,
@@ -25,6 +42,7 @@ char * s4;
 char * s5;
 char * s6;
 char * s7;
+#endif
 {
   printf("first string arg is: %s\n", s1);
   printf("second string arg is: %s\n", s2);
@@ -49,11 +67,12 @@ link_malloc ()
   return (char*) malloc (1);
 }
 
-main()
+int main()
 {
   s = &buf[0];
   strcpy(buf, "test string");
   str_func("abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx", "yz12");
   str_func1("abcd");
+  return 0;
 }
 
index 1d4cc4a..84c1ef5 100644 (file)
@@ -217,26 +217,25 @@ gdb_expect {
     timeout           { fail "(timeout) call str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")" }
   }
 
-#print str_func(s,s,s,s,s,s,s,s)
-send_gdb "print  str_func(s,s,s,s,s,s,s,s)\n"
+#print str_func(s,s,s,s,s,s,s)
+send_gdb "print  str_func(s,s,s,s,s,s,s)\n"
 gdb_expect {
     -re "first string arg is: test string\[ \t\r\n\]+second string arg is: test string\[ \t\r\n\]+third string arg is: test string\[ \t\r\n\]+fourth string arg is: test string\[ \t\r\n\]+fifth string arg is: test string\[ \t\r\n\]+sixth string arg is: test string\[ \t\r\n\]+seventh string arg is: test string\[ \t\r\n\]+.*\"test stringtest stringtest stringtest stringtest stringtest stringtest string\".*$gdb_prompt $" {
-        pass "print str_func(s,s,s,s,s,s,s,s)"
+        pass "print str_func(s,s,s,s,s,s,s)"
       }
-    -re ".*$gdb_prompt $" { fail "print str_func(s,s,s,s,s,s,s,s)" }
-    timeout           { fail "(timeout) print str_func(s,s,s,s,s,s,s,s)" }
+    -re ".*$gdb_prompt $" { fail "print str_func(s,s,s,s,s,s,s)" }
+    timeout           { fail "(timeout) print str_func(s,s,s,s,s,s,s)" }
   }
 
-#call str_func(s,s,s,s,s,s,s,s)
-send_gdb "call  str_func(s,s,s,s,s,s,s,s)\n"
+#call str_func(s,s,s,s,s,s,s)
+send_gdb "call  str_func(s,s,s,s,s,s,s)\n"
 gdb_expect {
     -re "first string arg is: test string\[ \t\r\n\]+second string arg is: test string\[ \t\r\n\]+third string arg is: test string\[ \t\r\n\]+fourth string arg is: test string\[ \t\r\n\]+fifth string arg is: test string\[ \t\r\n\]+sixth string arg is: test string\[ \t\r\n\]+seventh string arg is: test string\[ \t\r\n\]+.*\"test stringtest stringtest stringtest stringtest stringtest stringtest string\".*$gdb_prompt $" {
-        pass "call str_func(s,s,s,s,s,s,s,s)"
+        pass "call str_func(s,s,s,s,s,s,s)"
       }
-    -re ".*$gdb_prompt $" { fail "call str_func(s,s,s,s,s,s,s,s)" }
-    timeout           { fail "(timeout) call str_func(s,s,s,s,s,s,s,s)" }
+    -re ".*$gdb_prompt $" { fail "call str_func(s,s,s,s,s,s,s)" }
+    timeout           { fail "(timeout) call str_func(s,s,s,s,s,s,s)" }
   }
 
 gdb_exit
 return 0
-~
index 56b9ba8..ecf9026 100644 (file)
@@ -8,6 +8,9 @@
 #define PARAMS(paramlist) paramlist
 #endif
 
+# include <stdlib.h>
+# include <string.h>
+
 char char_val1 = 'a';
 char char_val2 = 'b';
 
@@ -28,8 +31,8 @@ double double_val2 = -67.66;
 
 #define DELTA (0.001)
 
-char *string_val1 = "string 1";
-char *string_val2 = "string 2";
+char *string_val1 = (char *)"string 1";
+char *string_val2 = (char *)"string 2";
 
 char char_array_val1[] = "carray 1";
 char char_array_val2[] = "carray 2";
@@ -46,15 +49,20 @@ struct struct1 {
 
 /* Some functions that can be passed as arguments to other test
    functions, or called directly. */
-
-int add (a, b)
-int a, b;
+#ifdef PROTOTYPES
+int add (int a, int b)
+#else
+int add (a, b) int a, b;
+#endif
 {
   return (a + b);
 }
 
-int doubleit (a)
-int a;
+#ifdef PROTOTYPES
+int doubleit (int a)
+#else
+int doubleit (a) int a;
+#endif
 {
   return (a + a);
 }
@@ -69,20 +77,29 @@ enum enumtype enum_val1 = enumval1;
 enum enumtype enum_val2 = enumval2;
 enum enumtype enum_val3 = enumval3;
 
-int t_enum_value1 (enum_arg)
-enum enumtype enum_arg;
+#ifdef PROTOTYPES
+int t_enum_value1 (enum enumtype enum_arg)
+#else
+int t_enum_value1 (enum_arg) enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val1);
 }
 
-int t_enum_value2 (enum_arg)
-enum enumtype enum_arg;
+#ifdef PROTOTYPES
+int t_enum_value2 (enum enumtype enum_arg)
+#else
+int t_enum_value2 (enum_arg) enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val2);
 }
 
-int t_enum_value3 (enum_arg)
-enum enumtype enum_arg;
+#ifdef PROTOTYPES
+int t_enum_value3 (enum enumtype enum_arg)
+#else
+int t_enum_value3 (enum_arg) enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val3);
 }
@@ -90,9 +107,11 @@ enum enumtype enum_arg;
 /* A function that takes a vector of integers (along with an explicit
    count) and returns their sum. */
 
-int sum_args (argc, argv)
-int argc;
-int argv[];
+#ifdef PROTOTYPES
+int sum_args (int argc, int argv[])
+#else
+int sum_args (argc, argv) int argc; int argv[];
+#endif
 {
   int sumval = 0;
   int idx;
@@ -107,6 +126,15 @@ int argv[];
 /* Test that we can call functions that take structs and return
    members from that struct */
 
+#ifdef PROTOTYPES
+char   t_structs_c (struct struct1 tstruct) { return (tstruct.c); }
+short  t_structs_s (struct struct1 tstruct) { return (tstruct.s); }
+int    t_structs_i (struct struct1 tstruct) { return (tstruct.i); }
+long   t_structs_l (struct struct1 tstruct) { return (tstruct.l); }
+float  t_structs_f (struct struct1 tstruct) { return (tstruct.f); }
+double t_structs_d (struct struct1 tstruct) { return (tstruct.d); }
+char  *t_structs_a (struct struct1 tstruct) { return (tstruct.a); }
+#else
 char   t_structs_c (tstruct) struct struct1 tstruct; { return (tstruct.c); }
 short  t_structs_s (tstruct) struct struct1 tstruct; { return (tstruct.s); }
 int    t_structs_i (tstruct) struct struct1 tstruct; { return (tstruct.i); }
@@ -114,19 +142,30 @@ long   t_structs_l (tstruct) struct struct1 tstruct; { return (tstruct.l); }
 float  t_structs_f (tstruct) struct struct1 tstruct; { return (tstruct.f); }
 double t_structs_d (tstruct) struct struct1 tstruct; { return (tstruct.d); }
 char  *t_structs_a (tstruct) struct struct1 tstruct; { return (tstruct.a); }
+#endif
 
 /* Test that calling functions works if there are a lot of arguments.  */
+#ifdef PROTOTYPES
+int
+sum10 (int i0, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
+#else
 int
 sum10 (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
      int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;
+#endif
 {
   return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9;
 }
 
 /* Test that args are passed in the right order. */
+#ifdef PROTOTYPES
+int
+cmp10 (int i0, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
+#else
 int
 cmp10 (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
   int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;
+#endif
 {
   return
     (i0 == 0) && (i1 == 1) && (i2 == 2) && (i3 == 3) && (i4 == 4) &&
@@ -152,14 +191,21 @@ int main ()
    either 0 or 1, depending upon whether the values were
    passed incorrectly or correctly, respectively. */
 
+#ifdef PROTOTYPES
+int t_char_values (char char_arg1, char char_arg2)
+#else
 int t_char_values (char_arg1, char_arg2)
 char char_arg1, char_arg2;
+#endif
 {
   return ((char_arg1 == char_val1) && (char_arg2 == char_val2));
 }
 
 int
-#ifdef NO_PROTOTYPES
+#ifdef PROTOTYPES
+t_small_values (char arg1, short arg2, int arg3, char arg4, short arg5,
+               char arg6, short arg7, int arg8, short arg9, short arg10)
+#else
 t_small_values (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
      char arg1;
      short arg2;
@@ -171,34 +217,47 @@ t_small_values (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
      int arg8;
      short arg9;
      short arg10;
-#else
-t_small_values (char arg1, short arg2, int arg3, char arg4, short arg5,
-               char arg6, short arg7, int arg8, short arg9, short arg10)
 #endif
 {
   return arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10;
 }
 
+#ifdef PROTOTYPES
+int t_short_values (short short_arg1, short short_arg2)
+#else
 int t_short_values (short_arg1, short_arg2)
-short short_arg1, short_arg2;
+     short short_arg1, short_arg2;
+#endif
 {
   return ((short_arg1 == short_val1) && (short_arg2 == short_val2));
 }
 
+#ifdef PROTOTYPES
+int t_int_values (int int_arg1, int int_arg2)
+#else
 int t_int_values (int_arg1, int_arg2)
 int int_arg1, int_arg2;
+#endif
 {
   return ((int_arg1 == int_val1) && (int_arg2 == int_val2));
 }
 
+#ifdef PROTOTYPES
+int t_long_values (long long_arg1, long long_arg2)
+#else
 int t_long_values (long_arg1, long_arg2)
 long long_arg1, long_arg2;
+#endif
 {
   return ((long_arg1 == long_val1) && (long_arg2 == long_val2));
 }
 
+#ifdef PROTOTYPES
+int t_float_values (float float_arg1, float float_arg2)
+#else
 int t_float_values (float_arg1, float_arg2)
 float float_arg1, float_arg2;
+#endif
 {
   return ((float_arg1 - float_val1) < DELTA
          && (float_arg1 - float_val1) > -DELTA
@@ -207,13 +266,13 @@ float float_arg1, float_arg2;
 }
 
 int
-#ifdef NO_PROTOTYPES
+#ifdef PROTOTYPES
+t_float_values2 (float float_arg1, float float_arg2)
+#else
 /* In this case we are just duplicating t_float_values, but that is the
    easiest way to deal with either ANSI or non-ANSI.  */
 t_float_values2 (float_arg1, float_arg2)
      float float_arg1, float_arg2;
-#else
-t_float_values2 (float float_arg1, float float_arg2)
 #endif
 {
   return ((float_arg1 - float_val1) < DELTA
@@ -222,8 +281,12 @@ t_float_values2 (float float_arg1, float float_arg2)
          && (float_arg2 - float_val2) > -DELTA);
 }
 
+#ifdef PROTOTYPES
+int t_double_values (double double_arg1, double double_arg2)
+#else
 int t_double_values (double_arg1, double_arg2)
 double double_arg1, double_arg2;
+#endif
 {
   return ((double_arg1 - double_val1) < DELTA
          && (double_arg1 - double_val1) > -DELTA
@@ -231,15 +294,23 @@ double double_arg1, double_arg2;
          && (double_arg2 - double_val2) > -DELTA);
 }
 
+#ifdef PROTOTYPES
+int t_string_values (char *string_arg1, char *string_arg2)
+#else
 int t_string_values (string_arg1, string_arg2)
 char *string_arg1, *string_arg2;
+#endif
 {
   return (!strcmp (string_arg1, string_val1) &&
          !strcmp (string_arg2, string_val2));
 }
 
+#ifdef PROTOTYPES
+int t_char_array_values (char char_array_arg1[], char char_array_arg2[])
+#else
 int t_char_array_values (char_array_arg1, char_array_arg2)
 char char_array_arg1[], char_array_arg2[];
+#endif
 {
   return (!strcmp (char_array_arg1, char_array_val1) &&
          !strcmp (char_array_arg2, char_array_val2));
@@ -264,17 +335,25 @@ char char_array_arg1[], char_array_arg2[];
    that function indirectly through the function pointer.  This would fail
    on the HPPA.  */
 
+#ifdef PROTOTYPES
+int t_func_values (int (*func_arg1)(int, int), int (*func_arg2)(int))
+#else
 int t_func_values (func_arg1, func_arg2)
 int (*func_arg1) PARAMS ((int, int));
 int (*func_arg2) PARAMS ((int));
+#endif
 {
   return ((*func_arg1) (5,5)  == (*func_val1) (5,5)
           && (*func_arg2) (6) == (*func_val2) (6));
 }
 
+#ifdef PROTOTYPES
+int t_call_add (int (*func_arg1)(int, int), int a, int b)
+#else
 int t_call_add (func_arg1, a, b)
 int (*func_arg1) PARAMS ((int, int));
 int a, b;
+#endif
 {
   return ((*func_arg1)(a, b));
 }
index 19b5c96..7db87b7 100644 (file)
@@ -31,14 +31,8 @@ set testfile "callfuncs"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-set prototypes 1
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    set prototypes 0;
-    # built the second test case since we can't use prototypes
-    warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES"
-    if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DNO_PROTOTYPES}] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
-    }
 }
 
 # Create and source the file that provides information about the compiler
@@ -48,6 +42,12 @@ if [get_compiler_info ${binfile}] {
     return -1;
 }
 
+if {$hp_aCC_compiler} {
+    set prototypes 1
+} else {
+    set prototypes 0
+}
+
 # The a29k can't call functions, so don't even bother with this test.
 if [target_info exists gdb,cannot_call_functions] {
     setup_xfail "*-*-*" 2416
@@ -129,13 +129,13 @@ proc do_function_calls {} {
        # Gcc emits different stabs for the two parameters; the first is
        # claimed to be a float, the second a double.
        # dbxout.c in gcc claims this is the desired behavior.
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(3.14159,-2.3765)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(float_val1,float_val2)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(3.14159,float_val2)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(float_val1,-2.3765)" " = 1"
 
        # Test passing of arguments which might not be widened.
@@ -144,7 +144,7 @@ proc do_function_calls {} {
        # Although PR 5318 mentions SunOS specifically, this seems
        # to be a generic problem on quite a few platforms.
        if $prototypes then {
-           setup_xfail "hppa*-*-*" "sparc-*-*" "mips*-*-*" 5318
+           setup_xfail "sparc-*-*" "mips*-*-*" 5318
            if {!$gcc_compiled} then {
                setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318
            }
@@ -186,7 +186,17 @@ proc do_function_calls {} {
     setup_xfail "rs6000*-*-*"
     setup_xfail "powerpc*-*-*"
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_func_values(add,func_val2)" "You cannot.*ignored.*"
+       send_gdb "p t_func_values(add,func_val2)\n"
+       gdb_expect {
+         -re "You cannot.*ignored.*" {pass "p t_func_values(add,func_val2)"}
+         -re "Program received signal SIGBUS, Bus error.*" {
+           if [istarget hppa*-*-hpux*] {
+               pass "p t_func_values(add,func_val2)"
+           } else {
+               fail "p t_func_values(add,func_val2)"
+           }
+         }
+       }
     } else {
        gdb_test "p t_func_values(add,func_val2)" " = 1"
     }
@@ -194,7 +204,17 @@ proc do_function_calls {} {
     setup_xfail "rs6000*-*-*"
     setup_xfail "powerpc*-*-*"
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_func_values(func_val1,doubleit)" "You cannot.*ignored.*"
+       send_gdb "p t_func_values(func_val1,doubleit)\n"
+       gdb_expect {
+         -re "You cannot.*ignored.*" {pass "p t_func_values(func_val1,doubleit)"}
+         -re "Program received signal SIGBUS, Bus error.*" {
+           if [istarget hppa*-*-hpux*] {
+               pass "p t_func_values(func_val1,doubleit)"
+           } else {
+               fail "p t_func_values(func_val1,doubleit)"
+           }
+         }
+        }
     } else {
        gdb_test "p t_func_values(func_val1,doubleit)" " = 1"
     }
@@ -204,7 +224,17 @@ proc do_function_calls {} {
     setup_xfail "rs6000*-*-*"
     setup_xfail "powerpc*-*-*"
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_call_add(add,3,4)" "You cannot.*ignored.*"
+       send_gdb "p t_call_add(add,3,4)\n"
+       gdb_expect {
+         -re "You cannot.*ignored.*" {pass "p t_call_add(add,3,4)"}
+         -re "Program received signal SIGBUS, Bus error.*" {
+           if [istarget hppa*-*-hpux*] {
+               pass "p t_call_add(add,3,4)"
+           } else {
+               fail "p t_call_add(add,3,4)"
+           }
+         }
+        }
     } else {
        gdb_test "p t_call_add(add,3,4)" " = 7"
     }
@@ -255,12 +285,27 @@ gdb_test "set print sevenbit-strings" ""
 gdb_test "set print address off" ""
 gdb_test "set width 0" ""
 
-if { ![set_lang_c] } {
-    gdb_suppress_tests;
-} else {
+if { $hp_aCC_compiler } {
+    # Do not set language explicitly to 'C'.  This will cause aCC
+    # tests to fail because promotion rules are different.  Just let
+    # the language be set to the default.
+
     if { ![runto_main] } {
        gdb_suppress_tests;
     }
+
+    # However, turn off overload-resolution for aCC.  Having it on causes
+    # a lot of failures.
+
+    gdb_test "set overload-resolution 0" ".*"
+} else {
+    if { ![set_lang_c] } {
+       gdb_suppress_tests;
+    } else {
+       if { ![runto_main] } {
+           gdb_suppress_tests;
+       }
+    }
 }
 
 gdb_test "next" ".*"
index ac14d45..550a970 100644 (file)
@@ -8,6 +8,8 @@
 #define PARAMS(paramlist) paramlist
 #endif
 
+# include <string.h>
+
 char char_val1 = 'a';
 char char_val2 = 'b';
 
@@ -28,8 +30,8 @@ double double_val2 = -67.66;
 
 #define DELTA (0.001)
 
-char *string_val1 = "string 1";
-char *string_val2 = "string 2";
+char *string_val1 = (char *)"string 1";
+char *string_val2 = (char *)"string 2";
 
 char char_array_val1[] = "carray 1";
 char char_array_val2[] = "carray 2";
@@ -46,15 +48,21 @@ struct struct1 {
 
 /* Some functions that can be passed as arguments to other test
    functions, or called directly. */
-
-int add (a, b)
-int a, b;
+#ifdef PROTOTYPES
+int add (int a, int b)
+#else
+int add (a, b) int a, b;
+#endif
 {
   return (a + b);
 }
 
+#ifdef PROTOTYPES
+int doubleit (int a)
+#else
 int doubleit (a)
 int a;
+#endif
 {
   return (a + a);
 }
@@ -69,20 +77,32 @@ enum enumtype enum_val1 = enumval1;
 enum enumtype enum_val2 = enumval2;
 enum enumtype enum_val3 = enumval3;
 
+#ifdef PROTOTYPES
+int t_enum_value1 (enum enumtype enum_arg)
+#else
 t_enum_value1 (enum_arg)
 enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val1);
 }
 
+#ifdef PROTOTYPES
+int t_enum_value2 (enum enumtype enum_arg)
+#else
 t_enum_value2 (enum_arg)
 enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val2);
 }
 
+#ifdef PROTOTYPES
+int t_enum_value3 (enum enumtype enum_arg)
+#else
 t_enum_value3 (enum_arg)
 enum enumtype enum_arg;
+#endif
 {
   return (enum_arg == enum_val3);
 }
@@ -90,9 +110,13 @@ enum enumtype enum_arg;
 /* A function that takes a vector of integers (along with an explicit
    count) and returns their sum. */
 
+#ifdef PROTOTYPES
+int sum_args (int argc, int argv[])
+#else
 int sum_args (argc, argv)
 int argc;
 int argv[];
+#endif
 {
   int sumval = 0;
   int idx;
@@ -107,6 +131,15 @@ int argv[];
 /* Test that we can call functions that take structs and return
    members from that struct */
 
+#ifdef PROTOTYPES
+char   t_structs_c (struct struct1 tstruct) { return (tstruct.c); }
+short  t_structs_s (struct struct1 tstruct) { return (tstruct.s); }
+int    t_structs_i (struct struct1 tstruct) { return (tstruct.i); }
+long   t_structs_l (struct struct1 tstruct) { return (tstruct.l); }
+float  t_structs_f (struct struct1 tstruct) { return (tstruct.f); }
+double t_structs_d (struct struct1 tstruct) { return (tstruct.d); }
+char  *t_structs_a (struct struct1 tstruct) { return (tstruct.a); }
+#else
 char   t_structs_c (tstruct) struct struct1 tstruct; { return (tstruct.c); }
 short  t_structs_s (tstruct) struct struct1 tstruct; { return (tstruct.s); }
 int    t_structs_i (tstruct) struct struct1 tstruct; { return (tstruct.i); }
@@ -114,11 +147,16 @@ long   t_structs_l (tstruct) struct struct1 tstruct; { return (tstruct.l); }
 float  t_structs_f (tstruct) struct struct1 tstruct; { return (tstruct.f); }
 double t_structs_d (tstruct) struct struct1 tstruct; { return (tstruct.d); }
 char  *t_structs_a (tstruct) struct struct1 tstruct; { return (tstruct.a); }
+#endif
 
 /* Test that calling functions works if there are a lot of arguments.  */
+#ifdef PROTOTYPES
+int sum10 (int i0, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
+#else
 int
 sum10 (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
      int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;
+#endif
 {
   return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9;
 }
@@ -126,27 +164,40 @@ sum10 (i0, i1, i2, i3, i4, i5, i6, i7, i8, i9)
 /* Gotta have a main to be able to generate a linked, runnable
    executable, and also provide a useful place to set a breakpoint. */
 
+#ifdef PROTOTYPES
+int main()
+#else
 main ()
+#endif
 {
 #ifdef usestubs
   set_debug_traps();
   breakpoint();
 #endif
   t_structs_c(struct_val1);
+  return 0;
+  
 }
 
 /* Functions that expect specific values to be passed and return 
    either 0 or 1, depending upon whether the values were
    passed incorrectly or correctly, respectively. */
 
+#ifdef PROTOTYPES
+int t_char_values (char char_arg1, char char_arg2)
+#else
 int t_char_values (char_arg1, char_arg2)
 char char_arg1, char_arg2;
+#endif
 {
   return ((char_arg1 == char_val1) && (char_arg2 == char_val2));
 }
 
 int
-#ifdef NO_PROTOTYPES
+#ifdef PROTOTYPES
+t_small_values (char arg1, short arg2, int arg3, char arg4, short arg5,
+               char arg6, short arg7, int arg8, short arg9, short arg10)
+#else
 t_small_values (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
      char arg1;
      short arg2;
@@ -158,34 +209,47 @@ t_small_values (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
      int arg8;
      short arg9;
      short arg10;
-#else
-t_small_values (char arg1, short arg2, int arg3, char arg4, short arg5,
-               char arg6, short arg7, int arg8, short arg9, short arg10)
 #endif
 {
   return arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10;
 }
 
+#ifdef PROTOTYPES
+int t_short_values (short short_arg1, short short_arg2)
+#else
 int t_short_values (short_arg1, short_arg2)
 short short_arg1, short_arg2;
+#endif
 {
   return ((short_arg1 == short_val1) && (short_arg2 == short_val2));
 }
 
+#ifdef PROTOTYPES
+int t_int_values (int int_arg1, int int_arg2)
+#else
 int t_int_values (int_arg1, int_arg2)
 int int_arg1, int_arg2;
+#endif
 {
   return ((int_arg1 == int_val1) && (int_arg2 == int_val2));
 }
 
+#ifdef PROTOTYPES
+int t_long_values (long long_arg1, long long_arg2)
+#else
 int t_long_values (long_arg1, long_arg2)
 long long_arg1, long_arg2;
+#endif
 {
   return ((long_arg1 == long_val1) && (long_arg2 == long_val2));
 }
 
+#ifdef PROTOTYPES
+int t_float_values (float float_arg1, float float_arg2)
+#else
 int t_float_values (float_arg1, float_arg2)
 float float_arg1, float_arg2;
+#endif
 {
   return ((float_arg1 - float_val1) < DELTA
          && (float_arg1 - float_val1) > -DELTA
@@ -194,13 +258,13 @@ float float_arg1, float_arg2;
 }
 
 int
-#ifdef NO_PROTOTYPES
+#ifdef PROTOTYPES
+t_float_values2 (float float_arg1, float float_arg2)
+#else
 /* In this case we are just duplicating t_float_values, but that is the
    easiest way to deal with either ANSI or non-ANSI.  */
 t_float_values2 (float_arg1, float_arg2)
      float float_arg1, float_arg2;
-#else
-t_float_values2 (float float_arg1, float float_arg2)
 #endif
 {
   return ((float_arg1 - float_val1) < DELTA
@@ -209,8 +273,12 @@ t_float_values2 (float float_arg1, float float_arg2)
          && (float_arg2 - float_val2) > -DELTA);
 }
 
+#ifdef PROTOTYPES
+int t_double_values (double double_arg1, double double_arg2)
+#else
 int t_double_values (double_arg1, double_arg2)
 double double_arg1, double_arg2;
+#endif
 {
   return ((double_arg1 - double_val1) < DELTA
          && (double_arg1 - double_val1) > -DELTA
@@ -218,15 +286,23 @@ double double_arg1, double_arg2;
          && (double_arg2 - double_val2) > -DELTA);
 }
 
+#ifdef PROTOTYPES
+int t_string_values (char *string_arg1, char *string_arg2)
+#else
 int t_string_values (string_arg1, string_arg2)
 char *string_arg1, *string_arg2;
+#endif
 {
   return (!strcmp (string_arg1, string_val1) &&
          !strcmp (string_arg2, string_val2));
 }
 
+#ifdef PROTOTYPES
+int t_char_array_values (char char_array_arg1[], char char_array_arg2[])
+#else
 int t_char_array_values (char_array_arg1, char_array_arg2)
 char char_array_arg1[], char_array_arg2[];
+#endif
 {
   return (!strcmp (char_array_arg1, char_array_val1) &&
          !strcmp (char_array_arg2, char_array_val2));
@@ -251,17 +327,25 @@ char char_array_arg1[], char_array_arg2[];
    that function indirectly through the function pointer.  This would fail
    on the HPPA.  */
 
+#ifdef PROTOTYPES
+int t_func_values (int (*func_arg1)(int, int), int (*func_arg2)(int))
+#else
 int t_func_values (func_arg1, func_arg2)
 int (*func_arg1) PARAMS ((int, int));
 int (*func_arg2) PARAMS ((int));
+#endif
 {
   return ((*func_arg1) (5,5)  == (*func_val1) (5,5)
           && (*func_arg2) (6) == (*func_val2) (6));
 }
 
+#ifdef PROTOTYPES
+int t_call_add (int (*func_arg1)(int, int), int a, int b)
+#else
 int t_call_add (func_arg1, a, b)
 int (*func_arg1) PARAMS ((int, int));
 int a, b;
+#endif
 {
   return ((*func_arg1)(a, b));
 }
index 8b17b63..078e467 100644 (file)
@@ -19,7 +19,7 @@
 
 # This file was written by Fred Fish. (fnf@cygnus.com)
 
-# SAME tests as in callfuncs.exp but here the inferior program does not call malloc.
+# SAME tests as in callfns.exp but here the inferior program does not call malloc.
 
 
 
@@ -34,14 +34,8 @@ set testfile "callfuncs2"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-set prototypes 1
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    set prototypes 0;
-    # built the second test case since we can't use prototypes
-    warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES"
-    if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DNO_PROTOTYPES}] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
-    }
 }
 
 # Create and source the file that provides information about the compiler
@@ -51,6 +45,11 @@ if [get_compiler_info ${binfile}] {
     return -1;
 }
 
+if {$hp_aCC_compiler} {
+    set prototypes 1
+} else {
+    set prototypes 0
+}
 
 
 # The a29k can't call functions, so don't even bother with this test.
@@ -134,13 +133,13 @@ proc do_function_calls {} {
        # Gcc emits different stabs for the two parameters; the first is
        # claimed to be a float, the second a double.
        # dbxout.c in gcc claims this is the desired behavior.
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(3.14159,-2.3765)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(float_val1,float_val2)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(3.14159,float_val2)" " = 1"
-       setup_xfail "mn10300-*-*"
+       setup_xfail "mn10300-*-*" "hppa*-*-*11*"
        gdb_test "p t_float_values(float_val1,-2.3765)" " = 1"
 
        # Test passing of arguments which might not be widened.
@@ -149,7 +148,7 @@ proc do_function_calls {} {
        # Although PR 5318 mentions SunOS specifically, this seems
        # to be a generic problem on quite a few platforms.
        if $prototypes then {
-           setup_xfail "hppa*-*-*" "sparc-*-*" "mips*-*-*" 5318
+           setup_xfail "sparc-*-*" "mips*-*-*" 5318
            if {!$gcc_compiled} then {
                setup_xfail "alpha-dec-osf2*" "i*86-*-sysv4*" 5318
            }
@@ -193,7 +192,17 @@ proc do_function_calls {} {
     setup_xfail "powerpc*-*-*"
 
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_func_values(add,func_val2)" "You cannot.*ignored.*"
+        send_gdb "p t_func_values(add,func_val2)\n"
+        gdb_expect {
+          -re "You cannot.*ignored.*" {pass "p t_func_values(add,func_val2)"}
+          -re "Program received signal SIGBUS, Bus error.*" {
+            if [istarget hppa*-*-hpux*] {
+                pass "p t_func_values(add,func_val2)"
+            } else {
+                fail "p t_func_values(add,func_val2)"
+            }
+          }
+        }
     } else {
        gdb_test "p t_func_values(add,func_val2)" " = 1"
     }
@@ -202,7 +211,17 @@ proc do_function_calls {} {
     setup_xfail "powerpc*-*-*"
 
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_func_values(func_val1,doubleit)" "You cannot.*ignored.*"
+        send_gdb "p t_func_values(func_val1,doubleit)\n"
+        gdb_expect {
+          -re "You cannot.*ignored.*" {pass "p t_func_values(func_val1,doubleit)"}
+          -re "Program received signal SIGBUS, Bus error.*" {
+            if [istarget hppa*-*-hpux*] {
+                pass "p t_func_values(func_val1,doubleit)"
+            } else {
+                fail "p t_func_values(func_val1,doubleit)"
+            }
+          }
+        }
     } else {
        gdb_test "p t_func_values(func_val1,doubleit)" " = 1"
     }
@@ -213,7 +232,17 @@ proc do_function_calls {} {
     setup_xfail "powerpc*-*-*"
 
     if {!$gcc_compiled && [istarget hppa*-*-hpux*]} then {
-       gdb_test "p t_call_add(add,3,4)" "You cannot.*ignored.*"
+        send_gdb "p t_call_add(add,3,4)\n"
+        gdb_expect {
+          -re "You cannot.*ignored.*" {pass "p t_call_add(add,3,4)"}
+          -re "Program received signal SIGBUS, Bus error.*" {
+            if [istarget hppa*-*-hpux*] {
+                pass "p t_call_add(add,3,4)"
+            } else {
+                fail "p t_call_add(add,3,4)"
+            }
+          }
+        }
     } else {
        gdb_test "p t_call_add(add,3,4)" " = 7"
     }
@@ -262,12 +291,24 @@ gdb_test "set print sevenbit-strings" ""
 gdb_test "set print address off" ""
 gdb_test "set width 0" ""
 
-if { ![set_lang_c] } {
-    gdb_suppress_tests;
-} else {
+if { $hp_aCC_compiler } {
+    # Do not set language explicitly to 'C'.  This will cause aCC
+    # tests to fail because promotion rules are different.  Just let
+    # the language be set to the default.
+
     if { ![runto_main] } {
        gdb_suppress_tests;
     }
+
+    gdb_test "set overload-resolution 0" ".*"
+} else {
+    if { ![set_lang_c] } {
+       gdb_suppress_tests;
+    } else {
+       if { ![runto_main] } {
+           gdb_suppress_tests;
+       }
+    }
 }
 
 gdb_test "next" ".*"
index 72356ec..62d9f10 100644 (file)
@@ -93,6 +93,7 @@ proc progvar_simple_while_test {} {
         return
     }
 
+    gdb_test "set args 5" "" "set args in progvar_simple_while_test"
     if { ![runto factorial] } then { gdb_suppress_tests }
     # Don't depend upon argument passing, since most simulators don't currently
     # support it.  Bash value variable to be what we want.
@@ -110,6 +111,7 @@ proc progvar_complex_if_while_test {} {
         return
     }
 
+    gdb_test "set args 4" "" "set args in progvar_complex_if_while_test"
     if { ![runto factorial] } then { gdb_suppress_tests }
     # Don't depend upon argument passing, since most simulators don't currently
     # support it.  Bash value variable to be what we want.
@@ -125,6 +127,7 @@ proc if_while_breakpoint_command_test {} {
         return
     }
 
+    gdb_test "set args 5" "" "set args in if_while_breakpoint_command_test"
     if { ![runto factorial] } then { gdb_suppress_tests }
     # Don't depend upon argument passing, since most simulators don't currently
     # support it.  Bash value variable to be what we want.
@@ -155,6 +158,7 @@ proc infrun_breakpoint_command_test {} {
         return
     }
 
+    gdb_test "set args 6" "" "set args in progvar_simple_while_test"
     if { ![runto factorial] } then { gdb_suppress_tests }
     # Don't depend upon argument passing, since most simulators don't currently
     # support it.  Bash value variable to be what we want.
@@ -177,8 +181,14 @@ proc infrun_breakpoint_command_test {} {
     }
     gdb_test "step\nstep\nstep\nstep\nbt\nend" "" \
        "commands in infrun_breakpoint_command_test #2"
-    
-    gdb_test "continue" "Breakpoint \[0-9\]*, factorial \\(value=5\\).*at.*
+
+    if { [istarget "hppa*-hp-hpux*"] } {
+       gdb_test "continue" \
+           "Continuing.*.*.*Breakpoint \[0-9\]*, factorial \\(value=5\\).*at.*\[0-9\]*\[      \]*if \\(value > 1\\) \{.*\[0-9\]*\[      \]*value \\*= factorial \\(value - 1\\);.*" \
+           "contiune in infrun_breakpoint_command_test"
+    } else {
+       gdb_test "continue" \
+           "Breakpoint \[0-9\]*, factorial \\(value=5\\).*at.*
 \[0-9\]*\[     \]*if \\(value > 1\\) \{.*
 \[0-9\]*\[     \]*value \\*= factorial \\(value - 1\\);.*
 factorial \\(value=4\\) at.*\[0-9\]*\[         \]*if \\(value > 1\\) \{.*
@@ -190,7 +200,9 @@ factorial \\(value=3\\) at .*
 #2  \[0-9a-fx\]* in factorial \\(value=5\\).*
 #3  \[0-9a-fx\]* in factorial \\(value=6\\).*
 #4  \[0-9a-fx\]* in main \\(.*\\).*" \
-       "continue in infrun_breakpoint_command_test";
+           "continue in infrun_breakpoint_command_test";
+    }
+
     gdb_stop_suppressing_tests;
 }
 
@@ -200,6 +212,7 @@ proc breakpoint_command_test {} {
         return
     }
 
+    gdb_test "set args 6" "" "set args in breakpoint_command_test"
     if { ![runto factorial] } then { gdb_suppress_tests; }
     # Don't depend upon argument passing, since most simulators don't currently
     # support it.  Bash value variable to be what we want.
@@ -207,7 +220,7 @@ proc breakpoint_command_test {} {
     delete_breakpoints
     gdb_test "break factorial" "Breakpoint.*at.*" "break factorial #2"
     gdb_test "commands\nprintf \"Now the value is %d\\n\", value\nend" \
-       "Type commands.*\nEnd with.*" "commands in breakpoint_command_test"
+       "End with.*" "commands in breakpoint_command_test"
     gdb_test "continue" "Breakpoint \[0-9\]*, factorial.*Now the value is 5" \
        "continue in breakpoint_command_test"
     gdb_test "print value" " = 5" "print value in breakpoint_command_test"
@@ -236,7 +249,84 @@ proc user_defined_command_test {} {
    gdb_test "show user mycommand" "while.*set.*if.*p/x.*else.*p/x.*end.*" "display user command in user_defined_command_test"
 }
 
+proc watchpoint_command_test {} {
+    global noargs
+    global gdb_prompt
+
+    if [target_info exists noargs] { 
+        verbose "Skipping watchpoint_command_test because of noargs."
+        return
+    }
+
+    gdb_test "set args 6" "" "set args in watchpoint_command_test"
+    if { ![runto factorial] } then { return }
+    delete_breakpoints
+
+    # Verify that we can create a watchpoint, and give it a commands
+    # list that continues the inferior.  We set the watchpoint on a
+    # local variable, too, so that it self-deletes when the watched
+    # data goes out of scope.
+    #
+    # What should happen is: Each time the watchpoint triggers, it
+    # continues the inferior.  Eventually, the watchpoint will self-
+    # delete, when the watched variable is out of scope.  But by that
+    # time, the inferior should have exited.  GDB shouldn't crash or
+    # anything untoward as a result of this.
+    #
+    set wp_id -1
+
+    send_gdb "watch local_var\n"
+    gdb_expect {
+        -re ".*\[Ww\]atchpoint (\[0-9\]*): local_var.*$gdb_prompt $" {
+            set wp_id $expect_out(1,string)
+            pass "watch local_var"
+        }
+        -re "$gdb_prompt $"\
+            {fail "watch local_var"}
+        timeout {fail "(timeout) watch local_var"}
+    }
 
+    if {$wp_id == -1} {return}
+
+    send_gdb "commands $wp_id\n"
+    gdb_expect {
+      -re "Type commands for when breakpoint $wp_id is hit, one per line.*>"\
+              {pass "begin commands on watch"}
+      -re "$gdb_prompt $"\
+              {fail "begin commands on watch"}
+      timeout {fail "(timeout) begin commands on watch"}
+    }
+    send_gdb "print value\n"
+    gdb_expect {
+      -re ">"\
+              {pass "add print command to watch"}
+      -re "$gdb_prompt $"\
+              {fail "add print command to watch"}
+      timeout {fail "(timeout) add print command to watch"}
+    }
+    send_gdb "continue\n"
+    gdb_expect {
+      -re ">"\
+              {pass "add continue command to watch"}
+      -re "$gdb_prompt $"\
+              {fail "add continue command to watch"}
+      timeout {fail "(timeout) add continue command to watch"}
+    }
+    send_gdb "end\n"
+    gdb_expect {
+      -re "$gdb_prompt $"\
+              {pass "begin commands on watch"}
+      timeout {fail "(timeout) begin commands on watch"}
+    }
+    send_gdb "continue\n"
+    gdb_expect {
+      -re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:57.*"\
+              {pass "continue with watch"}
+      -re "$gdb_prompt $"\
+              {fail "continue with watch"}
+      timeout {fail "(timeout) continue with watch"}
+    }
+}
 
 proc test_command_prompt_position {} {
     global gdb_prompt
@@ -295,6 +385,7 @@ if_while_breakpoint_command_test
 infrun_breakpoint_command_test
 breakpoint_command_test
 user_defined_command_test
+watchpoint_command_test
 test_command_prompt_position
 
 
index b4d97f0..327f37d 100644 (file)
@@ -52,9 +52,10 @@ if $tracelevel then {
         }
 
 
-#skip all these tests for now (FIXME)
-
-continue
+if { ![istarget "hppa*-hp-hpux*"] } {
+    #skip all these tests for now (FIXME)
+    continue
+}
 
 global usestubs
 
@@ -71,6 +72,10 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
+
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
@@ -81,7 +86,7 @@ if ![runto_main] then {
 }
 
 set oldtimeout1 $timeout
-set timeout [expr $timeout + 500]
+set timeout 30
 
 
 send_gdb "hfgfh\t"
@@ -162,31 +167,33 @@ sleep 1
 gdb_expect  {
         -re "^p\\\x07$"\
             { send_gdb "\n"
+             sleep 1
               gdb_expect {
                       -re "The history is empty\\..*$gdb_prompt $"\
                                         { pass "complete 'p'"}
                       -re ".*$gdb_prompt $" { fail "complete 'p'"}
-                      timeout           {fail "(timeout) complete 'p'"}
+                      timeout           {fail "(timeout) complete 'p' 2"}
                      }
             }
         -re ".*$gdb_prompt $"       { fail "complete 'p'" }
-        timeout         { fail "(timeout) complete 'p'" }
+        timeout         { fail "(timeout) complete 'p' 1" }
         }
 
 send_gdb "p \t"
-sleep 1
+sleep 3
 gdb_expect  {
         -re "^p \\\x07$"\
             { send_gdb "\n"
+             sleep 1
               gdb_expect {
                       -re "The history is empty\\..*$gdb_prompt $"\
                                         { pass "complete 'p '"}
                       -re ".*$gdb_prompt $" { fail "complete 'p '"}
-                      timeout           {fail "(timeout) complete 'p '"}
+                      timeout           {fail "(timeout) complete 'p ' 1"}
                      }
             }
         -re ".*$gdb_prompt $"       { fail "complete 'p '" }
-        timeout         { fail "(timeout) complete 'p '" }
+        timeout         { fail "(timeout) complete 'p ' 2" }
         }
 
 
@@ -283,7 +290,7 @@ gdb_expect  {
         -re "^info $"\
             { send_gdb "\n"
               gdb_expect {
-                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\ninfo address.*info watchpoints.*\r\n\r\nType \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
+                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*info watchpoints.*\r\n\r\nType \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
                                         { pass "complete 'info'"}
                       -re ".*$gdb_prompt $" { fail "complete 'info'"}
                       timeout           {fail "(timeout) complete 'info'"}
@@ -299,7 +306,7 @@ gdb_expect  {
         -re "^info \\\x07$"\
             { send_gdb "\n"
               gdb_expect {
-                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\ninfo address.*Type \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
+                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*Type \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
                                         { pass "complete 'info '"}
                       -re ".*$gdb_prompt $" { fail "complete 'info '"}
                       timeout           {fail "(timeout) complete 'info '"}
@@ -313,7 +320,7 @@ gdb_expect  {
 send_gdb "info \t"
 sleep 1
 gdb_expect  {
-        -re "^info \0x7$"\
+        -re "^info \\\x07$"\
             { send_gdb "\t"
               gdb_expect {
                       -re "address.*types.*$gdb_prompt info $"\
@@ -368,26 +375,46 @@ gdb_expect  {
 
 send_gdb "p 'a\t"
 sleep 1
-gdb_expect  {
-        -re "^p 'a\\\x07$"\
-            { send_gdb "\t"
-              gdb_expect {
-                      -re "a64l.*atol.*$gdb_prompt p .a$"\
-                          { send_gdb "\n"
-                            gdb_expect {
-                                     -re "Invalid character constant\\..*$gdb_prompt $"\
-                                                       { pass "complete (2) 'p \'a'"}
-                                     -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'"}
-                                     timeout           {fail "(timeout) complete (2) 'p \'a'"}
-                                   }
-                          }
-                      -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'"}
-                      timeout           {fail "(timeout) complete (2) 'p \'a'"}
-                     }
-            }
-        -re ".*$gdb_prompt $"       { fail "complete (2) 'p \'a'" }
-        timeout         { fail "(timeout) complete (2) 'p \'a'" }
-        }
+gdb_expect {
+    -re "^p 'a\\\x07$" {
+       send_gdb "\t"
+       gdb_expect {
+           -re "a64l.*atol.*$gdb_prompt p .a$" {
+               send_gdb "\n"
+               gdb_expect {
+                   -re "Invalid character constant\\..*$gdb_prompt $" {
+                       pass "complete (2) 'p \'a'"
+                   }
+                   -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
+                   timeout { fail "(timeout) complete (2) 'p \'a'" }
+               }
+           }
+           -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
+               send_gdb "n"
+               gdb_expect {
+                   -re "\\(gdb\\) p 'a$" {
+                       send_gdb "\n"
+                       gdb_expect {
+                           -re "Invalid character constant\\..*$gdb_prompt $" {
+                               pass "complete (2) 'p \'a'"
+                           }
+                           -re ".*$gdb_prompt $" { 
+                               fail "complete (2) 'p \'a'"
+                           }
+                           timeout { fail "(timeout) complete (2) 'p \'a'" }
+                       }
+                   }
+                   -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
+                   timeout { fail "(timeout) complete (2) 'p \'a'" }
+               }
+           }
+           -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
+           timeout { fail "(timeout) complete (2) 'p \'a'" }
+       }
+    }
+    -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
+    timeout { fail "(timeout) complete (2) 'p \'a'" }
+}
 
 
 send_gdb "p b-a\t"
@@ -408,57 +435,79 @@ gdb_expect  {
 
 send_gdb "p b-a\t"
 sleep 1
-gdb_expect  {
-        -re "^p b-a\\\x07$"\
-            { send_gdb "\t"
-              gdb_expect {
-                      -re "a64l.*atol.*$gdb_prompt p b-a$"\
-                          { send_gdb "\n"
-                            gdb_expect {
-                                     -re "No symbol \"b\" in current context\\..*$gdb_prompt $"\
-                                                       { pass "complete (2) 'p b-a'"}
-                                     -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'"}
-                                     timeout           {fail "(timeout) complete (2) 'p b-a'"}
-                                   }
-                          }
-                      -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'"}
-                      timeout           {fail "(timeout) complete (2) 'p b-a'"}
-                     }
-            }
-        -re ".*$gdb_prompt $"       { fail "complete (2) 'p b-a'" }
-        timeout         { fail "(timeout) complete (2) 'p b-a'" }
+gdb_expect {
+    -re "^p b-a\\\x07$" {
+       send_gdb "\t"
+       gdb_expect {
+           -re "a64l.*atol.*$gdb_prompt p b-a$" {
+               send_gdb "\n"
+               gdb_expect {
+                   -re "No symbol \"b\" in current context\\..*$gdb_prompt $" {
+                       pass "complete (2) 'p b-a'"
+                   }
+                   -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'" }
+                   timeout { fail "(timeout) complete (2) 'p b-a'" }
+               }
+           }
+           -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
+               send_gdb "n"
+               gdb_expect {
+                   -re "\\(gdb\\) p b-a$" {
+                       send_gdb "\n"
+                       gdb_expect {
+                           -re "No symbol \"b\" in current context\\..*$gdb_prompt $" {
+                               pass "complete (2) 'p b-a'"
+                           }
+                           -re ".*$gdb_prompt $" {
+                               fail "complete (2) 'p b-a'"
+                           }
+                           timeout { fail "(timeout) complete (2) 'p b-a'" }
+                       }
+                   }
+                   -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'" }
+                   timeout { fail "(timeout) complete (2) 'p b-a'" }
+               }
+           }
+           -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'" }
+           timeout { fail "(timeout) complete (2) 'p b-a'" }
         }
-
+    }
+    -re ".*$gdb_prompt $" { fail "complete (2) 'p b-a'" }
+    timeout { fail "(timeout) complete (2) 'p b-a'" }
+}
 
 send_gdb "p b-\t"
 sleep 1
 gdb_expect  {
-        -re "^p b-\\\x07$"\
-            { send_gdb "\t"
-              gdb_expect {
-                      -re "There are $decimal possibilities\\.  Do you really\r\nwish to see them all. \\(y or n\\)$"\
-                          { send_gdb "n"
-                            gdb_expect {
-                                     -re "\\(gdb\\) p b-$"\
-                                         { send_gdb "\n"
-                                           gdb_expect {
-                                                   -re "No symbol \"b\" in current context\\..*$gdb_prompt $"\
-                                                       { pass "complete (2) 'p b-'"}
-                                                   -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'"}
-                                                   timeout           {fail "(timeout) complete (2) 'p b-'"}
-                                                  }
-                                          }
-                                     -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'"}
-                                     timeout           {fail "(timeout) complete (2) 'p b-'"}
-                                   }
-                          }
-                      -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'"}
-                      timeout           {fail "(timeout) complete (2) 'p b-'"}
-                     }
-            }
-        -re ".*$gdb_prompt $"       { fail "complete (2) 'p b-'" }
-        timeout         { fail "(timeout) complete (2) 'p b-'" }
-        }
+    -re "^p b-\\\x07$" {
+       send_gdb "\t"
+       gdb_expect {
+           -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
+               send_gdb "n"
+               gdb_expect {
+                   -re "\\(gdb\\) p b-$" {
+                       send_gdb "\n"
+                       gdb_expect {
+                           -re "No symbol \"b\" in current context\\..*$gdb_prompt $" {
+                               pass "complete (2) 'p b-'"
+                           }
+                           -re ".*$gdb_prompt $" {
+                               fail "complete (2) 'p b-'"
+                           }
+                           timeout { fail "(timeout) complete (2) 'p b-'" }
+                       }
+                   }
+                   -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'" }
+                   timeout { fail "(timeout) complete (2) 'p b-'" }
+               }
+           }
+           -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'" }
+           timeout { fail "(timeout) complete (2) 'p b-'" }
+       }
+    }
+    -re ".*$gdb_prompt $" { fail "complete (2) 'p b-'" }
+    timeout { fail "(timeout) complete (2) 'p b-'" }
+}
 
 send_gdb "file ${objdir}/Make\t"
 sleep 1
@@ -487,7 +536,7 @@ gdb_expect  {
 send_gdb "file ${srcdir}/gdb.base/a1\t"
 sleep 1
 gdb_expect  {
-        -re "^file ${srcdir}/gdb.base/.*'a1.*-selftest\\.exp' $"\
+        -re "^file ${srcdir}/gdb.base/.*'a1.*-self\\.exp' $"\
             { send_gdb "\n"
               gdb_expect {
                       -re "\r\nA program is being debugged already\\.  Kill it\\? \\(y or n\\) $"
@@ -513,13 +562,14 @@ send_gdb "info func mark\t"
 sleep 1
 gdb_expect  {
         -re "^info func mark.*er$"\
-            { send_gdb "\t\t"
+            {
+             send_gdb "\t\t"
               sleep 3
               gdb_expect {
-                      -re "marker1  marker2  marker3  marker4.*$gdb_prompt info func marker$"\
+                      -re "marker1.*$gdb_prompt info func marker$"\
                       { send_gdb "\n"
                         gdb_expect {
-                                -re "All functions matching regular expression \"marker\":\r\n\r\nFile.*break.c:\r\nint marker1\\(\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\);\r\n$gdb_prompt $"\
+                                -re "All functions matching regular expression \"marker\":\r\n\r\nFile.*break.c:\r\nint marker1\\(.*\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long\\);\r\n$gdb_prompt $"\
                                                   { pass "complete 'info func mar'"}
                                 -re ".*$gdb_prompt $" { fail "complete 'info func mar'"}
                                 timeout           {fail "(timeout) complete 'info func mar'"}
@@ -540,6 +590,8 @@ gdb_expect  {
         -re "ask.*child.*parent.*$gdb_prompt set follow-fork-mode $"\
             { send_gdb "\n"
               gdb_expect {
+                      -re "Requires an argument.*parent.*child.*ask.*$gdb_prompt $"\
+                                        { pass "complete 'set follow-fork-mode'"}
                       -re "Ambiguous item \"\"\\..*$gdb_prompt $"\
                                         { pass "complete 'set follow-fork-mode'"}
                       -re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'"}
index 491d6e5..6acbf9b 100644 (file)
@@ -29,6 +29,7 @@ char *arg;
 
 #else /* ! vxworks */
 #  include <stdio.h>
+#  include <stdlib.h>
 #endif /* ! vxworks */
 
 /*
@@ -38,20 +39,34 @@ char *arg;
  * of gcc have or have had problems with this).
  */
 
+#ifdef PROTOTYPES
+int marker1 (void) { return (0); }
+int marker2 (int a) { return (1); }
+void marker3 (char *a, char *b) {}
+void marker4 (long d) {}
+#else
 int marker1 () { return (0); }
 int marker2 (a) int a; { return (1); }
 void marker3 (a, b) char *a, *b; {}
 void marker4 (d) long d; {}
+#endif
 
 /*
  *     This simple classical example of recursion is useful for
  *     testing stack backtraces and such.
  */
 
+#ifdef PROTOTYPES
+int factorial(int);
+
+int
+main (int argc, char **argv, char **envp)
+#else
 int
 main (argc, argv, envp)
 int argc;
 char *argv[], **envp;
+#endif
 {
 #ifdef usestubs
     set_debug_traps();
@@ -70,8 +85,12 @@ char *argv[], **envp;
     return 0;
 }
 
+#ifdef PROTOTYPES
+int factorial (int value)
+#else
 int factorial (value)
 int value;
+#endif
 {
     if (value > 1) {
        value *= factorial (value - 1);
index 281616b..8f8f11c 100644 (file)
@@ -43,6 +43,10 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
+
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
@@ -74,8 +78,8 @@ gdb_test "delete 2" \
 #
 # test conditional break at line number
 #
-gdb_test "break 64 if 1==1" \
-    "Breakpoint.*at.* file .*$srcfile, line 64\\." \
+gdb_test "break 79 if 1==1" \
+    "Breakpoint.*at.* file .*$srcfile, line 79\\." \
     "break line if condition"
 
 gdb_test "delete 3" \
@@ -92,8 +96,8 @@ gdb_test "break marker1 if (1==1)" \
 #
 # test conditional break at line number
 #
-gdb_test "break 64 if (1==1)" \
-    "Breakpoint.*at.* file .*$srcfile, line 64\\." \
+gdb_test "break 79 if (1==1)" \
+    "Breakpoint.*at.* file .*$srcfile, line 79\\." \
     "break line if (condition)"
 
 gdb_test "break marker2 if (a==43)" \
@@ -104,15 +108,23 @@ gdb_test "break marker2 if (a==43)" \
 # check to see what breakpoints are set
 #
 
-set main_line 60
+if {$hp_aCC_compiler} {
+    set marker1_proto "\\(void\\)"
+    set marker2_proto "\\(int\\)"
+} else {
+    set marker1_proto ""
+    set marker2_proto ""
+}
+
+set main_line 75
 gdb_test "info break" \
     "Num Type\[ \]+Disp Enb Address\[ \]+What.*
 \[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$main_line.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in marker1 at .*$srcfile:41.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in marker1$marker1_proto at .*$srcfile:4\[38\].*
 \[\t \]+stop only if 1 == 1.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:64.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:79.*
 \[\t \]+stop only if 1 == 1.*
-\[0-9\]+\[\t \]+breakpoint     keep y.* in marker2 at .*$srcfile:42.*
+\[0-9\]+\[\t \]+breakpoint     keep y.* in marker2$marker2_proto at .*$srcfile:4\[49\].*
 \[\t \]+stop only if a == 43.*" \
     "breakpoint info"
 
@@ -127,19 +139,21 @@ rerun_to_main
 #
 # run until the breakpoint at a line number
 #
-gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:64.*64\[\t \]+printf.*factorial.*" \
+gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:79.*79\[\t \]+printf.*factorial.*" \
                        "run until breakpoint set at a line number"
 
 #
 # run until the breakpoint at marker1
 #
-gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker1 \\(\\) at .*$srcfile:41.*41\[\t \]+.*" \
+gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker1 \\(\\) at .*$srcfile:4\[38\].*4\[38\]\[\t \]+.*" \
                        "run until breakpoint at marker1"
 
 #
 # run until the breakpoint at marker2
 #
-gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker2 \\(a=43\\) at .*$srcfile:42.*42\[\t \]+.*" \
+#See 11512CLLbs
+setup_xfail hppa2.0w-*-*
+gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker2 \\(a=43\\) at .*$srcfile:4\[49\].*4\[49\]\[\t \]+.*" \
                        "run until breakpoint at marker2"
 
 
index 518e5ca..312b524 100644 (file)
@@ -41,8 +41,14 @@ set testfile "constvars"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+if [istarget "hppa*-*-*"] {
+    set lang "c++"
+} else {
+    set lang ""
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug $lang]] != "" } {
+    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
 # Create and source the file that provides information about the compiler
@@ -94,7 +100,7 @@ send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
 send_gdb "ptype qux1\n"
 gdb_expect {
-    -re "type = int \\(const char, const char &, const char *, char * const\\).*$gdb_prompt $" {
+    -re "type = int \\(const char, const char, const char \\*, char \\* const\\).*$gdb_prompt $" {
         pass "ptype qux1"
     }
     -re ".*$gdb_prompt $" { fail "ptype qux1" }
@@ -150,102 +156,100 @@ proc do_constvar_tests {} {
     gdb_test "ptype languid" "type = const double"
     gdb_test "print *legend" " = 66 'B'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype legend" "type = const char *"
+    gdb_test "ptype legend" "type = const char \\*"
     gdb_test "print *legerdemain" " = 10 '\\\\n'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype legerdemain" "type = const unsigned char *"
+    gdb_test "ptype legerdemain" "type = const unsigned char \\*"
     gdb_test "print *leniency" " = 20"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype leniency" "type = const short *"
+    gdb_test "ptype leniency" "type = const short \\*"
     gdb_test "print *leonine" " = 30"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype leonine" "type = const unsigned short *"
+    gdb_test "ptype leonine" "type = const unsigned short \\*"
     gdb_test "print *lesion" " = 40"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lesion" "type = const long *"
+    gdb_test "ptype lesion" "type = const long \\*"
     gdb_test "print *lethal" " = 50"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lethal" "type = const unsigned long *"
+    gdb_test "ptype lethal" "type = const unsigned long \\*"
     gdb_test "print *lethargic" " = 60"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lethargic" "type = const float *"
+    gdb_test "ptype lethargic" "type = const float \\*"
     gdb_test "print *levity" " = 70"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype levity" "type = const double *"
+    gdb_test "ptype levity" "type = const double \\*"
     gdb_test "print *lewd" " = 65 'A'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lewd" "type = const char * const"
+    gdb_test "ptype lewd" "type = const char \\* const"
     gdb_test "print *lexicographer" " = 1 '.001'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lexicographer" "type = const unsigned char * const"
+    gdb_test "ptype lexicographer" "type = const unsigned char \\* const"
     gdb_test "print *lexicon" " = 2"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lexicon" "type = const short * const"
+    gdb_test "ptype lexicon" "type = const short \\* const"
     gdb_test "print *liaison" " = 3"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype liaison" "type = const unsigned short * const"
+    gdb_test "ptype liaison" "type = const unsigned short \\* const"
     gdb_test "print *libation" " = 4"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype libation" "type = const long * const"
+    gdb_test "ptype libation" "type = const long \\* const"
     gdb_test "print *libelous" " = 5"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype libelous" "type = const unsigned long * const"
+    gdb_test "ptype libelous" "type = const unsigned long \\* const"
     gdb_test "print *libertine" " = 6"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype libertine" "type = const float * const"
+    gdb_test "ptype libertine" "type = const float \\* const"
     gdb_test "print *libidinous" " = 7"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype libidinous" "type = const double * const"
+    gdb_test "ptype libidinous" "type = const double \\* const"
     gdb_test "print *languish" " = 65 'A'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype languish" "type = const char *"
+    gdb_test "ptype languish" "type = const char \\*"
     gdb_test "print *languor" " = 1 '.001'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype languor" "type = const unsigned char *"
+    gdb_test "ptype languor" "type = const unsigned char \\*"
     gdb_test "print *lank" " = 2"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lank" "type = const short *"
+    gdb_test "ptype lank" "type = const short \\*"
     gdb_test "print *lapidary" " = 3"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lapidary" "type = const unsigned short *"
+    gdb_test "ptype lapidary" "type = const unsigned short \\*"
     gdb_test "print *larceny" " = 4"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype larceny" "type = const long *"
+    gdb_test "ptype larceny" "type = const long \\*"
     gdb_test "print *largess" " = 5"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype largess" "type = const unsigned long *"
+    gdb_test "ptype largess" "type = const unsigned long \\*"
     gdb_test "print *lascivious" " = 6"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lascivious" "type = const float *"
+    gdb_test "ptype lascivious" "type = const float \\*"
     gdb_test "print *lassitude" " = 7"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lassitude" "type = const double *"
+    gdb_test "ptype lassitude" "type = const double \\*"
     gdb_test "print *lamprey" " = 66 'B'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lamprey" "type = char * const"
+    gdb_test "ptype lamprey" "type = char \\* const"
     gdb_test "print *lariat" " = 10 '\\\\n'"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lariat" "type = unsigned char * const"
+    gdb_test "ptype lariat" "type = unsigned char \\* const"
     gdb_test "print *laudanum" " = 20"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype laudanum" "type = short * const"
+    gdb_test "ptype laudanum" "type = short \\* const"
     gdb_test "print *lecithin" " = 30"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lecithin" "type = unsigned short * const"
+    gdb_test "ptype lecithin" "type = unsigned short \\* const"
     gdb_test "print *leviathan" " = 40"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype leviathan" "type = long * const"
+    gdb_test "ptype leviathan" "type = long \\* const"
     gdb_test "print *libretto" " = 50"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype libretto" "type = unsigned long * const"
+    gdb_test "ptype libretto" "type = unsigned long \\* const"
     gdb_test "print *lissome" " = 60"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype lissome" "type = float * const"
+    gdb_test "ptype lissome" "type = float \\* const"
     gdb_test "print *locust" " = 70"
     if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype locust" "type = double * const"
-    if {$gcc_compiled} then { setup_xfail "*-*-*" }
-    gdb_test "ptype radiation" "type = const char &"
+    gdb_test "ptype locust" "type = double \\* const"
 }
 
 do_constvar_tests
index 83b78c4..b267730 100644 (file)
@@ -183,13 +183,13 @@ gdb_test "print coremaker_data" "\\\$$decimal = 202"
 gdb_test "print coremaker_bss" "\\\$$decimal = 10"
 gdb_test "print coremaker_ro" "\\\$$decimal = 201"
 
-if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
 gdb_test "print func2::coremaker_local" "\\\$$decimal = {0, 1, 2, 3, 4}"
 
 # Somehow we better test the ability to read the registers out of the core
 # file correctly.  I don't think the other tests do this.
 
 gdb_test "bt" "abort.*func2.*func1.*main.*" "backtrace in corefile.exp"
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\).*" "up in corefile.exp"
 
 # Test ability to read mmap'd data
 
@@ -217,7 +217,8 @@ gdb_expect {
 # test reinit_frame_cache
 
 gdb_load ${binfile}
+# HP defect CLLbs17002
 setup_xfail "*-*-*"
-gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\)" "up in corefile.exp"
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\)" "up in corefile.exp (reinit)"
 
 gdb_test "core" "No core file now."
index 56239e9..4bb16d4 100644 (file)
@@ -6,6 +6,8 @@
 #include <fcntl.h>
 #include <sys/mman.h>
 #include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
 
 #ifndef __STDC__
 #define        const   /**/
@@ -33,7 +35,6 @@ void
 mmapdata ()
 {
   int j, fd;
-  extern void *malloc ();
 
   /* Allocate and initialize a buffer that will be used to write
      the file that is later mapped in. */
@@ -112,9 +113,10 @@ func1 ()
   func2 ();
 }
 
-main ()
+int main ()
 {
   mmapdata ();
   func1 ();
+  return 0;
 }
 
index 2a342aa..528d5a9 100644 (file)
@@ -67,6 +67,11 @@ if ![target_info exists use_gdb_stub] {
     
     setup_xfail "mips-idt-*" "a29k-*-udi"
     gdb_test "backtrace" "No stack."
+
+    # ba and bac are no longer unique command prefixes. So these tests
+    # elict an error from GDB.
+    # GDB needs to be fixed to map unique alias here for ba bac.
+    #
     foreach i "bt ba bac" {
        setup_xfail "mips-idt-*" "a29k-*-udi"
        gdb_test $i "No stack." "backtrace \"$i\" abbreviation"
@@ -335,6 +340,7 @@ gdb_test "info types" "All defined types:" "info types"
 #test info variables
 gdb_test "info variables" "All defined variables:" "info variables"
 #test info warranty
+setup_xfail "hppa*-hp-hpux*"
 gdb_test "info warranty" "NO WARRANTY.*\[\r\n\]+  *11.  *BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY.*\[\r\n\]+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN.*\[\r\n\]+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES.*\[\r\n\]+PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED.*\[\r\n\]+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF.*\[\r\n\]+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS.*\[\r\n\]+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE.*\[\r\n\]+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,.*\[\r\n\]+REPAIR OR CORRECTION..*\[\r\n\]+  *12.  *IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING.*\[\r\n\]+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR.*\[\r\n\]+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,.*\[\r\n\]+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING.*\[\r\n\]+OUT OF THE USE OR INABILITY TO USE THE PROGRAM .INCLUDING BUT NOT LIMITED.*\[\r\n\]+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY.*\[\r\n\]+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER.*\[\r\n\]+PROGRAMS., EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE.*\[\r\n\]+POSSIBILITY OF SUCH DAMAGES.*" "info warranty"
 #test info watchpoints
 gdb_test "info watchpoints" "No breakpoints or watchpoints." "info watchpoints"
@@ -646,7 +652,7 @@ gdb_test "show values" "" "show values"
 #test show verbose
 gdb_test "show verbose" "Verbose printing of informational messages is o.*|Verbosity is off.*" "show verbose"
 #test show version
-
+setup_xfail "hppa*-hp-hpux*"
 gdb_test "show version" "GNU gdb \[0-9\.\]*.*\[\r\n\]+Copyright \[0-9\]* Free Software Foundation, Inc.*\[\r\n\]+GDB is free software, covered by the GNU General Public License, and you are.*\[\r\n\]+welcome to change it and/or distribute copies of it under certain conditions.*\[\r\n\]+Type \"show copying\" to see the conditions.*\[\r\n\]+There is absolutely no warranty for GDB.  Type \"show warranty\" for details.*\[\r\n\]+This GDB was configured as .*|GDB is free software and you are welcome to distribute copies of it.*\[\r\n\]+ under certain conditions; type \"show copying\" to see the conditions..*\[\r\n\]+There is absolutely no warranty for GDB; type \"show warranty\" for details..*\[\r\n\]+GDB.*Copyright \[0-9\]* Free Software Foundation, Inc.*" "show version"
 #test show width
 gdb_test "show width" "Number of characters gdb thinks are in a line is.*" "show width"
@@ -719,8 +725,7 @@ gdb_expect {
 if ![istarget "*-*-udi*"] then {
     send_gdb "target remote\n"
     gdb_expect {
-       -re "To open a remote debug connection, you need to specify what.*
-serial device is attached to the remote system .e.g. /dev/ttya.*$gdb_prompt $"\
+       -re "To open a remote debug connection, you need to specify what.*serial.*device is attached to the remote system .e.g. /dev/ttya.*$gdb_prompt $"\
                        { pass "target remote" }
        -re ".*A program is being debugged already.  Kill it. .y or n.*$" {
            send_gdb "n\n"
@@ -792,6 +797,16 @@ setup_xfail "a29k-*-udi"
 gdb_test "where" "No stack." "where"
 #test x
 #The case in which it prints a number is for vxgdb.
-gdb_test "x" "0x0:.*0x\[0-9\]*|0x0:.*Cannot access memory at address 0x0." "x"
+send_gdb "x\n"
+gdb_expect {
+    -re "0x0:.*Cannot access memory at address 0x0..*$gdb_prompt $" {
+        pass "x"
+    }
+    -re "0x0:.*Error accessing memory address 0x0:.*$gdb_prompt $" {
+        pass "x"
+    }
+    -re ".*$gdb_prompt $" { fail "x" }
+    timeout { fail "(timeout) x" }
+}
 
 gdb_exit
index 1cd06a9..d4423da 100644 (file)
@@ -68,7 +68,7 @@ gdb_expect {
 #
 send_gdb "nextwhere\n"
 gdb_expect {
-  -re ".*64\[ \t\]*printf.*#0\[ \t\]*main.*:64.*$gdb_prompt $"\
+  -re ".*79\[ \t\]*printf.*#0\[ \t\]*main.*:79.*$gdb_prompt $"\
           {pass "use user command: nextwhere"}
   -re "$gdb_prompt $"\
           {fail "use user command: nextwhere"}
@@ -224,7 +224,7 @@ gdb_expect {
 
 send_gdb "next\n"
 gdb_expect {
-  -re "#0\[ \t\]*main.*:66.*$gdb_prompt $"\
+  -re "#0\[ \t\]*main.*:81.*$gdb_prompt $"\
           {pass "use hook-stop command"}
   -re "$gdb_prompt $"\
           {fail "use hook-stop command"}
index 638072c..59ac18d 100644 (file)
@@ -46,6 +46,15 @@ gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
+# Some coverage stuff
+#
+gdb_test "kill" ".*The program is not being run.*" ""
+gdb_test "detach" ".*" ""
+gdb_test "run" ".*" ""
+
+gdb_load ${binfile}
+gdb_test "kill" ".*" ""
+gdb_test "detach" ".*" ""
 
 # Ok, on to real life
 #
@@ -132,8 +141,14 @@ gdb_test "printf \"%d\" j" ".*Invalid argument syntax.*" ""
 # play with "p", too
 #
 gdb_test "p/r j" ".*Undefined output format.*" ""
+gdb_test "p j" ".*" "debug test output"
 #gdb_test "x/rx j" ".*Cannot access memory.*" "no error!"
-gdb_test "x/0 j" ".*" "x/0 j"
+# x/0 j doesn't produce any output and terminates PA64 process when testing
+if [istarget "hppa*-hp-hpux11*"] {
+    xfail "'x/0 j' terminate PA64 process - skipped test point"
+} else {
+    gdb_test "x/0 j" ".*" "x/0 j"
+}
 gdb_test "p/0 j" ".*Item count other than 1 is meaningless.*" "p/0 j"
 gdb_test "p/s sum" ".*Format letter.*is meaningless.*" " no s"
 gdb_test "p/i sum" ".*Format letter.*is meaningless.*.*" "no i"
index f5656d8..f7be986 100644 (file)
@@ -74,7 +74,7 @@ if ![runto_main] then { fail "enable/disable break tests suppressed" }
 #
 send_gdb "break marker1\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 41.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 4\[38\].*$gdb_prompt $"\
           {pass "break marker1"}
   -re "$gdb_prompt $"\
           {fail "break marker1"}
@@ -118,7 +118,7 @@ gdb_expect {
 #
 send_gdb "break marker2\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 42.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 4\[49\].*$gdb_prompt $"\
           {pass "break marker2"}
   -re "$gdb_prompt $"\
           {fail "break marker2"}
@@ -172,7 +172,7 @@ if ![runto_main] then { fail "enable/disable break tests suppressed" }
 
 send_gdb "break marker3\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 43.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line (45|50).*$gdb_prompt $"\
           {pass "break marker3"}
   -re "$gdb_prompt $"\
           {fail "break marker3"}
@@ -197,7 +197,7 @@ gdb_expect {
 
 send_gdb "continue\n"
 gdb_expect {
-  -re ".*marker3 .*:43.*$gdb_prompt $"\
+  -re ".*marker3 .*:(45|50).*$gdb_prompt $"\
           {pass "continue to auto-deleted break marker3"}
   -re "Breakpoint \[0-9\]*, marker3.*$gdb_prompt $"\
           {fail "continue to auto-deleted break marker3"}
@@ -222,7 +222,7 @@ gdb_expect {
 #
 send_gdb "break marker4\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 44.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line (46|51).*$gdb_prompt $"\
           {pass "break marker4"}
   -re "$gdb_prompt $"\
           {fail "break marker4"}
@@ -253,7 +253,7 @@ if ![runto_main] then { fail "enable/disable break tests suppressed" }
 
 send_gdb "break marker1\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 41.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 4\[38\].*$gdb_prompt $"\
           {pass "break marker1"}
   -re "$gdb_prompt $"\
           {fail "break marker1"}
@@ -340,7 +340,7 @@ if ![runto_main] then { fail "enable/disable break tests suppressed" }
 
 send_gdb "break marker1\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 41.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 4\[38\].*$gdb_prompt $"\
           {pass "break marker1"}
   -re "$gdb_prompt $"\
           {fail "break marker1"}
@@ -377,7 +377,7 @@ rerun_to_main
 
 send_gdb "continue\n"
 gdb_expect {
-  -re ".*marker1 .*:41.*$gdb_prompt $"\
+  -re ".*marker1 .*:4\[38\].*$gdb_prompt $"\
           {pass "continue to ignored & auto-deleted break marker1"}
   -re "Breakpoint \[0-9\]*, marker1.*$gdb_prompt $"\
           {fail "continue to ignored & auto-deleted break marker1"}
@@ -393,7 +393,7 @@ if ![runto_main] then { fail "enable/disable break tests suppressed" }
 
 send_gdb "break marker1\n"
 gdb_expect {
-  -re "Breakpoint (\[0-9\]*) at .*, line 41.*$gdb_prompt $"\
+  -re "Breakpoint (\[0-9\]*) at .*, line 4\[38\].*$gdb_prompt $"\
           {pass "break marker1"}
   -re "$gdb_prompt $"\
           {fail "break marker1"}
@@ -435,9 +435,9 @@ gdb_expect {
 #
 if ![runto_main] then { fail "enable/disable break tests suppressed" }
 
-send_gdb "break 64\n"
+send_gdb "break 79\n"
 gdb_expect {
-  -re "Breakpoint \[0-9\]*.*, line 64.*$gdb_prompt $"\
+  -re "Breakpoint \[0-9\]*.*, line 79.*$gdb_prompt $"\
           {pass "prepare to continue with ignore count"}
   -re "$gdb_prompt $"\
           {fail "prepare to continue with ignore count"}
@@ -454,7 +454,7 @@ gdb_expect {
 
 send_gdb "next\n"
 gdb_expect {
-  -re ".*66\[ \t\]*marker1.*$gdb_prompt $"\
+  -re ".*81\[ \t\]*marker1.*$gdb_prompt $"\
           {pass "step after continue with ignore count"}
   -re "$gdb_prompt $"\
           {fail "step after continue with ignore count"}
index 56335cf..0936146 100644 (file)
@@ -2,15 +2,20 @@
  * <leaves-core-file-on-quit> bugs.
  */
 #include <stdio.h>
+#include <stdlib.h>
 
+#ifdef PROTOTYPES
+int callee (int x)
+#else
 int callee( x )
 int x;
+#endif
 {
     int y = x * x;
     return (y - 2);
 }
 
-main()
+int main()
 {
 
     int *p;
@@ -24,4 +29,5 @@ main()
             
         }
     printf( " Goodbye!\n" );
+    return 0;
 }
index 8f102fb..e36c975 100644 (file)
@@ -52,39 +52,39 @@ gdb_load ${binfile}
 # to the prolog--that's another bug...)
 #
 gdb_test "b 1" ".*Breakpoint.*line 1.*" "bpt at line before routine"
-gdb_test "b 8" ".*Note.*also.*Breakpoint.*2.*" ""
+gdb_test "b 13" ".*Note.*also.*Breakpoint.*2.*" ""
 
 # Set up to go to the next-to-last line of the program
 #
-gdb_test "b 26" ".*Breakpoint.*3.*" ""
+gdb_test "b 31" ".*Breakpoint.*3.*" ""
 
 # Expect to hit the bp at line "1", but symbolize this
-# as line "8".  Then try to clear it--this should work.
+# as line "13".  Then try to clear it--this should work.
 #
 if [target_info exists use_gdb_stub] {
-  gdb_test "continue" ".*Breakpoint.*1.*callee.*8.*" ""
+  gdb_test "continue" ".*Breakpoint.*1.*callee.*13.*" ""
 } else {
-  gdb_test "r" ".*Breakpoint.*1.*callee.*8.*" ""
+  gdb_test "r" ".*Breakpoint.*1.*callee.*13.*" ""
 }
 gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked"
 send_gdb "i b\n"
 gdb_expect {
     -re ".*breakpoint.*breakpoint.*$gdb_prompt $" { fail "clear bp" }
-    -re ".*3.*main.*26.*$gdb_prompt $" { pass "cleared bp at line before routine" }
+    -re ".*3.*main.*31.*$gdb_prompt $" { pass "cleared bp at line before routine" }
     -re ".*$gdb_prompt $" { fail "info b" }
 }
 
 # Test some other "clear" combinations
 #
 gdb_test "b 1" ".*Breakpoint.*4.*" ""
-gdb_test "b 8" ".*Note.*also.*Breakpoint.*5.*" ""
-gdb_test "cle 8" ".*Deleted breakpoint 5.*" "Only cleared 1 by line"
+gdb_test "b 13" ".*Note.*also.*Breakpoint.*5.*" ""
+gdb_test "cle 13" ".*Deleted breakpoint 5.*" "Only cleared 1 by line"
 
-send_gdb "inf line 8\n"
+send_gdb "inf line 13\n"
 gdb_expect {
     -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
         set line_eight $expect_out(1,string)
-        gdb_test "b 8" ".*Breakpoint.*6.*" ""
+        gdb_test "b 13" ".*Breakpoint.*6.*" ""
         gdb_test "cle *$line_eight" ".*Deleted breakpoints 6 4.*" "Clear 2 by address"
     }
     -re ".*$gdb_prompt $" {
@@ -92,13 +92,13 @@ gdb_expect {
     }
 }
 
-send_gdb "inf line 9\n"
+send_gdb "inf line 14\n"
 gdb_expect {
     -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
         set line_nine $expect_out(1,string)
-        gdb_test "b 9"       ".*Breakpoint.*7.*" ""
+        gdb_test "b 14"       ".*Breakpoint.*7.*" ""
         gdb_test "b *$line_nine" ".*Note.*also.*Breakpoint.*8.*" ""
-        gdb_test "c" ".*Breakpoint.*7.*callee.*9.*" ""
+        gdb_test "c" ".*Breakpoint.*7.*callee.*14.*" ""
         gdb_test "cle" ".*Deleted breakpoints 8 7.*" "Clear 2 by default"
     }
     -re ".*$gdb_prompt $" {
@@ -111,7 +111,7 @@ gdb_expect {
     -re ".*breakpoint.*breakpoint.*$gdb_prompt $" {
         fail "didn't clear bps" 
     }
-    -re ".*3.*main.*26.*$gdb_prompt $" {
+    -re ".*3.*main.*31.*$gdb_prompt $" {
         pass "all set to continue"
     }
     -re ".*$gdb_prompt $" {
@@ -123,14 +123,14 @@ gdb_expect {
 # See if we can step out with control.  The "1 2 3" stuff
 # is output from the program.
 #
-gdb_test "cont" ".*Breakpoint.*26.*" ""
-gdb_test "next" ".*1 2 7 14 23 34 47 62 79  Goodbye!.*27.*" "Step to return"
+gdb_test "cont" ".*Breakpoint.*32.*" ""
+gdb_test "next" ".*1 2 7 14 23 34 47 62 79  Goodbye!.*32.*" "Step to return"
 
 set old_timeout $timeout
 set timeout 50
 send_gdb "next\n"
 gdb_expect {
-    -re "27.*$gdb_prompt $" {
+    -re "33.*$gdb_prompt $" {
        # sometimes we stop at the closing brace, if so, do another next
        send_gdb "next\n"
        gdb_expect {
@@ -141,6 +141,9 @@ gdb_expect {
            -re ".*in.*start.*$gdb_prompt $" { 
                pass "step out of main"
            }
+           -re ".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $" { 
+               pass "step out of main"
+           }
             -re ".*$gdb_prompt $" { fail "step at end 2" }
            timeout { fail "hang or timeout on step at end 2" }
        }
@@ -152,6 +155,9 @@ gdb_expect {
     -re ".*in.*start.*$gdb_prompt $" { 
         pass "step out of main"
     }
+    -re ".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $"  {
+        pass "step out of main 2"
+    }
     -re ".*in.*currently asm.*$gdb_prompt $" { 
         pass "step out of main into assembler"
     }
@@ -163,7 +169,18 @@ gdb_expect {
 }
 
 if {![target_info exists use_cygmon] || ![target_info use_cygmon]} {
-  gdb_test "n" ".*Single.*Program exited.*" "step to end of run"
+    send_gdb "n\n"
+    gdb_expect {
+       -re ".*Single.*Program exited.*$gdb_prompt $" {
+           pass "step to end of run 1"
+       }
+       -re ".*Single.*in exit.*from.*dld.sl.*$gdb_prompt $" {
+           pass "step to end of run 2" 
+           gdb_test "c" ".*" "continue after exit"
+       }
+       timeout { fail "(timeout) step to end of run" }
+    }
+
   set timeout $old_timeout
   
   gdb_test "n" ".*The program is not being run.*" "don't step after run"
index 4e17e61..c82652f 100644 (file)
@@ -48,8 +48,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
     }
 
-
-
+if [get_compiler_info $binfile] {
+    return -1
+}
 
 gdb_exit
 gdb_start
@@ -67,10 +68,9 @@ gdb_test "set variable y=2" "" "set variable y=2"
 gdb_test "set variable z=2" "" "set variable z=2"
 gdb_test "set variable w=3" "" "set variable w=3"
 
-
 send_gdb "print (0 && (x+y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x+y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x+y))" }
@@ -80,7 +80,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x-y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x-y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x-y))" }
@@ -90,7 +90,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x*y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x*y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x*y))" }
@@ -101,7 +101,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x/y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x/y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x/y))" }
@@ -111,7 +111,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x%y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x%y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x%y))" }
@@ -121,7 +121,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x&&y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x&&y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x&&y))" }
@@ -132,7 +132,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x||y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x||y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x||y))" }
@@ -143,7 +143,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x&y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x&y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x&y))" }
@@ -153,7 +153,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x|y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x|y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x|y))" }
@@ -163,7 +163,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x^y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x^y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x^y))" }
@@ -174,7 +174,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x < y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x < y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x < y))" }
@@ -184,7 +184,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x <= y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x <= y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x <= y))" }
@@ -195,7 +195,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x>y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x>y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x>y))" }
@@ -205,7 +205,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x>=y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x>=y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x>=y))" }
@@ -216,7 +216,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x==y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x==y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x==y))" }
@@ -226,7 +226,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x!=y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x!=y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x!=y))" }
@@ -236,7 +236,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x<<31))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x<<31))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x<<31))" }
@@ -246,7 +246,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x>>31))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x>>31))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x>>31))" }
@@ -257,7 +257,7 @@ gdb_expect {
 
 send_gdb "print (0 && (!x))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (!x))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (!x))" }
@@ -267,7 +267,7 @@ gdb_expect {
 
 send_gdb "print (0 && (~x))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (~x))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (~x))" }
@@ -276,7 +276,7 @@ gdb_expect {
 
 send_gdb "print (0 && (-x))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (-x))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (-x))" }
@@ -286,7 +286,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x++))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x++))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x++))" }
@@ -296,7 +296,7 @@ gdb_expect {
 
 send_gdb "print (0 && (++x))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (++x))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (++x))" }
@@ -306,7 +306,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x--))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x--))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x--))" }
@@ -316,7 +316,7 @@ gdb_expect {
 
 send_gdb "print (0 && (--x))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (--x))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (--x))" }
@@ -325,7 +325,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x+=7))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x+=7))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x+=7))" }
@@ -334,7 +334,7 @@ gdb_expect {
 
 send_gdb "print (0 && (x=y))\n"
 gdb_expect {
-    -re ".$decimal = 0\r\n$gdb_prompt $" {
+    -re ".$decimal = $false\r\n$gdb_prompt $" {
         pass "print value of (0 && (x=y))"
       }
     -re ".*$gdb_prompt $" { fail "print value of (0 && (x=y))" }
index e5c7351..b35c3a5 100644 (file)
@@ -1,7 +1,11 @@
+#ifdef PROTOTYPES
+int main (int argc, char **argv, char **envp)
+#else
 main (argc, argv, envp)
      int argc;
      char **argv;
      char **envp;
+#endif
 {
     extern void dummy();
 #ifdef usestubs
@@ -9,6 +13,8 @@ main (argc, argv, envp)
     breakpoint();
 #endif
     dummy();
+    return 0;
+    
 }
 
 /* We put main() right up front so its line number doesn't keep changing.  */
@@ -44,7 +50,6 @@ unsigned long v_unsigned_long;
 
 float          v_float;
 double         v_double;
-
 /*
  *     Now some derived types, which are arrays, functions-returning,
  *     pointers, structures, unions, and enumerations.
@@ -70,7 +75,6 @@ unsigned long v_unsigned_long_array[2];
 
 float          v_float_array[2];
 double         v_double_array[2];
-
 /**** pointers *******/
 
 char           *v_char_pointer;
@@ -203,8 +207,6 @@ void dummy()
   
   v_float = 100.0;
   v_double = 200.0;
-
-
   v_char_array[0] = v_char;
   v_signed_char_array[0] = v_signed_char;
   v_unsigned_char_array[0] = v_unsigned_char;
@@ -223,7 +225,6 @@ void dummy()
 
   v_float_array[0] = v_float;
   v_double_array[0] = v_double;
-
   v_char_pointer = &v_char;
   v_signed_char_pointer = &v_signed_char;
   v_unsigned_char_pointer = &v_unsigned_char;
index cdf33dc..f31407c 100644 (file)
@@ -73,150 +73,145 @@ proc test_expr { args } {
 #
 # test expressions with "char" types
 #
-test_expr "set variable v_char=127" "print v_char == 0" "\\$\[0-9\]* = 0"  "print v_char == 127" "\\$\[0-9\]* = 1"  "print char =="
-test_expr "set variable v_char=127" "print v_char != 0" "\\$\[0-9\]* = 1"  "print v_char != 127" "\\$\[0-9\]* = 0"  "print char !="
-test_expr "set variable v_char=127" "print v_char < 0" "\\$\[0-9\]* = 0"  "print v_char < 127" "\\$\[0-9\]* = 0"  "print char <"
-test_expr "set variable v_char=127" "print v_char > 0" "\\$\[0-9\]* = 1"  "print v_char > 127" "\\$\[0-9\]* = 0"  "print char >"
+test_expr "set variable v_char=127" "print v_char == 0" "\\$\[0-9\]* = $false"  "print v_char == 127" "\\$\[0-9\]* = $true"  "print char =="
+test_expr "set variable v_char=127" "print v_char != 0" "\\$\[0-9\]* = $true"  "print v_char != 127" "\\$\[0-9\]* = $false"  "print char !="
+test_expr "set variable v_char=127" "print v_char < 0" "\\$\[0-9\]* = $false"  "print v_char < 127" "\\$\[0-9\]* = $false"  "print char <"
+test_expr "set variable v_char=127" "print v_char > 0" "\\$\[0-9\]* = $true"  "print v_char > 127" "\\$\[0-9\]* = $false"  "print char >"
 #
 # test expressions with "signed char" types
 #
-test_expr "set variable v_signed_char=127" "print v_signed_char == 0" "\\$\[0-9\]* = 0"  "print v_signed_char == 127" "\\$\[0-9\]* = 1"  "print signed char =="
-test_expr "set variable v_signed_char=127" "print v_signed_char != 0" "\\$\[0-9\]* = 1"  "print v_signed_char != 127" "\\$\[0-9\]* = 0"  "print signed char !="
-test_expr "set variable v_signed_char=127" "print v_signed_char < 0" "\\$\[0-9\]* = 0"  "print v_signed_char < 127" "\\$\[0-9\]* = 0"  "print signed char <"
-test_expr "set variable v_signed_char=127" "print v_signed_char > 0" "\\$\[0-9\]* = 1"  "print v_signed_char > 127" "\\$\[0-9\]* = 0"  "print signed char >"
+test_expr "set variable v_signed_char=127" "print v_signed_char == 0" "\\$\[0-9\]* = $false"  "print v_signed_char == 127" "\\$\[0-9\]* = $true"  "print signed char =="
+test_expr "set variable v_signed_char=127" "print v_signed_char != 0" "\\$\[0-9\]* = $true"  "print v_signed_char != 127" "\\$\[0-9\]* = $false"  "print signed char !="
+test_expr "set variable v_signed_char=127" "print v_signed_char < 0" "\\$\[0-9\]* = $false"  "print v_signed_char < 127" "\\$\[0-9\]* = $false"  "print signed char <"
+test_expr "set variable v_signed_char=127" "print v_signed_char > 0" "\\$\[0-9\]* = $true"  "print v_signed_char > 127" "\\$\[0-9\]* = $false"  "print signed char >"
 # make char a minus
-test_expr "set variable v_signed_char=-1" "print v_signed_char == 0" "\\$\[0-9\]* = 0"  "print v_signed_char == -1" "\\$\[0-9\]* = 1"  "print signed char == (minus)"
-test_expr "set variable v_signed_char=-1" "print v_signed_char != 0" "\\$\[0-9\]* = 1"  "print v_signed_char != -1" "\\$\[0-9\]* = 0"  "print signed char != (minus)"
-test_expr "set variable v_signed_char=-1" "print v_signed_char < 0" "\\$\[0-9\]* = 1"  "print v_signed_char < 127" "\\$\[0-9\]* = 1"  "print signed char < (minus)"
-test_expr "set variable v_signed_char=-1" "print v_signed_char > 0" "\\$\[0-9\]* = 0"  "print v_signed_char > 127" "\\$\[0-9\]* = 0"  "print signed char > (minus)"
+test_expr "set variable v_signed_char=-1" "print v_signed_char == 0" "\\$\[0-9\]* = $false"  "print v_signed_char == -1" "\\$\[0-9\]* = $true"  "print signed char == (minus)"
+test_expr "set variable v_signed_char=-1" "print v_signed_char != 0" "\\$\[0-9\]* = $true"  "print v_signed_char != -1" "\\$\[0-9\]* = $false"  "print signed char != (minus)"
+test_expr "set variable v_signed_char=-1" "print v_signed_char < 0" "\\$\[0-9\]* = $true"  "print v_signed_char < 127" "\\$\[0-9\]* = $true"  "print signed char < (minus)"
+test_expr "set variable v_signed_char=-1" "print v_signed_char > 0" "\\$\[0-9\]* = $false"  "print v_signed_char > 127" "\\$\[0-9\]* = $false"  "print signed char > (minus)"
 #
 # test expressions with "unsigned char" types
 #
-test_expr "set variable v_unsigned_char=127" "print v_unsigned_char == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_char == 127" "\\$\[0-9\]* = 1"  "print unsigned char =="
-test_expr "set variable v_unsigned_char=127" "print v_unsigned_char != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_char != 127" "\\$\[0-9\]* = 0"  "print unsigned char !="
-test_expr "set variable v_unsigned_char=127" "print v_unsigned_char < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_char < 127" "\\$\[0-9\]* = 0"  "print unsigned char <"
-test_expr "set variable v_unsigned_char=127" "print v_unsigned_char > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_char > 127" "\\$\[0-9\]* = 0"  "print unsigned char >"
+test_expr "set variable v_unsigned_char=127" "print v_unsigned_char == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_char == 127" "\\$\[0-9\]* = $true"  "print unsigned char =="
+test_expr "set variable v_unsigned_char=127" "print v_unsigned_char != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_char != 127" "\\$\[0-9\]* = $false"  "print unsigned char !="
+test_expr "set variable v_unsigned_char=127" "print v_unsigned_char < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_char < 127" "\\$\[0-9\]* = $false"  "print unsigned char <"
+test_expr "set variable v_unsigned_char=127" "print v_unsigned_char > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_char > 127" "\\$\[0-9\]* = $false"  "print unsigned char >"
 # make char a minus
 # FIXME:  gdb mishandles the cast (unsigned char) on the i960, so I've
 # set up an expected failure for this case.
 setup_xfail "i960-*-*" 1821
-test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_char == ~0" "\\$\[0-9\]* = 0"  "print v_unsigned_char == (unsigned char)~0" "\\$\[0-9\]* = 1"  "print unsigned char == (~0)"
+test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_char == ~0" "\\$\[0-9\]* = $false"  "print v_unsigned_char == (unsigned char)~0" "\\$\[0-9\]* = $true"  "print unsigned char == (~0)"
 # FIXME:  gdb mishandles the cast (unsigned char) on the i960, so I've
 # set up an expected failure for this case.
 setup_xfail "i960-*-*" 1821
-test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_char != (unsigned char)~0" "\\$\[0-9\]* = 0"  "print unsigned char != (~0)"
-test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_char < 127" "\\$\[0-9\]* = 0"  "print unsigned char < (~0)"
-test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_char > 127" "\\$\[0-9\]* = 1"  "print unsigned char > (~0)"
+test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_char != (unsigned char)~0" "\\$\[0-9\]* = $false"  "print unsigned char != (~0)"
+test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_char < 127" "\\$\[0-9\]* = $false"  "print unsigned char < (~0)"
+test_expr "set variable v_unsigned_char=~0" "print v_unsigned_char > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_char > 127" "\\$\[0-9\]* = $true"  "print unsigned char > (~0)"
 #
 # test expressions with "short" types
 #
-test_expr "set variable v_short=0x7FFF" "print v_short == 0" "\\$\[0-9\]* = 0"  "print v_short == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed short =="
-test_expr "set variable v_short=0x7FFF" "print v_short != 0" "\\$\[0-9\]* = 1"  "print v_short != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed short !="
-test_expr "set variable v_short=0x7FFF" "print v_short < 0" "\\$\[0-9\]* = 0"  "print v_short < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed short <"
-test_expr "set variable v_short=0x7FFF" "print v_short > 0" "\\$\[0-9\]* = 1"  "print v_short > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed short >"
+test_expr "set variable v_short=0x7FFF" "print v_short == 0" "\\$\[0-9\]* = $false"  "print v_short == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed short =="
+test_expr "set variable v_short=0x7FFF" "print v_short != 0" "\\$\[0-9\]* = $true"  "print v_short != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed short !="
+test_expr "set variable v_short=0x7FFF" "print v_short < 0" "\\$\[0-9\]* = $false"  "print v_short < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed short <"
+test_expr "set variable v_short=0x7FFF" "print v_short > 0" "\\$\[0-9\]* = $true"  "print v_short > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed short >"
 # make short a minus
-test_expr "set variable v_short=-1" "print v_short == 0" "\\$\[0-9\]* = 0"  "print v_short == -1" "\\$\[0-9\]* = 1"  "print signed short == (minus)"
-test_expr "set variable v_short=-1" "print v_short != 0" "\\$\[0-9\]* = 1"  "print v_short != -1" "\\$\[0-9\]* = 0"  "print signed short != (minus)"
-test_expr "set variable v_short=-1" "print v_short < 0" "\\$\[0-9\]* = 1"  "print v_short < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed short < (minus)"
-test_expr "set variable v_short=-1" "print v_short > 0" "\\$\[0-9\]* = 0"  "print v_short > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed short > (minus)"
+test_expr "set variable v_short=-1" "print v_short == 0" "\\$\[0-9\]* = $false"  "print v_short == -1" "\\$\[0-9\]* = $true"  "print signed short == (minus)"
+test_expr "set variable v_short=-1" "print v_short != 0" "\\$\[0-9\]* = $true"  "print v_short != -1" "\\$\[0-9\]* = $false"  "print signed short != (minus)"
+test_expr "set variable v_short=-1" "print v_short < 0" "\\$\[0-9\]* = $true"  "print v_short < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed short < (minus)"
+test_expr "set variable v_short=-1" "print v_short > 0" "\\$\[0-9\]* = $false"  "print v_short > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed short > (minus)"
 #
 # test expressions with "signed short" types
 #
-test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short == 0" "\\$\[0-9\]* = 0"  "print v_signed_short == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed short =="
-test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short != 0" "\\$\[0-9\]* = 1"  "print v_signed_short != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed short !="
-test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short < 0" "\\$\[0-9\]* = 0"  "print v_signed_short < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed short <"
-test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short > 0" "\\$\[0-9\]* = 1"  "print v_signed_short > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed short >"
+test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short == 0" "\\$\[0-9\]* = $false"  "print v_signed_short == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed short =="
+test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short != 0" "\\$\[0-9\]* = $true"  "print v_signed_short != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed short !="
+test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short < 0" "\\$\[0-9\]* = $false"  "print v_signed_short < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed short <"
+test_expr "set variable v_signed_short=0x7FFF" "print v_signed_short > 0" "\\$\[0-9\]* = $true"  "print v_signed_short > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed short >"
 # make short a minus
-test_expr "set variable v_signed_short=-1" "print v_signed_short == 0" "\\$\[0-9\]* = 0"  "print v_signed_short == -1" "\\$\[0-9\]* = 1"  "print signed signed short == (minus)"
-test_expr "set variable v_signed_short=-1" "print v_signed_short != 0" "\\$\[0-9\]* = 1"  "print v_signed_short != -1" "\\$\[0-9\]* = 0"  "print signed signed short != (minus)"
-test_expr "set variable v_signed_short=-1" "print v_signed_short < 0" "\\$\[0-9\]* = 1"  "print v_signed_short < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed short < (minus)"
-test_expr "set variable v_signed_short=-1" "print v_signed_short > 0" "\\$\[0-9\]* = 0"  "print v_signed_short > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed short > (minus)"
+test_expr "set variable v_signed_short=-1" "print v_signed_short == 0" "\\$\[0-9\]* = $false"  "print v_signed_short == -1" "\\$\[0-9\]* = $true"  "print signed signed short == (minus)"
+test_expr "set variable v_signed_short=-1" "print v_signed_short != 0" "\\$\[0-9\]* = $true"  "print v_signed_short != -1" "\\$\[0-9\]* = $false"  "print signed signed short != (minus)"
+test_expr "set variable v_signed_short=-1" "print v_signed_short < 0" "\\$\[0-9\]* = $true"  "print v_signed_short < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed short < (minus)"
+test_expr "set variable v_signed_short=-1" "print v_signed_short > 0" "\\$\[0-9\]* = $false"  "print v_signed_short > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed short > (minus)"
 #
 # test expressions with "unsigned short" types
 #
-test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_short == 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned short =="
-test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_short != 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned short !="
-test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_short < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned short <"
-test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_short > 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned short >"
+test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_short == 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned short =="
+test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_short != 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned short !="
+test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_short < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned short <"
+test_expr "set variable v_unsigned_short=0x7FFF" "print v_unsigned_short > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_short > 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned short >"
 # make short a minus
-# note that (unsigned short) ~0 == ~0 iff sizeof(short) == sizeof(int),
-# so we can't test v_unsigned_short != ~0
-test_expr "set variable v_unsigned_short=~0" \
-       "print v_unsigned_short == 0" "\\$\[0-9\]* = 0" \
-       "print v_unsigned_short == (unsigned short)~0" "\\$\[0-9\]* = 1" \
-       "print unsigned short == (~0)"
-test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_short != (unsigned short)~0" "\\$\[0-9\]* = 0"  "print unsigned short != (~0)"
-test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_short < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned short < (~0)"
-test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_short > 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned short > (~0)"
+test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_short == ~0" "\\$\[0-9\]* = $false"  "print v_unsigned_short == (unsigned short)~0" "\\$\[0-9\]* = $true"  "print unsigned short == (~0)"
+test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_short != (unsigned short)~0" "\\$\[0-9\]* = $false"  "print unsigned short != (~0)"
+test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_short < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned short < (~0)"
+test_expr "set variable v_unsigned_short=~0" "print v_unsigned_short > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_short > 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned short > (~0)"
 #
 # test expressions with "int" types
 #
-test_expr "set variable v_int=0x7FFF" "print v_int == 0" "\\$\[0-9\]* = 0"  "print v_int == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed int =="
-test_expr "set variable v_int=0x7FFF" "print v_int != 0" "\\$\[0-9\]* = 1"  "print v_int != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed int !="
-test_expr "set variable v_int=0x7FFF" "print v_int < 0" "\\$\[0-9\]* = 0"  "print v_int < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed int <"
-test_expr "set variable v_int=0x7FFF" "print v_int > 0" "\\$\[0-9\]* = 1"  "print v_int > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed int >"
+test_expr "set variable v_int=0x7FFF" "print v_int == 0" "\\$\[0-9\]* = $false"  "print v_int == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed int =="
+test_expr "set variable v_int=0x7FFF" "print v_int != 0" "\\$\[0-9\]* = $true"  "print v_int != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed int !="
+test_expr "set variable v_int=0x7FFF" "print v_int < 0" "\\$\[0-9\]* = $false"  "print v_int < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed int <"
+test_expr "set variable v_int=0x7FFF" "print v_int > 0" "\\$\[0-9\]* = $true"  "print v_int > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed int >"
 # make int a minus
-test_expr "set variable v_int=-1" "print v_int == 0" "\\$\[0-9\]* = 0"  "print v_int == -1" "\\$\[0-9\]* = 1"  "print signed int == (minus)"
-test_expr "set variable v_int=-1" "print v_int != 0" "\\$\[0-9\]* = 1"  "print v_int != -1" "\\$\[0-9\]* = 0"  "print signed int != (minus)"
-test_expr "set variable v_int=-1" "print v_int < 0" "\\$\[0-9\]* = 1"  "print v_int < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed int < (minus)"
-test_expr "set variable v_int=-1" "print v_int > 0" "\\$\[0-9\]* = 0"  "print v_int > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed int > (minus)"
+test_expr "set variable v_int=-1" "print v_int == 0" "\\$\[0-9\]* = $false"  "print v_int == -1" "\\$\[0-9\]* = $true"  "print signed int == (minus)"
+test_expr "set variable v_int=-1" "print v_int != 0" "\\$\[0-9\]* = $true"  "print v_int != -1" "\\$\[0-9\]* = $false"  "print signed int != (minus)"
+test_expr "set variable v_int=-1" "print v_int < 0" "\\$\[0-9\]* = $true"  "print v_int < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed int < (minus)"
+test_expr "set variable v_int=-1" "print v_int > 0" "\\$\[0-9\]* = $false"  "print v_int > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed int > (minus)"
 #
 # test expressions with "signed int" types
 #
-test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int == 0" "\\$\[0-9\]* = 0"  "print v_signed_int == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed int =="
-test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int != 0" "\\$\[0-9\]* = 1"  "print v_signed_int != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed int !="
-test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int < 0" "\\$\[0-9\]* = 0"  "print v_signed_int < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed int <"
-test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int > 0" "\\$\[0-9\]* = 1"  "print v_signed_int > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed int >"
+test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int == 0" "\\$\[0-9\]* = $false"  "print v_signed_int == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed int =="
+test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int != 0" "\\$\[0-9\]* = $true"  "print v_signed_int != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed int !="
+test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int < 0" "\\$\[0-9\]* = $false"  "print v_signed_int < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed int <"
+test_expr "set variable v_signed_int=0x7FFF" "print v_signed_int > 0" "\\$\[0-9\]* = $true"  "print v_signed_int > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed int >"
 # make int a minus
-test_expr "set variable v_signed_int=-1" "print v_signed_int == 0" "\\$\[0-9\]* = 0"  "print v_signed_int == -1" "\\$\[0-9\]* = 1"  "print signed signed int == (minus)"
-test_expr "set variable v_signed_int=-1" "print v_signed_int != 0" "\\$\[0-9\]* = 1"  "print v_signed_int != -1" "\\$\[0-9\]* = 0"  "print signed signed int != (minus)"
-test_expr "set variable v_signed_int=-1" "print v_signed_int < 0" "\\$\[0-9\]* = 1"  "print v_signed_int < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed int < (minus)"
-test_expr "set variable v_signed_int=-1" "print v_signed_int > 0" "\\$\[0-9\]* = 0"  "print v_signed_int > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed int > (minus)"
+test_expr "set variable v_signed_int=-1" "print v_signed_int == 0" "\\$\[0-9\]* = $false"  "print v_signed_int == -1" "\\$\[0-9\]* = $true"  "print signed signed int == (minus)"
+test_expr "set variable v_signed_int=-1" "print v_signed_int != 0" "\\$\[0-9\]* = $true"  "print v_signed_int != -1" "\\$\[0-9\]* = $false"  "print signed signed int != (minus)"
+test_expr "set variable v_signed_int=-1" "print v_signed_int < 0" "\\$\[0-9\]* = $true"  "print v_signed_int < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed int < (minus)"
+test_expr "set variable v_signed_int=-1" "print v_signed_int > 0" "\\$\[0-9\]* = $false"  "print v_signed_int > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed int > (minus)"
 #
 # test expressions with "unsigned int" types
 #
-test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_int == 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned int =="
-test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_int != 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned int !="
-test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_int < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned int <"
-test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_int > 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned int >"
+test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_int == 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned int =="
+test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_int != 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned int !="
+test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_int < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned int <"
+test_expr "set variable v_unsigned_int=0x7FFF" "print v_unsigned_int > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_int > 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned int >"
 # make int a minus
-test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_int == ~0" "\\$\[0-9\]* = 1"  "print v_unsigned_int == (unsigned int)~0" "\\$\[0-9\]* = 1"  "print unsigned int == (~0)"
-test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_int != (unsigned int)~0" "\\$\[0-9\]* = 0"  "print unsigned int != (~0)"
-test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_int < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned int < (~0)"
-test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_int > 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned int > (~0)"
+test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_int == ~0" "\\$\[0-9\]* = $true"  "print v_unsigned_int == (unsigned int)~0" "\\$\[0-9\]* = $true"  "print unsigned int == (~0)"
+test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_int != (unsigned int)~0" "\\$\[0-9\]* = $false"  "print unsigned int != (~0)"
+test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_int < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned int < (~0)"
+test_expr "set variable v_unsigned_int=~0" "print v_unsigned_int > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_int > 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned int > (~0)"
 #
 # test expressions with "long" types
 #
-test_expr "set variable v_long=0x7FFF" "print v_long == 0" "\\$\[0-9\]* = 0"  "print v_long == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed long =="
-test_expr "set variable v_long=0x7FFF" "print v_long != 0" "\\$\[0-9\]* = 1"  "print v_long != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed long !="
-test_expr "set variable v_long=0x7FFF" "print v_long < 0" "\\$\[0-9\]* = 0"  "print v_long < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed long <"
-test_expr "set variable v_long=0x7FFF" "print v_long > 0" "\\$\[0-9\]* = 1"  "print v_long > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed long >"
+test_expr "set variable v_long=0x7FFF" "print v_long == 0" "\\$\[0-9\]* = $false"  "print v_long == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed long =="
+test_expr "set variable v_long=0x7FFF" "print v_long != 0" "\\$\[0-9\]* = $true"  "print v_long != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed long !="
+test_expr "set variable v_long=0x7FFF" "print v_long < 0" "\\$\[0-9\]* = $false"  "print v_long < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed long <"
+test_expr "set variable v_long=0x7FFF" "print v_long > 0" "\\$\[0-9\]* = $true"  "print v_long > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed long >"
 # make long a minus
-test_expr "set variable v_long=-1" "print v_long == 0" "\\$\[0-9\]* = 0"  "print v_long == -1" "\\$\[0-9\]* = 1"  "print signed long == (minus)"
-test_expr "set variable v_long=-1" "print v_long != 0" "\\$\[0-9\]* = 1"  "print v_long != -1" "\\$\[0-9\]* = 0"  "print signed long != (minus)"
-test_expr "set variable v_long=-1" "print v_long < 0" "\\$\[0-9\]* = 1"  "print v_long < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed long < (minus)"
-test_expr "set variable v_long=-1" "print v_long > 0" "\\$\[0-9\]* = 0"  "print v_long > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed long > (minus)"
+test_expr "set variable v_long=-1" "print v_long == 0" "\\$\[0-9\]* = $false"  "print v_long == -1" "\\$\[0-9\]* = $true"  "print signed long == (minus)"
+test_expr "set variable v_long=-1" "print v_long != 0" "\\$\[0-9\]* = $true"  "print v_long != -1" "\\$\[0-9\]* = $false"  "print signed long != (minus)"
+test_expr "set variable v_long=-1" "print v_long < 0" "\\$\[0-9\]* = $true"  "print v_long < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed long < (minus)"
+test_expr "set variable v_long=-1" "print v_long > 0" "\\$\[0-9\]* = $false"  "print v_long > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed long > (minus)"
 #
 # test expressions with "signed long" types
 #
-test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long == 0" "\\$\[0-9\]* = 0"  "print v_signed_long == 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed long =="
-test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long != 0" "\\$\[0-9\]* = 1"  "print v_signed_long != 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed long !="
-test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long < 0" "\\$\[0-9\]* = 0"  "print v_signed_long < 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed long <"
-test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long > 0" "\\$\[0-9\]* = 1"  "print v_signed_long > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed long >"
+test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long == 0" "\\$\[0-9\]* = $false"  "print v_signed_long == 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed long =="
+test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long != 0" "\\$\[0-9\]* = $true"  "print v_signed_long != 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed long !="
+test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long < 0" "\\$\[0-9\]* = $false"  "print v_signed_long < 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed long <"
+test_expr "set variable v_signed_long=0x7FFF" "print v_signed_long > 0" "\\$\[0-9\]* = $true"  "print v_signed_long > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed long >"
 # make long a minus
-test_expr "set variable v_signed_long=-1" "print v_signed_long == 0" "\\$\[0-9\]* = 0"  "print v_signed_long == -1" "\\$\[0-9\]* = 1"  "print signed signed long == (minus)"
-test_expr "set variable v_signed_long=-1" "print v_signed_long != 0" "\\$\[0-9\]* = 1"  "print v_signed_long != -1" "\\$\[0-9\]* = 0"  "print signed signed long != (minus)"
-test_expr "set variable v_signed_long=-1" "print v_signed_long < 0" "\\$\[0-9\]* = 1"  "print v_signed_long < 0x7FFF" "\\$\[0-9\]* = 1"  "print signed signed long < (minus)"
-test_expr "set variable v_signed_long=-1" "print v_signed_long > 0" "\\$\[0-9\]* = 0"  "print v_signed_long > 0x7FFF" "\\$\[0-9\]* = 0"  "print signed signed long > (minus)"
+test_expr "set variable v_signed_long=-1" "print v_signed_long == 0" "\\$\[0-9\]* = $false"  "print v_signed_long == -1" "\\$\[0-9\]* = $true"  "print signed signed long == (minus)"
+test_expr "set variable v_signed_long=-1" "print v_signed_long != 0" "\\$\[0-9\]* = $true"  "print v_signed_long != -1" "\\$\[0-9\]* = $false"  "print signed signed long != (minus)"
+test_expr "set variable v_signed_long=-1" "print v_signed_long < 0" "\\$\[0-9\]* = $true"  "print v_signed_long < 0x7FFF" "\\$\[0-9\]* = $true"  "print signed signed long < (minus)"
+test_expr "set variable v_signed_long=-1" "print v_signed_long > 0" "\\$\[0-9\]* = $false"  "print v_signed_long > 0x7FFF" "\\$\[0-9\]* = $false"  "print signed signed long > (minus)"
 #
 # test expressions with "unsigned long" types
 #
-test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_long == 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned long =="
-test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_long != 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned long !="
-test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_long < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned long <"
-test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_long > 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned long >"
+test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_long == 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned long =="
+test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long != 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned long !="
+test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_long < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned long <"
+test_expr "set variable v_unsigned_long=0x7FFF" "print v_unsigned_long > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long > 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned long >"
 # make long a minus
-test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long == 0" "\\$\[0-9\]* = 0"  "print v_unsigned_long == ~0" "\\$\[0-9\]* = 1"  "print v_unsigned_long == (unsigned long)~0" "\\$\[0-9\]* = 1"  "print unsigned long == (~0)"
-test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long != 0" "\\$\[0-9\]* = 1"  "print v_unsigned_long != (unsigned long)~0" "\\$\[0-9\]* = 0"  "print unsigned long != (~0)"
-test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long < 0" "\\$\[0-9\]* = 0"  "print v_unsigned_long < 0x7FFF" "\\$\[0-9\]* = 0"  "print unsigned long < (~0)"
-test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long > 0" "\\$\[0-9\]* = 1"  "print v_unsigned_long > 0x7FFF" "\\$\[0-9\]* = 1"  "print unsigned long > (~0)"
+test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long == 0" "\\$\[0-9\]* = $false"  "print v_unsigned_long == ~0" "\\$\[0-9\]* = $true"  "print v_unsigned_long == (unsigned long)~0" "\\$\[0-9\]* = $true"  "print unsigned long == (~0)"
+test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long != (unsigned long)~0" "\\$\[0-9\]* = $false"  "print unsigned long != (~0)"
+test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_long < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned long < (~0)"
+test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long > 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned long > (~0)"
index ead67e5..98d390b 100644 (file)
@@ -71,8 +71,12 @@ char carray[] = {'a', 'n', ' ', 'a', 'r', 'r', 'a', 'y', '\0'};
 /* Test various permutations and interleaving of integral arguments */
 
 
+#ifdef PROTOTYPES
+void call0a (char c, short s, int i, long l)
+#else
 call0a (c, s, i, l)
 char c; short s; int i; long l;
+#endif
 {
   c = 'a';
   s = 5;
@@ -80,26 +84,42 @@ char c; short s; int i; long l;
   l = 7;
 }
 
+#ifdef PROTOTYPES
+void call0b (short s, int i, long l, char c)
+#else
 call0b (s, i, l, c)
 short s; int i; long l; char c;
+#endif
 {
   s = 6; i = 7; l = 8; c = 'j';
 }
 
+#ifdef PROTOTYPES
+void call0c (int i, long l, char c, short s)
+#else
 call0c (i, l, c, s)
 int i; long l; char c; short s;
+#endif
 {
   i = 3; l = 4; c = 'k'; s = 5;
 }
 
+#ifdef PROTOTYPES
+void call0d (long l, char c, short s, int i)
+#else
 call0d (l, c, s, i)
 long l; char c; short s; int i;
+#endif
 {
   l = 7; c = 'z'; s = 8; i = 9;
 }
 
+#ifdef PROTOTYPES
+void call0e (char c1, long l, char c2, int i, char c3, short s, char c4, char c5)
+#else
 call0e (c1, l, c2, i, c3, s, c4, c5)
 char c1; long l; char c2; int i; char c3; short s; char c4; char c5;
+#endif
 {
   c1 = 'a'; l = 5; c2 = 'b'; i = 7; c3 = 'c'; s = 7; c4 = 'f'; c5 = 'g';
 }
@@ -108,33 +128,53 @@ char c1; long l; char c2; int i; char c3; short s; char c4; char c5;
 /* Test various permutations and interleaving of unsigned integral arguments */
 
 
+#ifdef PROTOTYPES
+void call1a (unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
 call1a (uc, us, ui, ul)
 unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
   uc = 5; us = 6; ui = 7; ul = 8;
 }
 
+#ifdef PROTOTYPES
+void call1b (unsigned short us, unsigned int ui, unsigned long ul, unsigned char uc)
+#else
 call1b (us, ui, ul, uc)
 unsigned short us; unsigned int ui; unsigned long ul; unsigned char uc;
+#endif
 {
   uc = 5; us = 6; ui = 7; ul = 8;
 }
 
+#ifdef PROTOTYPES
+void call1c (unsigned int ui, unsigned long ul, unsigned char uc, unsigned short us)
+#else
 call1c (ui, ul, uc, us)
 unsigned int ui; unsigned long ul; unsigned char uc; unsigned short us;
+#endif
 {
   uc = 5; us = 6; ui = 7; ul = 8;
 }
 
+#ifdef PROTOTYPES
+void call1d (unsigned long ul, unsigned char uc, unsigned short us, unsigned int ui)
+#else
 call1d (ul, uc, us, ui)
 unsigned long ul; unsigned char uc; unsigned short us; unsigned int ui;
+#endif
 {
   uc = 5; us = 6; ui = 7; ul = 8;
 }
 
+#ifdef PROTOTYPES
+void call1e (unsigned char uc1, unsigned long ul, unsigned char uc2, unsigned int ui, unsigned char uc3, unsigned short us, unsigned char uc4, unsigned char uc5)
+#else
 call1e (uc1, ul, uc2, ui, uc3, us, uc4, uc5)
 unsigned char uc1; unsigned long ul; unsigned char uc2; unsigned int ui;
 unsigned char uc3; unsigned short us; unsigned char uc4; unsigned char uc5;
+#endif
 {
   uc1 = 5; ul = 7; uc2 = 8; ui = 9; uc3 = 10; us = 11; uc4 = 12; uc5 = 55;
 }
@@ -143,57 +183,93 @@ unsigned char uc3; unsigned short us; unsigned char uc4; unsigned char uc5;
    floating point arguments. */
 
 
+#ifdef PROTOTYPES
+void call2a (char c, float f1, short s, double d1, int i, float f2, long l, double d2)
+#else
 call2a (c, f1, s, d1, i, f2, l, d2)
 char c; float f1; short s; double d1; int i; float f2; long l; double d2;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2b (float f1, short s, double d1, int i, float f2, long l, double d2, char c)
+#else
 call2b (f1, s, d1, i, f2, l, d2, c)
 float f1; short s; double d1; int i; float f2; long l; double d2; char c;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2c (short s, double d1, int i, float f2, long l, double d2, char c, float f1)
+#else
 call2c (s, d1, i, f2, l, d2, c, f1)
 short s; double d1; int i; float f2; long l; double d2; char c; float f1;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2d (double d1, int i, float f2, long l, double d2, char c, float f1, short s)
+#else
 call2d (d1, i, f2, l, d2, c, f1, s)
 double d1; int i; float f2; long l; double d2; char c; float f1; short s;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2e (int i, float f2, long l, double d2, char c, float f1, short s, double d1)
+#else
 call2e (i, f2, l, d2, c, f1, s, d1)
 int i; float f2; long l; double d2; char c; float f1; short s; double d1;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2f (float f2, long l, double d2, char c, float f1, short s, double d1, int i)
+#else
 call2f (f2, l, d2, c, f1, s, d1, i)
 float f2; long l; double d2; char c; float f1; short s; double d1; int i;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2g (long l, double d2, char c, float f1, short s, double d1, int i, float f2)
+#else
 call2g (l, d2, c, f1, s, d1, i, f2)
 long l; double d2; char c; float f1; short s; double d1; int i; float f2;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2h (double d2, char c, float f1, short s, double d1, int i, float f2, long l)
+#else
 call2h (d2, c, f1, s, d1, i, f2, l)
 double d2; char c; float f1; short s; double d1; int i; float f2; long l;
+#endif
 {
   c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
 }
 
+#ifdef PROTOTYPES
+void call2i (char c1, float f1, char c2, char c3, double d1, char c4, char c5, char c6, float f2, short s, char c7, double d2)
+#else
 call2i (c1, f1, c2, c3, d1, c4, c5, c6, f2, s, c7, d2)
 char c1; float f1; char c2; char c3; double d1; char c4; char c5; char c6;
 float f2; short s; char c7; double d2;
+#endif
 {
   c1 = 'a'; f1 = 0.0; c2 = 5; d1 = 0.0; c3 = 6; f2 = 0.1; c4 = 7; d2 = 0.2;
   c5 = 's'; c6 = 'f'; c7 = 'z'; s = 77;
@@ -203,21 +279,33 @@ float f2; short s; char c7; double d2;
 /* Test pointers to various integral and floating types. */
 
 
+#ifdef PROTOTYPES
+void call3a (char *cp, short *sp, int *ip, long *lp)
+#else
 call3a (cp, sp, ip, lp)
 char *cp; short *sp; int *ip; long *lp;
+#endif
 {
   cp = 0; sp = 0; ip = 0; lp = 0;
 }
 
+#ifdef PROTOTYPES
+void call3b (unsigned char *ucp, unsigned short *usp, unsigned int *uip, unsigned long *ulp)
+#else
 call3b (ucp, usp, uip, ulp)
 unsigned char *ucp; unsigned short *usp; unsigned int *uip;
 unsigned long *ulp;
+#endif
 {
   ucp = 0; usp = 0; uip = 0; ulp = 0;
 }
 
+#ifdef PROTOTYPES
+void call3c (float *fp, double *dp)
+#else
 call3c (fp, dp)
 float *fp; double *dp;
+#endif
 {
   fp = 0; dp = 0;
 }
@@ -226,12 +314,20 @@ float *fp; double *dp;
 /* Test passing structures and unions by reference. */
 
 
+#ifdef PROTOTYPES
+void call4a (struct stag *stp)
+#else
 call4a (stp)
-struct stag *stp; {
-stp = 0;}
+struct stag *stp;
+#endif
+{stp = 0;}
 
+#ifdef PROTOTYPES
+void call4b (union utag *unp)
+#else
 call4b (unp)
 union utag *unp;
+#endif
 {
   unp = 0;
 }
@@ -240,165 +336,258 @@ union utag *unp;
 /* Test passing structures and unions by value. */
 
 
+#ifdef PROTOTYPES
+void call5a (struct stag st)
+#else
 call5a (st)
-struct stag st; {st.s1 = 5;}
+struct stag st;
+#endif
+{st.s1 = 5;}
 
+#ifdef PROTOTYPES
+void call5b (union utag un)
+#else
 call5b (un)
-union utag un; {un.u1 = 7;}
+union utag un;
+#endif
+{un.u1 = 7;}
 
 
 /* Test shuffling of args */
 
 
-call6a (c, s, i, l, f, d, uc, us, ui, ul)
-char c; short s; int i; long l; float f; double d;
-unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+void call6k ()
 {
-  c = c;
-    call6b (s, i, l, f, d, uc, us, ui, ul);
 }
 
-call6b (s, i, l, f, d, uc, us, ui, ul)
-short s; int i; long l; float f; double d;
-unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#ifdef PROTOTYPES
+void call6j (unsigned long ul)
+#else
+call6j (ul)
+unsigned long ul;
+#endif
 {
-  s = s;
-    call6c (i, l, f, d, uc, us, ui, ul);
+  ul = ul;
+    call6k ();
 }
 
-call6c (i, l, f, d, uc, us, ui, ul)
-int i; long l; float f; double d;
-unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#ifdef PROTOTYPES
+void call6i (unsigned int ui, unsigned long ul)
+#else
+call6i (ui, ul)
+unsigned int ui; unsigned long ul;
+#endif
 {
-  i = i;
-    call6d (l, f, d, uc, us, ui, ul);
+  ui = ui;
+    call6j (ul);
 }
 
-call6d (l, f, d, uc, us, ui, ul)
-long l; float f; double d;
-unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#ifdef PROTOTYPES
+void call6h (unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6h (us, ui, ul)
+unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  l = l;
-    call6e (f, d, uc, us, ui, ul);
+  us = us;
+    call6i (ui, ul);
 }
 
-call6e (f, d, uc, us, ui, ul)
-float f; double d;
+#ifdef PROTOTYPES
+void call6g (unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6g (uc, us, ui, ul)
 unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  f = f;
-    call6f (d, uc, us, ui, ul);
+  uc = uc;
+    call6h (us, ui, ul);
 }
 
+#ifdef PROTOTYPES
+void call6f (double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
 call6f (d, uc, us, ui, ul)
 double d;
 unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
   d = d;
     call6g (uc, us, ui, ul);
 }
 
-call6g (uc, us, ui, ul)
+#ifdef PROTOTYPES
+void call6e (float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6e (f, d, uc, us, ui, ul)
+float f; double d;
 unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  uc = uc;
-    call6h (us, ui, ul);
+  f = f;
+    call6f (d, uc, us, ui, ul);
 }
 
-call6h (us, ui, ul)
-unsigned short us; unsigned int ui; unsigned long ul;
+#ifdef PROTOTYPES
+void call6d (long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6d (l, f, d, uc, us, ui, ul)
+long l; float f; double d;
+unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  us = us;
-    call6i (ui, ul);
+  l = l;
+    call6e (f, d, uc, us, ui, ul);
 }
 
-call6i (ui, ul)
-unsigned int ui; unsigned long ul;
+#ifdef PROTOTYPES
+void call6c (int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6c (i, l, f, d, uc, us, ui, ul)
+int i; long l; float f; double d;
+unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  ui = ui;
-    call6j (ul);
+  i = i;
+    call6d (l, f, d, uc, us, ui, ul);
 }
 
-call6j (ul)
-unsigned long ul;
+#ifdef PROTOTYPES
+void call6b (short s, int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6b (s, i, l, f, d, uc, us, ui, ul)
+short s; int i; long l; float f; double d;
+unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
-  ul = ul;
-    call6k ();
+  s = s;
+    call6c (i, l, f, d, uc, us, ui, ul);
 }
 
-call6k ()
+#ifdef PROTOTYPES
+void call6a (char c, short s, int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
+call6a (c, s, i, l, f, d, uc, us, ui, ul)
+char c; short s; int i; long l; float f; double d;
+unsigned char uc; unsigned short us; unsigned int ui; unsigned long ul;
+#endif
 {
+  c = c;
+    call6b (s, i, l, f, d, uc, us, ui, ul);
 }
 
-
 /*  Test shuffling of args, round robin */
 
 
-call7a (c, i, s, l, f, uc, d, us, ul, ui)
+#ifdef PROTOTYPES
+void call7k (char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui)
+#else
+call7k (c, i, s, l, f, uc, d, us, ul, ui)
 char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui;
+#endif
 {
-    call7b (i, s, l, f, uc, d, us, ul, ui, c);
+  c = 'a'; i = 7; s = 8; l = 7; f = 0.3; uc = 44; d = 0.44; us = 77;
+  ul = 43; ui = 33;
 }
 
-call7b (i, s, l, f, uc, d, us, ul, ui, c)
-int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c;
+#ifdef PROTOTYPES
+void call7j (unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul)
+#else
+call7j (ui, c, i, s, l, f, uc, d, us, ul)
+unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul;
+#endif
 {
-    call7c (s, l, f, uc, d, us, ul, ui, c, i);
+    call7k (c, i, s, l, f, uc, d, us, ul, ui);
 }
 
-call7c (s, l, f, uc, d, us, ul, ui, c, i)
-short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i;
+#ifdef PROTOTYPES
+void call7i (unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us)
+#else
+call7i (ul, ui, c, i, s, l, f, uc, d, us)
+unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us;
+#endif
 {
-    call7d (l, f, uc, d, us, ul, ui, c, i, s);
+    call7j (ui, c, i, s, l, f, uc, d, us, ul);
 }
 
-call7d (l, f, uc, d, us, ul, ui, c, i, s)
-long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s;
+#ifdef PROTOTYPES
+void call7h (unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d)
+#else
+call7h (us, ul, ui, c, i, s, l, f, uc, d)
+unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d;
+#endif
 {
-    call7e (f, uc, d, us, ul, ui, c, i, s, l);
+    call7i (ul, ui, c, i, s, l, f, uc, d, us);
 }
 
-call7e (f, uc, d, us, ul, ui, c, i, s, l)
-float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l;
+#ifdef PROTOTYPES
+void call7g (double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc)
+#else
+call7g (d, us, ul, ui, c, i, s, l, f, uc)
+double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc;
+#endif
 {
-    call7f (uc, d, us, ul, ui, c, i, s, l, f);
+    call7h (us, ul, ui, c, i, s, l, f, uc, d);
 }
 
+#ifdef PROTOTYPES
+void call7f (unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f)
+#else
 call7f (uc, d, us, ul, ui, c, i, s, l, f)
 unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f;
+#endif
 {
     call7g (d, us, ul, ui, c, i, s, l, f, uc);
 }
 
-call7g (d, us, ul, ui, c, i, s, l, f, uc)
-double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc;
+#ifdef PROTOTYPES
+void call7e (float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l)
+#else
+call7e (f, uc, d, us, ul, ui, c, i, s, l)
+float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l;
+#endif
 {
-    call7h (us, ul, ui, c, i, s, l, f, uc, d);
+    call7f (uc, d, us, ul, ui, c, i, s, l, f);
 }
 
-call7h (us, ul, ui, c, i, s, l, f, uc, d)
-unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d;
+#ifdef PROTOTYPES
+void call7d (long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s)
+#else
+call7d (l, f, uc, d, us, ul, ui, c, i, s)
+long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i; short s;
+#endif
 {
-    call7i (ul, ui, c, i, s, l, f, uc, d, us);
+    call7e (f, uc, d, us, ul, ui, c, i, s, l);
 }
 
-call7i (ul, ui, c, i, s, l, f, uc, d, us)
-unsigned long ul; unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us;
+#ifdef PROTOTYPES
+void call7c (short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i)
+#else
+call7c (s, l, f, uc, d, us, ul, ui, c, i)
+short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c; int i;
+#endif
 {
-    call7j (ui, c, i, s, l, f, uc, d, us, ul);
+    call7d (l, f, uc, d, us, ul, ui, c, i, s);
 }
 
-call7j (ui, c, i, s, l, f, uc, d, us, ul)
-unsigned int ui; char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul;
+#ifdef PROTOTYPES
+void call7b (int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c)
+#else
+call7b (i, s, l, f, uc, d, us, ul, ui, c)
+int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui; char c;
+#endif
 {
-    call7k (c, i, s, l, f, uc, d, us, ul, ui);
+    call7c (s, l, f, uc, d, us, ul, ui, c, i);
 }
 
-call7k (c, i, s, l, f, uc, d, us, ul, ui)
+#ifdef PROTOTYPES
+void call7a (char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui)
+#else
+call7a (c, i, s, l, f, uc, d, us, ul, ui)
 char c; int i; short s; long l; float f; unsigned char uc; double d; unsigned short us; unsigned long ul; unsigned int ui;
+#endif
 {
-  c = 'a'; i = 7; s = 8; l = 7; f = 0.3; uc = 44; d = 0.44; us = 77;
-  ul = 43; ui = 33;
+    call7b (i, s, l, f, uc, d, us, ul, ui, c);
 }
 
 
@@ -412,13 +601,17 @@ typedef struct s
   long l;
 } SVAL;        
 
-hitbottom ()
+void hitbottom ()
 {
 }
 
+#ifdef PROTOTYPES
+void recurse (SVAL a, int depth)
+#else
 void recurse (a, depth)
 SVAL a;
 int depth;
+#endif
 {
   a.s = a.i = a.l = --depth;
   if (depth == 0)
@@ -427,7 +620,7 @@ int depth;
     recurse (a, depth);
 }
 
-test_struct_args ()
+void test_struct_args ()
 {
   SVAL s; s.s = 5; s.i = 5; s.l = 5;
 
@@ -438,12 +631,16 @@ test_struct_args ()
    calls alloca may do things differently with respect to frames.  So give
    it a try.  */
 
+#ifdef PROTOTYPES
+void localvars_after_alloca (char c, short s, int i, long l)
+#else
 int
 localvars_after_alloca (c, s, i, l)
      char c;
      short s;
      int i;
      long l;
+#endif
 {
 #ifdef HAVE_STACK_ALLOCA
   /* No need to use the alloca.c alloca-on-top-of-malloc; it doesn't
@@ -458,21 +655,29 @@ localvars_after_alloca (c, s, i, l)
   l = 7;
 }
 
+#ifdef PROTOTYPES
+void call_after_alloca_subr (char c, short s, int i, long l, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
+#else
 void
 call_after_alloca_subr (c, s, i, l, uc, us, ui, ul)
 char c; int i; short s; long l; unsigned char uc; unsigned short us; unsigned long ul; unsigned int ui;
+#endif
 {
   c = 'a';
   i = 7; s = 8; l = 7; uc = 44; us = 77;
   ul = 43; ui = 33;
 }
 
+#ifdef PROTOTYPES
+void call_after_alloca (char c, short s, int i, long l)
+#else
 int
 call_after_alloca (c, s, i, l)
      char c;
      short s;
      int i;
      long l;
+#endif
 {
 #ifdef HAVE_STACK_ALLOCA
   /* No need to use the alloca.c alloca-on-top-of-malloc; it doesn't
@@ -491,9 +696,13 @@ call_after_alloca (c, s, i, l)
    will require a trampoline between dyncall and this function on the
    call path, then another trampoline on between this function and main
    on the return path.  */
+#ifdef PROTOTYPES
+double call_with_trampolines (double d1)
+#else
 double
 call_with_trampolines (d1)
 double d1;
+#endif
 {
   return d1;
 } /* End of call_with_trampolines, this comment is needed by funcargs.exp */
@@ -506,10 +715,10 @@ marker_indirect_call () {}
 void
 marker_call_with_trampolines () {}
 \f
-main ()
+int main ()
 {
-  int (*pointer_to_call0a) () = call0a;
-  double (*pointer_to_call_with_trampolines) () = call_with_trampolines;
+  void (*pointer_to_call0a) (char, short, int, long) = (void (*)(char, short, int, long))call0a;
+  double (*pointer_to_call_with_trampolines) (double) = call_with_trampolines;
 
 #ifdef usestubs
   set_debug_traps();
@@ -579,4 +788,5 @@ main ()
   (*pointer_to_call0a) (c, s, i, l);   /* Second step into call0a.  */
   marker_call_with_trampolines ();
   (*pointer_to_call_with_trampolines) (d); /* Test multiple trampolines.  */
+  return 0;
 }
index cc7a6d6..baa4ab6 100644 (file)
@@ -167,6 +167,7 @@ proc float_and_integral_args {} {
     global gdb_prompt
     global det_file
     global gcc_compiled
+    global hp_cc_compiler
 
     delete_breakpoints
 
@@ -186,55 +187,67 @@ proc float_and_integral_args {} {
     # code is broken.
     setup_xfail "a29k-*-udi"
     if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "mips-sgi-irix5*" }
+    # The debug info. for "f" is not correct. It's a known bug.
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     gdb_run_cmd
     gdb_expect {
         -re ".* call2a \\(c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5\\) .*$gdb_prompt $" { pass "run to call2a" }
+        -re ".* call2a \\(c=97 'a', f1=.*, s=1, d1=5, i=2, f2=4, l=3, d2=5\\) .*$gdb_prompt $" { xfail "run to call2a" }
         -re "$gdb_prompt $" { fail "run to call2a" ; gdb_suppress_tests; }
         timeout { fail "(timeout) run to call2a" ; gdb_suppress_tests; }
     }
 
     # Print each arg as a double check to see if we can print
     gdb_test "print c" ".* = 97 'a'" "print c after run to call2a"
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     gdb_test "print f1" ".* = 4" "print f1 after run to call2a"
     gdb_test "print s" ".* = 1" "print s after run to call2a"
     gdb_test "print d1" ".* = 5" "print d1 after run to call2a"
     gdb_test "print i" ".* = 2" "print i after run to call2a"
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     gdb_test "print f2" ".* = 4" "print f2 after run to call2a"
     gdb_test "print l" ".* = 3" "print l after run to call2a"
     gdb_test "print d2" ".* = 5" "print d2 after run to call2a"
 
     setup_xfail "rs6000-*-*"
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
     # Continue; should stop at call2b and print actual arguments.
     if [gdb_test "cont" ".* call2b \\(f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a'\\) .*" "continue to call2b"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2c and print actual arguments.
     if [gdb_test "cont" ".* call2c \\(s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4\\) .*" "continue to call2c"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2d and print actual arguments.
     if [gdb_test "cont" ".* call2d \\(d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1\\) .*" "continue to call2d"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2e and print actual arguments.
     if [gdb_test "cont" ".* call2e \\(i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5\\) .*" "continue to call2e"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2f and print actual arguments.
     if [gdb_test "cont" ".* call2f \\(f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2\\) .*" "continue to call2f"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2g and print actual arguments.
     if [gdb_test "cont" ".* call2g \\(l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4\\) .*" "continue to call2g"] {
        gdb_suppress_tests;
     }
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2h and print actual arguments.
     if [gdb_test "cont" ".* call2h \\(d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3\\) .*" "continue to call2h"] {
        gdb_suppress_tests;
@@ -245,6 +258,7 @@ proc float_and_integral_args {} {
     delete_breakpoints
     gdb_breakpoint call2i
 
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
     # Continue; should stop at call2i and print actual arguments.
     if [gdb_test "cont" ".* call2i \\(c1=97 'a', f1=4, c2=97 'a', c3=97 'a', d1=5, c4=97 'a', c5=97 'a', c6=97 'a', f2=4, s=1, c7=97 'a', d2=5\\) .*" "continue to call2i"] {
        gdb_suppress_tests;
@@ -449,6 +463,7 @@ proc discard_and_shuffle {} {
     global decimal
     global det_file
     global gcc_compiled
+    global hp_cc_compiler
 
     delete_breakpoints
 
@@ -480,8 +495,30 @@ proc discard_and_shuffle {} {
        setup_xfail "mips-sgi-irix5*"
     }
 
-    if [gdb_test "backtrace 100" " call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6a"] {
-       gdb_suppress_tests;
+    # The debug info. for "f" is not correct. It's a known bug.
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    send_gdb "backtrace 100\n"
+    gdb_expect {
+       -re "backtrace 100\[\r\n\]+
+.* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\r
+.* main \\(.*\\) .*\r
+$gdb_prompt $" {
+           pass "backtrace from call6a"
+       }
+       -re "backtrace 100\[\r\n\]+
+.* call6a \\(c=97 'a', s=1, i=2, l=3, f=.*, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\r
+.* main \\(.*\\) .*\r
+$gdb_prompt $" {
+           xfail "backtrace from call6a"
+       }
+       -re "$gdb_prompt $" {
+           fail "backtrace from call6a"
+           gdb_suppress_tests
+       }
+       timeout {
+           fail "(timeout) backtrace from call6a"
+           gdb_suppress_tests
+       }
     }
 
     # Continue; should stop at call6b and print actual arguments.
@@ -489,7 +526,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6b
 
-    if [gdb_test "backtrace 100" " call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6b"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\]*.* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\]" "backtrace from call6b"] {
        gdb_suppress_tests;
     }
 
@@ -498,7 +536,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6c
 
-    if [gdb_test "backtrace 100" " call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6c"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6c"] {
        gdb_suppress_tests;
     }
     # Continue; should stop at call6d and print actual arguments.
@@ -506,7 +545,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6d
 
-    if [gdb_test "backtrace 100" " call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6d"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6d"] {
        gdb_suppress_tests;
     }
 
@@ -515,7 +555,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6e
 
-    if [gdb_test "backtrace 100" " call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6e"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6e"] {
        gdb_suppress_tests;
     }
 
@@ -524,7 +565,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6f
 
-    if [gdb_test "backtrace 100" " call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6f"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6f"] {
        gdb_suppress_tests;
     }
 
@@ -533,7 +575,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6g
 
-    if [gdb_test "backtrace 100" " call6g \\(uc=98 'b', us=6, ui=7, ul=8\\).* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6g"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6g"] {
        gdb_suppress_tests;
     }
 
@@ -542,7 +585,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6h
 
-    if [gdb_test "backtrace 100" " call6h \\(us=6, ui=7, ul=8\\).* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\).* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6h"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6h \\(us=6, ui=7, ul=8\\) .*\[\r\n\].* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6h"] {
        gdb_suppress_tests;
     }
 
@@ -558,7 +602,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6i
 
-    if [gdb_test "backtrace 100" " call6i \\(ui=7, ul=8\\).* call6h \\(us=6, ui=7, ul=8\\).* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\).* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6i"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6i \\(ui=7, ul=8\\) .*\[\r\n\].* call6h \\(us=6, ui=7, ul=8\\) .*\[\r\n\].* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6i"] {
        gdb_suppress_tests;
     }
 
@@ -567,7 +612,8 @@ proc discard_and_shuffle {} {
 
     gdb_continue call6j
 
-    if [gdb_test "backtrace 100" " call6j \\(ul=8\\).* call6i \\(ui=7, ul=8\\).* call6h \\(us=6, ui=7, ul=8\\).* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\).* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6j"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6j \\(ul=8\\) .*\[\r\n\].* call6i \\(ui=7, ul=8\\) .*\[\r\n\].* call6h \\(us=6, ui=7, ul=8\\) .*\[\r\n\].* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6j"] {
        gdb_suppress_tests;
     }
 
@@ -578,7 +624,8 @@ proc discard_and_shuffle {} {
     setup_xfail "i960-*-vxworks" 1786
     gdb_continue call6k
 
-    if [gdb_test "backtrace 100" " call6k \\(\\).* call6j \\(ul=8\\).* call6i \\(ui=7, ul=8\\).* call6h \\(us=6, ui=7, ul=8\\).* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\).* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\).* main \\(.*\\).*" "backtrace from call6k"] {
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    if [gdb_test "backtrace 100" ".* call6k \\(\\) .*\[\r\n\].* call6j \\(ul=8\\) .*\[\r\n\].* call6i \\(ui=7, ul=8\\) .*\[\r\n\].* call6h \\(us=6, ui=7, ul=8\\) .*\[\r\n\].* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n\].* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\[\r\n].* main \\(.*\\) .*" "backtrace from call6k"] {
        gdb_suppress_tests;
     }
     gdb_stop_suppressing_tests;
@@ -595,6 +642,7 @@ proc shuffle_round_robin {} {
     global decimal
     global det_file
     global gcc_compiled
+    global hp_cc_compiler
 
     delete_breakpoints
 
@@ -624,7 +672,25 @@ proc shuffle_round_robin {} {
 
     setup_xfail "i960-*-*" 1813
     if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "mips-sgi-irix5*" }
-    gdb_test "backtrace 100" " call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7a"
+    # The debug info. for "f" is not correct. It's a known bug.
+    if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
+    send_gdb "backtrace 100\n"
+    gdb_expect {
+       -re "backtrace 100\[\r\n\]+
+.* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\r
+.* main \\(.*\\) .*\r
+$gdb_prompt $" {
+           pass "backtrace from call7a"
+       }
+       -re "backtrace 100\[\r\n\]+
+.* call7a \\(c=97 'a', i=2, s=1, l=3, f=.*, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\r
+.* main \\(.*\\) .*\r
+$gdb_prompt $" {
+           xfail "backtrace from call7a"
+       }
+       -re "$gdb_prompt $" { fail "backtrace from call7a" ; return }
+       timeout { fail "(timeout) backtrace from call7a" ; return }
+    }
 
     # Continue; should stop at call7b and print actual arguments.
     # Print backtrace.
@@ -633,43 +699,43 @@ proc shuffle_round_robin {} {
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
 
-    gdb_test "backtrace 100" " call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7b"
+    gdb_test "backtrace 100" ".* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7b"
 
     # Continue; should stop at call7c and print actual arguments.
     # Print backtrace.
 
     gdb_continue call7c
 
-    gdb_test "backtrace 100" " call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7c"
+    gdb_test "backtrace 100" ".* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7c"
 
     # Continue; should stop at call7d and print actual arguments.
     # Print backtrace.
 
     gdb_continue call7d
 
-    gdb_test "backtrace 100" " call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7d"
+    gdb_test "backtrace 100" ".* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7d"
 
     gdb_continue call7e
 
-    gdb_test "backtrace 100" " call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7e"
+    gdb_test "backtrace 100" ".* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7e"
 
     # Continue; should stop at call7f and print actual arguments.
     # Print backtrace.
 
     gdb_continue call7f
 
-    gdb_test "backtrace 100" " call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7f"
+    gdb_test "backtrace 100" ".* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7f"
 
     # Continue; should stop at call7g and print actual arguments.
     # Print backtrace.
 
     gdb_continue call7g
 
-    gdb_test "backtrace 100" " call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\).* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7g"
+    gdb_test "backtrace 100" ".* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) .*\[\r\n\].* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7g"
 
     gdb_continue call7h
 
-    gdb_test "backtrace 100" " call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\).* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\).* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7h"
+    gdb_test "backtrace 100" ".* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) .*\[\r\n\].* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) .*\[\r\n\].* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7h"
 
     # monitor only allows 8 breakpoints; w89k board allows 10, so
     # break them up into two groups.
@@ -683,14 +749,14 @@ proc shuffle_round_robin {} {
 
     gdb_continue call7i
 
-    gdb_test "backtrace 100" " call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\).* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\).* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\).* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7i"
+    gdb_test "backtrace 100" ".* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) .*\[\r\n\].* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) .*\[\r\n\].* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) .*\[\r\n\].* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7i"
 
     # Continue; should stop at call7j and print actual arguments.
     # Print backtrace.
 
     gdb_continue call7j
 
-    gdb_test "backtrace 100" " call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\).* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\).* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\).* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\).* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7j"
+    gdb_test "backtrace 100" ".* call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\) .*\[\r\n\].* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) .*\[\r\n\].* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) .*\[\r\n\].* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) .*\[\r\n\].* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7j"
 
     # Continue; should stop at call7k and print actual arguments.
     # Print backtrace.
@@ -698,7 +764,7 @@ proc shuffle_round_robin {} {
     gdb_continue call7k
 
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
-    gdb_test "backtrace 100" " call7k \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\).* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\).* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\).* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\).* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\).* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\).* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\).* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\).* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\).* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\).* main \\(.*\\).*" "backtrace from call7k"
+    gdb_test "backtrace 100" ".* call7k \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\) .*\[\r\n\].* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) .*\[\r\n\].* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) .*\[\r\n\].* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) .*\[\r\n\].* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) .*\[\r\n\].* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) .*\[\r\n\].* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) .*\[\r\n\].* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) .*\[\r\n\].* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) .*\[\r\n\].* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\].*" "backtrace from call7k"
     gdb_stop_suppressing_tests;
 }
 
@@ -729,7 +795,7 @@ proc recursive_structs_by_value {} {
     # The a29k fails all of these tests, perhaps because the prologue
     # code is broken.
        setup_xfail "a29k-*-udi"
-       gdb_test "backtrace 100" " hitbottom \\(\\).* recurse \\(a=\{s = 0, i = 0, l = 0\}, depth=0\\).* recurse \\(a=\{s = 1, i = 1, l = 1\}, depth=1\\).* recurse \\(a=\{s = 2, i = 2, l = 2\}, depth=2\\).* recurse \\(a=\{s = 3, i = 3, l = 3\}, depth=3\\).* recurse \\(a=\{s = 4, i = 4, l = 4\}, depth=4\\).* test_struct_args \\(\\).* main \\(.*\\).*" "recursive passing of structs by value"
+       gdb_test "backtrace 100" ".* hitbottom \\(\\) .*\[\r\n\].* recurse \\(a=\{s = 0, i = 0, l = 0\}, depth=0\\) .*\[\r\n\].* recurse \\(a=\{s = 1, i = 1, l = 1\}, depth=1\\) .*\[\r\n\].* recurse \\(a=\{s = 2, i = 2, l = 2\}, depth=2\\) .*\[\r\n\].* recurse \\(a=\{s = 3, i = 3, l = 3\}, depth=3\\) .*\[\r\n\].* recurse \\(a=\{s = 4, i = 4, l = 4\}, depth=4\\) .*\[\r\n\].* test_struct_args \\(\\) .*\[\r\n\].* main \\(.*\\) .*\[\r\n\]" "recursive passing of structs by value"
     } else {
        fail "recursive passing of structs by value (sparclet)"
     }
@@ -859,10 +925,12 @@ proc localvars_in_indirect_call { } {
     send_gdb "finish\n"
     gdb_expect {
         -re "\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*First.*$gdb_prompt $" {
+#On hppa2.0w-hp-hpux11.00, gdb finishes at one line earlier than 
+#hppa1.1-hp-hpux11.00. Therefore, an extra "step" is necessary to continue the test.
            send_gdb "step\n"
            exp_continue
        }
-        -re "\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*Second.*$gdb_prompt $" {
+        -re ".*\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*Second.*$gdb_prompt $" {
            pass "finish from indirectly called function"
        }
         -re ".*$gdb_prompt $" {
@@ -922,7 +990,8 @@ proc test_stepping_over_trampolines { } {
     send_gdb "step\n"
     gdb_expect {
         -re "main .* at.*$gdb_prompt $" {
-           pass "stepping back to main from function called with trampolines" ;
+            pass "stepping back to main from function called with trampolines" ;
+            gdb_suppress_tests
        }
         -re "\}.*End of call_with_trampolines.*$gdb_prompt $" {
            send_gdb "step\n"
index 120697b..a895d4b 100644 (file)
@@ -1,5 +1,7 @@
 #include <errno.h>
 #include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
 int
 main ()
 {
@@ -28,6 +30,7 @@ main ()
       else
        write (1, &x, 1);
     }
+  return 0;
 }
 
 int
index 60cf838..379df02 100644 (file)
@@ -105,7 +105,14 @@ if ![file exists $binfile] then {
                fail "child died when we called func1, skipped rest of tests"
                return
            }
-           -re "$gdb_prompt $" { fail "call function when asleep (wrong output)" }
+           -re "$gdb_prompt $" {
+               # On HPUX-11.0 'send "p func1 ()"' above
+               # terminates the program. A defect is pending on this
+               # issue [defect #DTS CHFts24203]. Hence calling setup_xfail
+               # below.
+               setup_xfail "hppa*-*-*11*"
+               fail "call function when asleep (wrong output)"
+           }
            default {
 
                # This fail probably happens whenever we use /proc (we
@@ -114,7 +121,6 @@ if ![file exists $binfile] then {
 
                setup_xfail "sparc*-*-solaris2*"
                setup_xfail "mips-*-ultrix*"
-               setup_xfail "hppa*-*-*"
                setup_xfail "i386*-*-bsd*"
                setup_xfail "i*86-*-solaris2*"
                setup_xfail "*-*-sysv4*"
@@ -154,6 +160,9 @@ if ![file exists $binfile] then {
        # The optional leading \r\n is in case we sent a newline above
        # to wake the program, in which case the program now sends it
        # back.
+        # FIXME: The pattern below leads to an expected success on HPUX-11.0
+        # but the success is spurious. Need to provide the right reg.expr.
+        # here.
        gdb_expect {
            -re "^(\r\n|)data\r\n(|data\r\n)$" { pass "echo data" }
            timeout { fail "echo data (timeout)" }
index e16d0fd..aae94f7 100644 (file)
@@ -2,18 +2,23 @@
    particularly deep about the functionality nor names in here.
    */
 
+#ifdef PROTOTYPES
+static int square (int x)
+#else
 static int square (x)
   int  x;
+#endif
 {
   return x*x;
 }
 
 
-main ()
+int main ()
 {
   int i = 99;
 
   i++;
   i = square (i);
   i--;
+  return 0;
 }
index c110e21..cca9094 100644 (file)
@@ -56,10 +56,10 @@ if ![runto_main] then {
 # Set a breakpoint on the statement that we're about to jump to.
 # The statement doesn't contain a function call.
 #
-send_gdb "break 18\n"
+send_gdb "break 22\n"
 set bp_on_non_call 0
 gdb_expect {
-  -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 18.*$gdb_prompt $"\
+  -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 22.*$gdb_prompt $"\
           {set bp_on_non_call $expect_out(1,string)
            pass "break before jump to non-call"}
   -re "$gdb_prompt $"\
@@ -69,9 +69,9 @@ gdb_expect {
 
 # Can we jump to the statement?  Do we stop there?
 #
-send_gdb "jump 18\n"
+send_gdb "jump 22\n"
 gdb_expect {
-  -re "Breakpoint \[0-9\]*, .*${srcfile}:18.*$gdb_prompt $"\
+  -re "Breakpoint \[0-9\]*, .*${srcfile}:22.*$gdb_prompt $"\
           {pass "jump to non-call"}
   -re "$gdb_prompt $"\
           {fail "jump to non-call"}
@@ -81,10 +81,10 @@ gdb_expect {
 # Set a breakpoint on the statement that we're about to jump to.
 # The statement does contain a function call.
 #
-send_gdb "break 17\n"
+send_gdb "break 21\n"
 set bp_on_call 0
 gdb_expect {
-  -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 17.*$gdb_prompt $"\
+  -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 21.*$gdb_prompt $"\
           {set bp_on_call $expect_out(1,string)
            pass "break before jump to call"}
   -re "$gdb_prompt $"\
@@ -94,9 +94,9 @@ gdb_expect {
 
 # Can we jump to the statement?  Do we stop there?
 #
-send_gdb "jump 17\n"
+send_gdb "jump 21\n"
 gdb_expect {
-  -re "Breakpoint \[0-9\]*, .*${srcfile}:17.*$gdb_prompt $"\
+  -re "Breakpoint \[0-9\]*, .*${srcfile}:21.*$gdb_prompt $"\
           {pass "jump to call"}
   -re "$gdb_prompt $"\
           {fail "jump to call"}
@@ -114,9 +114,9 @@ gdb_expect {
   timeout {fail "(timeout) disable breakpoint on call"}
 }
 
-send_gdb "jump 17\n"
+send_gdb "jump 21\n"
 gdb_expect {
-  -re "Breakpoint \[0-9\]*, .*${srcfile}:18.*$gdb_prompt $"\
+  -re "Breakpoint \[0-9\]*, .*${srcfile}:22.*$gdb_prompt $"\
           {pass "jump to call with disabled breakpoint"}
   -re "$gdb_prompt $"\
           {fail "jump to call with disabled breakpoint"}
@@ -138,7 +138,7 @@ gdb_expect {
 # Verify that GDB responds gracefully to the "jump" command with
 # trailing junk.
 #
-send_gdb "jump 17 100\n"
+send_gdb "jump 21 100\n"
 gdb_expect {
   -re "Junk at end of line specification: 100.*$gdb_prompt $"\
           {pass "jump with trailing argument junk"}
@@ -154,9 +154,9 @@ gdb_expect {
 #
 # Try it both ways: confirming and not confirming the jump.
 #
-send_gdb "jump 8\n"
+send_gdb "jump 12\n"
 gdb_expect {
-  -re "Line 8 is not in `main'.  Jump anyway.*y or n. $"\
+  -re "Line 12 is not in `main'.  Jump anyway.*y or n. $"\
           {send_gdb "n\n"
            gdb_expect {
              -re "Not confirmed.*$gdb_prompt $"\
@@ -171,9 +171,9 @@ gdb_expect {
   timeout {fail "(timeout) aborted jump out of current function"}
 }
 
-send_gdb "jump 8\n"
+send_gdb "jump 12\n"
 gdb_expect {
-  -re "Line 8 is not in `main'.  Jump anyway.*y or n. $"\
+  -re "Line 12 is not in `main'.  Jump anyway.*y or n. $"\
           {send_gdb "y\n"
            gdb_expect {
              -re "Continuing at.*$gdb_prompt $"\
index 464c797..9ed1e91 100644 (file)
@@ -49,6 +49,8 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o ${binfile}2.o" ${binfile} execut
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+set oldtimeout $timeout
+set timeout 10
 
 
 
@@ -63,12 +65,31 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load $binfile
 
-gdb_test "b langs0" {Function "langs0" not defined\.} \
+gdb_test "b langs0" "Function \"langs0\" not defined\.|Breakpoint .* (deferred).*" \
     "break on nonexistent function in langs.exp"
 
+if {$hp_aCC_compiler} {
+    set isfixed 1
+    set lang c\\+\\+
+    set ext cxx
+    set foo_func foo__Fi__Fi
+    set do_func do::langs0
+} else {
+    if {$hp_cc_compiler} {
+        set isfixed 1
+        set lang c
+        set ext c
+    } else {
+        set isfixed 0
+    }
+    set foo_func foo__Fi
+    set do_func langs0__2do
+}
+
 if [runto csub] then {
 
-    gdb_test "show language" "currently c\".*" \
+    if { !$isfixed } { set lang c }
+    gdb_test "show language" "currently $lang\".*" \
        "show language at csub in langs.exp"
     # On some machines, foo doesn't get demangled because the N_SOL for
     # langs2.cxx is seen only after the function stab for foo.  So
@@ -76,36 +97,41 @@ if [runto csub] then {
     # even though only the latter is correct.  I haven't tried to xfail it
     # because it depends on details of the compiler.
     
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
-    gdb_test "bt" "#0.*csub.*#1.*(foo|foo__Fi) \\(.*#2.*cppsub_ .*#3.*fsub.*#4.*langs0__2do \\(.*#5  \[0-9a-fx\]* in main.*" "backtrace in langs.exp"
+    # Take out xfail. This test has been passing for some time now.
+    #if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
+    gdb_test "bt" "#0.*csub.*#1.*(foo|$foo_func) \\(.*#2.*cppsub_ .*#3.*fsub.*#4.*$do_func \\(.*#5  \[0-9a-fx\]* in main.*" "backtrace in langs.exp"
 
+    if { !$isfixed } { set lang c\\+\\+; set ext cxx }
     if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    gdb_test "up" ".* in (foo|foo__Fi) .* at langs2\\.cxx.*return csub \\(.*" \
+    gdb_test "up" ".* in (foo|$foo_func).* at langs2\\.$ext.*return csub \\(.*" \
        "up to foo in langs.exp"
-    gdb_test "show language" "currently c\\+\\+.*" \
+    gdb_test "show language" "currently $lang.*" \
        "show language at foo in langs.exp"
 
     if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    gdb_test "up" ".* in cppsub_ .* at langs2\\.cxx.*return foo \\(.*" \
+    gdb_test "up" ".* in cppsub_ .* at langs2\\.$ext.*return foo \\(.*" \
        "up to cppsub_ in langs.exp"
-    gdb_test "show language" "currently c\\+\\+.*" \
+    gdb_test "show language" "currently $lang.*" \
        "show language at cppsub_ in langs.exp"
 
+    if { !$isfixed } { set lang fortran }
     if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    gdb_test "up" ".* in fsub.* at langs1\\.f.*return \\(cppsub .*" \
+    gdb_test "up" ".* in fsub.* at langs1\\.f.*" \
        "up to fsub in langs.exp"
-    gdb_test "show language" "currently fortran.*" \
+    gdb_test "show language" "currently $lang.*" \
        "show language at fsub in langs.exp"
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
-    gdb_test "up" ".* in langs0__2do .* at .*langs0\\.c.*return fsub.*" \
+    # Take out xfail. This test has been passing for sometime now.
+    #if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
+    if { !$isfixed } { set lang c }
+    gdb_test "up" ".* in $do_func .* at .*langs0\\.c.*return fsub.*" \
        "up to langs0__2do in langs.exp"
-    gdb_test "show language" "currently c\".*" \
+    gdb_test "show language" "currently $lang\".*" \
        "show language at langs0__2do in langs.exp"
 
     gdb_test "up" ".* in main .* at .*langs0\\.c.*if \\(langs0__2do \\(.*" \
        "up to main in langs.exp"
-    gdb_test "show language" "currently c\".*" \
+    gdb_test "show language" "currently $lang\".*" \
        "show language at main in langs.exp"
 
     if [target_info exists gdb,noresults] { return }
@@ -119,4 +145,5 @@ if [runto csub] then {
     }
 }
 
+set timeout $oldtimeout
 return 0
index 69c0ce8..1477a32 100644 (file)
@@ -1,8 +1,14 @@
 /* This file is actually in C, it is not supposed to simulate something
    translated from another language or anything like that.  */
+#ifdef PROTOTYPES
+extern  int fsub_();
+
+int csub (int x)
+#else
 int
 csub (x)
      int x;
+#endif
 {
   return x + 1;
 }
index 7842259..8ffd13f 100644 (file)
@@ -16,14 +16,22 @@ static integer c__10000 = 10000;
 
 /* I am not sure whether there is a way to have a fortran program without */
 /* a MAIN, but it does not really harm us to have one. */
+#ifdef PROTOTYPES
+/* Main program */ void MAIN__()
+#else
 /* Main program */ MAIN__()
+#endif
 {
 } /* MAIN__ */
 
 #line 4 "langs1.f"
 /* Subroutine */ int fsub_()
 {
+#ifdef PROTOTYPES
+    extern integer cppsub_(int*);
+#else
     extern integer cppsub_();
+#endif
 
 #line 5 "langs1.f"
 #line 6 "langs1.f"
index be2a60c..502b800 100644 (file)
@@ -1,4 +1,20 @@
 /* This is intended to be a vague simulation of cfront output.  */
+#ifdef PROTOTYPES
+#line 1 "langs2.cxx"
+extern int csub (int);
+int
+foo__Fi (int x)
+{
+  return csub (x / 2);
+}
+
+extern int cppsub_ (int *y);
+int
+cppsub_ (int * y)
+{
+  return foo__Fi (*y);
+}
+#else 
 #line 1 "langs2.cxx"
 extern int csub ();
 int
@@ -13,3 +29,4 @@ cppsub_ (y) int *y;
 {
   return foo__Fi (*y);
 }
+#endif
index f597b9a..3652be9 100644 (file)
@@ -84,6 +84,8 @@ proc set_listsize { arg } {
 
 proc test_listsize {} {
     global gdb_prompt
+    global hp_cc_compiler
+    global hp_aCC_compiler
 
     # Show default size
 
@@ -101,10 +103,10 @@ proc test_listsize {} {
 
     # Ensure we can limit printouts to one line
 
-    if [ set_listsize 1 ] then {
-       setup_xfail "*-*-*"
+    if [set_listsize 1] {
+        if {!$hp_cc_compiler && !$hp_aCC_compiler} { setup_xfail "*-*-*" }
        gdb_test "list 1" "1\[ \t\]+#include \"list0.h\"" "list line 1 with listsize 1"
-       setup_xfail "*-*-*"
+        if {!$hp_cc_compiler && !$hp_aCC_compiler} { setup_xfail "*-*-*" }
        gdb_test "list 2" "2\[ \t\]+" "list line 2 with listsize 1"
     }    
 
@@ -113,7 +115,7 @@ proc test_listsize {} {
     if [ set_listsize 2 ] {
        gdb_test "list 1" "1\[ \t\]+#include \"list0.h\"" "list line 1 with listsize 2"
        gdb_test "list 2" "1\[ \t\]+#include \"list0.h\"\r\n2\[ \t\]+" "list line 2 with listsize 2"
-       gdb_test "list 3" "2\[ \t\]+\r\n3\[ \t\]+main \[)(\]+" "list line 3 with listsize 2"
+       gdb_test "list 3" "2\[ \t\]+\r\n3\[ \t\]+int main \[)(\]+" "list line 3 with listsize 2"
     }
 
     # Try small listsize > 1 that is an odd number
@@ -121,18 +123,18 @@ proc test_listsize {} {
     if [ set_listsize 3 ] {
        setup_xfail "*-*-*"
        gdb_test "list 1" "1\[ \t\]+#include \"list0.h\"2\[ \t\]+" "list line 1 with listsize 3"
-       setup_xfail "*-*-*"
-       gdb_test "list 2" "1\[ \t\]+#include \"list0.h\".*3\[ \t\]+main \[)(\]+" "list line 2 with listsize 3"
+        if {!$hp_cc_compiler && !$hp_aCC_compiler} { setup_xfail "*-*-*" }
+       gdb_test "list 2" "1\[ \t\]+#include \"list0.h\".*3\[ \t\]+int main \[)(\]+" "list line 2 with listsize 3"
        
-       setup_xfail "*-*-*"
-       gdb_test "list 3" "2\[ \t\]+\r\n3\[ \t\]+main \[(\]+\[)\]+\r\n4\[ \t\]+\{" "list line 3 with listsize 3"
+        if {!$hp_cc_compiler && !$hp_aCC_compiler} { setup_xfail "*-*-*" }
+       gdb_test "list 3" "2\[ \t\]+\r\n3\[ \t\]+int main \[(\]+\[)\]+\r\n4\[ \t\]+\{" "list line 3 with listsize 3"
     }
 
     # Try small listsize > 2 that is an even number.
 
     if [ set_listsize 4 ] then {
        gdb_test "list 1" "1\[ \t\]+#include \"list0.h\"\r\n2\[ \t\]+" "list line 1 with listsize 4"
-       gdb_test "list 2" "1\[ \t\]+#include \"list0.h\".*3\[ \t\]+main \[)(\]+" "list line 2 with listsize 4"
+       gdb_test "list 2" "1\[ \t\]+#include \"list0.h\".*3\[ \t\]+int main \[)(\]+" "list line 2 with listsize 4"
        
        gdb_test "list 3" "1\[ \t\]+#include \"list0.h\".*4\[ \t\]+\{" "list line 3 with listsize 4"
        gdb_test "list 4" "2\[ \t\]+\r\n.*5\[ \t\]+int x;.*" "list line 4 with listsize 4"
@@ -141,9 +143,9 @@ proc test_listsize {} {
     # Try a size larger than the entire file.
 
     if [ set_listsize 100 ] then {
-       gdb_test "list 1" "1\[ \t\]+#include \"list0.h\".*\r\n42\[ \t\]+\}" "list line 1 with listsize 100"
+       gdb_test "list 1" "1\[ \t\]+#include \"list0.h\".*\r\n4\[23\]\[ \t\]+\}" "list line 1 with listsize 100"
        
-       gdb_test "list 10" "1\[ \t\]+#include \"list0.h\".*\r\n42\[ \t\]+\}" "list line 10 with listsize 100"
+       gdb_test "list 10" "1\[ \t\]+#include \"list0.h\".*\r\n4\[23\]\[ \t\]+\}" "list line 10 with listsize 100"
     }
 
     # Try listsize of 0 which suppresses printing.
@@ -168,12 +170,12 @@ proc test_list_include_file {} {
     setup_xfail "a29k-*-udi"
     setup_xfail_format "DWARF 1"
     setup_xfail_format "COFF"
-    gdb_test "list list0.h:1" "1\[ \t\]+/\[*\]+ An include file .*5\[ \t\]+foo \[(\]+x\[)\]+" "list line 1 in include file"
+    gdb_test "list list0.h:1" "1\[ \t\]+/\[*\]+ An include file .*4\[ \t\]+.*foo \(.*x.*\).*" "list line 1 in include file"
 
     setup_xfail "a29k-*-udi"
     setup_xfail_format "DWARF 1"
     setup_xfail_format "COFF"
-    gdb_test "list list0.h:100" "Line number 95 out of range; .*list0.h has 36 lines." "list message for lines past EOF"
+    gdb_test "list list0.h:100" "Line number 95 out of range; .*list0.h has 3\[67\] lines." "list message for lines past EOF"
 }
 
 #
@@ -203,7 +205,7 @@ proc test_list_filename_and_number {} {
     }
     send_gdb "list list1.c:1\n"
     gdb_expect {
-       -re "1\[ \t\]+void.*5\[ \t\]+printf \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
+       -re "1\[ \t\]+\#include.*4\[ \t\]+.*int oof\[ \t\]*\(.*\);\r\n.*$gdb_prompt $" {
            incr testcnt 
        }
        -re ".*$gdb_prompt $" { fail "list list1.c:1" ; gdb_suppress_tests }
@@ -211,7 +213,7 @@ proc test_list_filename_and_number {} {
     }
     send_gdb "list list1.c:12\n"
     gdb_expect {
-       -re "7\[ \t\]+long_line \[(\]+.*\[)\]+;.*14\[ \t\]+\}\r\n.*$gdb_prompt $" {
+       -re "12\[ \t\]+long_line \[(\]+.*\[)\]+;.*13\[ \t\]+\}\r\n.*$gdb_prompt $" {
            incr testcnt 
        }
        -re ".*$gdb_prompt $" { fail "list list1.c:12" ; gdb_suppress_tests }
@@ -237,7 +239,7 @@ proc test_list_function {} {
 
     # Ultrix gdb takes the second case below; it's also correct.
     # SunPRO cc is the third case.
-    gdb_test "list bar" "(1\[ \t\]+void.*7\[ \t\]*long_line ..;.*9\[ \t\]*|1\[ \t\]+void.*8\[ \t\]+\}|1\[ \t\]+void.*7\[ \t\]*long_line ..;)" "list function in source file 2"
+    gdb_test "list bar" "(4\[ \t\]+void.*\[ \t\]*long_line.*;.*bar.*9\[ \t\]*.*|1\[ \t\]+void.*8\[ \t\]+\}|1\[ \t\]+void.*7\[ \t\]*long_line ..;|7\[ \t\]+void.*14\[ \t\]+\})" "list function in source file 2"
 
     # Test "list function" for C include file
     # Ultrix gdb is the second case, still correct.
@@ -275,7 +277,7 @@ proc test_list_forward {} {
 
     send_gdb "list\n"
     gdb_expect {
-       -re "35\[ \t\]+foo \[(\]+.*\[)\]+;.*42\[ \t\]+\}\r\n$gdb_prompt $" { incr testcnt }
+       -re "35\[ \t\]+foo \\(.*\\);.*42\[ \t\]+.*\}\r\n$gdb_prompt $" { incr testcnt }
        -re ".*$gdb_prompt $" { fail "list 35-42" ; gdb_suppress_tests }
        timeout { fail "list 35-42 (timeout)" ; gdb_suppress_tests }
     }
@@ -291,7 +293,7 @@ proc test_list_backwards {} {
 
     send_gdb "list list0.c:33\n"
     gdb_expect {
-       -re "28\[ \t\]+foo \[(\]+.*\[)\]+;.*37\[ \t\]+\r\n$gdb_prompt $" { incr testcnt }
+       -re "28\[ \t\]+foo \\(.*\\);.*37\[ \t\]+\}\r\n$gdb_prompt $" { incr testcnt }
        -re ".*$gdb_prompt $" { fail "list list0.c:33" ; gdb_suppress_tests }
        timeout { fail "list list0.c:33 (timeout)" ; gdb_suppress_tests }
     }
@@ -328,17 +330,17 @@ proc test_list_backwards {} {
 proc test_list_range {} {
     global gdb_prompt
 
-    gdb_test "list list0.c:2,list0.c:5" "2\[ \t\]+\r\n3\[ \t\]+main \[)(\]+.*5\[ \t\]+int x;" "list range; filename:line1,filename:line2"
+    gdb_test "list list0.c:2,list0.c:5" "2\[ \t\]+\r\n3\[ \t\]+int main \[)(\]+.*5\[ \t\]+int x;" "list range; filename:line1,filename:line2"
 
-    gdb_test "list 2,5" "2\[ \t\]+\r\n3\[ \t\]+main \[)(\]+.*5\[ \t\]+int x;" "list range; line1,line2"
+    gdb_test "list 2,5" "2\[ \t\]+\r\n3\[ \t\]+int main \[)(\]+.*5\[ \t\]+int x;" "list range; line1,line2"
 
 #    gdb_test     "list -1,6"  "Line number 0 out of range; .*list0.c has 39 lines." "list range; lower bound negative"
 
 #    gdb_test     "list -100,-40"      "Line number -60 out of range; .*list0.c has 39 lines." "list range; both bounds negative"
 
-    gdb_test "list 30,43" "30\[ \t\]+foo \[(\]+.*\[)\]+;.*42\[ \t\]+\}" "list range; upper bound past EOF"
+    gdb_test "list 30,45" "30\[ \t\]+foo \(.*\);.*43\[ \t\]+\}" "list range; upper bound past EOF"
 
-    gdb_test "list 43,100" "Line number 43 out of range; .*list0.c has 42 lines." "list range; both bounds past EOF"
+    gdb_test "list 45,100" "Line number 45 out of range; .*list0.c has 43 lines." "list range; both bounds past EOF"
 
     gdb_test "list list0.c:2,list1.c:17" "Specified start and end are in different files." "list range, must be same files"
 }
@@ -375,7 +377,7 @@ proc test_list_filename_and_function {} {
     setup_xfail "rs6000-*-aix*"
     send_gdb "list list0.c:unused\n"
     gdb_expect {
-       -re "36\[ \t\]+\}.*42\[ \t\]+\}\r\n$gdb_prompt $" {
+       -re "40\[ \t\]+unused.*43\[ \t\]+\}\r\n$gdb_prompt $" {
            incr testcnt
        }
        -re "37.*42\[ \t\]+\}\r\n$gdb_prompt $" {
@@ -417,13 +419,13 @@ proc test_list_filename_and_function {} {
     # a29k-amd-udi is the third case.
     send_gdb "list list1.c:bar\n"
     gdb_expect {
-       -re "1\[ \t\]+void.*8\[ \t\]+\}\r\n$gdb_prompt $" {
+       -re "4\[ \t\]+void.*13\[ \t\]+\}\r\n$gdb_prompt $" {
            incr testcnt
        }
-       -re "1\[ \t\]+void.*7\[ \t\]*long_line ..;\r\n$gdb_prompt $" {
+       -re "4\[ \t\]+void.*12\[ \t\]*long_line ..;\r\n$gdb_prompt $" {
            incr testcnt
        }
-       -re "1\[ \t\]+void.*9\[ \t\]*\r\n$gdb_prompt $" {
+       -re "4\[ \t\]+void.*11\[ \t\]*\r\n$gdb_prompt $" {
            incr testcnt
        }
        -re ".*$gdb_prompt $" { fail "list list1.c:bar" }
@@ -437,10 +439,10 @@ proc test_list_filename_and_function {} {
     setup_xfail "rs6000-*-aix*"
     send_gdb "list list1.c:unused\n"
     gdb_expect {
-       -re "7\[ \t\]+long_line \[(\]\[)\];.*14\[ \t\]+\}\r\n.*$gdb_prompt $" {
+       -re "12\[ \t\]+long_line \[(\]\[)\];.*13\[ \t\]+\}\r\n.*$gdb_prompt $" {
            incr testcnt
        }
-       -re "9.*14\[ \t\]+\}\r\n.*$gdb_prompt $" {
+       -re "14.*19\[ \t\]+\}\r\n.*$gdb_prompt $" {
            incr testcnt
        }
        -re ".*$gdb_prompt $" { fail "list list1.c:unused" }
@@ -463,10 +465,10 @@ proc test_list_filename_and_function {} {
 
     gdb_test "list list0.c:foo" "Function \"foo\" not defined in .*list0.c" "list filename:function; wrong filename rejected"
 
-    gdb_test "list foobar.c:main" "No source file named foobar.c." "list filename:function; nonexistant file"
+    gdb_test "list foobar.c:main" "No source file named foobar.c.|Location not found" "list filename:function; nonexistant file"
 
     setup_xfail_format "DWARF 1"
-    gdb_test "list list0.h:foobar" "Function \"foobar\" not defined." "list filename:function; nonexistant function"
+    gdb_test "list list0.h:foobar" "Function \"foobar\" not defined.|Location not found" "list filename:function; nonexistant function"
 
 }
 
@@ -478,11 +480,11 @@ proc test_forward_search {} {
        # lines 20-23.  This depends on whether the line number of a function
        # is considered to be the openbrace or the first statement--either one
        # is acceptable.
-       gdb_test "list long_line" "20\[ \t\]+long_line .*"
+       gdb_test "list long_line" "24\[ \t\]+long_line .*"
 
        gdb_test "search 4321" " not found"
 
-       gdb_test "search 6789" "24\[ \t\]+oof .6789.;"
+       gdb_test "search 6789" "28\[ \t\]+oof .6789.;"
 
        # Test that GDB won't crash if the line being searched is extremely long.
 
@@ -519,3 +521,5 @@ if [ set_listsize 10 ] then {
     test_list_filename_and_function
     test_forward_search
 }
+
+remote_exec build "rm -f list0.h"
index a5561a7..b50fdd4 100644 (file)
@@ -1,6 +1,6 @@
 #include "list0.h"
 
-main ()
+int main ()
 {
     int x;
 #ifdef usestubs
@@ -33,6 +33,7 @@ main ()
     foo (x++);
     foo (x++);
     foo (x++);
+    return 0;
 }
 
 static void
index 51632b9..6094104 100644 (file)
@@ -1,6 +1,11 @@
-void
-bar (x)
-int x;
+#include <stdio.h>
+
+#ifdef PROTOTYPES
+void long_line (); int oof (int);
+void bar (int x)
+#else
+void bar (x) int x;
+#endif
 {
     printf ("%d\n", x);
 
@@ -12,11 +17,10 @@ unused ()
 {
     /* Not used for anything */
 }
-
-
-/* This routine has a very long line that will break searching in older
-   versions of GDB.  */
-
+/* This routine has a very long line that will break searching in older versions of GDB.  */
+#ifdef PROTOTYPES
+void
+#endif
 long_line ()
 {
   oof (67);
@@ -25,9 +29,11 @@ long_line ()
 
   oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*  5 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 10 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 15 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 20 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 25 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 30 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 35 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 40 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 45 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 50 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 55 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 60 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /* 65 */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (12); /*    */      oof (12);  oof (12);  oof (12);  oof (12);  oof (12);  oof (1234); /* 70 */
 }
-
-oof (n)
-     int n;
+#ifdef PROTOTYPES
+int oof (int n)
+#else
+oof (n) int n;
+#endif
 {
   return n + 1;
 }
index 0458e61..9d410c6 100644 (file)
@@ -44,7 +44,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
     }
 
-
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
 
 gdb_exit
 gdb_start
@@ -102,7 +104,7 @@ gdb_expect {
 
 send_gdb "print x && y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y" }
@@ -113,7 +115,7 @@ gdb_expect {
 
 send_gdb "print x || y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y" }
@@ -122,7 +124,7 @@ gdb_expect {
 
 send_gdb "print !x\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x>y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y" }
@@ -133,7 +135,7 @@ gdb_test "set variable y=1" "" "set variable y=1"
 
 send_gdb "print x && y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y" }
@@ -144,7 +146,7 @@ gdb_expect {
 
 send_gdb "print x || y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y" }
@@ -155,7 +157,7 @@ gdb_test "set variable x=1" "" "set variable x=1"
 
 send_gdb "print x && y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y" }
@@ -166,7 +168,7 @@ gdb_expect {
 
 send_gdb "print x || y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y" }
@@ -175,7 +177,7 @@ gdb_expect {
 
 send_gdb "print !x\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x>y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y" }
@@ -186,7 +188,7 @@ gdb_test "set variable y=0" "" "set variable y=0"
 
 send_gdb "print x && y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y" }
@@ -197,7 +199,7 @@ gdb_expect {
 
 send_gdb "print x || y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y" }
@@ -216,7 +218,7 @@ gdb_test "set variable z=0" "" "set variable z=0"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (000)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (000) " }
@@ -225,7 +227,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x || y || z (000)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (000)" }
@@ -234,7 +236,7 @@ gdb_expect {
 
 send_gdb "print !!x\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of !!x (0)"
       }
     -re ".*$gdb_prompt $" { fail "print value of !!x (0)" }
@@ -246,7 +248,7 @@ gdb_test "set variable y=1" "" "set variable y=1"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (010)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (010) " }
@@ -255,7 +257,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (010)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (010)" }
@@ -267,7 +269,7 @@ gdb_test "set variable z=1" "" "set variable z=1"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (011)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (011) " }
@@ -276,7 +278,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (011)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (011)" }
@@ -288,7 +290,7 @@ gdb_test "set variable x=1" "" "set variable x=1"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x &&  y && z (111)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (111) " }
@@ -297,7 +299,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (111)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (111)" }
@@ -306,7 +308,7 @@ gdb_expect {
 
 send_gdb "print !!x\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of !!x (1)"
       }
     -re ".*$gdb_prompt $" { fail "print value of !!x (1)" }
@@ -318,7 +320,7 @@ gdb_test "set variable z=0" "" "set variable z=0"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (110)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (110) " }
@@ -327,7 +329,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (110)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (110)" }
@@ -341,7 +343,7 @@ gdb_test "set variable y=0" "" "set variable y=0"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (100)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (100) " }
@@ -350,7 +352,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (100)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (100)" }
@@ -364,7 +366,7 @@ gdb_test "set variable z=1" "" "set variable z=1"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (101)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (101) " }
@@ -373,7 +375,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (101)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (101)" }
@@ -385,7 +387,7 @@ gdb_test "set variable x=0" "" "set variable x=0"
 
 send_gdb "print x && y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x &&  y && z (001)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x && y && z (001) " }
@@ -394,7 +396,7 @@ gdb_expect {
 
 send_gdb "print x || y || z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y || z (001)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x || y || z (001)" }
@@ -409,7 +411,7 @@ gdb_expect {
 
 send_gdb "print !x && y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of !x && y  (00)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  !x && y (00)" }
@@ -422,7 +424,7 @@ gdb_test "set variable x=1" "" "set variable x=1"
 
 send_gdb "print !x && y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of !x && y  (10)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  !x && y (10)" }
@@ -436,7 +438,7 @@ gdb_test "set variable y=1" "" "set variable y=1"
 
 send_gdb "print !x || y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of !x || y  (11)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  !x || y (11)" }
@@ -449,7 +451,7 @@ gdb_test "set variable x=0" "" "set variable x=0"
 
 send_gdb "print !x || y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of !x || y  (01)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  !x || y (01)" }
@@ -463,7 +465,7 @@ gdb_test "set variable z=0" "" "set variable z=0"
 
 send_gdb "print x || y && z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y && z  (110)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  x || y && z (110)" }
@@ -476,7 +478,7 @@ gdb_test "set variable y=0" "" "set variable y=0"
 
 send_gdb "print x || y && z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x || y && z (100)"
       }
     -re ".*$gdb_prompt $" { fail "print value of  x || y && z (100)" }
@@ -489,12 +491,12 @@ gdb_test "set variable x=0" "" "set variable x=0"
 
 send_gdb "print x || !y && z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         
          gdb_test "set variable x=1" "" "set variable x=1"
          send_gdb "print x || !y && z\n"
          gdb_expect {
-             -re ".*1.*$gdb_prompt $" {
+             -re ".*$true.*$gdb_prompt $" {
                   pass "print value of x || !y && z "
              }
              -re ".*$gdb_prompt $" { fail "print value of  x || !y && z" }
@@ -517,7 +519,7 @@ gdb_test "set variable z=3" "" "set variable z=3"
 
 send_gdb "print x > y || w == z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x > y || w == z"
       }
     -re ".*$gdb_prompt $" { fail "print value of  x > y || w == z" }
@@ -533,7 +535,7 @@ gdb_test "set variable z=3" "" "set variable z=3"
 
 send_gdb "print x >= y && w != z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x >= y || w != z"
       }
     -re ".*$gdb_prompt $" { fail "print value of  x >= y || w != z" }
@@ -550,7 +552,7 @@ gdb_test "set variable z=3" "" "set variable z=3"
 
 send_gdb "print ! x > y || w + z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x > y || w != z"
       }
     -re ".*$gdb_prompt $" { fail "print value of  x > y || w != z" }
index 096528d..a76e279 100644 (file)
@@ -7,8 +7,12 @@
  * cc +e +DA2.0 -g -o long_long long_long.c
  */
 
+#ifdef PROTOTYPES
+long long callee(long long i)
+#else
 long long callee( i )
 long long i;
+#endif
 {
    register long long result;
 
@@ -32,6 +36,8 @@ int known_types()
    /* Stop here and look!
     */
    hex = bin - dec | oct;
+
+   return 0;
 }
 
 int main() {
index aca59c2..52e6ff5 100644 (file)
@@ -35,20 +35,14 @@ if [get_compiler_info ${binfile}] {
     return -1
 }
 
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-       ### FIXME +e only works with HP's compiler
-       set additional_flags "additional_flags=+e -w"
-    } else {
-       # don't know what the compiler is, hope it supports long long!
-       set additional_flags "additional_flags=-w"
-    }
+if {$hp_cc_compiler} {
+    set flag "+e"
 } else {
-    set additional_flags "additional_flags=-w"
+    set flag ""
 }
 
-if  { [gdb_compile "${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+if  { [gdb_compile "${srcfile}" "${binfile}" executable [concat debug "additional_flags=$flag -w"]] != "" } {
+     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
 # use this to debug:
@@ -64,35 +58,40 @@ if { ![runto known_types] } then {
    return 
 }
 
-gdb_test "n 4"   ".*34.*" "get to known place"
+gdb_test "n 4"   ".*38.*" "get to known place"
 
 # Check the hack for long long prints.
 #
-gdb_test "p/x hex" ".*0x0.*" "default print hex"
-gdb_test "p/x dec" ".*0xab54a98ceb1f0ad2.*" "default print dec"
-gdb_test "p/x bin" ".*0x123456789abcdef.*" "default print bin"
-gdb_test "p/x oct" ".*0xa72ee53977053977.*" "default print oct"
-
-gdb_test "p/x hex" ".*0x0.*" "hex print"
-gdb_test "p/u dec" ".*12345678901234567890.*" "decimal print"
-gdb_test "p/t bin" ".*100100011010001010110011110001001101010111100110111101111.*" "binary print"
+gdb_test "p/x hex" ".*0x0*0.*" "hex print p/x"
+gdb_test "p/x dec" ".*0xab54a98ceb1f0ad2.*" "decimal print p/x"
+# see if 'p/<code>' is handled same as 'p /<code>'
+#
+gdb_test "p /x dec" ".*0xab54a98ceb1f0ad2.*" "default print dec"
+gdb_test "p /x bin" ".*0x0*123456789abcdef.*" "default print bin"
+gdb_test "p /x oct" ".*0xa72ee53977053977.*" "default print oct"
+gdb_test "p hex" ".*= 0*x*0*0.*" "default print hex"
+
+gdb_test "p/u dec" ".*12345678901234567890.*" "decimal print p/u"
+gdb_test "p/t bin" ".*0*100100011010001010110011110001001101010111100110111101111.*" "binary print"
 gdb_test "p/o oct" ".*01234567123456701234567.*" "octal print"
+gdb_test "p /d bin" ".*81985529216486895.*" "print +ve long long"
+gdb_test "p/d dec" ".*-6101065172474983726.*" "decimal print p/d"
 
 # Try all the combinations to bump up coverage.
 #
 gdb_test "p/d oct" ".*12046818088235383159.*" ""
-gdb_test "p/u oct" ".*0xa72ee53977053977.*" ""
+gdb_test "p/u oct" ".*12046818088235383159.*" ""
 gdb_test "p/o oct" ".*.*" ""
 gdb_test "p/t oct" ".*1010011100101110111001010011100101110111000001010011100101110111.*" ""
-gdb_test "p/a oct" ".*That operation is not available.*" ""
-gdb_test "p/c oct" ".*0xa72ee53977053977.*" ""
+gdb_test "p/a oct" ".*0x.*77053977.*" ""
+gdb_test "p/c oct" ".*'w'.*" ""
 gdb_test "p/f oct" ".*-5.9822653797615723e-120.*" ""
 
 gdb_test "p/d *(int *)&oct" ".*-1490098887.*" ""
 gdb_test "p/u *(int *)&oct" ".*2804868409.*" ""
 gdb_test "p/o *(int *)&oct" ".*024713562471.*" ""
 gdb_test "p/t *(int *)&oct" ".*10100111001011101110010100111001.*" ""
-gdb_test "p/a *(int *)&oct" ".*0xa72ee539.*" ""
+gdb_test "p/a *(int *)&oct" ".*0xf*a72ee539.*" ""
 gdb_test "p/c *(int *)&oct" ".*57 '9'.*" ""
 gdb_test "p/f *(int *)&oct" ".*-2.42716126e-15.*" ""
 
@@ -100,9 +99,9 @@ gdb_test "p/d *(short *)&oct" ".*-22738.*" ""
 gdb_test "p/u *(short *)&oct" ".*42798.*" ""
 gdb_test "p/o *(short *)&oct" ".*0123456.*" ""
 gdb_test "p/t *(short *)&oct" ".*1010011100101110.*" ""
-gdb_test "p/a *(short *)&oct" ".*0xffffa72e.*" ""
+gdb_test "p/a *(short *)&oct" ".*0xf*ffffa72e.*" ""
 gdb_test "p/c *(short *)&oct" ".* 46 '.'.*" ""
-gdb_test "p/a **short *)&oct" ".*0xffffa72e <.*" ""
+gdb_test "p/a *(short *)&oct" ".*0xf*ffffa72e.*" ""
 gdb_test "p/f *(short *)&oct" ".*-22738.*" ""
 
 gdb_test "x/x &oct" ".*0xa72ee539.*" ""
@@ -110,8 +109,8 @@ gdb_test "x/d &oct" ".*.-1490098887*" ""
 gdb_test "x/u &oct" ".*2804868409.*" ""
 gdb_test "x/o &oct" ".*024713562471.*" ""
 gdb_test "x/t &oct" ".*10100111001011101110010100111001.*" ""
-gdb_test "x/a &oct" ".*0xa72ee539 <.*" ""
-gdb_test "x/c &oct" ".*-89 'M-''.*" ""
+gdb_test "x/a &oct" ".*0xa72ee539.*" ""
+gdb_test "x/c &oct" ".*-89 '\\\\247'.*" ""
 gdb_test "x/f &oct" ".*-5.9822653797615723e-120.*" ""
 
 gdb_test "x/2x &oct" ".*.*" ""
index d2d1884..b659d82 100644 (file)
@@ -1,15 +1,25 @@
 /* Tests regarding examination of prologues.  */
 
+#ifdef PROTOTYPES
+int
+inner (int z)
+#else
 int
 inner (z)
      int z;
+#endif
 {
   return 2 * z;
 }
 
+#ifdef PROTOTYPES
+int
+middle (int x)
+#else
 int
 middle (x)
      int x;
+#endif
 {
   if (x == 0)
     return inner (5);
@@ -17,15 +27,27 @@ middle (x)
     return inner (6);
 }
 
+#ifdef PROTOTYPES
+int
+top (int y)
+#else
 int
 top (y)
      int y;
+#endif
 {
   return middle (y + 1);
 }
 
+#ifdef PROTOTYPES
+int
+main (int argc, char **argv)
+#else
 int
 main (argc, argv)
+     int argc;
+     char **argv;
+#endif
 {
 #ifdef usestubs
   set_debug_traps();
index 2b94de6..ea2461e 100644 (file)
@@ -55,7 +55,7 @@ gdb_load ${binfile}
 if [runto middle] then {
     # PR 3016
     if {$gcc_compiled} then { 
-       setup_xfail "mips*-sgi-irix4*" "mips64*-*-elf"
+       setup_xfail "hppa*-*-*" "mips*-sgi-irix4*" "mips64*-*-elf"
     }
     gdb_test "backtrace" "#0.*middle.*#1.*top.*#2.*main.*"
 }
index d42e5ab..9778423 100644 (file)
@@ -44,6 +44,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
 
 gdb_exit
 gdb_start
@@ -90,6 +93,9 @@ gdb_expect {
     -re ".\[0-9\]* = $hex \"\".*$gdb_prompt $" {
         pass "print value of &cbig.c\[0\]"
       }
+    -re ".\[0-9\]* = $hex \"*\".*$gdb_prompt $" {
+        pass "print value of &cbig.c\[0\]"
+      }
     -re ".*$gdb_prompt $" { fail "print value of &cbig.c\[0\]" }
     timeout           { fail "(timeout) print value of &cbig.c\[0\]" }
   }
@@ -158,7 +164,7 @@ gdb_expect {
 
 send_gdb "print !ibig.i\[100\]\n"
 gdb_expect {
-    -re ".\[0-9\]* = 0.*$gdb_prompt $" {
+    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
         pass "print value of !ibig.i\[100\]"
       }
     -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
@@ -167,7 +173,7 @@ gdb_expect {
 
 send_gdb "print !sbig.s\[90\]\n"
 gdb_expect {
-    -re ".\[0-9\]* = 0.*$gdb_prompt $" {
+    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
         pass "print value of !sbig.s\[90\]"
       }
     -re ".*$gdb_prompt $" { fail "print value of !sbig.s\[90\]" }
@@ -177,7 +183,7 @@ gdb_expect {
 
 send_gdb "print !fbig.f\[100\]\n"
 gdb_expect {
-    -re ".\[0-9\]* = 0.*$gdb_prompt $" {
+    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
         pass "print value of !ibig.i\[100\]"
       }
     -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
@@ -186,7 +192,7 @@ gdb_expect {
 
 send_gdb "print !dbig.d\[202\]\n"
 gdb_expect {
-    -re ".\[0-9\]* = 0.*$gdb_prompt $" {
+    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
         pass "print value of !ibig.i\[100\]"
       }
     -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
@@ -224,7 +230,7 @@ gdb_expect {
 
 send_gdb "print !(sbig.s\[90\] * 2)\n"
 gdb_expect {
-    -re ".\[0-9\]* = 0.*$gdb_prompt $" {
+    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
         pass "print value of !(sbig.s\[90\] * 2)"
       }
     -re ".*$gdb_prompt $" { fail "print value of !(sbig.s\[90\] * 2)" }
@@ -252,6 +258,18 @@ gdb_expect {
   }
 
 
+if [istarget "hppa2.0w*-*-*"] then {
+send_gdb "print sizeof(lbig)\n"
+gdb_expect {
+    -re ".\[0-9\]* = 7200.*$gdb_prompt $" {
+        pass "print value of sizeof(lbig)"
+      }
+    -re ".*$gdb_prompt $" { fail "print value of sizeof(lbig)" }
+    timeout           { fail "(timeout) print value of sizeof(lbig)" }
+  }
+}
+
+if ![istarget "hppa2.0w*-*-*"] then {
 send_gdb "print sizeof(lbig)\n"
 gdb_expect {
     -re ".\[0-9\]* = 3600.*$gdb_prompt $" {
@@ -260,6 +278,7 @@ gdb_expect {
     -re ".*$gdb_prompt $" { fail "print value of sizeof(lbig)" }
     timeout           { fail "(timeout) print value of sizeof(lbig)" }
   }
+}
 
 send_gdb "print ibig.i\[100\] << 2\n"
 gdb_expect {
index 4aad099..3e0a4ce 100644 (file)
@@ -1,3 +1,4 @@
+#include <stdlib.h>
 /* Test that things still (sort of) work when compiled without -g.  */
 
 int dataglobal = 3;                    /* Should go in global data */
@@ -5,31 +6,51 @@ static int datalocal = 4;             /* Should go in local data */
 int bssglobal;                         /* Should go in global bss */
 static int bsslocal;                   /* Should go in local bss */
 
+#ifdef PROTOTYPES
+int
+inner (int x)
+#else
 int
 inner (x)
      int x;
+#endif
 {
   return x + dataglobal + datalocal + bssglobal + bsslocal;
 }
 
+#ifdef PROTOTYPES
+static short
+middle (int x)
+#else
 static short
 middle (x)
      int x;
+#endif
 {
   return 2 * inner (x);
 }
 
+#ifdef PROTOTYPES
+short
+top (int x)
+#else
 short
 top (x)
      int x;
+#endif
 {
   return 2 * middle (x);
 }
 
+#ifdef PROTOTYPES
+int
+main (int argc, char **argv)
+#else
 int 
 main (argc, argv)
      int argc;
      char **argv;
+#endif
 {
 #ifdef usestubs
   set_debug_traps();
@@ -38,14 +59,16 @@ main (argc, argv)
   return top (argc);
 }
 
-char *malloc ();
-
 int *x;
 
+#ifdef PROTOTYPES
+int array_index (char *arr, int i)
+#else
 int
 array_index (arr, i)
      char *arr;
      int i;
+#endif
 {
   /* The basic concept is just "return arr[i];".  But call malloc so that gdb
      will be able to call functions.  */
index e4f8a35..684476e 100644 (file)
@@ -72,28 +72,28 @@ if [runto inner] then {
     
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix5*" "mips-sgi-irix6*" }
     gdb_test "p top" \
-       "{(<(text variable|function), no debug info>|short \\(\\))} \[0-9a-fx]* <top>"
+       "\{(<(text variable|function), no debug info>|short \\(int\\)|short \\(\\))\} \[0-9a-fx]* <top(\\(int\\)|)>"
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix5*" "mips-sgi-irix6*" }
     gdb_test "whatis top" \
-       "(<(text variable|function), no debug info>|short \\(\\))"
+       "(<(text variable|function), no debug info>|short \\(int\\)|short \\(\\))"
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix6*" }
-    gdb_test "ptype top" "(short|int) \\((|<non-float parameter>|<non-float parameter>, <non-float parameter>)\\)"
+    gdb_test "ptype top" "(short|int) \\((|void|int|<non-float parameter>|<non-float parameter>, <non-float parameter>)\\)"
     
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix5*" }
     setup_xfail "mips-sgi-irix6*"
     gdb_test "p middle" \
-       "{(<(text variable|function), no debug info>|short \\(\\))} \[0-9a-fx]* <middle>"
+       "\{(<(text variable|function), no debug info>|short \\(int\\)|short \\(\\))\} \[0-9a-fx]* <middle(\\(int\\)|)>"
     if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix5*" }
     setup_xfail "mips-sgi-irix6*"
     gdb_test "whatis middle" \
-       "(<(text variable|function), no debug info>|short \\(\\))"
+       "(<(text variable|function), no debug info>|short \\(int\\)|short \\(\\))"
     setup_xfail "mips-sgi-irix6*"
-    gdb_test "ptype middle" "(short|int) \\((|<non-float parameter>|<non-float parameter>, <non-float parameter>)\\)"
+    gdb_test "ptype middle" "(short|int) \\((|void|int|<non-float parameter>|<non-float parameter>, <non-float parameter>)\\)"
     
     gdb_test "p dataglobal" "= 3"
     gdb_test "whatis dataglobal" \
-       "<(data variable|variable), no debug info>"
-    gdb_test "ptype dataglobal" "<(data variable|variable), no debug info>"
+       "<(data variable|variable), no debug info>|int"
+    gdb_test "ptype dataglobal" "<(data variable|variable), no debug info>|int"
     
     # The only symbol xcoff puts out for statics is for the TOC entry.
     # Possible, but hairy, for gdb to deal.  Right now it doesn't, it
@@ -115,8 +115,8 @@ if [runto inner] then {
     gdb_test "ptype datalocal" "<(data variable|variable), no debug info>"
     
     gdb_test "p bssglobal" "= 0"
-    gdb_test "whatis bssglobal" "<(data variable|variable), no debug info>"
-    gdb_test "ptype bssglobal" "<(data variable|variable), no debug info>"
+    gdb_test "whatis bssglobal" "<(data variable|variable), no debug info>|int"
+    gdb_test "ptype bssglobal" "<(data variable|variable), no debug info>|int"
     
     setup_xfail "rs6000*-*-aix*"
     setup_xfail "powerpc*-*-aix*"
@@ -145,12 +145,27 @@ if [runto inner] then {
     
     # This test is not as obscure as it might look.  `p getenv ("TERM")'
     # is a real-world example, at least on many systems.
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" "mips-sgi-irix6*" }
+    if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix6*" }
     if [target_info exists gdb,cannot_call_functions] {
        setup_xfail "*-*-*" 2416
        fail "p/c array_index(\"abcdef\",2)"
     } else {
-       gdb_test {p/c array_index("abcdef",2)} " = 99 'c'"
+       #
+       # On HP-UX, a support function (__d_plt_call) necessary to
+       # implement an inferior call is normally only available when
+       # the inferior was compiled with -g.  Thus, we expect this
+       # testpoint to fail on HP-UX.
+       if { [istarget "hppa*-hpux*"] } {
+           send_gdb "p/c array_index(\"abcdef\",2)\n"
+           gdb_expect {
+               -re ".*Suggest linking executable with -g.*$gdb_prompt $" { pass "p/c array_index(\"abcdef\",2)" }
+               -re ".*Cannot find __wdb_call_dummy in.*end.o.*" { pass "p/c array_index(\"abcdef\",2)" }
+               -re ".*99 'c'.*" { pass "p/c array_index(\"abcdef\",2)" }
+               timeout { fail "(timeout) p/c array_index" }
+           }
+       } else {
+           gdb_test {p/c array_index("abcdef",2)} " = 99 'c'"
+       }
     }
     
     # Now, try that we can give names of file-local symbols which happen
index 92e6459..a3bc26f 100644 (file)
@@ -106,7 +106,7 @@ gdb_test "whatis foop" \
 # Ensure that we know the form of the structure that foop points to.
 
 setup_xfail_on_opaque_pointer
-if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "hppa*-*-hpux*" }
+if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
 gdb_test "ptype foop" \
     "type = struct foo \{\[\r\n\]+    int a;\[\r\n\]+    int b;\[\r\n\]+\} \[*\]+" \
     "ptype on opaque struct pointer (statically)"
@@ -167,7 +167,7 @@ gdb_test "whatis foop" \
 # Ensure that we know the form of the thing foop points to.
 
 setup_xfail_on_opaque_pointer
-if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "hppa*-*-hpux*" }
+if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
 gdb_test "ptype foop" \
     "type = struct foo \{\[\r\n\]+    int a;\[\r\n\]+    int b;\[\r\n\]+\} \[*\]+" \
     "ptype on opaque struct pointer (dynamically) 1"
@@ -181,7 +181,7 @@ gdb_test "whatis afoo" \
 
 gdb_test "ptype afoo" \
     "type = struct foo \{\[\r\n\]+    int a;\[\r\n\]+    int b;\[\r\n\]+\}" \
-    "ptype on opaque struct instance (dynamically) 1"
+    "ptype on opaque struct instance (dynamically) xyz 1"
 
 
 # Ensure that we know the form of an explicit struct foo.
@@ -220,7 +220,29 @@ gdb_test "whatis foop" \
 # Ensure that we know the form of the thing foop points to.
 
 setup_xfail_on_opaque_pointer
-if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "hppa*-*-hpux*" }
+if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
+gdb_test "ptype foop" \
+    "type = struct foo \{\[\r\n\]+    int a;\[\r\n\]+    int b;\[\r\n\]+\} \[*\]+" \
+    "ptype on opaque struct pointer (dynamically) 2"
+
+gdb_test "whatis afoo" \
+    "type = struct foo" \
+    "whatis on opaque struct instance (dynamically) 1"
+
+
+# Ensure that we know the form of afoo, an instance of a struct foo.
+
+gdb_test "ptype afoo" \
+    "type = struct foo \{\r\n    int a;\r\n    int b;\r\n\}" \
+    "ptype on opaque struct instance (dynamically) 1"
+
+gdb_test "ptype afoo" \
+    "type = struct foo \{\[\r\n\]*.*int a;\[\r\n\]*.*int b;\[\r\n\]*}\[\r\n\]*" \
+    "ptype on opaque struct instance (dynamically) pqr 1"
+
+
+# Ensure that we know the form of an explicit struct foo.
+
 gdb_test "ptype foop" \
     "type = struct foo \{\[\r\n\]+    int a;\[\r\n\]+    int b;\[\r\n\]+\} \[*\]+" \
     "ptype on opaque struct pointer (dynamically) 2"
index c6e239e..5ec4a2a 100644 (file)
@@ -7,6 +7,9 @@
 
 struct foo *foop;
 extern struct foo *getfoo ();
+#ifdef PROTOTYPES
+extern void putfoo (struct foo *foop);
+#endif
 
 int main ()
 {
index 4a3c855..c34f7aa 100644 (file)
@@ -8,7 +8,7 @@ struct foo *getfoo ()
     return (&afoo);
 }
 
-#ifdef __STDC__
+#ifdef PROTOTYPES
 void putfoo (struct foo *foop)
 #else
 void putfoo (foop)
index 7a0e44f..6b9f135 100644 (file)
@@ -43,6 +43,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
     }
 
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
 
 gdb_exit
 gdb_start
@@ -153,7 +156,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer == v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 0.*$gdb_prompt $" {
+    -re ".*= $false.*$gdb_prompt $" {
         pass "pointer1==pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1==pointer2" }
@@ -162,7 +165,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer != v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 1.*$gdb_prompt $" {
+    -re ".*= $true.*$gdb_prompt $" {
         pass "pointer1!=pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1!=pointer2" }
@@ -172,7 +175,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer <= v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 1.*$gdb_prompt $" {
+    -re ".*= $true.*$gdb_prompt $" {
         pass "pointer1<=pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1<=pointer2" }
@@ -182,7 +185,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer >= v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 0.*$gdb_prompt $" {
+    -re ".*= $false.*$gdb_prompt $" {
         pass "pointer1>=pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1>=pointer2" }
@@ -192,7 +195,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer < v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 1.*$gdb_prompt $" {
+    -re ".*= $true.*$gdb_prompt $" {
         pass "pointer1<pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1<pointer2" }
@@ -201,7 +204,7 @@ gdb_expect {
 
 send_gdb "print v_int_pointer > v_int_pointer2\n"
 gdb_expect {
-    -re ".*= 0.*$gdb_prompt $" {
+    -re ".*= $false.*$gdb_prompt $" {
         pass "pointer1>pointer2"
       }
     -re ".*$gdb_prompt $" { fail "pointer1>pointer2" }
index 6f2238b..2708074 100644 (file)
@@ -1,7 +1,7 @@
 /* This table is used as a source for every ascii character.
    It is explicitly unsigned to avoid differences due to native characters
    being either signed or unsigned. */
-
+#include <stdlib.h>
 unsigned char ctable1[256] = {
   0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
   0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
@@ -64,7 +64,7 @@ int int2dim[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
 int int3dim[2][3][2] = {{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};
 int int4dim[1][2][3][2] = {{{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}}};
 
-char *teststring = "teststring contents";
+char *teststring = (char*)"teststring contents";
 
 /* Test printing of a struct containing character arrays. */
 
@@ -86,7 +86,7 @@ struct some_arrays *parrays = &arrays;
 
 /* -- */
 
-main ()
+int main ()
 {
 #ifdef usestubs
   set_debug_traps();
index 8013435..07d6afe 100644 (file)
@@ -6,6 +6,7 @@
 /*
  *     First the basic C types.
  */
+#include <stdlib.h>
 
 #if !defined (__STDC__) && !defined (_AIX)
 #define signed  /**/
@@ -213,21 +214,22 @@ enum cars {bmw, porsche} sportscar;
 
 typedef enum {FALSE, TRUE} boolean;
 boolean v_boolean;
-typedef enum bvals {false, true} boolean2;
+/*note: aCC has bool type predefined with 'false' and 'true'*/
+typedef enum bvals {my_false, my_true} boolean2;
 boolean2 v_boolean2;
 
 enum misordered {two = 2, one = 1, zero = 0, three = 3};
 
+/* Seems like we need a variable of this type to get the type to be put
+   in the executable, at least for AIX xlc.  */
+enum misordered v_misordered = three;
+
 /***********/
 
-main ()
+int main ()
 {
   /* Ensure that malloc is a pointer type; avoid use of "void" and any include files. */
-  extern char *malloc();
-
-  /* Seems like we need a variable of this type to get the type to be put
-     in the executable, at least for AIX xlc.  */
-  enum misordered v_misordered = three;
+/*  extern char *malloc();*/
 
   /* Some of the tests in ptype.exp require invoking malloc, so make
      sure it is linked in to this program.  */
@@ -309,5 +311,6 @@ main ()
   v_t_struct_p = 0;
 
   v_boolean = FALSE;
-  v_boolean2 = false;
+  v_boolean2 = my_false;
+  return 0;
 }
index 1ef6771..98d4586 100644 (file)
@@ -94,7 +94,7 @@ if [gdb_test "ptype v_t_struct_p->v_float_member"     "type = float"]<0 then {
 # IBM's xlc puts out bogus stabs--the stuff field is type 42,
 # which isn't defined.
 
-gdb_test "ptype struct link" "type = struct link \{.*\[\r\n\]    struct link \[*\]next;.*\[\r\n\]    struct link \[*(\]+linkfunc\[)(\]+(struct link \[*\], int\[)\]|);.*\[\r\n\]    struct t_struct stuff.1..2..3.;.*\[\r\n\]\}.*" "ptype linked list structure" 
+gdb_test "ptype struct link" "type = struct link \{\[\r\n\]+\[ \t\]+struct link \\*next;\[\r\n\]+\[ \t\]+struct link \\*\\(\\*linkfunc\\)\\((struct link \\*, int|void|)\\);\[\r\n\]+\[ \t\]+struct t_struct stuff.1..2..3.;\[\r\n\]+\}.*" "ptype linked list structure" 
 
 #
 # test ptype command with unions
@@ -103,7 +103,7 @@ gdb_test "ptype union t_union" "type = union t_union \{.*\[\r\n\]    (unsigned |
 
 # IBM's xlc puts out bogus stabs--the stuff field is type 42,
 # which isn't defined.
-gdb_test "ptype union tu_link" "type = union tu_link .*\[\r\n\]    struct link \[*\]next;.*\[\r\n\]    struct link \[(\*\]+linkfunc\[)(\]+(struct link \[*\], int\[)\]|);.*\[\r\n\]    struct t_struct stuff.1..2..3.;.*\[\r\n\]\}.*" "ptype linked list union" 
+gdb_test "ptype union tu_link" "type = union tu_link \{\[\r\n\]+\[ \t\]+struct link \\*next;\[\r\n\]+\[ \t\]+struct link \\*\\(\\*linkfunc\\)\\((struct link \\*, int|void|)\\);\[\r\n\]+\[ \t\]+struct t_struct stuff.1..2..3.;\[\r\n\]+\}.*" "ptype linked list union" 
 
 #
 # test ptype command with enums
@@ -117,7 +117,7 @@ gdb_test "ptype enum colors" "type = enum colors \{yellow, purple, pink\}.*" "pt
 #
 # test ptype command with enums as typedef
 #
-gdb_test "ptype boolean" "type = enum \{FALSE, TRUE\}.*" "ptype unnamed typedef'd enumeration" 
+gdb_test "ptype boolean" "type = enum (boolean |)\{FALSE, TRUE\}.*" "ptype unnamed typedef'd enumeration" 
 
 # And check that whatis shows the name, not "enum {...}".
 # This probably fails for all DWARF 1 cases, so assume so for now. -fnf
@@ -128,21 +128,23 @@ gdb_test "ptype boolean" "type = enum \{FALSE, TRUE\}.*" "ptype unnamed typedef'
 # GDB's behavior is correct; the type which the variable is defined
 # as (51) doesn't have a name.  Only 55 has a name.
 
-if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "i*86-*-sysv4*" }
+if {!$gcc_compiled && !$hp_aCC_compiler} {
+    setup_xfail "rs6000-*-*" "i*86-*-sysv4*" "hppa*-*-*" # CLLbs14773
+}
 setup_xfail_format "DWARF 1"
-gdb_test "whatis v_boolean" "type = boolean" \
+gdb_test "whatis v_boolean" "type = (enum |)boolean" \
   "whatis unnamed typedef'd enum (compiler bug in IBM's xlc)"
 
 # Same thing with struct and union.
-gdb_test "ptype t_struct3" "type = struct \{.*
+gdb_test "ptype t_struct3" "type = struct (t_struct3 |)\{.*
  *double v_double_member;.*
  *int v_int_member;.*\}" "printing typedef'd struct"
 
-gdb_test "ptype t_union3" "type = union \{.*
+gdb_test "ptype t_union3" "type = union (t_union3 |)\{.*
  *double v_double_member;.*
  *int v_int_member;.*\}" "printing typedef'd union"
 
-gdb_test "ptype enum bvals" "type = enum bvals \{false, true\}.*" "ptype named typedef'd enumf'd enum" 
+gdb_test "ptype enum bvals" "type = enum bvals \{my_false, my_true\}.*" "ptype named typedef'd enumf'd enum"
 
 #
 # test ptype command with out-of-order enum values
@@ -365,6 +367,7 @@ gdb_test "ptype v_int" "type = int.*" "ptype int"
 
 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "i*86-*-sysv4*" }
 setup_xfail_format "DWARF 1"
+if {$hp_aCC_compiler} {setup_xfail "hppa*-*-*"}
 gdb_test "ptype t_char_array" "type = (|unsigned )char \\\[0?\\\]"
 
 #
@@ -489,21 +492,34 @@ gdb_test "ptype t_char_array" "type = (|unsigned )char \\\[0?\\\]"
 #
 # test ptype command with nested structure and union
 #
-gdb_test "ptype struct outer_struct" "type = struct outer_struct \{.*\[\r\n\]    int outer_int;.*\[\r\n\]    struct inner_struct inner_struct_instance;.*\[\r\n\]    union inner_union inner_union_instance;.*\[\r\n\]    (long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype outer structure" 
+if {$hp_aCC_compiler} {
+    set outer "outer_struct::"
+    set struct ""
+    set union ""
+} else {
+    set outer ""
+    set struct "struct"
+    set union "union"
+}
+gdb_test "ptype struct outer_struct" "type = struct outer_struct \{.*\[\r\n\]+\
+.*int outer_int;.*\[\r\n\]+\
+.*(struct|) ${outer}inner_struct inner_struct_instance;.*\[\r\n\]+\
+.*(union|) ${outer}inner_union inner_union_instance;.*\[\r\n\]+\
+.*(long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype outer structure" 
 
-gdb_test "ptype struct inner_struct" "type = struct inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype inner structure" 
+gdb_test "ptype ${struct} ${outer}inner_struct" "type = struct ${outer}inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype inner structure" 
 
-gdb_test "ptype union inner_union" "type = union inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype inner union" 
+gdb_test "ptype ${union} ${outer}inner_union" "type = union ${outer}inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype inner union" 
 
-gdb_test "ptype nested_su" "type = struct outer_struct \{.*\[\r\n\]    int outer_int;.*\[\r\n\]    struct inner_struct inner_struct_instance;.*\[\r\n\]    union inner_union inner_union_instance;.*\[\r\n\]    (long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype nested structure" 
+gdb_test "ptype nested_su" "type = struct outer_struct \{.*\[\r\n\]    int outer_int;.*\[\r\n\]    (struct |)${outer}inner_struct inner_struct_instance;.*\[\r\n\]    (union |)${outer}inner_union inner_union_instance;.*\[\r\n\]    (long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype nested structure" 
 
 gdb_test "ptype nested_su.outer_int" "type = int.*" "ptype outer int" 
 
-gdb_test "ptype nested_su.inner_struct_instance" "type = struct inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype nested structure #2" 
+gdb_test "ptype nested_su.inner_struct_instance" "type = struct ${outer}inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype nested structure #2" 
 
 gdb_test "ptype nested_su.inner_struct_instance.inner_int" "type = int.*" "ptype inner int" 
 
-gdb_test "ptype nested_su.inner_union_instance" "type = union inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype nested union" 
+gdb_test "ptype nested_su.inner_union_instance" "type = union ${outer}inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype nested union" 
 
 # Test printing type of string constants and array constants, but
 # requires a running process.  These call malloc, and can take a long
index 1d6892d..7981778 100644 (file)
@@ -1,9 +1,14 @@
 /* Trivial code used to test watchpoints in recursive code and 
    auto-deletion of watchpoints as they go out of scope.  */
 
+#ifdef PROTOTYPES
+static int
+recurse (int a)
+#else
 static int 
 recurse (a)
      int a;
+#endif
 {
   int b = 0;
 
@@ -15,11 +20,12 @@ recurse (a)
   return b;
 }
 
-main()
+int main()
 {
 #ifdef usestubs
   set_debug_traps();
   breakpoint();
 #endif
   recurse (10);
+  return 0;
 }
index 6a0b38a..fd03a41 100644 (file)
@@ -42,6 +42,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
     }
 
+if [get_compiler_info ${binfile}] {
+    return -1;
+}
 
 gdb_exit
 gdb_start
@@ -108,7 +111,7 @@ gdb_expect {
 
 send_gdb "print x < y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y" }
@@ -117,7 +120,7 @@ gdb_expect {
 
 send_gdb "print x <= y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y" }
@@ -126,7 +129,7 @@ gdb_expect {
 
 send_gdb "print x > y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x>y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y" }
@@ -135,7 +138,7 @@ gdb_expect {
 
 send_gdb "print x >= y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x>=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=y" }
@@ -144,7 +147,7 @@ gdb_expect {
 
 send_gdb "print x == y\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x==y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x==y" }
@@ -153,7 +156,7 @@ gdb_expect {
 
 send_gdb "print x != y\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x!=y"
       }
     -re ".*$gdb_prompt $" { fail "print value of x!=y" }
@@ -172,7 +175,7 @@ gdb_test "set variable z=2" ""  "set variable z"
 
 send_gdb "print x < y < z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true.*\r\n$gdb_prompt $" {
         pass "print value of x<y<z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y<z" }
@@ -181,7 +184,7 @@ gdb_expect {
 
 send_gdb "print x <= y <= z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x<=y<=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y<=z" }
@@ -190,7 +193,7 @@ gdb_expect {
 
 send_gdb "print x > y > z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false.*\r\n$gdb_prompt $" {
         pass "print value of x>y>z"
       }
     -re 8".*$gdb_prompt $" { fail "print value of x>y>z" }
@@ -199,7 +202,7 @@ gdb_expect {
 
 send_gdb "print x >= y >= z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false.*\r\n$gdb_prompt $" {
         pass "print value of x>=y>=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=y>=z" }
@@ -213,7 +216,7 @@ gdb_test "set variable z=1" ""  "set variable z"
 
 send_gdb "print x == y == z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x==y==z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x==y==z" }
@@ -225,7 +228,7 @@ gdb_test "set variable z=0" ""  "set variable z"
 
 send_gdb "print x != y != z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false\r\n$gdb_prompt $" {
         pass "print value of x!=y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x!=y!=z" }
@@ -242,7 +245,7 @@ gdb_test "set variable z=2" ""  "set variable z"
 
 send_gdb "print x < y == z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x<y==z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y==z" }
@@ -252,7 +255,7 @@ gdb_expect {
 # 0  2  2
 send_gdb "print x < y != z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y!=z" }
@@ -267,7 +270,7 @@ gdb_test "set variable z=1" ""  "set variable z"
 # 2 3 1
 send_gdb "print x < y <= z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<y<=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y<=z" }
@@ -278,7 +281,7 @@ gdb_expect {
 # 2 3 1
 send_gdb "print x < y >= z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<y>=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y>=z" }
@@ -292,7 +295,7 @@ gdb_test "set variable z=0" "" " set variable z"
 # 2 3 0
 send_gdb "print x < y > z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x<y>z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<y>z" }
@@ -305,7 +308,7 @@ gdb_test "set variable x=1" "" " set variable x"
 # 1 3 0
 send_gdb "print x > y >= z\n"
 gdb_expect {
-    -re ".*1.*$gdb_prompt $" {
+    -re ".*$true.*$gdb_prompt $" {
         pass "print value of x>y>=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y>=z" }
@@ -318,7 +321,7 @@ gdb_test "set variable z=2" "" " set variable z"
 # 1 3 2
 send_gdb "print x > y == z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x>y==z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y==z" }
@@ -332,7 +335,7 @@ gdb_test "set variable z=0" "" " set variable z"
 # 2 3 0
 send_gdb "print x > y != z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x>y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y!=z" }
@@ -345,7 +348,7 @@ gdb_test "set variable x=4" "" "set x to 4"
 # 4 3 0
 send_gdb "print x > y <= z\n"
 gdb_expect {
-    -re ".*0.*$gdb_prompt $" {
+    -re ".*$false.*$gdb_prompt $" {
         pass "print value of x>y<=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>y<=z" }
@@ -355,7 +358,7 @@ gdb_expect {
 # 4 3 0
 send_gdb "print x >= y == z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false\r\n$gdb_prompt $" {
         pass "print value of x>=y==z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=y==z" }
@@ -368,7 +371,7 @@ gdb_test "set variable x=2" "" " set variable x"
 # 2 3 0
 send_gdb "print x >= y != z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false\r\n$gdb_prompt $" {
         pass "print value of x>=y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=y!=z" }
@@ -382,7 +385,7 @@ gdb_test "set variable z=4" "" " set variable z"
 # 0 3 4 
 send_gdb "print x >= y <= z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x>=y<=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=y<=z" }
@@ -392,7 +395,7 @@ gdb_expect {
 # 0 3 4
 send_gdb "print x <= y == z\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false\r\n$gdb_prompt $" {
         pass "print value of x<=y==z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y==z" }
@@ -404,7 +407,7 @@ gdb_test "set variable x=2" "" " set variable x"
 # 2 3 4
 send_gdb "print x <= y != z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x<=y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x<=y!=z" }
@@ -415,7 +418,7 @@ gdb_expect {
 # 2 3 4
 send_gdb "print x == y != z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x==y!=z"
       }
     -re ".*$gdb_prompt $" { fail "print value of x==y!=z" }
@@ -432,7 +435,7 @@ gdb_test "set variable z=0" "" " set variable z"
 # 2 3 0
 send_gdb "print x >= (y < z)\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x>=(y<z)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=(y<z)" }
@@ -443,7 +446,7 @@ gdb_expect {
 # 2 3 0
 send_gdb "print x >= (y != z)\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of x>=(y!=z)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x>=(y*!=z)" }
@@ -453,7 +456,7 @@ gdb_expect {
 # 2 3 0
 send_gdb "print x == (y == z)\n"
 gdb_expect {
-    -re ".*0\r\n$gdb_prompt $" {
+    -re ".*$false\r\n$gdb_prompt $" {
         pass "print value of x==(y==z)"
       }
     -re ".*$gdb_prompt $" { fail "print value of x==(y==z)" }
@@ -467,7 +470,7 @@ gdb_test "set variable z=4" "" " set variable z"
 # 1 3 4
 send_gdb "print (x == y) < z\n"
 gdb_expect {
-    -re ".*1\r\n$gdb_prompt $" {
+    -re ".*$true\r\n$gdb_prompt $" {
         pass "print value of (x==y)<z"
       }
     -re ".*$gdb_prompt $" { fail "print value of (x==y)<z" }
index a65d648..2469430 100644 (file)
@@ -248,7 +248,7 @@ driver (void)
 
 /* generated code ends here */
 
-main ()
+int main ()
 {
   register int local;
 #ifdef usestubs
index e19d1a0..d11a4b5 100644 (file)
@@ -1,7 +1,7 @@
 #include <stdio.h>
 /*  Test "return" command.  */
 
-func1 ()
+void func1 ()
 {
   printf("in func1\n");
 }
@@ -21,7 +21,7 @@ func3 ()
 int tmp2;
 double tmp3;
 
-main ()
+int main ()
 {
 #ifdef usestubs
   set_debug_traps();
@@ -32,4 +32,5 @@ main ()
   tmp2 = func2 ();
   tmp3 = func3 ();
   printf("exiting\n");
+  return 0;
 }
index 40ec720..25b8a4a 100644 (file)
@@ -34,11 +34,20 @@ char *arg;
 
 #else /* ! vxworks */
 #  include <stdio.h>
+#  include <stdlib.h>
 #endif /* ! vxworks */
 
+#ifdef PROTOTYPES
+int factorial (int);
+
+int
+main (int argc, char **argv, char **envp)
+#else
+int
 main (argc, argv, envp)
 int argc;
 char *argv[], **envp;
+#endif
 {
 #ifdef usestubs
     set_debug_traps();
@@ -57,11 +66,17 @@ char *argv[], **envp;
     return 0;
 }
 
-int factorial (value)
-int value;
+#ifdef PROTOTYPES
+int factorial (int value)
+#else
+int factorial (value) int value;
+#endif
 {
+    int  local_var;
+
     if (value > 1) {
        value *= factorial (value - 1);
     }
+    local_var = value;
     return (value);
 }
index 6a92ca7..708bc42 100644 (file)
@@ -59,6 +59,7 @@ proc test_at_main {} {
     global srcdir
     global subdir
     global gcc_compiled
+    global hp_cc_compiler
 
     # skip past init.  There may be a call to __main at the start of
     # main, so the first next may only get us to the init0 call.
@@ -111,6 +112,8 @@ proc test_at_main {} {
     # Print scope1.c::filelocal, which is 2
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
+    #DTS 11747CLLbs
+    if {$hp_cc_compiler} then { setup_xfail "hppa2.0w-*-*"}
     if [gdb_test "print 'scope1.c'::filelocal" "\\\$$decimal = 2" "print 'scope1.c'::filelocal"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::filelocal"] { 
       gdb_suppress_tests ; 
     }
@@ -119,6 +122,8 @@ proc test_at_main {} {
     # Print scope1.c::filelocal_bss, which is 102
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
+    #DTS 11747CLLbs
+    if {$hp_cc_compiler} then { setup_xfail "hppa2.0w-*-*"}
     if [gdb_test "print 'scope1.c'::filelocal_bss" "\\\$$decimal = 102" "print 'scope1.c'::filelocal_bss"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::filelocal_bss"] { 
       gdb_suppress_tests ; 
     }
@@ -127,6 +132,8 @@ proc test_at_main {} {
     # Print scope1.c::filelocal_ro, which is 202
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
+    #DTS 11747CLLbs
+    if {$hp_cc_compiler} then { setup_xfail "hppa2.0w-*-*"}
     if [gdb_test "print 'scope1.c'::filelocal_ro" "\\\$$decimal = 202" "print 'scope1.c'::filelocal_ro"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::filelocal_ro"] { 
       gdb_suppress_tests ; 
     }
@@ -134,7 +141,6 @@ proc test_at_main {} {
 
     # Print scope1.c::foo::funclocal, which is 3
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     if [gdb_test "print foo::funclocal" "\\\$$decimal = 3" "print foo::funclocal" ] { 
       gdb_suppress_tests ; 
     }
@@ -238,12 +244,10 @@ proc test_at_foo {} {
 
     gdb_test "print funclocal" "\\\$$decimal = 3" "print funclocal at foo"
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print foo::funclocal" "\\\$$decimal = 3" \
        "print foo::funclocal at foo"
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print 'scope1.c'::foo::funclocal" "\\\$$decimal = 3" "print 'scope1.c'::foo::funclocal at foo"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::foo::funclocal"
 
 
@@ -252,12 +256,10 @@ proc test_at_foo {} {
     gdb_test "print funclocal_bss" "\\\$$decimal = 103" \
        "print funclocal_bss at foo"
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print foo::funclocal_bss" "\\\$$decimal = 103" \
        "print foo::funclocal_bss at foo"
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print 'scope1.c'::foo::funclocal_bss" "\\\$$decimal = 103" "print 'scope1.c'::foo::funclocal_bss at foo"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::foo::funclocal_bss"
 
 
@@ -266,23 +268,19 @@ proc test_at_foo {} {
     gdb_test "print funclocal_ro" "\\\$$decimal = 203" \
        "print funclocal_ro at foo"
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print foo::funclocal_ro" "\\\$$decimal = 203" \
        "print foo::funclocal_ro at foo"
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print 'scope1.c'::foo::funclocal_ro" "\\\$$decimal = 203" "print 'scope1.c'::foo::funclocal_ro at foo"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::foo::funclocal_ro"
 
 
     # Print scope1.c::bar::funclocal, which is 4
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print bar::funclocal" "\\\$$decimal = 4" \
        "print bar::funclocal at foo"
 
     if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test "print 'scope1.c'::bar::funclocal" "\\\$$decimal = 4" "print 'scope1.c'::bar::funclocal at foo"  "No symbol \"scope1.c\" in current context.*" "print '$srcdir/$subdir/scope1.c'::bar::funclocal"
     gdb_stop_suppressing_tests;
 
@@ -365,7 +363,6 @@ proc test_at_bar {} {
 
     # Print scope1.c::foo::funclocal, which is 3
 
-    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     if [gdb_test "print foo::funclocal" "\\\$$decimal = 3" "print foo::funclocal at bar" ] { 
       gdb_suppress_tests ; 
     }
index 3a1b89e..ad994fc 100644 (file)
@@ -5,7 +5,19 @@ static int filelocal_bss;      /* In BSS section */
 #endif
 static const int filelocal_ro = 201;   /* In Read-Only Data section */
 
-main ()
+extern void init1();
+extern void foo();
+
+int autovars (int bcd, int abc);
+int localscopes (int x);
+int useit (int val);
+void init0();
+void marker1 ();
+void marker2 ();
+void marker3 ();
+void marker4 ();
+
+int main ()
 {
 #ifdef usestubs
   set_debug_traps();
@@ -19,14 +31,14 @@ main ()
 
 /* On some systems, such as AIX, unreferenced variables are deleted
    from the executable.  */
-usestatics ()
+void usestatics ()
 {
   useit (filelocal);
   useit (filelocal_bss);
   useit (filelocal_ro);
 }
 
-init0 ()
+void init0 ()
 {
   filelocal_bss = 101;
   init1 ();
@@ -34,9 +46,14 @@ init0 ()
 
 /* This is to derail optimizer in localscopes.
    Return 1 + 2 + . . . + N.  */
+#ifdef PROTOTYPES
+int
+sum_upto (int n)
+#else
 int
 sum_upto (n)
      int n;
+#endif
 {
   int i;
   int retval = 0;
@@ -46,8 +63,13 @@ sum_upto (n)
   return retval;
 }
 
+#ifdef PROTOTYPES
+int
+useit (int val)
+#else
 int
 useit (val)
+#endif
 {
     static int usedval;
 
@@ -55,10 +77,15 @@ useit (val)
     return val + sum_upto (0);
 }
 
+#ifdef PROTOTYPES
+int
+autovars (int bcd, int abc)
+#else
 int
 autovars (bcd, abc)
      int bcd;
      int abc;
+#endif
 {
     int  i0 =  useit (0),  i1 =  useit (1),  i2 =  useit (2);
     int  i3 =  useit (3),  i4 =  useit (4),  i5 =  useit (5);
@@ -133,9 +160,14 @@ autovars (bcd, abc)
       + i91 + i92 + i93 + i94 + i95 + i96 + i97 + i98 + i99 + abc + bcd;
 }
 
+#ifdef PROTOTYPES
+int
+localscopes (int x)
+#else
 int
 localscopes (x)
      int x;
+#endif
 {
     int localval;
     int retval;
@@ -170,7 +202,7 @@ localscopes (x)
     return retval;
 }
 
-marker1 () {}
-marker2 () {}
-marker3 () {}
-marker4 () {}
+void marker1 () {}
+void marker2 () {}
+void marker3 () {}
+void marker4 () {}
index cccad6f..8c32522 100644 (file)
@@ -5,8 +5,11 @@ static int filelocal_bss;      /* In BSS section */
 #endif
 static const int filelocal_ro = 202;   /* In Read-Only Data section */
 
-foo ()
+void foo ()
 {
+
+  void bar ();
+  
   static int funclocal = 3;    /* In Data section */
   static int funclocal_bss;    /* In BSS section */
   static const int funclocal_ro = 203; /* RO Data */
@@ -16,28 +19,34 @@ foo ()
   bar ();
 }
 
-bar ()
+void bar ()
 {
   static int funclocal = 4;    /* In data section */
   static int funclocal_bss;    /* In BSS section */
   funclocal_bss = 104;
 }
 
-init1 ()
+void init1 ()
 {
   filelocal_bss = 102;
 }
 
 /* On some systems, such as AIX, unreferenced variables are deleted
    from the executable.  */
-usestatics1 ()
+void usestatics1 ()
 {
+  void useit1 (int val);
+  
   useit1 (filelocal);
   useit1 (filelocal_bss);
   useit1 (filelocal_ro);
 }
 
-useit1 (val)
+#ifdef PROTOTYPES
+void useit1 (int val)
+#else
+void useit1 (val) int val;
+#endif
 {
     static int usedval;
 
index 27bde04..d07def5 100644 (file)
@@ -59,10 +59,15 @@ if ![runto_main] then { fail "section command tests suppressed" }
 # not clear that there'll be a section named "$CODE$" in such
 # programs.)
 #
+
+set address1 ""
+set address2 ""
 send_gdb "info files\n"
 gdb_expect {
-  -re ".*(0x\[0-9a-fA-F\]*) - (0x\[0-9a-fA-F\]*) is .CODE..*$gdb_prompt $"\
-          {pass "info files"}
+  -re ".*(0x\[0-9a-fA-F\]*) - (0x\[0-9a-fA-F\]*) is .(CODE|text).*$gdb_prompt $"\
+          {pass "info files"
+          set address1 $expect_out(1,string)
+          set address2 $expect_out(2,string)}
   -re "$gdb_prompt $"\
           {fail "info files"}
   timeout {fail "(timeout) info files"}
@@ -71,13 +76,24 @@ gdb_expect {
 # Reset the section to that same starting address, which should be
 # harmless (i.e., we just want to exercise the section command).
 #
-send_gdb "section \$CODE\$ $expect_out(1,string)\n"
-gdb_expect {
-  -re ".*$expect_out(1,string) \- $expect_out(2,string) is .CODE..*$gdb_prompt $"\
-          {pass "set section command"}
-  -re "$gdb_prompt $"\
-          {fail "set section command"}
-  timeout {fail "(timeout) set section command"}
+if [istarget "hppa2.0w-*-*"] then {
+  send_gdb "section \.text $address1\n"
+  gdb_expect {
+    -re ".*$address1 \- $address2 is .text.*$gdb_prompt $"\
+            {pass "set section command"}
+    -re "$gdb_prompt $"\
+            {fail "set section command"}
+    timeout {fail "(timeout) set section command"}
+  }
+} else {
+  send_gdb "section \$CODE\$ $address1\n"
+  gdb_expect {
+    -re ".*$address1 \- $address2 is .CODE..*$gdb_prompt $"\
+            {pass "set section command"}
+    -re "$gdb_prompt $"\
+            {fail "set section command"}
+    timeout {fail "(timeout) set section command"}
+  }
 }
 
 # Verify that GDB responds gracefully to a non-existent section name.
index ed4e7a9..fbaba0f 100644 (file)
@@ -3,10 +3,15 @@
 
 #include <stdio.h>
 
+#ifdef PROTOTYPES
+int
+main(int argc, char **argv)
+#else
 int 
 main(argc, argv)
      int argc;
      char **argv;
+#endif
 {
   int i = 1;
 #ifdef usestubs
index 7162155..969de0d 100644 (file)
@@ -1,7 +1,13 @@
+#include <stdlib.h>
+
+#ifdef PROTOTYPES
+int main (int argc, char **argv, char **envp)
+#else
 main (argc, argv, envp)
      int argc;
      char **argv;
      char **envp;
+#endif
 {
     extern void dummy();
 #ifdef usestubs
@@ -9,6 +15,7 @@ main (argc, argv, envp)
     breakpoint();
 #endif
     dummy();
+    return 0;
 }
 
 /* We put main() right up front so its line number doesn't keep changing.  */
index 96d3eb4..e7d31dc 100644 (file)
@@ -329,8 +329,12 @@ gdb_test "print *(v_signed_short_pointer+1)" ".\[0-9\]*.*=.*-456"
 gdb_test "set v_unsigned_short_pointer=v_unsigned_short_array" ""
 gdb_test "set variable *(v_unsigned_short_pointer)=123" ""
 gdb_test "set variable *(v_unsigned_short_pointer+1)=-456" ""
+# DTS 10060CLLbs - bad type info from cc
+if {$hp_cc_compiler} {setup_xfail hppa*-*-*11*}
 gdb_test "print v_unsigned_short_array" ".\[0-9\]* =.*\{123,.*65080\}" \
     "set variable unsigned short pointer"
+# DTS 10060CLLbs - bad type info from cc
+if {$hp_cc_compiler} {setup_xfail hppa*-*-*11*}
 gdb_test "print *(v_unsigned_short_pointer+1)" ".\[0-9\]* = 65080"
 #
 # test "set variable" for type "int *"
@@ -385,6 +389,8 @@ v_long_member = 3,.*v_float_member = 4,.*v_double_member = 5.*\}" \
 # the type of the structure to be specified, as in
 # v_struct1 = (struct t_struct) {32, 33, 34, 35, 36, 37}
 # GDB should do the same if it wants to provide this feature.
+# However, for HP's aCC this is OK, so we skip the tests for aCC
+if {! $hp_aCC_compiler} {
 if [target_info exists gdb,cannot_call_functions] {
     setup_xfail "*-*-*" 2416
     fail "set variable v_struct1 = {32, 33, 34, 35, 36, 37}"
@@ -398,6 +404,7 @@ gdb_test "print v_struct1" \
 .*v_int_member = 2,.*\
 v_long_member = 3,.*v_float_member = 4,.*v_double_member = 5.*\}" \
   "set print structure #2"
+}
 
 # Test printing of enumeration bitfields.
 # GNU C supports them, some other compilers don't.
index 414d742..4e1daac 100644 (file)
@@ -180,7 +180,7 @@ gdb_test "break shr2" \
     "Breakpoint.*file.*shr2.c, line.*" \
     "breakpoint function shr2"
 
-gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, shr2 \\(.*\\) at.*shr2\\.c:3.*3.*return 2.x;" \
+gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, shr2 \\(.*\\) at.*shr2\\.c:7.*7.*return 2.x;" \
 "run until breakpoint set at a function"
 
 
@@ -249,10 +249,10 @@ send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $"
 
 # PR's 16495, 18213
 # test that we can re-set breakpoints in shared libraries
-gdb_test "break shr1" "Breakpoint 1 at .*" "set bp in shared library"
+gdb_test "break shr1" "Breakpoint 1.*" "set bp in shared library"
 gdb_test "run" "Starting program:.*Breakpoint 1,.*" "run to bp in shared library"
-gdb_test "cont" "Program exited normally."
+gdb_test "cont" ".*Program exited normally..*"
 gdb_test "run" "Starting program:.*Breakpoint 1,.*" "re-run to bp in shared library (PR's 16495, 18213)"
-gdb_test "cont" "Program exited normally."
+gdb_test "cont" ".*Program exited normally..*"
 
 return 0
index dda5091..7013db5 100644 (file)
@@ -3,8 +3,10 @@
 #include "ss.h"
 #include <stdio.h>
 
-extern int shr1();
-extern int shr2();
+extern int structarg(struct s);
+extern int pstructarg(struct s*);
+extern int shr1(int);
+extern int shr2(int);
 extern float sg;
 
 int eglob;
@@ -16,13 +18,27 @@ struct {
 
 int g;
 
+#ifdef PROTOTYPES
+int local_structarg(struct s x)
+#else
 int local_structarg(x)
 struct s x;
+#endif
 {
   return x.b;
 }
 
-main()
+#ifdef PROTOTYPES
+int mainshr1(int g)
+#else
+int mainshr1(g)
+int g;
+#endif
+{
+  return 2*g;
+}
+
+int main()
 {
   struct s y;
   g = 1;
@@ -36,12 +52,5 @@ main()
   g = local_structarg(y);
   g = structarg(y);
   g = pstructarg(&y);
-
-  return (0);
-}
-
-int mainshr1(g)
-int g;
-{
-  return 2*g;
+  return 0;
 }
index 0efaff5..a0257e4 100644 (file)
@@ -7,8 +7,12 @@ float sg = 5.5;
 int sgi = 2;
 static int sgs = 7;
 
+#ifdef PROTOTYPES
+int shr1(int x)
+#else
 int shr1(x)
 int x;
+#endif
 {
   f mumble;
   int l;
@@ -25,20 +29,32 @@ int x;
   return 2*x;
 }
 
+#ifdef PROTOTYPES
+static int shr1_local(int x)
+#else
 static int shr1_local(x)
 int x;
+#endif
 {
   return 2*x;
 }
 
+#ifdef PROTOTYPES
+int structarg(struct s x)
+#else
 int structarg(x)
 struct s x;
+#endif
 {
   return x.a;
 }
 
+#ifdef PROTOTYPES
+int pstructarg(struct s *x)
+#else
 int pstructarg(x)
 struct s *x;
+#endif
 {
   return x->a;
 }
index 94d5df9..de34986 100644 (file)
@@ -1,11 +1,17 @@
-int shr2(x)
+#ifdef PROTOTYPES
+int shr2(int x)
+#else
+int shr2(x) int x;
+#endif
 {
   return 2*x;
 }
 
-int shr2_local(x)
+#ifdef PROTOTYPES
+int shr2_local(int x)
+#else
+int shr2_local(x) int x;
+#endif
 {
   return 2*x;
 }
-
-
index 1ab08e7..30d06f3 100644 (file)
@@ -1,4 +1,5 @@
 #include <signal.h>
+#include <unistd.h>
 
 #ifdef __sh__
 #define signal(a,b)    /* Signals not supported on this target - make them go away */
 /* Signal handlers, we set breakpoints in them to make sure that the
    signals really get delivered.  */
 
+#ifdef PROTOTYPES
+void
+handle_ABRT (int sig)
+#else
 void
 handle_ABRT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_HUP (int sig)
+#else
 void
 handle_HUP (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_QUIT (int sig)
+#else
 void
 handle_QUIT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_ILL (int sig)
+#else
 void
 handle_ILL (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_EMT (int sig)
+#else
 void
 handle_EMT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_FPE (int sig)
+#else
 void
 handle_FPE (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_BUS (int sig)
+#else
 void
 handle_BUS (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_SEGV (int sig)
+#else
 void
 handle_SEGV (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_SYS (int sig)
+#else
 void
 handle_SYS (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_PIPE (int sig)
+#else
 void
 handle_PIPE (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_ALRM (int sig)
+#else
 void
 handle_ALRM (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_URG (int sig)
+#else
 void
 handle_URG (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_TSTP (int sig)
+#else
 void
 handle_TSTP (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_CONT (int sig)
+#else
 void
 handle_CONT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_CHLD (int sig)
+#else
 void
 handle_CHLD (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_TTIN (int sig)
+#else
 void
 handle_TTIN (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_TTOU (int sig)
+#else
 void
 handle_TTOU (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_IO (int sig)
+#else
 void
 handle_IO (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_XCPU (int sig)
+#else
 void
 handle_XCPU (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_XFSZ (int sig)
+#else
 void
 handle_XFSZ (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_VTALRM (int sig)
+#else
 void
 handle_VTALRM (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_PROF (int sig)
+#else
 void
 handle_PROF (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_WINCH (int sig)
+#else
 void
 handle_WINCH (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_LOST (int sig)
+#else
 void
 handle_LOST (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_USR1 (int sig)
+#else
 void
 handle_USR1 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_USR2 (int sig)
+#else
 void
 handle_USR2 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_PWR (int sig)
+#else
 void
 handle_PWR (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_POLL (int sig)
+#else
 void
 handle_POLL (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_WIND (int sig)
+#else
 void
 handle_WIND (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_PHONE (int sig)
+#else
 void
 handle_PHONE (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_WAITING (int sig)
+#else
 void
 handle_WAITING (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_LWP (int sig)
+#else
 void
 handle_LWP (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_DANGER (int sig)
+#else
 void
 handle_DANGER (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_GRANT (int sig)
+#else
 void
 handle_GRANT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_RETRACT (int sig)
+#else
 void
 handle_RETRACT (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_MSG (int sig)
+#else
 void
 handle_MSG (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_SOUND (int sig)
+#else
 void
 handle_SOUND (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_SAK (int sig)
+#else
 void
 handle_SAK (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_PRIO (int sig)
+#else
 void
 handle_PRIO (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_33 (int sig)
+#else
 void
 handle_33 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_34 (int sig)
+#else
 void
 handle_34 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_35 (int sig)
+#else
 void
 handle_35 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_36 (int sig)
+#else
 void
 handle_36 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_37 (int sig)
+#else
 void
 handle_37 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_38 (int sig)
+#else
 void
 handle_38 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_39 (int sig)
+#else
 void
 handle_39 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_40 (int sig)
+#else
 void
 handle_40 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_41 (int sig)
+#else
 void
 handle_41 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_42 (int sig)
+#else
 void
 handle_42 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_43 (int sig)
+#else
 void
 handle_43 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_44 (int sig)
+#else
 void
 handle_44 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_45 (int sig)
+#else
 void
 handle_45 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_46 (int sig)
+#else
 void
 handle_46 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_47 (int sig)
+#else
 void
 handle_47 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_48 (int sig)
+#else
 void
 handle_48 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_49 (int sig)
+#else
 void
 handle_49 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_50 (int sig)
+#else
 void
 handle_50 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_51 (int sig)
+#else
 void
 handle_51 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_52 (int sig)
+#else
 void
 handle_52 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_53 (int sig)
+#else
 void
 handle_53 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_54 (int sig)
+#else
 void
 handle_54 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_55 (int sig)
+#else
 void
 handle_55 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_56 (int sig)
+#else
 void
 handle_56 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_57 (int sig)
+#else
 void
 handle_57 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_58 (int sig)
+#else
 void
 handle_58 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_59 (int sig)
+#else
 void
 handle_59 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_60 (int sig)
+#else
 void
 handle_60 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_61 (int sig)
+#else
 void
 handle_61 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_62 (int sig)
+#else
 void
 handle_62 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_63 (int sig)
+#else
 void
 handle_63 (sig)
      int sig;
+#endif
 {
 }
 
+#ifdef PROTOTYPES
+void
+handle_TERM (int sig)
+#else
 void
 handle_TERM (sig)
      int sig;
+#endif
 {
 }
 \f
@@ -438,6 +794,7 @@ int
 gen_ABRT ()
 {
   kill (getpid (), SIGABRT);
+  return 0;
 }  
 
 int
@@ -448,6 +805,7 @@ gen_HUP ()
 #else
   handle_HUP (0);
 #endif
+return 0;
 }  
 
 int
@@ -458,6 +816,7 @@ gen_QUIT ()
 #else
   handle_QUIT (0);
 #endif
+return 0;
 }
 
 int
@@ -468,6 +827,7 @@ gen_ILL ()
 #else
   handle_ILL (0);
 #endif
+return 0;
 }
 
 int
@@ -478,6 +838,7 @@ gen_EMT ()
 #else
   handle_EMT (0);
 #endif
+return 0;
 }
 
 int x;
@@ -499,6 +860,7 @@ gen_FPE ()
 #else
   kill (getpid (), SIGFPE);
 #endif
+return 0;
 }
 
 int
@@ -509,6 +871,7 @@ gen_BUS ()
 #else
   handle_BUS (0);
 #endif
+return 0;
 }
 
 int
@@ -519,6 +882,7 @@ gen_SEGV ()
 #else
   handle_SEGV (0);
 #endif
+return 0;
 }
 
 int
@@ -529,6 +893,7 @@ gen_SYS ()
 #else
   handle_SYS (0);
 #endif
+return 0;
 }
 
 int
@@ -539,6 +904,7 @@ gen_PIPE ()
 #else
   handle_PIPE (0);
 #endif
+return 0;
 }
 
 int
@@ -549,6 +915,7 @@ gen_ALRM ()
 #else
   handle_ALRM (0);
 #endif
+return 0;
 }
 
 int
@@ -559,6 +926,7 @@ gen_URG ()
 #else
   handle_URG (0);
 #endif
+return 0;
 }
 
 int
@@ -569,6 +937,7 @@ gen_TSTP ()
 #else
   handle_TSTP (0);
 #endif
+return 0;
 }
 
 int
@@ -579,6 +948,7 @@ gen_CONT ()
 #else
   handle_CONT (0);
 #endif
+return 0;
 }
 
 int
@@ -589,6 +959,7 @@ gen_CHLD ()
 #else
   handle_CHLD (0);
 #endif
+return 0;
 }
 
 int
@@ -599,6 +970,7 @@ gen_TTIN ()
 #else
   handle_TTIN (0);
 #endif
+return 0;
 }
 
 int
@@ -609,6 +981,7 @@ gen_TTOU ()
 #else
   handle_TTOU (0);
 #endif
+return 0;
 }
 
 int
@@ -619,6 +992,7 @@ gen_IO ()
 #else
   handle_IO (0);
 #endif
+return 0;
 }
 
 int
@@ -629,6 +1003,7 @@ gen_XCPU ()
 #else
   handle_XCPU (0);
 #endif
+return 0;
 }
 
 int
@@ -639,6 +1014,7 @@ gen_XFSZ ()
 #else
   handle_XFSZ (0);
 #endif
+return 0;
 }
 
 int
@@ -649,6 +1025,7 @@ gen_VTALRM ()
 #else
   handle_VTALRM (0);
 #endif
+return 0;
 }
 
 int
@@ -659,6 +1036,7 @@ gen_PROF ()
 #else
   handle_PROF (0);
 #endif
+return 0;
 }
 
 int
@@ -669,6 +1047,7 @@ gen_WINCH ()
 #else
   handle_WINCH (0);
 #endif
+return 0;
 }
 
 int
@@ -679,6 +1058,7 @@ gen_LOST ()
 #else
   handle_LOST (0);
 #endif
+return 0;
 }
 
 int
@@ -689,6 +1069,7 @@ gen_USR1 ()
 #else
   handle_USR1 (0);
 #endif
+return 0;
 }
 
 int
@@ -699,6 +1080,7 @@ gen_USR2 ()
 #else
   handle_USR2 (0);
 #endif
+return 0;
 }  
 
 int
@@ -709,6 +1091,7 @@ gen_PWR ()
 #else
   handle_PWR (0);
 #endif
+return 0;
 }
 
 int
@@ -719,6 +1102,7 @@ gen_POLL ()
 #else
   handle_POLL (0);
 #endif
+return 0;
 }
 
 int
@@ -729,6 +1113,7 @@ gen_WIND ()
 #else
   handle_WIND (0);
 #endif
+return 0;
 }
 
 int
@@ -739,6 +1124,7 @@ gen_PHONE ()
 #else
   handle_PHONE (0);
 #endif
+return 0;
 }
 
 int
@@ -749,6 +1135,7 @@ gen_WAITING ()
 #else
   handle_WAITING (0);
 #endif
+return 0;
 }
 
 int
@@ -759,6 +1146,7 @@ gen_LWP ()
 #else
   handle_LWP (0);
 #endif
+return 0;
 }
 
 int
@@ -769,6 +1157,7 @@ gen_DANGER ()
 #else
   handle_DANGER (0);
 #endif
+return 0;
 }
 
 int
@@ -779,6 +1168,7 @@ gen_GRANT ()
 #else
   handle_GRANT (0);
 #endif
+return 0;
 }
 
 int
@@ -789,6 +1179,7 @@ gen_RETRACT ()
 #else
   handle_RETRACT (0);
 #endif
+return 0;
 }
 
 int
@@ -799,6 +1190,7 @@ gen_MSG ()
 #else
   handle_MSG (0);
 #endif
+return 0;
 }
 
 int
@@ -809,6 +1201,7 @@ gen_SOUND ()
 #else
   handle_SOUND (0);
 #endif
+return 0;
 }
 
 int
@@ -819,6 +1212,7 @@ gen_SAK ()
 #else
   handle_SAK (0);
 #endif
+return 0;
 }
 
 int
@@ -829,6 +1223,7 @@ gen_PRIO ()
 #else
   handle_PRIO (0);
 #endif
+return 0;
 }
 
 int
@@ -839,6 +1234,7 @@ gen_33 ()
 #else
   handle_33 (0);
 #endif
+return 0;
 }
 
 int
@@ -849,6 +1245,7 @@ gen_34 ()
 #else
   handle_34 (0);
 #endif
+return 0;
 }
 
 int
@@ -859,6 +1256,7 @@ gen_35 ()
 #else
   handle_35 (0);
 #endif
+return 0;
 }
 
 int
@@ -869,6 +1267,7 @@ gen_36 ()
 #else
   handle_36 (0);
 #endif
+return 0;
 }
 
 int
@@ -879,6 +1278,7 @@ gen_37 ()
 #else
   handle_37 (0);
 #endif
+return 0;
 }
 
 int
@@ -889,6 +1289,7 @@ gen_38 ()
 #else
   handle_38 (0);
 #endif
+return 0;
 }
 
 int
@@ -899,6 +1300,7 @@ gen_39 ()
 #else
   handle_39 (0);
 #endif
+return 0;
 }
 
 int
@@ -909,6 +1311,7 @@ gen_40 ()
 #else
   handle_40 (0);
 #endif
+return 0;
 }
 
 int
@@ -919,6 +1322,7 @@ gen_41 ()
 #else
   handle_41 (0);
 #endif
+return 0;
 }
 
 int
@@ -929,6 +1333,7 @@ gen_42 ()
 #else
   handle_42 (0);
 #endif
+return 0;
 }
 
 int
@@ -939,6 +1344,7 @@ gen_43 ()
 #else
   handle_43 (0);
 #endif
+return 0;
 }
 
 int
@@ -949,6 +1355,7 @@ gen_44 ()
 #else
   handle_44 (0);
 #endif
+return 0;
 }
 
 int
@@ -959,6 +1366,7 @@ gen_45 ()
 #else
   handle_45 (0);
 #endif
+return 0;
 }
 
 int
@@ -969,6 +1377,7 @@ gen_46 ()
 #else
   handle_46 (0);
 #endif
+return 0;
 }
 
 int
@@ -979,6 +1388,7 @@ gen_47 ()
 #else
   handle_47 (0);
 #endif
+return 0;
 }
 
 int
@@ -989,6 +1399,7 @@ gen_48 ()
 #else
   handle_48 (0);
 #endif
+return 0;
 }
 
 int
@@ -999,6 +1410,7 @@ gen_49 ()
 #else
   handle_49 (0);
 #endif
+return 0;
 }
 
 int
@@ -1009,6 +1421,7 @@ gen_50 ()
 #else
   handle_50 (0);
 #endif
+return 0;
 }
 
 int
@@ -1019,6 +1432,7 @@ gen_51 ()
 #else
   handle_51 (0);
 #endif
+return 0;
 }
 
 int
@@ -1029,6 +1443,7 @@ gen_52 ()
 #else
   handle_52 (0);
 #endif
+return 0;
 }
 
 int
@@ -1039,6 +1454,7 @@ gen_53 ()
 #else
   handle_53 (0);
 #endif
+return 0;
 }
 
 int
@@ -1049,6 +1465,7 @@ gen_54 ()
 #else
   handle_54 (0);
 #endif
+return 0;
 }
 
 int
@@ -1059,6 +1476,7 @@ gen_55 ()
 #else
   handle_55 (0);
 #endif
+return 0;
 }
 
 int
@@ -1069,6 +1487,7 @@ gen_56 ()
 #else
   handle_56 (0);
 #endif
+return 0;
 }
 
 int
@@ -1079,6 +1498,7 @@ gen_57 ()
 #else
   handle_57 (0);
 #endif
+return 0;
 }
 
 int
@@ -1089,6 +1509,7 @@ gen_58 ()
 #else
   handle_58 (0);
 #endif
+return 0;
 }
 
 int
@@ -1099,6 +1520,7 @@ gen_59 ()
 #else
   handle_59 (0);
 #endif
+return 0;
 }
 
 int
@@ -1109,6 +1531,7 @@ gen_60 ()
 #else
   handle_60 (0);
 #endif
+return 0;
 }
 
 int
@@ -1119,6 +1542,7 @@ gen_61 ()
 #else
   handle_61 (0);
 #endif
+return 0;
 }
 
 int
@@ -1129,6 +1553,7 @@ gen_62 ()
 #else
   handle_62 (0);
 #endif
+return 0;
 }
 
 int
@@ -1139,12 +1564,14 @@ gen_63 ()
 #else
   handle_63 (0);
 #endif
+return 0;
 }
 
 int
 gen_TERM ()
 {
   kill (getpid (), SIGTERM);
+return 0;
 }  
 \f
 int
index 280e6e7..f1ebcfc 100644 (file)
@@ -1,6 +1,7 @@
 /* Test GDB dealing with stuff like stepping into sigtramp.  */
 
 #include <signal.h>
+#include <unistd.h>
 
 #ifdef __sh__
 #define signal(a,b)    /* Signals not supported on this target - make them go away */
@@ -9,9 +10,14 @@
 
 static int count = 0;
 
+#ifdef PROTOTYPES
+static void
+handler (int sig)
+#else
 static void
 handler (sig)
      int sig;
+#endif
 {
   signal (sig, handler);
   ++count;
index 16528f7..6511b2e 100644 (file)
@@ -42,6 +42,12 @@ if [get_compiler_info ${binfile}] {
     return -1;
 }
 
+if {$hp_cc_compiler} {
+    set void 0
+} else {
+    set void void
+}
+
 proc signal_tests_1 {} {
     global gdb_prompt
     if [runto_main] then {
@@ -380,7 +386,7 @@ if [runto_main] then {
     # lose its cool, this is not a problem, it just has to note
     # that the breakpoint condition is false and keep going.
 
-    gdb_test "p func1 ()" "^p func1 \\(\\)\r\n.\[0-9\]* = void" \
+    gdb_test "p func1 ()" "^p func1 \\(\\)\r\n.\[0-9\]* = $void" \
        "p func1 () #1 in signals.exp"
 
     # Make sure the count got incremented.
index a8fa189..9310bca 100644 (file)
@@ -4,9 +4,13 @@
 
 #include <stdio.h>
 
-extern int solib_main (int);
+#if defined(__cplusplus) || defined(__STDCPP__)
+extern "C" int  solib_main (int  arg);
+#else
+int  solib_main (int  arg);
+#endif
 
-main ()
+int main ()
 {
   int  result;
 
@@ -15,4 +19,5 @@ main ()
 
   /* Call it again. */
   result = solib_main (result);
+  return 0;
 }
index a52aa1f..beb2a6a 100644 (file)
@@ -68,28 +68,23 @@ if {[gdb_compile "${srcdir}/${subdir}/${libfile}1.c" "${libfile}1.o" object [lis
 }
 
 if [istarget "hppa*-hp-hpux*"] then {
-    remote_exec build "ld -b ${libfile}1.o -o ${libfile}1.sl"
+    remote_exec build "ld -b ${libfile}1.o -o ${objdir}/${subdir}/${libfile}1.sl"
 } else {
     set additional_flags "additional_flags=-shared"
-    gdb_compile "${libfile}1.o" "${libfile}1.sl" executable [list debug $additional_flags]
+    gdb_compile "${libfile}1.o" "${objdir}/${subdir}/${libfile}1.sl" executable [list debug $additional_flags]
 }
 
 # Build the test case
 #remote_exec build "$CC -Aa -g ${srcfile} ${libfile}1.sl -o ${binfile}"
 
 
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-       set additional_flags "additional_flags=-Ae"
-    } else {
-       # don't know what the compiler is, hope for the best, maybe it's ANSI...
-       set additional_flags ""
-    }
+if {$hp_cc_compiler} {
+    set additional_flags "additional_flags=-Ae"
 } else {
     set additional_flags ""
 }
 
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile} ${libfile}1.sl" "${binfile}" executable [list debug $additional_flags]] != ""} {
+if {[gdb_compile "${srcdir}/${subdir}/${srcfile} ${objdir}/${subdir}/${libfile}1.sl" "${binfile}" executable [list debug $additional_flags]] != ""} {
     perror "Couldn't build ${binfile}"
     return -1
 }
@@ -110,7 +105,7 @@ if ![runto_main] then { fail "implicit solibs tests suppressed" }
 #
 send_gdb "next\n"
 gdb_expect {
-  -re "17\[ \t\]*result = solib_main .result.*$gdb_prompt $"\
+  -re "21\[ \t\]*result = solib_main .result.*$gdb_prompt $"\
           {pass "step over solib call"}
   -re "$gdb_prompt $"\
           {fail "step over solib call"}
@@ -121,7 +116,7 @@ gdb_expect {
 #
 send_gdb "step\n"
 gdb_expect {
-  -re "solib_main .arg=10000. at.*${libfile}1.c:8.*$gdb_prompt $"\
+  -re "solib_main .arg=10000. at.*${libfile}1.c:17.*$gdb_prompt $"\
           {pass "step into solib call"}
   -re "$gdb_prompt $"\
           {fail "step into solib call"}
@@ -132,7 +127,7 @@ gdb_expect {
 #
 send_gdb "next\n"
 gdb_expect {
-  -re "9\[ \t\]*\}.*$gdb_prompt $"\
+  -re "18\[ \t\]*\}.*$gdb_prompt $"\
           {pass "step in solib call"}
   -re "$gdb_prompt $"\
           {fail "step in solib call"}
@@ -148,7 +143,7 @@ gdb_expect {
        # we haven't left the callee yet, so do another next
        send_gdb "next\n"
        gdb_expect {
-           -re "main .. at.*so-impl-ld.c:18.*$gdb_prompt $"\
+           -re "main .. at.*so-impl-ld.c:22.*$gdb_prompt $"\
                {pass "step out of solib call"}
            -re "$gdb_prompt $"\
                {fail "step out of solib call"}
@@ -156,7 +151,7 @@ gdb_expect {
        }
     }
 
-    -re "main .. at.*so-impl-ld.c:18.*$gdb_prompt $"\
+    -re "main .. at.*so-impl-ld.c:22.*$gdb_prompt $"\
        {pass "step out of solib call"}
     -re "$gdb_prompt $"\
        {fail "step out of solib call"}
index dc29bad..f31800d 100644 (file)
@@ -3,21 +3,28 @@
    */
 
 #include <stdio.h>
+#ifdef PROTOTYPES
+extern "C" int solib_main (int);
 
+static int
+solib_wrapper (int (*function)(int))
+#else
 extern int solib_main (int);
 
 static int
 solib_wrapper (function)
   int (*function)(int);
+#endif
 {
   return (*function)(100);
 }
 
 
-main ()
+int main ()
 {
   int  result;
 
   /* This is an indirect call to solib_main. */
   result = solib_wrapper (solib_main);
+  return 0;
 }
index e37878e..6847289 100644 (file)
@@ -51,13 +51,8 @@ if [get_compiler_info ${binfile}] {
 #remote_exec build "$CC -g +z -c ${libfile}1.c -o ${libfile}1.o"
 
 
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-       set additional_flags "additional_flags=+z"
-    } else {
-       # don't know what the compiler is...
-       set additional_flags ""
-    }
+if {$hp_cc_compiler || $hp_aCC_compiler} {
+    set additional_flags "additional_flags=+z"
 } else {
     set additional_flags "additional_flags=-fpic"
 }
@@ -77,13 +72,8 @@ if [istarget "hppa*-hp-hpux*"] then {
 #remote_exec build "$CC -Aa -g ${srcfile} ${libfile}1.sl -o ${binfile}"
 
 
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-       set additional_flags "additional_flags=-Ae"
-    } else {
-       # don't know what the compiler is, hope for the best, maybe it's ANSI...
-       set additional_flags ""
-    }
+if {$hp_cc_compiler} {
+    set additional_flags "additional_flags=-Ae"
 } else {
     set additional_flags ""
 }
@@ -119,6 +109,8 @@ send_gdb "break solib_main\n"
 gdb_expect {
   -re "Cannot break on solib_main without a running program.*$gdb_prompt $"\
           {pass "break on indirect solib call before running"}
+  -re "Breakpoint.*deferred.*\\(\"solib_main\" was not found.*$gdb_prompt $"\
+         {pass "break on indirect solib call before running 2"}
   -re "$gdb_prompt $"\
           {fail "break on indirect solib call before running"}
   timeout {fail "(timeout) break on indirect solib call before running"}
index ff9d359..6fb9f5e 100644 (file)
@@ -7,12 +7,12 @@
 #include <stdio.h>
 #include <dl.h>
 
-main ()
+int main ()
 {
   shl_t  solib_handle;
   int  dummy;
   int  status;
-  int  (*solib_main) ();
+  int  (*solib_main) (int);
 
   /* Load a shlib, with immediate binding of all symbols.
 
@@ -56,4 +56,5 @@ main ()
 
   /* All done. */
   dummy = -1;
+  return 0;
 }
index f452194..5e25b68 100644 (file)
@@ -86,6 +86,31 @@ if [istarget "hppa*-*-hpux*"] {
     gdb_compile "${binfile}1.o" "${binfile}1.sl" executable [list debug $additional_flags]
     gdb_compile "${binfile}2.o" "${binfile}2.sl" executable [list debug $additional_flags]
 }
+
+# Build a version where the main program is in a shared library.  For
+# testing an indirect call made in a shared library.
+
+if {[gdb_compile "${srcdir}/${subdir}/${testfile}.c" "${binfile}_sl.o" object [list debug $additional_flags]] != ""} {
+    perror "Couldn't compile ${testfile}.c for ${binfile}_sl.o"
+    #return -1
+}
+
+if { [istarget "hppa*-*-hpux*"] } {
+    remote_exec build "ld -b ${binfile}_sl.o -o ${binfile}_sl.sl"
+} else {
+    set additional_flags "additional_flags=-shared"
+    gdb_compile "${binfile}_sl.o" "${binfile}_sl.sl" executable [list debug $additional_flags]
+}
+
+if { [istarget "hppa*-*-hpux*"] } {
+    set additional_flags "-Wl,-u,main"
+    if { [gdb_compile "${binfile}_sl.sl" "${binfile}_sl" executable [list debug $additional_flags]] != "" } {
+        gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+    }
+} else {
+    # FIXME: need to fill this part in for non-HP build
+}
+
 #cd ..
 
 # Start with a fresh gdb
@@ -316,4 +341,20 @@ gdb_expect {
 #
 
 gdb_exit
+
+#
+# Test stepping into an indirect call in a shared library.
+#
+
+gdb_start
+gdb_load ${binfile}_sl
+gdb_test "break main" ".*deferred. at .main..*" "break on main"
+gdb_test "run" ".*Breakpoint.*main.*solib.c.*" "hit breakpoint at main"
+gdb_test "break 45" "Breakpoint.*solib.c, line 45.*" "break on indirect call"
+gdb_test "continue" "Continuing.*solib.c:45.*" \
+       "continue to break on indirect call"
+gdb_test "step" "solib_main.*solib1.c:17.*return arg.arg.*" \
+       "step into indirect call from a shared library"
+gdb_exit
+
 return 0
index eecf024..2e51750 100644 (file)
@@ -2,8 +2,17 @@
    library, for use by the solib.exp testcase.  It simply returns
    the square of its integer argument.
    */
+#if defined(__cplusplus) || defined(__STDCPP__)
+extern "C" int
+solib_main (int arg)
+#else
+#ifdef PROTOTYPES
+int  solib_main (int arg)
+#else
 int  solib_main (arg)
   int  arg;
+#endif
+#endif
 {
   return arg*arg;
 }
index 2cd4513..8c69d8b 100644 (file)
@@ -2,8 +2,18 @@
    library, for use by the solib.exp testcase.  It simply returns
    the cube of its integer argument.
    */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef PROTOTYPES
+int  solib_main (int  arg)
+#else
 int  solib_main (arg)
   int  arg;
+#endif
 {
   return arg*arg*arg;
 }
+#ifdef __cplusplus
+}
+#endif
index 7130725..a1e1dc4 100644 (file)
@@ -1,9 +1,12 @@
+#include <stdlib.h>
+#include <string.h>
+
 /* Test various kinds of stepping.
 */
-int glob = 0;
+int myglob = 0;
 
 int callee() {
-    glob++;   
+    myglob++; return 0;
 }
 
 /* A structure which, we hope, will need to be passed using memcpy.  */
@@ -14,7 +17,7 @@ struct rhomboidal {
 void
 large_struct_by_value (struct rhomboidal r)
 {
-  glob += r.rather_large[42]; /* step-test.exp: arrive here 1 */
+  myglob += r.rather_large[42]; /* step-test.exp: arrive here 1 */
 }
 
 int main () {
index 85744d7..6eeda0b 100644 (file)
@@ -66,7 +66,7 @@ gdb_test "next" ".*${decimal}.*callee.*INTO.*" "next over"
 
 # Step into call
 #
-gdb_test "step" ".*${decimal}.*glob.*"   "step into"
+gdb_test "step" ".*${decimal}.*myglob.*"   "step into"
 
 # Step out of call
 #
@@ -74,7 +74,18 @@ gdb_test "step" ".*${decimal}.*glob.*"   "step into"
 # platforms, on which `finish' will return you to some kind of pop
 # instruction, which is attributed to the line containing the function
 # call?
-gdb_test "finish" ".*${decimal}.*a.*5.*= a.*3.*" "step out"
+
+# On PA64 we end up at a different instruction than PA32
+if { [istarget "hppa2.0w-hp-hpux*"] } {
+    send_gdb "finish\n"
+    gdb_expect {
+        -re ".*${decimal}.*a.*5.*= a.*3.*$gdb_prompt $" { pass "step out 1" }
+        -re ".*${decimal}.*callee.*INTO.*$gdb_prompt $" { pass "step out 2" }
+        timeout { fail "step out" }
+    }
+} else {
+    gdb_test "finish" ".*${decimal}.*a.*5.*= a.*3.*" "step out"
+}
 
 ### Testing nexti and stepi.
 ###
@@ -154,6 +165,16 @@ gdb_expect {
     puts "*** Matched success..."
     pass "stepi: finish call"
   }
+  -re ".*${decimal}.*callee.*STEPI.*$gdb_prompt $" {
+    # On PA64 we end up at a different instruction than PA32
+    if { [istarget "hppa2.0w-hp-hpux*"] } {
+        puts "*** Matched success..."
+        pass "stepi: finish call 2"
+    } else {
+       fail "stepi: finish call 2"
+        return
+    }
+  }
   -re "$gdb_prompt $" {
     # We got something else.  Fail.
     fail "stepi: finish call"
index 211a94c..26c1032 100644 (file)
@@ -43,6 +43,8 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
+gdb_exit
+gdb_start
 delete_breakpoints
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
index c50a2b3..09eb2dd 100644 (file)
@@ -1,3 +1,4 @@
+#include <stdio.h>
 int nothing ()
 
 {
@@ -6,7 +7,7 @@ int nothing ()
 }
 
 
-main ()
+int main ()
 
 {
     int y ;
@@ -16,4 +17,5 @@ main ()
 #endif    
     y = nothing () ;
     printf ("hello\n") ;
+    return 0;
 }
index 8d8c403..4c96b36 100644 (file)
@@ -60,4 +60,5 @@ if [runto_main] then {
 
     gdb_test "step" "nothing \\(\\) at.*"
 }
+remote_exec build "rm -f twice.c" 
 return 0
index 729d7df..6664253 100644 (file)
@@ -18,11 +18,12 @@ short s;
 unsigned short us;
 int a,b,c,d;
 int max_val;
+long long ll;
 float fa,fb,fc,fd;
 double da,db,dc,dd;
 double dmax_val;
 
-main() {
+int main() {
   c = -1;
   uc = 1;
   s = -2;
@@ -43,6 +44,8 @@ main() {
   dd = 2.0;
   dmax_val = find_max_double(3, 1.0, 4.0, 2.0);
   dmax_val = find_max_double(a, db, dc, dd);
+  
+  return 0;
 }
 
 /* Integer varargs, 1 declared arg */
index 72fd2f5..2fb8f3b 100644 (file)
@@ -48,23 +48,14 @@ if [get_compiler_info ${binfile}] {
     return -1
 }
 
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-       set additional_flags "additional_flags=-Ae"
-    } else {
-       # don't know what the compiler is, hope for the best, maybe it's ANSI...
-       set additional_flags ""
-    }
+if {$hp_cc_compiler} {
+    set additional_flags "additional_flags=-Ae"
 } else {
     set additional_flags ""
 }
 
 # build the first test case
-#if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-#     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
-#}
-
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug ${additional_flags}}] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
@@ -84,6 +75,18 @@ if ![runto_main] then {
     continue
 }
 
+if { $hp_aCC_compiler } {
+    # When compiled w/ aCC we need to disable overload resolution
+    # for command line calls.
+    # We need it for vararg calls since the aCC compiler gives us no
+    # information about the undeclared arguments, or even that there 
+    # _are_ undeclared arguments. As far as gdb is concerned it only
+    # knows about the declared arguments. So we need to force the call
+    # even though the overload resolution mechanism says that the types
+    # don't match. 
+    # - guo
+    gdb_test "set overload-resolution 0" ""
+}
 
 send_gdb "print find_max1(5,1,2,3,4,5)\n"
 gdb_expect {
index a2a2b59..7796ed5 100644 (file)
@@ -49,7 +49,13 @@ set testfile "constvars"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if [istarget "hppa*-*-*"] {
+    set lang "c++"
+} else {
+    set lang ""
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug $lang]] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
@@ -100,142 +106,142 @@ send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"
 # these tests are all expected to fail if GCC is the compiler. -sts
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vox" "type = volatile char"
+gdb_test "ptype vox" "type = volatile char.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype victuals" "type = volatile unsigned char"
+gdb_test "ptype victuals" "type = volatile unsigned char.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vixen" "type = volatile short"
+gdb_test "ptype vixen" "type = volatile short.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vitriol" "type = volatile unsigned short"
+gdb_test "ptype vitriol" "type = volatile unsigned short.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vellum" "type = volatile long"
+gdb_test "ptype vellum" "type = volatile long.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype valve" "type = volatile unsigned long"
+gdb_test "ptype valve" "type = volatile unsigned long.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vacuity" "type = volatile float"
+gdb_test "ptype vacuity" "type = volatile float.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vertigo" "type = volatile double"
+gdb_test "ptype vertigo" "type = volatile double.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vampire" "type = volatile char *"
+gdb_test "ptype vampire" "type = volatile char \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype viper" "type = volatile unsigned char *"
+gdb_test "ptype viper" "type = volatile unsigned char \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vigour" "type = volatile short *"
+gdb_test "ptype vigour" "type = volatile short \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vapour" "type = volatile unsigned short *"
+gdb_test "ptype vapour" "type = volatile unsigned short \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype ventricle" "type = volatile long *"
+gdb_test "ptype ventricle" "type = volatile long \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vigintillion" "type = volatile unsigned long *"
+gdb_test "ptype vigintillion" "type = volatile unsigned long \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vocation" "type = volatile float *"
+gdb_test "ptype vocation" "type = volatile float \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype veracity" "type = volatile double *"
+gdb_test "ptype veracity" "type = volatile double \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vapidity" "type = volatile char * volatile"
+gdb_test "ptype vapidity" "type = volatile char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype velocity" "type = volatile unsigned char * volatile"
+gdb_test "ptype velocity" "type = volatile unsigned char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype veneer" "type = volatile short * volatile"
+gdb_test "ptype veneer" "type = volatile short \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype video" "type = volatile unsigned short * volatile"
+gdb_test "ptype video" "type = volatile unsigned short \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vacuum" "type = volatile long * volatile"
+gdb_test "ptype vacuum" "type = volatile long \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype veniality" "type = volatile unsigned long * volatile"
+gdb_test "ptype veniality" "type = volatile unsigned long \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vitality" "type = volatile float * volatile"
+gdb_test "ptype vitality" "type = volatile float \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype voracity" "type = volatile double * volatile"
+gdb_test "ptype voracity" "type = volatile double \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype victor" "type = const volatile char"
+gdb_test "ptype victor" "type = const volatile char.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vicar" "type = const volatile unsigned char"
+gdb_test "ptype vicar" "type = const volatile unsigned char.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype victory" "type = const volatile char *"
+gdb_test "ptype victory" "type = const volatile char \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vicarage" "type = const volatile unsigned char *"
+gdb_test "ptype vicarage" "type = const volatile unsigned char \\*.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vein" "type = volatile char * const"
+gdb_test "ptype vein" "type = volatile char \\* const.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vogue" "type = volatile unsigned char * const"
+gdb_test "ptype vogue" "type = volatile unsigned char \\* const.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype cavern" "type = const volatile char * const"
+gdb_test "ptype cavern" "type = const volatile char \\* const.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype coverlet" "type = const volatile unsigned char * const"
+gdb_test "ptype coverlet" "type = const volatile unsigned char \\* const.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype caveat" "type = const char * volatile"
+gdb_test "ptype caveat" "type = const char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype covenant" "type = const unsigned char * volatile"
+gdb_test "ptype covenant" "type = const unsigned char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vizier" "type = const volatile char * volatile"
+gdb_test "ptype vizier" "type = const volatile char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vanadium" "type = const volatile unsigned char * volatile"
+gdb_test "ptype vanadium" "type = const volatile unsigned char \\* volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vane" "type = char * const volatile"
+gdb_test "ptype vane" "type = char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype veldt" "type = unsigned char * const volatile"
+gdb_test "ptype veldt" "type = unsigned char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype cove" "type = const char * const volatile"
+gdb_test "ptype cove" "type = const char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype cavity" "type = const unsigned char * const volatile"
+gdb_test "ptype cavity" "type = const unsigned char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vagus" "type = volatile char * const volatile"
+gdb_test "ptype vagus" "type = volatile char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vagrancy" "type = volatile unsigned char * const volatile"
+gdb_test "ptype vagrancy" "type = volatile unsigned char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vagary" "type = const volatile char * const volatile"
+gdb_test "ptype vagary" "type = const volatile char \\* const volatile.*"
 
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
-gdb_test "ptype vendor" "type = const volatile unsigned char * const volatile"
+gdb_test "ptype vendor" "type = const volatile unsigned char \\* const volatile.*"
 
 # test function parameters
 if {$gcc_compiled} then { setup_xfail "*-*-*" }
 send_gdb "ptype qux2\n"
 gdb_expect {
-    -re "type = int \\(volatile unsigned char, const volatile int, volatile short &, volatile long \\*, float \\* volatile, const volatile signed char \\* const volatile\\)" {
+    -re "type = int \\(volatile unsigned char, const volatile int, volatile short, volatile long \\*, float \\* volatile, const volatile signed char \\* const volatile\\).*$gdb_prompt $" {
         pass "ptype qux2"
     }
     -re ".*$gdb_prompt $" { fail "ptype qux2" }
index bd54f3e..14ccecd 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <unistd.h>
 /*
  *     Since using watchpoints can be very slow, we have to take some pains to
  *     ensure that we don't run too long with them enabled or we run the risk
@@ -28,6 +29,7 @@ int ival1 = -1;
 int ival2 = -1;
 int ival3 = -1;
 int ival4 = -1;
+int ival5 = -1;
 char buf[10];
 struct foo
 {
@@ -53,9 +55,32 @@ void marker5 ()
 {
 }
 
+void marker6 ()
+{
+}
+
+#ifdef PROTOTYPES
+void recurser (int  x)
+#else
+void recurser (x) int  x;
+#endif
+{
+  int  local_x;
+
+  if (x > 0)
+    recurser (x-1);
+  local_x = x;
+}
+
 void
 func2 ()
 {
+  int  local_a;
+  static int  static_b;
+
+  ival5++;
+  local_a = ival5;
+  static_b = local_a;
 }
 
 int
@@ -120,5 +145,30 @@ int main ()
      are not evaluating the watchpoint expression correctly.  */
   struct1.val = 5;
   marker5 ();
+
+  /* We're going to watch locals of func2, to see that out-of-scope
+     watchpoints are detected and properly deleted.
+     */
+  marker6 ();
+
+  /* This invocation is used for watches of a single
+     local variable. */
+  func2 ();
+
+  /* This invocation is used for watches of an expression
+     involving a local variable. */
+  func2 ();
+
+  /* This invocation is used for watches of a static
+     (non-stack-based) local variable. */
+  func2 ();
+
+  /* This invocation is used for watches of a local variable
+     when recursion happens.
+     */
+  marker6 ();
+  recurser (2);
+
+  marker6 ();
   return 0;
 }
index 53f2e8b..7dced3b 100644 (file)
@@ -30,20 +30,12 @@ set testfile "watchpoint"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
+set wp_set 1
 
 if [get_compiler_info ${binfile}] {
     return -1
 }
 
-# if we are on HPUX and we are not compiled with gcc, then skip these tests.
-
-if [istarget hppa*-*-hpux*] {
-    if {!$gcc_compiled} {
-       continue 
-    }
-}
-
-
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
@@ -69,6 +61,7 @@ proc initialize {} {
     global hex
     global decimal
     global srcfile
+    global wp_set
 
     if [gdb_test "break marker1" "Breakpoint 1 at $hex: file .*$srcfile, line $decimal.*" "set breakpoint at marker1" ] { 
       return 0; 
@@ -85,11 +78,27 @@ proc initialize {} {
     }
 
 
-    if [gdb_test "watch ival3" ".*\[Ww\]atchpoint 3: ival3" "set watchpoint on ival3" ] { 
-      return 0; 
+    # ??rehrauer: To fix DTS #CHFts23014, in which setting a watchpoint
+    # before running can cause the inferior to croak on HP-UX 10.30 and
+    # 11.0 for reasons as yet unknown, we've disabled the ability to set
+    # watches without a running inferior.  Verify the restriction.
+    #
+    send_gdb "watch ival3\n"
+    gdb_expect {
+        -re ".*\[Ww\]atchpoint 3: ival3.*$gdb_prompt $" {
+            pass "set watchpoint on ival3"
+        }
+        -re "warning: can't do that without a running program; try \"break main\", \"run\" first.*$gdb_prompt $" {
+            pass "set watchpoint on ival3"
+            set wp_set 0
+            return 1
+        }
+        timeout {
+            fail "(timeout) set watchpoint on ival3"
+            return 0
+        }
     }
 
-
     # "info watch" is the same as "info break"
 
     if [gdb_test "info watch" "1\[ \]*breakpoint.*marker1.*\r\n2\[ \]*breakpoint.*marker2.*\r\n3\[ \]*.*watchpoint.*ival3" "watchpoint found in watchpoint/breakpoint table" ] { 
@@ -117,11 +126,14 @@ proc test_simple_watchpoint {} {
     global gdb_prompt
     global hex
     global decimal
+    global wp_set
 
     # Ensure that the watchpoint is disabled when we startup.
 
-    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_simple_watchpoint" ] { 
-      return 0; 
+    if { $wp_set } {
+        if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_simple_watchpoint" ] { 
+           return 0; 
+       }
     }
 
 
@@ -143,6 +155,51 @@ proc test_simple_watchpoint {} {
        }
     }
 
+    if { !$wp_set } {
+       # ??rehrauer: To fix DTS #CHFts23014, in which setting a watchpoint
+       # before running can cause the inferior to croak on HP-UX 10.30 and
+       # 11.0 for reasons as yet unknown, we've disabled the ability to set
+       # watches without a running inferior.  The following testpoints used
+       # to be in [initialize].
+       #
+       send_gdb "watch ival3\n"
+       gdb_expect {
+           -re ".*\[Ww\]atchpoint 3: ival3\r\n$gdb_prompt $" { 
+               pass "set watchpoint on ival3"
+           }
+           -re ".*$gdb_prompt $" { fail "set watchpoint on ival3"  }
+           timeout { fail "set watchpoint on ival3 (timeout)"  }
+       }
+
+        set wp_set 1
+
+       # "info watch" is the same as "info break"
+
+       send_gdb "info watch\n"
+       gdb_expect {
+           -re "1\[ \]*breakpoint.*marker1.*\r\n2\[ \]*breakpoint.*marker2.*\r\n3\[ \]*.*watchpoint.*ival3\r\n$gdb_prompt $" {
+               pass "watchpoint found in watchpoint/breakpoint table"
+           }
+           -re ".*$gdb_prompt $" {
+               fail "watchpoint found in watchpoint/breakpoint table"
+           }
+           timeout {
+              fail "watchpoint found in watchpoint/breakpoint table"
+           }
+       }
+
+       # After installing the watchpoint, we disable it until we are ready
+       # to use it.  This allows the test program to run at full speed until
+       # we get to the first marker function.
+
+       send_gdb "disable 3\n"
+       gdb_expect {
+           -re "disable 3\[\r\n\]+$gdb_prompt $" { pass "disable watchpoint" }
+           -re ".*$gdb_prompt $" { fail "disable watchpoint"  }
+           timeout { fail "disable watchpoint (timeout)"  }
+       }
+    }
+
     # After reaching the marker function, enable the watchpoint.
 
     if [gdb_test "enable 3" "^enable 3\[\r\n\]+" "enable watchpoint" ] { 
@@ -221,6 +278,9 @@ proc test_disabling_watchpoints {} {
     global decimal
     global hex
 
+    # "info watch" is the same as "info break"
+    gdb_test "info watch" "\[0-9\]+\[ \]*breakpoint.*marker1.*\r\n\[0-9\]+\[ \]*breakpoint.*marker2.*\r\n\[0-9]+\[ \]*.*watchpoint.*ival3\r\n\.*\[0-9\]+ times.*" "watchpoints found in watchpoint/breakpoint table"
+
     # Ensure that the watchpoint is disabled when we startup.
 
     if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_disabling_watchpoints" ] { 
@@ -270,7 +330,7 @@ proc test_disabling_watchpoints {} {
 
     # Check watchpoint list, looking for the entry that confirms the
     # watchpoint is disabled.
-    gdb_test "info watchpoints" "3\[ \]*.*watchpoint\[ \]*keep\[ \]*n\[ \]*ival3\r\n.*" "watchpoint disabled in table"
+    gdb_test "info watchpoints" "\[0-9]+\[ \]*.*watchpoint\[ \]*keep\[ \]*n\[ \]*ival3\r\n.*" "watchpoint disabled in table"
 
     # Continue until we hit the finishing marker function.
     # Make sure we hit no more watchpoints.
@@ -293,35 +353,30 @@ proc test_stepping {} {
        gdb_test "break func2 if 0" "Breakpoint.*at.*"
        gdb_test "p \$func2_breakpoint_number = \$bpnum" " = .*"
 
-       # The HPPA has a problem here if it's not using hardware watchpoints
-       if {[ istarget "hppa*-*-*" ] && ![ istarget "hppa*-*-*bsd*" ]} then {
-           # Don't actually try doing the call, if we do we can't continue.
-           setup_xfail "*-*-*"
-           fail "calling function with watchpoint enabled"
-       } else {
-           # The problem is that GDB confuses stepping through the call
-           # dummy with hitting the breakpoint at the end of the call dummy.
-           # Will be fixed once all architectures define 
-           # CALL_DUMMY_BREAKPOINT_OFFSET.
-           setup_xfail "*-*-*"
-           # This doesn't occur if the call dummy starts with a call,
-           # because we are out of the dummy by the first time the inferior
-           # stops.
-           clear_xfail "d10v*-*-*"
-           clear_xfail "m68*-*-*"
-           clear_xfail "i*86*-*-*"
-           clear_xfail "vax-*-*"
-           # The following architectures define CALL_DUMMY_BREAKPOINT_OFFSET.
-           clear_xfail "alpha-*-*"
-           clear_xfail "mips*-*-*"
-           clear_xfail "sparc-*-*"
-           clear_xfail "hppa*-*-*bsd*"
-           # It works with the generic inferior function calling code too.
-           clear_xfail "mn10200*-*-*"
-           clear_xfail "mn10300*-*-*"
-           gdb_test "p func1 ()" "= 73" \
-               "calling function with watchpoint enabled"
-       }
+       # The problem is that GDB confuses stepping through the call
+       # dummy with hitting the breakpoint at the end of the call dummy.
+       # Will be fixed once all architectures define 
+       # CALL_DUMMY_BREAKPOINT_OFFSET.
+       setup_xfail "*-*-*"
+       # This doesn't occur if the call dummy starts with a call,
+       # because we are out of the dummy by the first time the inferior
+       # stops.
+       clear_xfail "d10v*-*-*"
+       clear_xfail "m68*-*-*"
+       clear_xfail "i*86*-*-*"
+       clear_xfail "vax-*-*"
+       # The following architectures define CALL_DUMMY_BREAKPOINT_OFFSET.
+       clear_xfail "alpha-*-*"
+       clear_xfail "mips*-*-*"
+       clear_xfail "sparc-*-*"
+       clear_xfail "hppa*-*-*bsd*"
+       # It works with the generic inferior function calling code too.
+       clear_xfail "mn10200*-*-*"
+       clear_xfail "mn10300*-*-*"
+       # The following architectures define CALL_DUMMY_HAS_COMPLETED.
+       clear_xfail "hppa*-*-*hpux*"
+       gdb_test "p func1 ()" "= 73" \
+       "calling function with watchpoint enabled"
 
        # 
        # "finish" brings us back to main.
@@ -495,18 +550,82 @@ proc test_complex_watchpoint {} {
        gdb_test "cont" "Continuing.*Breakpoint.*marker5 \\(\\).*" \
            "did not trigger wrong watchpoint"
 
+        # Test watches of things declared locally in a function.
+        # In particular, test that a watch of stack-based things
+        # is deleted when the stack-based things go out of scope.
+        #
+       gdb_test "disable" "" "disable in test_complex_watchpoint"
+        gdb_test "break marker6" ".*Breakpoint.*"
+        gdb_test "cont" "Continuing.*Breakpoint.*marker6 \\(\\).*" \
+            "continue to marker6"
+        gdb_test "break func2" ".*Breakpoint.*"
+        gdb_test "cont" "Continuing.*func2.*"
+
+        # Test a watch of a single stack-based variable, whose scope
+        # is the function we're now in.  This should auto-delete when
+        # execution exits the scope of the watchpoint.
+        #
+        gdb_test "watch local_a" ".*\[Ww\]atchpoint \[0-9\]*: local_a" "set local watch"
+        gdb_test "cont" "\[Ww\]atchpoint.*local_a.*" "trigger local watch"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" "self-delete local watch"
+
+        gdb_test "cont" "Continuing.*func2.*"
+        # We should be in "func2" again now.  Test a watch of an
+        # expression which includes both a stack-based local and
+        # something whose scope is larger than this invocation
+        # of "func2".  This should also auto-delete.
+        #
+        gdb_test "watch local_a + ival5" ".*\[Ww\]atchpoint \[0-9\]*: local_a . ival5" \
+                 "set partially local watch"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_a . ival5.*" \
+                 "trigger1 partially local watch"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_a . ival5.*" \
+                 "trigger2 partially local watch"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
+                 "self-delete partially local watch"
+
+        # We should be in "func2" again now.  Test a watch of a
+        # static (non-stack-based) local.  Since this has scope
+        # across any invocations of "func2", it should not auto-
+        # delete.
+        #
+        gdb_test "cont" "Continuing.*func2.*"
+        gdb_test "watch static_b" ".*\[Ww\]atchpoint \[0-9\]*: static_b" \
+                 "set static local watch"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: static_b.*" \
+                 "trigger static local watch"
+        gdb_test "cont" "Continuing.*marker6 \\(\\).*" \
+                 "continue after trigger static local watch"
+        gdb_test "info break" ".*watchpoint.*static_b.*" \
+                 "static local watch did not self-delete"
+
+        # We should be in "recurser" now.  Test a watch of a stack-
+        # based local.  Symbols mentioned in a watchpoint are bound
+        # at watchpoint-creation.  Thus, a watch of a stack-based
+        # local to a recursing function should be bound only to that
+        # one invocation, and should not trigger for other invocations.
+        #
+        gdb_test "tbreak recurser" ".*Breakpoint.*"
+        gdb_test "cont" "Continuing.*recurser.*"
+        gdb_test "watch local_x" ".*\[Ww\]atchpoint \[0-9\]*: local_x" \
+                 "set local watch in recursive call"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_x.*New value = 2.*" \
+                 "trigger local watch in recursive call"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
+                 "self-delete local watch in recursive call"
+
        # Disable everything so we can finish the program at full speed
        gdb_test "disable" "" "disable in test_complex_watchpoint"
 
        if [target_info exists gdb,noresults] { return }
 
-
-        gdb_continue_to_end "continue to exit in test_complex_watchpoint"
+       gdb_continue_to_end "continue to exit in test_complex_watchpoint"
     }
 }
 
 # Start with a fresh gdb.
 
+gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load $binfile
@@ -576,4 +695,82 @@ if [initialize] then {
            [istarget "m32r-*-*"]} then {
        test_complex_watchpoint
     }
+
+    # Verify that a user can force GDB to use "slow" watchpoints.
+    # (This proves rather little on kernels that don't support
+    # fast watchpoints, but still...)
+    #
+    if ![runto_main] then { fail "watch tests suppressed" }
+
+    send_gdb "set can-use-hw-watchpoints 0\n"
+    gdb_expect {
+      -re "$gdb_prompt $"\
+              {pass "disable fast watches"}
+      timeout {fail "(timeout) disable fast watches"}
+    }
+    send_gdb "show can-use-hw-watchpoints\n"
+    gdb_expect {
+      -re "Debugger's willingness to use watchpoint hardware is 0.*$gdb_prompt $"\
+              {pass "show disable fast watches"}
+      -re "$gdb_prompt $"\
+              {fail "show disable fast watches"}
+      timeout {fail "(timeout) show disable fast watches"}
+    }
+    send_gdb "watch ival3 if  count > 1\n"
+    gdb_expect {
+      -re "Watchpoint \[0-9\]*: ival3.*$gdb_prompt $"\
+              {pass "set slow conditional watch"}
+      -re "$gdb_prompt $"\
+              {fail "set slow conditional watch"}
+      timeout {fail "(timeout) set slow conditional watch"}
+    }
+    send_gdb "continue\n"
+    gdb_expect {
+      -re "Watchpoint \[0-9\]*: ival3.*Old value = 1.*New value = 2.*$gdb_prompt $"\
+              {pass "trigger slow conditional watch"}
+      -re "$gdb_prompt $"\
+              {fail "trigger slow conditional watch"}
+      timeout {fail "(timeout) trigger slow conditional watch"}
+    }
+
+    # We've explicitly disabled hardware watches.  Verify that GDB
+    # 
+    #
+    send_gdb "rwatch ival3\n"
+    gdb_expect {
+      -re "Expression cannot be implemented with read/access watchpoint..*$gdb_prompt $"\
+              {pass "rwatch disallowed when can-set-hw-watchpoints cleared"}
+      -re "$gdb_prompt $"\
+              {fail "rwatch disallowed when can-set-hw-watchpoints cleared"}
+      timeout {fail "(timeout) rwatch disallowed when can-use-hw-watchpoints cleared"}
+    }
+
+    # Read- and access watchpoints are unsupported on HP-UX.  Verify
+    # that GDB gracefully responds to requests to create them.
+    #
+    if [istarget "hppa*-*-hpux*"] then {
+      send_gdb "set can-use-hw-watchpoints 1\n"
+      gdb_expect {
+        -re "$gdb_prompt $"\
+                {pass "enable fast watches"}
+        timeout {fail "(timeout) enable fast watches"}
+      }
+      send_gdb "rwatch ival3\n"
+      gdb_expect {
+        -re "Target does not have this type of hardware watchpoint support.*$gdb_prompt $"\
+                {pass "read watches disallowed"}
+        -re "$gdb_prompt $"\
+                {fail "read watches disallowed"}
+        timeout {fail "(timeout) read watches disallowed"}
+      }
+
+      send_gdb "awatch ival3\n"
+      gdb_expect {
+        -re "Target does not have this type of hardware watchpoint support.*$gdb_prompt $"\
+                {pass "access watches disallowed"}
+        -re "$gdb_prompt $"\
+                {fail "access watches disallowed"}
+        timeout {fail "(timeout) access watches disallowed"}
+      }
+    }
 }
index 6d8d1e6..63d5d3d 100644 (file)
@@ -188,7 +188,7 @@ enum cars {chevy, ford, porsche} clunker;
 
 /***********/
 
-main ()
+int main ()
 {
 #ifdef usestubs
   set_debug_traps();
index 1f4e8b3..d540e4c 100644 (file)
@@ -49,14 +49,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load $binfile
 
-# If we did not use the signed keyword when compiling the file, don't
-# expect GDB to know that char is signed.
-if $signed_keyword_not_used then {
-    set signed_char "char"
-} else {
-    set signed_char "signed char"
-}
-
 # Define a procedure to set up an xfail for all targets that put out a
 # `long' type as an `int' type.
 # Sun/Ultrix cc have this problem.
@@ -77,10 +69,21 @@ proc setup_xfail_on_long_vs_int {} {
 # uses in the stabs.  So we need to deal with names both from gcc and
 # native compilers.
 #
+
 gdb_test "whatis v_char" \
     "type = (unsigned char|char)" \
     "whatis char"
 
+# If we did not use the signed keyword when compiling the file, don't
+# expect GDB to know that char is signed.
+if { $hp_cc_compiler || $hp_aCC_compiler } {
+    set signed_keyword_not_used 1
+}
+if $signed_keyword_not_used then {
+    set signed_char "char"
+} else {
+    set signed_char "signed char"
+}
 setup_xfail "a29k-*-*"
 if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
 gdb_test "whatis v_signed_char" \
@@ -270,13 +273,21 @@ gdb_test "whatis v_double_pointer" \
     "whatis double pointer"
 
 
+if { $hp_aCC_compiler } {
+    set unstruct "unnamed\.struct\..*"
+    set ununion "unnamed\.union\..*"
+} else {
+    set unstruct "\.\.\."
+    set ununion "\.\.\."
+}
+
 # test whatis command with structure types
 gdb_test "whatis v_struct1" \
     "type = struct t_struct" \
     "whatis named structure"
 
 gdb_test "whatis v_struct2" \
-    "type = struct \{...\}" \
+    "type = struct \{$unstruct\}" \
     "whatis unnamed structure"
 
 
@@ -286,68 +297,78 @@ gdb_test "whatis v_union" \
     "whatis named union"
 
 gdb_test "whatis v_union2" \
-    "type = union \{...\}" \
+    "type = union \{$ununion\}" \
     "whatis unnamed union"
 
 
+if { [istarget "hppa*-hp-hpux10.20"] && $hp_aCC_compiler } {
+    # On HP-UX 10.20 with aCC compiler and objdebug mode,
+    # we need the 'void' pattern; without objdebug mode,
+    # we still need to '' pattern.
+    # FIXME: need to look into this further.
+    # - guo
+    set void "(void|)"
+} else {
+    set void ""
+}
 
 # test whatis command with functions return type
 gdb_test "whatis v_char_func" \
-    "type = (signed |unsigned |)char \\(\\)" \
+    "type = (signed |unsigned |)char \\($void\\)" \
     "whatis char function"
 
 gdb_test "whatis v_signed_char_func" \
-    "type = (signed |unsigned |)char \\(\\)" \
+    "type = (signed |unsigned |)char \\($void\\)" \
     "whatis signed char function"
 
 gdb_test "whatis v_unsigned_char_func" \
-    "type = unsigned char \\(\\)"      \
+    "type = unsigned char \\($void\\)" \
     "whatis unsigned char function"
 
 gdb_test "whatis v_short_func" \
-    "type = short (int |)\\(\\)" \
+    "type = short (int |)\\($void\\)" \
     "whatis short function"
 
 gdb_test "whatis v_signed_short_func" \
-    "type = (signed |)short (int |)\\(\\)" \
+    "type = (signed |)short (int |)\\($void\\)" \
     "whatis signed short function"
 
 gdb_test "whatis v_unsigned_short_func" \
-    "type = (unsigned short|short unsigned int) \\(\\)" \
+    "type = (unsigned short|short unsigned int) \\($void\\)" \
     "whatis unsigned short function"
 
 gdb_test "whatis v_int_func" \
-    "type = int \\(\\)" \
+    "type = int \\($void\\)" \
     "whatis int function"
 
 gdb_test "whatis v_signed_int_func" \
-    "type = (signed |)int \\(\\)" \
+    "type = (signed |)int \\($void\\)" \
     "whatis signed int function"
 
 gdb_test "whatis v_unsigned_int_func" \
-    "type = unsigned int \\(\\)" \
+    "type = unsigned int \\($void\\)" \
     "whatis unsigned int function"
 
 gdb_test "whatis v_long_func" \
-    "type = (long|int|long int) \\(\\)" \
+    "type = (long|int|long int) \\($void\\)" \
     "whatis long function"
 
 gdb_test "whatis v_signed_long_func" \
-    "type = (signed |)(int|long|long int) \\(\\)" \
+    "type = (signed |)(int|long|long int) \\($void\\)" \
     "whatis signed long function"
 
 gdb_test "whatis v_unsigned_long_func" \
-    "type = (unsigned (int|long|long int)|long unsigned int) \\(\\)" \
+    "type = (unsigned (int|long|long int)|long unsigned int) \\($void\\)" \
     "whatis unsigned long function"
 
 # Sun /bin/cc calls this a function returning double.
 if {!$gcc_compiled} then {setup_xfail "*-sun-sunos4*"}
 gdb_test "whatis v_float_func" \
-    "type = float \\(\\)" \
+    "type = float \\($void\\)" \
     "whatis float function"
 
 gdb_test "whatis v_double_func" \
-    "type = double \\(\\)" \
+    "type = double \\($void\\)" \
     "whatis double function" \
 
 
@@ -376,8 +397,14 @@ gdb_test "whatis nested_su.outer_int" \
     "type = int" \
     "whatis outer structure member"
 
+if {$hp_aCC_compiler} {
+    set outer "outer_struct::"
+} else {
+    set outer ""
+}
+
 gdb_test "whatis nested_su.inner_struct_instance" \
-    "type = struct inner_struct" \
+    "type = struct ${outer}inner_struct" \
     "whatis inner structure"
 
 gdb_test "whatis nested_su.inner_struct_instance.inner_int" \
@@ -385,7 +412,7 @@ gdb_test "whatis nested_su.inner_struct_instance.inner_int" \
     "whatis inner structure member"
 
 gdb_test "whatis nested_su.inner_union_instance" \
-    "type = union inner_union" \
+    "type = union ${outer}inner_union" \
     "whatis inner union"
 
 gdb_test "whatis nested_su.inner_union_instance.inner_union_int" \
index 7b4dd7c..9bf2431 100644 (file)
@@ -42,6 +42,20 @@ set testfile "member-ptr"
 set srcfile ${testfile}.cc
 set binfile ${objdir}/${subdir}/${testfile}
 
+# Create and source the file that provides information about the compiler
+# used to compile the test case.
+
+if [get_compiler_info ${binfile} "c++"] {
+    return -1
+}
+
+# Nearly all of these tests fail when compiled with G++, so just give up
+# until GDB gets enhanced. -sts 1999-06-22
+
+if {$gcc_compiled} {
+    continue 
+}
+
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
index 9db44ea..fe5a317 100644 (file)
@@ -1,3 +1,9 @@
+1999-06-25  Stan Shebs  <shebs@andros.cygnus.com>
+
+       From Jimmy Guo  <guo@cup.hp.com>:
+       * xstruct-grt.ch, xstruct.ch, xstruct.exp: Rename to mollify
+       doschk.
+
 Thu May 21 02:45:18 1998  Felix Lee  <flee@zog.cygnus.com>
 
        * chexp.exp: fix tests that assume >16-bit ints.
index 95ed534..cb277be 100644 (file)
@@ -63,6 +63,8 @@ if ![info exists gdb_prompt] then {
     set gdb_prompt "\[(\]gdb\[)\]"
 }
 
+### Only procedures should come after this point.
+
 #
 # gdb_version -- extract and print the version number of GDB
 #
@@ -893,7 +895,40 @@ proc get_compiler_info {binfile args} {
        }
     }
     
-    source ${binfile}.ci
+    uplevel \#0 { set gcc_compiled 0 }
+
+    if { [llength $args] == 0 || $args != "f77" } {
+        source ${binfile}.ci
+    }
+
+    # Most compilers will evaluate comparisons and other boolean
+    # operations to 0 or 1.
+    uplevel \#0 { set true 1 }
+    uplevel \#0 { set false 0 }
+
+    uplevel \#0 { set hp_cc_compiler 0 }
+    uplevel \#0 { set hp_aCC_compiler 0 }
+    uplevel \#0 { set hp_f77_compiler 0 }
+    uplevel \#0 { set hp_f90_compiler 0 }
+    if { !$gcc_compiled && [istarget "hppa*-*-hpux*"] } {
+       # Check for the HP compilers
+       set compiler [lindex [split [get_compiler $args] " "] 0]
+       catch "exec what $compiler" output
+       if [regexp ".*HP aC\\+\\+.*" $output] {
+           uplevel \#0 { set hp_aCC_compiler 1 }
+           # Use of aCC results in boolean results being displayed as
+           # "true" or "false"
+           uplevel \#0 { set true true }
+           uplevel \#0 { set false false }
+       } elseif [regexp ".*HP C Compiler.*" $output] {
+           uplevel \#0 { set hp_cc_compiler 1 }
+       } elseif [regexp ".*HP-UX f77.*" $output] {
+           uplevel \#0 { set hp_f77_compiler 1 }
+       } elseif [regexp ".*HP-UX f90.*" $output] {
+           uplevel \#0 { set hp_f90_compiler 1 }
+       }
+    }
+
     return 0;
 }
 
@@ -1060,6 +1095,52 @@ proc gdb_expect { args } {
     }
 }
 
+#
+# Check for long sequence of output by parts.
+# TEST: is the test message.
+# SENTINEL: Is the terminal pattern indicating that output has finished.
+# LIST: is the sequence of outputs to match.
+# If the sentinel is recognized early, it is considered an error.
+#
+proc gdb_expect_list {test sentinal list} {
+    global gdb_prompt
+    set index 0
+    while { ${index} >= 0 && ${index} < [llength ${list}] } {
+       set pattern [lindex ${list} ${index}]
+        set index [expr ${index} + 1]
+       if { ${index} == [llength ${list}] } {
+           gdb_expect {
+               -re "${pattern}${sentinal}" {
+                   pass "${test} (sentinal)"
+               }
+               timeout {
+                   fail "(timeout on sentinal) ${test}"
+                   set index -1
+               }
+           }
+       } else {
+           gdb_expect {
+               -re "${pattern}" {
+                   pass "${test} (line ${index})"
+               }
+               -re "${sentinal}" {
+                   fail "${test} (line ${index})"
+                   set index -1
+               }
+               timeout {
+                   fail "(timeout on line ${index}) ${test}"
+                   set index -1
+               }
+           }
+       }
+    }
+    if { ${index} >= 0 } {
+       pass "${test}"
+    }
+}
+
+#
+#
 proc gdb_suppress_entire_file { reason } {
     global suppress_flag;
 
index af5c40b..fa0c9d0 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1,5 +1,5 @@
 /* Top level stuff for GDB, the GNU debugger.
-   Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
+   Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -3770,7 +3770,6 @@ init_main ()
 
   /* Set the important stuff up for command editing.  */
   command_editing_p = 1;
-  async_command_editing_p = 1;
   history_expansion_p = 0;
   write_history_p = 0;
 
index c2c12dd..03f0aa4 100644 (file)
@@ -1941,7 +1941,7 @@ void
 gdb_file_rewind (file)
      struct gdb_file *file;
 {
-  return file->to_rewind (file);
+  file->to_rewind (file);
 }
 
 void
@@ -1949,7 +1949,7 @@ gdb_file_put (file, dest)
      struct gdb_file *file;
      struct gdb_file *dest;
 {
-  return file->to_put (file, dest);
+  file->to_put (file, dest);
 }
 
 void
index 26bd235..d585aa6 100644 (file)
@@ -1,3 +1,10 @@
+1999-06-23  Doug Evans  <devans@casey.cygnus.com>
+
+       * cgen-engine.h (TARGET_SEM_BRANCH_FINI): Remove cruft at end of
+       ifndef.
+       * genmloop.sh (@cpu@_scache_lookup): Delete unused local var.
+       (@cpu@_pbb_cti_chain): Minor clean up.
+
 1999-05-08  Felix Lee  <flee@cygnus.com>
 
         * aclocal.m4: Use AC_EXEEXT instead of AM_EXEEXT.  Delete defn of
index 9421332..e7d27e0 100644 (file)
@@ -279,7 +279,7 @@ do { \
 #define SEM_BRANCH_INIT \
   int taken_p = 0;
 
-#ifndef TARGET_SEM_BRANCH_FINI(pcvar, taken_p)
+#ifndef TARGET_SEM_BRANCH_FINI
 #define TARGET_SEM_BRANCH_FINI(pcvar, taken_p)
 #endif
 #define SEM_BRANCH_FINI(pcvar) \
index 865fe72..6720799 100644 (file)
@@ -463,8 +463,6 @@ static INLINE SCACHE *
      fetch and decode the instruction.  */
   if (sc->argbuf.addr != vpc)
     {
-      insn_t insn;
-
       if (FAST_P)
        PROFILE_COUNT_SCACHE_MISS (current_cpu);
 
@@ -771,7 +769,8 @@ cat << EOF
        ++sc;
       }
 
-      /* Update the pointer to the next free entry.  */
+      /* Update the pointer to the next free entry, may not have used as
+        many entries as was asked for.  */
       CPU_SCACHE_NEXT_FREE (current_cpu) = sc;
       /* Record length of chain if profiling.
         This includes virtual insns since they count against
@@ -827,8 +826,6 @@ INLINE SEM_PC
 @cpu@_pbb_cti_chain (SIM_CPU *current_cpu, SEM_ARG sem_arg,
                     SEM_PC *new_vpc_ptr, PCADDR new_pc)
 {
-  ARGBUF *abuf;
-
   PBB_UPDATE_INSN_COUNT (current_cpu, sem_arg);
 
   /* If not running forever, exit back to main loop.  */
@@ -854,7 +851,7 @@ INLINE SEM_PC
      next chain ptr.  */
   if (new_vpc_ptr == SEM_BRANCH_UNTAKEN)
     {
-      abuf = SEM_ARGBUF (sem_arg);
+      ARGBUF *abuf = SEM_ARGBUF (sem_arg);
       SET_H_PC (abuf->addr);
       new_vpc_ptr = &abuf->fields.chain.next;
     }
index f8b9d93..7bb8877 100644 (file)
@@ -1,3 +1,8 @@
+1999-06-23  Nick Clifton  <nickc@cygnus.com>
+
+       * sysdep.h: Do not define prototypes for memcpy and strchr if they
+       are macros.
+
 1999-05-21  Nick Clifton  <nickc@cygnus.com>
 
        * interp.c (sim_resume): Add more tracing output.
index adf9b5e..e2e92e1 100644 (file)
@@ -46,7 +46,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 /*#include <string.h>*/
 #else
 extern char * mktemp ();
+#ifndef memset
 extern PTR    memset ();
+#endif
 
 #ifndef        DONTDECLARE_MALLOC
 extern PTR   malloc ();
@@ -65,7 +67,9 @@ extern void free ();
 extern int free();
 #endif
 
+#ifndef strchr
 extern char * strchr();
+#endif
 extern char * getenv();
 extern PTR    memchr();
 extern char * strrchr();