aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog106
-rw-r--r--gdb/Makefile.in22
-rw-r--r--gdb/NEWS4
-rw-r--r--gdb/altos-xdep.c326
-rw-r--r--gdb/arm-tdep.c72
-rw-r--r--gdb/ax-gdb.c5
-rw-r--r--gdb/config/convex/Convex.notes325
-rw-r--r--gdb/config/convex/convex.mh6
-rw-r--r--gdb/config/convex/convex.mt6
-rw-r--r--gdb/config/convex/tm-convex.h972
-rw-r--r--gdb/config/convex/xm-convex.h70
-rw-r--r--gdb/config/m68k/altos.mh8
-rw-r--r--gdb/config/m68k/altos.mt6
-rw-r--r--gdb/config/m68k/tm-altos.h88
-rw-r--r--gdb/config/m68k/xm-altos.h404
-rw-r--r--gdb/configure.host6
-rw-r--r--gdb/configure.tgt8
-rw-r--r--gdb/convex-tdep.c2554
-rw-r--r--gdb/convex-xdep.c1926
-rw-r--r--gdb/doc/ChangeLog26
-rw-r--r--gdb/doc/Makefile.in27
-rw-r--r--gdb/doc/gdbint.texinfo144
-rw-r--r--gdb/doc/remote.texi649
-rw-r--r--gdb/doc/stabs.texinfo4
-rw-r--r--gdb/event-loop.c43
-rw-r--r--gdb/event-loop.h19
-rw-r--r--gdb/event-top.c54
-rw-r--r--gdb/frame.h2
-rw-r--r--gdb/gdbserver/Makefile.in3
-rw-r--r--gdb/main.c8
-rw-r--r--gdb/nlm/Makefile.in3
-rw-r--r--gdb/rdi-share/Makefile.in3
-rw-r--r--gdb/remote.c60
-rw-r--r--gdb/solib.c26
-rw-r--r--gdb/symtab.c2
-rw-r--r--gdb/testsuite/ChangeLog102
-rw-r--r--gdb/testsuite/Makefile.in2
-rw-r--r--gdb/testsuite/gdb.base/all-bin.exp50
-rw-r--r--gdb/testsuite/gdb.base/annota1.c12
-rw-r--r--gdb/testsuite/gdb.base/annota1.exp6
-rw-r--r--gdb/testsuite/gdb.base/bitfields.c2
-rw-r--r--gdb/testsuite/gdb.base/break.c19
-rw-r--r--gdb/testsuite/gdb.base/break.exp148
-rw-r--r--gdb/testsuite/gdb.base/call-ar-st.c234
-rw-r--r--gdb/testsuite/gdb.base/call-ar-st.exp292
-rw-r--r--gdb/testsuite/gdb.base/call-rt-st.c109
-rw-r--r--gdb/testsuite/gdb.base/call-rt-st.exp6
-rw-r--r--gdb/testsuite/gdb.base/call-strs.c21
-rw-r--r--gdb/testsuite/gdb.base/call-strs.exp21
-rw-r--r--gdb/testsuite/gdb.base/callfuncs.c127
-rw-r--r--gdb/testsuite/gdb.base/callfuncs.exp79
-rw-r--r--gdb/testsuite/gdb.base/callfuncs2.c108
-rw-r--r--gdb/testsuite/gdb.base/callfuncs2.exp77
-rw-r--r--gdb/testsuite/gdb.base/commands.exp99
-rw-r--r--gdb/testsuite/gdb.base/completion.exp216
-rw-r--r--gdb/testsuite/gdb.base/condbreak.c19
-rw-r--r--gdb/testsuite/gdb.base/condbreak.exp36
-rw-r--r--gdb/testsuite/gdb.base/constvars.exp78
-rw-r--r--gdb/testsuite/gdb.base/corefile.exp5
-rw-r--r--gdb/testsuite/gdb.base/coremaker.c6
-rw-r--r--gdb/testsuite/gdb.base/default.exp23
-rw-r--r--gdb/testsuite/gdb.base/define.exp4
-rw-r--r--gdb/testsuite/gdb.base/display.exp17
-rw-r--r--gdb/testsuite/gdb.base/ena-dis-br.exp24
-rw-r--r--gdb/testsuite/gdb.base/ending-run.c8
-rw-r--r--gdb/testsuite/gdb.base/ending-run.exp53
-rw-r--r--gdb/testsuite/gdb.base/eval-skip.exp60
-rw-r--r--gdb/testsuite/gdb.base/exprs.c11
-rw-r--r--gdb/testsuite/gdb.base/exprs.exp189
-rw-r--r--gdb/testsuite/gdb.base/funcargs.c368
-rw-r--r--gdb/testsuite/gdb.base/funcargs.exp121
-rw-r--r--gdb/testsuite/gdb.base/interrupt.c3
-rw-r--r--gdb/testsuite/gdb.base/interrupt.exp13
-rw-r--r--gdb/testsuite/gdb.base/jump.c7
-rw-r--r--gdb/testsuite/gdb.base/jump.exp30
-rw-r--r--gdb/testsuite/gdb.base/langs.exp55
-rw-r--r--gdb/testsuite/gdb.base/langs0.c6
-rw-r--r--gdb/testsuite/gdb.base/langs1.c8
-rw-r--r--gdb/testsuite/gdb.base/langs2.c17
-rw-r--r--gdb/testsuite/gdb.base/list.exp68
-rw-r--r--gdb/testsuite/gdb.base/list0.c3
-rw-r--r--gdb/testsuite/gdb.base/list1.c28
-rw-r--r--gdb/testsuite/gdb.base/logical.exp82
-rw-r--r--gdb/testsuite/gdb.base/long_long.c6
-rw-r--r--gdb/testsuite/gdb.base/long_long.exp55
-rw-r--r--gdb/testsuite/gdb.base/mips_pro.c22
-rw-r--r--gdb/testsuite/gdb.base/mips_pro.exp2
-rw-r--r--gdb/testsuite/gdb.base/miscexprs.exp29
-rw-r--r--gdb/testsuite/gdb.base/nodebug.c27
-rw-r--r--gdb/testsuite/gdb.base/nodebug.exp39
-rw-r--r--gdb/testsuite/gdb.base/opaque.exp30
-rw-r--r--gdb/testsuite/gdb.base/opaque0.c3
-rw-r--r--gdb/testsuite/gdb.base/opaque1.c2
-rw-r--r--gdb/testsuite/gdb.base/pointers.exp15
-rw-r--r--gdb/testsuite/gdb.base/printcmds.c6
-rw-r--r--gdb/testsuite/gdb.base/ptype.c19
-rw-r--r--gdb/testsuite/gdb.base/ptype.exp44
-rw-r--r--gdb/testsuite/gdb.base/recurse.c8
-rw-r--r--gdb/testsuite/gdb.base/relational.exp65
-rw-r--r--gdb/testsuite/gdb.base/restore.c2
-rw-r--r--gdb/testsuite/gdb.base/return.c5
-rw-r--r--gdb/testsuite/gdb.base/run.c19
-rw-r--r--gdb/testsuite/gdb.base/scope.exp17
-rw-r--r--gdb/testsuite/gdb.base/scope0.c46
-rw-r--r--gdb/testsuite/gdb.base/scope1.c19
-rw-r--r--gdb/testsuite/gdb.base/sect-cmd.exp34
-rw-r--r--gdb/testsuite/gdb.base/setshow.c5
-rw-r--r--gdb/testsuite/gdb.base/setvar.c7
-rw-r--r--gdb/testsuite/gdb.base/setvar.exp7
-rw-r--r--gdb/testsuite/gdb.base/shlib-call.exp8
-rw-r--r--gdb/testsuite/gdb.base/shmain.c31
-rw-r--r--gdb/testsuite/gdb.base/shr1.c16
-rw-r--r--gdb/testsuite/gdb.base/shr2.c14
-rw-r--r--gdb/testsuite/gdb.base/sigall.c427
-rw-r--r--gdb/testsuite/gdb.base/signals.c6
-rw-r--r--gdb/testsuite/gdb.base/signals.exp8
-rw-r--r--gdb/testsuite/gdb.base/so-impl-ld.c9
-rw-r--r--gdb/testsuite/gdb.base/so-impl-ld.exp25
-rw-r--r--gdb/testsuite/gdb.base/so-indr-cl.c9
-rw-r--r--gdb/testsuite/gdb.base/so-indr-cl.exp20
-rw-r--r--gdb/testsuite/gdb.base/solib.c5
-rw-r--r--gdb/testsuite/gdb.base/solib.exp41
-rw-r--r--gdb/testsuite/gdb.base/solib1.c9
-rw-r--r--gdb/testsuite/gdb.base/solib2.c10
-rw-r--r--gdb/testsuite/gdb.base/step-test.c9
-rw-r--r--gdb/testsuite/gdb.base/step-test.exp25
-rw-r--r--gdb/testsuite/gdb.base/term.exp2
-rw-r--r--gdb/testsuite/gdb.base/twice.c4
-rw-r--r--gdb/testsuite/gdb.base/twice.exp1
-rw-r--r--gdb/testsuite/gdb.base/varargs.c5
-rw-r--r--gdb/testsuite/gdb.base/varargs.exp27
-rw-r--r--gdb/testsuite/gdb.base/volatile.exp98
-rw-r--r--gdb/testsuite/gdb.base/watchpoint.c50
-rw-r--r--gdb/testsuite/gdb.base/watchpoint.exp289
-rw-r--r--gdb/testsuite/gdb.base/whatis.c2
-rw-r--r--gdb/testsuite/gdb.base/whatis.exp79
-rw-r--r--gdb/testsuite/gdb.c++/member-ptr.exp14
-rw-r--r--gdb/testsuite/gdb.chill/ChangeLog6
-rw-r--r--gdb/testsuite/lib/gdb.exp83
-rw-r--r--gdb/top.c3
-rw-r--r--gdb/utils.c4
-rw-r--r--sim/common/ChangeLog7
-rw-r--r--sim/common/cgen-engine.h2
-rw-r--r--sim/common/genmloop.sh9
-rw-r--r--sim/mcore/ChangeLog5
-rw-r--r--sim/mcore/sysdep.h4
146 files changed, 8253 insertions, 4705 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6a4c613..f41bc52 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index d2f2e4e..177333e 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -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)
diff --git a/gdb/NEWS b/gdb/NEWS
index 7ae2bbd..c6cf4c3 100644
--- 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:
diff --git a/gdb/altos-xdep.c b/gdb/altos-xdep.c
index 272c581..0704ddd 100644
--- a/gdb/altos-xdep.c
+++ b/gdb/altos-xdep.c
@@ -1,163 +1,163 @@
-/* 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"
-
-
-/* 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 */
+/* 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 } */
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 993e4bf..70db37e 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -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.");
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 8312031..f9265e4 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -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 ();
diff --git a/gdb/config/convex/Convex.notes b/gdb/config/convex/Convex.notes
index 28d336b..828778c 100644
--- a/gdb/config/convex/Convex.notes
+++ b/gdb/config/convex/Convex.notes
@@ -1,163 +1,164 @@
+@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}.
diff --git a/gdb/config/convex/convex.mh b/gdb/config/convex/convex.mh
index 35a121f..5ec3bfe 100644
--- a/gdb/config/convex/convex.mh
+++ b/gdb/config/convex/convex.mh
@@ -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
diff --git a/gdb/config/convex/convex.mt b/gdb/config/convex/convex.mt
index eefbeb3..425b171 100644
--- a/gdb/config/convex/convex.mt
+++ b/gdb/config/convex/convex.mt
@@ -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
diff --git a/gdb/config/convex/tm-convex.h b/gdb/config/convex/tm-convex.h
index 212f39d..953f767 100644
--- a/gdb/config/convex/tm-convex.h
+++ b/gdb/config/convex/tm-convex.h
@@ -1,486 +1,486 @@
-/* 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
-
-/* 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)); \
- } \
- } \
-}
-
-/* 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; }
-
-/* 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 */
+/* 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 */
+/* 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 */
+/* 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 } */
diff --git a/gdb/config/convex/xm-convex.h b/gdb/config/convex/xm-convex.h
index cfcee4e..8552a3a 100644
--- a/gdb/config/convex/xm-convex.h
+++ b/gdb/config/convex/xm-convex.h
@@ -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 */
diff --git a/gdb/config/m68k/altos.mh b/gdb/config/m68k/altos.mh
index 1073751..51415be 100644
--- a/gdb/config/m68k/altos.mh
+++ b/gdb/config/m68k/altos.mh
@@ -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
diff --git a/gdb/config/m68k/altos.mt b/gdb/config/m68k/altos.mt
index 521e958..7dc654b 100644
--- a/gdb/config/m68k/altos.mt
+++ b/gdb/config/m68k/altos.mt
@@ -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
diff --git a/gdb/config/m68k/tm-altos.h b/gdb/config/m68k/tm-altos.h
index 23c5653..4483aa0 100644
--- a/gdb/config/m68k/tm-altos.h
+++ b/gdb/config/m68k/tm-altos.h
@@ -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" */
diff --git a/gdb/config/m68k/xm-altos.h b/gdb/config/m68k/xm-altos.h
index ca93bd1..008f769 100644
--- a/gdb/config/m68k/xm-altos.h
+++ b/gdb/config/m68k/xm-altos.h
@@ -1,202 +1,202 @@
-/* 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)))
-
-
-#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 */
+/* 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 */
diff --git a/gdb/configure.host b/gdb/configure.host
index 0a4695f..50e4f6b 100644
--- a/gdb/configure.host
+++ b/gdb/configure.host
@@ -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 ;;
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 38ac1e9..dbe822a 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -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 ;;
diff --git a/gdb/convex-tdep.c b/gdb/convex-tdep.c
index 66161e7..4e388d1 100644
--- a/gdb/convex-tdep.c
+++ b/gdb/convex-tdep.c
@@ -1,1277 +1,1277 @@
-/* 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;
-}
-
-/* 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);
- }
-}
-
-#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]))
-
-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,
-};
-
-/* 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;
-}
-
-
-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 */
+/* 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 */
+/* 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 */
+/* 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 */
+/* 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 */
+/* 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 } */
diff --git a/gdb/convex-xdep.c b/gdb/convex-xdep.c
index ad128c1..60117ce 100644
--- a/gdb/convex-xdep.c
+++ b/gdb/convex-xdep.c
@@ -1,963 +1,963 @@
-/* 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 ();
-
-
-/* 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);
-}
-
-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 */
+/* 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 */
+/* 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 } */
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 11124c7..10e4ef7 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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
diff --git a/gdb/doc/Makefile.in b/gdb/doc/Makefile.in
index 4bcd62e..f81e583 100644
--- a/gdb/doc/Makefile.in
+++ b/gdb/doc/Makefile.in
@@ -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
diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo
index 10e5278..4db5212 100644
--- a/gdb/doc/gdbint.texinfo
+++ b/gdb/doc/gdbint.texinfo
@@ -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
diff --git a/gdb/doc/remote.texi b/gdb/doc/remote.texi
index adf8e00..7b3c057 100644
--- a/gdb/doc/remote.texi
+++ b/gdb/doc/remote.texi
@@ -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
diff --git a/gdb/doc/stabs.texinfo b/gdb/doc/stabs.texinfo
index 2e4f7b8..8239ce7 100644
--- a/gdb/doc/stabs.texinfo
+++ b/gdb/doc/stabs.texinfo
@@ -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}.
diff --git a/gdb/event-loop.c b/gdb/event-loop.c
index fc20df1..1e22e06 100644
--- a/gdb/event-loop.c
+++ b/gdb/event-loop.c
@@ -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));
@@ -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;
+}
+
+/* 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;
diff --git a/gdb/event-loop.h b/gdb/event-loop.h
index 5305a67..e06fb8c 100644
--- a/gdb/event-loop.h
+++ b/gdb/event-loop.h
@@ -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 *));
diff --git a/gdb/event-top.c b/gdb/event-top.c
index f658b71..223e670 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -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;
/* 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;
}
}
diff --git a/gdb/frame.h b/gdb/frame.h
index f15d65d..b00d8f1 100644
--- a/gdb/frame.h
+++ b/gdb/frame.h
@@ -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;
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index b016e13..d55050f 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -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}
diff --git a/gdb/main.c b/gdb/main.c
index 12522ff..09f4cff 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -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)
diff --git a/gdb/nlm/Makefile.in b/gdb/nlm/Makefile.in
index 5451138..b494da9 100644
--- a/gdb/nlm/Makefile.in
+++ b/gdb/nlm/Makefile.in
@@ -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
diff --git a/gdb/rdi-share/Makefile.in b/gdb/rdi-share/Makefile.in
index 1141005..33274da 100644
--- a/gdb/rdi-share/Makefile.in
+++ b/gdb/rdi-share/Makefile.in
@@ -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:
diff --git a/gdb/remote.c b/gdb/remote.c
index e1b0b1e..8fadca8 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -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.");
diff --git a/gdb/solib.c b/gdb/solib.c
index aa2dd46..2bd8a2e 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -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)
diff --git a/gdb/symtab.c b/gdb/symtab.c
index b51d214..58da789 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -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
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 93630d2..376c575 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
index d763450..c3b94f7 100644
--- a/gdb/testsuite/Makefile.in
+++ b/gdb/testsuite/Makefile.in
@@ -89,6 +89,8 @@ INFODIRS=doc
info:
install-info:
dvi:
+html:
+install-html:
install:
diff --git a/gdb/testsuite/gdb.base/all-bin.exp b/gdb/testsuite/gdb.base/all-bin.exp
index 4d6662b..5208ef3 100644
--- a/gdb/testsuite/gdb.base/all-bin.exp
+++ b/gdb/testsuite/gdb.base/all-bin.exp
@@ -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" }
diff --git a/gdb/testsuite/gdb.base/annota1.c b/gdb/testsuite/gdb.base/annota1.c
index 7eeee77..7d423e0 100644
--- a/gdb/testsuite/gdb.base/annota1.c
+++ b/gdb/testsuite/gdb.base/annota1.c
@@ -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 };
diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp
index 4239822..ba24fe9 100644
--- a/gdb/testsuite/gdb.base/annota1.exp
+++ b/gdb/testsuite/gdb.base/annota1.exp
@@ -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)" }
diff --git a/gdb/testsuite/gdb.base/bitfields.c b/gdb/testsuite/gdb.base/bitfields.c
index 930b244..3e6b2e6 100644
--- a/gdb/testsuite/gdb.base/bitfields.c
+++ b/gdb/testsuite/gdb.base/bitfields.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/break.c b/gdb/testsuite/gdb.base/break.c
index 491d6e5..6acbf9b 100644
--- a/gdb/testsuite/gdb.base/break.c
+++ b/gdb/testsuite/gdb.base/break.c
@@ -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);
diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp
index 300a4e6..115cd80 100644
--- a/gdb/testsuite/gdb.base/break.exp
+++ b/gdb/testsuite/gdb.base/break.exp
@@ -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"}
diff --git a/gdb/testsuite/gdb.base/call-ar-st.c b/gdb/testsuite/gdb.base/call-ar-st.c
index bb30e50..6d1b999 100644
--- a/gdb/testsuite/gdb.base/call-ar-st.c
+++ b/gdb/testsuite/gdb.base/call-ar-st.c
@@ -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;
diff --git a/gdb/testsuite/gdb.base/call-ar-st.exp b/gdb/testsuite/gdb.base/call-ar-st.exp
index d737219..5662eb7 100644
--- a/gdb/testsuite/gdb.base/call-ar-st.exp
+++ b/gdb/testsuite/gdb.base/call-ar-st.exp
@@ -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)
diff --git a/gdb/testsuite/gdb.base/call-rt-st.c b/gdb/testsuite/gdb.base/call-rt-st.c
index ad40a70..712f70e 100644
--- a/gdb/testsuite/gdb.base/call-rt-st.c
+++ b/gdb/testsuite/gdb.base/call-rt-st.c
@@ -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;
diff --git a/gdb/testsuite/gdb.base/call-rt-st.exp b/gdb/testsuite/gdb.base/call-rt-st.exp
index 2c419ae..a1cca70 100644
--- a/gdb/testsuite/gdb.base/call-rt-st.exp
+++ b/gdb/testsuite/gdb.base/call-rt-st.exp
@@ -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"}
}
diff --git a/gdb/testsuite/gdb.base/call-strs.c b/gdb/testsuite/gdb.base/call-strs.c
index 02870e0..f3bc8da 100644
--- a/gdb/testsuite/gdb.base/call-strs.c
+++ b/gdb/testsuite/gdb.base/call-strs.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/call-strs.exp b/gdb/testsuite/gdb.base/call-strs.exp
index 1d4cc4a..84c1ef5 100644
--- a/gdb/testsuite/gdb.base/call-strs.exp
+++ b/gdb/testsuite/gdb.base/call-strs.exp
@@ -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
-~
diff --git a/gdb/testsuite/gdb.base/callfuncs.c b/gdb/testsuite/gdb.base/callfuncs.c
index 56b9ba8..ecf9026 100644
--- a/gdb/testsuite/gdb.base/callfuncs.c
+++ b/gdb/testsuite/gdb.base/callfuncs.c
@@ -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));
}
diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp
index 19b5c96..7db87b7 100644
--- a/gdb/testsuite/gdb.base/callfuncs.exp
+++ b/gdb/testsuite/gdb.base/callfuncs.exp
@@ -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" ".*"
diff --git a/gdb/testsuite/gdb.base/callfuncs2.c b/gdb/testsuite/gdb.base/callfuncs2.c
index ac14d45..550a970 100644
--- a/gdb/testsuite/gdb.base/callfuncs2.c
+++ b/gdb/testsuite/gdb.base/callfuncs2.c
@@ -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));
}
diff --git a/gdb/testsuite/gdb.base/callfuncs2.exp b/gdb/testsuite/gdb.base/callfuncs2.exp
index 8b17b63..078e467 100644
--- a/gdb/testsuite/gdb.base/callfuncs2.exp
+++ b/gdb/testsuite/gdb.base/callfuncs2.exp
@@ -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" ".*"
diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
index 72356ec..62d9f10 100644
--- a/gdb/testsuite/gdb.base/commands.exp
+++ b/gdb/testsuite/gdb.base/commands.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index b4d97f0..327f37d 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -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'"}
diff --git a/gdb/testsuite/gdb.base/condbreak.c b/gdb/testsuite/gdb.base/condbreak.c
index 491d6e5..6acbf9b 100644
--- a/gdb/testsuite/gdb.base/condbreak.c
+++ b/gdb/testsuite/gdb.base/condbreak.c
@@ -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);
diff --git a/gdb/testsuite/gdb.base/condbreak.exp b/gdb/testsuite/gdb.base/condbreak.exp
index 281616b..8f8f11c 100644
--- a/gdb/testsuite/gdb.base/condbreak.exp
+++ b/gdb/testsuite/gdb.base/condbreak.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/constvars.exp b/gdb/testsuite/gdb.base/constvars.exp
index 518e5ca..312b524 100644
--- a/gdb/testsuite/gdb.base/constvars.exp
+++ b/gdb/testsuite/gdb.base/constvars.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp
index 83b78c4..b267730 100644
--- a/gdb/testsuite/gdb.base/corefile.exp
+++ b/gdb/testsuite/gdb.base/corefile.exp
@@ -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."
diff --git a/gdb/testsuite/gdb.base/coremaker.c b/gdb/testsuite/gdb.base/coremaker.c
index 56239e9..4bb16d4 100644
--- a/gdb/testsuite/gdb.base/coremaker.c
+++ b/gdb/testsuite/gdb.base/coremaker.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp
index 2a342aa..528d5a9 100644
--- a/gdb/testsuite/gdb.base/default.exp
+++ b/gdb/testsuite/gdb.base/default.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/define.exp b/gdb/testsuite/gdb.base/define.exp
index 1cd06a9..d4423da 100644
--- a/gdb/testsuite/gdb.base/define.exp
+++ b/gdb/testsuite/gdb.base/define.exp
@@ -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"}
diff --git a/gdb/testsuite/gdb.base/display.exp b/gdb/testsuite/gdb.base/display.exp
index 638072c..59ac18d 100644
--- a/gdb/testsuite/gdb.base/display.exp
+++ b/gdb/testsuite/gdb.base/display.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/ena-dis-br.exp b/gdb/testsuite/gdb.base/ena-dis-br.exp
index f5656d8..f7be986 100644
--- a/gdb/testsuite/gdb.base/ena-dis-br.exp
+++ b/gdb/testsuite/gdb.base/ena-dis-br.exp
@@ -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"}
diff --git a/gdb/testsuite/gdb.base/ending-run.c b/gdb/testsuite/gdb.base/ending-run.c
index 56335cf..0936146 100644
--- a/gdb/testsuite/gdb.base/ending-run.c
+++ b/gdb/testsuite/gdb.base/ending-run.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp
index 8f102fb..e36c975 100644
--- a/gdb/testsuite/gdb.base/ending-run.exp
+++ b/gdb/testsuite/gdb.base/ending-run.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/eval-skip.exp b/gdb/testsuite/gdb.base/eval-skip.exp
index 4e17e61..c82652f 100644
--- a/gdb/testsuite/gdb.base/eval-skip.exp
+++ b/gdb/testsuite/gdb.base/eval-skip.exp
@@ -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))" }
diff --git a/gdb/testsuite/gdb.base/exprs.c b/gdb/testsuite/gdb.base/exprs.c
index e5c7351..b35c3a5 100644
--- a/gdb/testsuite/gdb.base/exprs.c
+++ b/gdb/testsuite/gdb.base/exprs.c
@@ -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;
diff --git a/gdb/testsuite/gdb.base/exprs.exp b/gdb/testsuite/gdb.base/exprs.exp
index cdf33dc..f31407c 100644
--- a/gdb/testsuite/gdb.base/exprs.exp
+++ b/gdb/testsuite/gdb.base/exprs.exp
@@ -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)"
diff --git a/gdb/testsuite/gdb.base/funcargs.c b/gdb/testsuite/gdb.base/funcargs.c
index ead67e5..98d390b 100644
--- a/gdb/testsuite/gdb.base/funcargs.c
+++ b/gdb/testsuite/gdb.base/funcargs.c
@@ -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 () {}
-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;
}
diff --git a/gdb/testsuite/gdb.base/funcargs.exp b/gdb/testsuite/gdb.base/funcargs.exp
index cc7a6d6..baa4ab6 100644
--- a/gdb/testsuite/gdb.base/funcargs.exp
+++ b/gdb/testsuite/gdb.base/funcargs.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/interrupt.c b/gdb/testsuite/gdb.base/interrupt.c
index 120697b..a895d4b 100644
--- a/gdb/testsuite/gdb.base/interrupt.c
+++ b/gdb/testsuite/gdb.base/interrupt.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/interrupt.exp b/gdb/testsuite/gdb.base/interrupt.exp
index 60cf838..379df02 100644
--- a/gdb/testsuite/gdb.base/interrupt.exp
+++ b/gdb/testsuite/gdb.base/interrupt.exp
@@ -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)" }
diff --git a/gdb/testsuite/gdb.base/jump.c b/gdb/testsuite/gdb.base/jump.c
index e16d0fd..aae94f7 100644
--- a/gdb/testsuite/gdb.base/jump.c
+++ b/gdb/testsuite/gdb.base/jump.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/jump.exp b/gdb/testsuite/gdb.base/jump.exp
index c110e21..cca9094 100644
--- a/gdb/testsuite/gdb.base/jump.exp
+++ b/gdb/testsuite/gdb.base/jump.exp
@@ -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 $"\
diff --git a/gdb/testsuite/gdb.base/langs.exp b/gdb/testsuite/gdb.base/langs.exp
index 464c797..9ed1e91 100644
--- a/gdb/testsuite/gdb.base/langs.exp
+++ b/gdb/testsuite/gdb.base/langs.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/langs0.c b/gdb/testsuite/gdb.base/langs0.c
index 69c0ce8..1477a32 100644
--- a/gdb/testsuite/gdb.base/langs0.c
+++ b/gdb/testsuite/gdb.base/langs0.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/langs1.c b/gdb/testsuite/gdb.base/langs1.c
index 7842259..8ffd13f 100644
--- a/gdb/testsuite/gdb.base/langs1.c
+++ b/gdb/testsuite/gdb.base/langs1.c
@@ -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"
diff --git a/gdb/testsuite/gdb.base/langs2.c b/gdb/testsuite/gdb.base/langs2.c
index be2a60c..502b800 100644
--- a/gdb/testsuite/gdb.base/langs2.c
+++ b/gdb/testsuite/gdb.base/langs2.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp
index f597b9a..3652be9 100644
--- a/gdb/testsuite/gdb.base/list.exp
+++ b/gdb/testsuite/gdb.base/list.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/list0.c b/gdb/testsuite/gdb.base/list0.c
index a5561a7..b50fdd4 100644
--- a/gdb/testsuite/gdb.base/list0.c
+++ b/gdb/testsuite/gdb.base/list0.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/list1.c b/gdb/testsuite/gdb.base/list1.c
index 51632b9..6094104 100644
--- a/gdb/testsuite/gdb.base/list1.c
+++ b/gdb/testsuite/gdb.base/list1.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/logical.exp b/gdb/testsuite/gdb.base/logical.exp
index 0458e61..9d410c6 100644
--- a/gdb/testsuite/gdb.base/logical.exp
+++ b/gdb/testsuite/gdb.base/logical.exp
@@ -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" }
diff --git a/gdb/testsuite/gdb.base/long_long.c b/gdb/testsuite/gdb.base/long_long.c
index 096528d..a76e279 100644
--- a/gdb/testsuite/gdb.base/long_long.c
+++ b/gdb/testsuite/gdb.base/long_long.c
@@ -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() {
diff --git a/gdb/testsuite/gdb.base/long_long.exp b/gdb/testsuite/gdb.base/long_long.exp
index aca59c2..52e6ff5 100644
--- a/gdb/testsuite/gdb.base/long_long.exp
+++ b/gdb/testsuite/gdb.base/long_long.exp
@@ -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" ".*.*" ""
diff --git a/gdb/testsuite/gdb.base/mips_pro.c b/gdb/testsuite/gdb.base/mips_pro.c
index d2d1884..b659d82 100644
--- a/gdb/testsuite/gdb.base/mips_pro.c
+++ b/gdb/testsuite/gdb.base/mips_pro.c
@@ -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();
diff --git a/gdb/testsuite/gdb.base/mips_pro.exp b/gdb/testsuite/gdb.base/mips_pro.exp
index 2b94de6..ea2461e 100644
--- a/gdb/testsuite/gdb.base/mips_pro.exp
+++ b/gdb/testsuite/gdb.base/mips_pro.exp
@@ -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.*"
}
diff --git a/gdb/testsuite/gdb.base/miscexprs.exp b/gdb/testsuite/gdb.base/miscexprs.exp
index d42e5ab..9778423 100644
--- a/gdb/testsuite/gdb.base/miscexprs.exp
+++ b/gdb/testsuite/gdb.base/miscexprs.exp
@@ -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 {
diff --git a/gdb/testsuite/gdb.base/nodebug.c b/gdb/testsuite/gdb.base/nodebug.c
index 4aad099..3e0a4ce 100644
--- a/gdb/testsuite/gdb.base/nodebug.c
+++ b/gdb/testsuite/gdb.base/nodebug.c
@@ -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. */
diff --git a/gdb/testsuite/gdb.base/nodebug.exp b/gdb/testsuite/gdb.base/nodebug.exp
index e4f8a35..684476e 100644
--- a/gdb/testsuite/gdb.base/nodebug.exp
+++ b/gdb/testsuite/gdb.base/nodebug.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/opaque.exp b/gdb/testsuite/gdb.base/opaque.exp
index 92e6459..a3bc26f 100644
--- a/gdb/testsuite/gdb.base/opaque.exp
+++ b/gdb/testsuite/gdb.base/opaque.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/opaque0.c b/gdb/testsuite/gdb.base/opaque0.c
index c6e239e..5ec4a2a 100644
--- a/gdb/testsuite/gdb.base/opaque0.c
+++ b/gdb/testsuite/gdb.base/opaque0.c
@@ -7,6 +7,9 @@
struct foo *foop;
extern struct foo *getfoo ();
+#ifdef PROTOTYPES
+extern void putfoo (struct foo *foop);
+#endif
int main ()
{
diff --git a/gdb/testsuite/gdb.base/opaque1.c b/gdb/testsuite/gdb.base/opaque1.c
index 4a3c855..c34f7aa 100644
--- a/gdb/testsuite/gdb.base/opaque1.c
+++ b/gdb/testsuite/gdb.base/opaque1.c
@@ -8,7 +8,7 @@ struct foo *getfoo ()
return (&afoo);
}
-#ifdef __STDC__
+#ifdef PROTOTYPES
void putfoo (struct foo *foop)
#else
void putfoo (foop)
diff --git a/gdb/testsuite/gdb.base/pointers.exp b/gdb/testsuite/gdb.base/pointers.exp
index 7a0e44f..6b9f135 100644
--- a/gdb/testsuite/gdb.base/pointers.exp
+++ b/gdb/testsuite/gdb.base/pointers.exp
@@ -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" }
diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c
index 6f2238b..2708074 100644
--- a/gdb/testsuite/gdb.base/printcmds.c
+++ b/gdb/testsuite/gdb.base/printcmds.c
@@ -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();
diff --git a/gdb/testsuite/gdb.base/ptype.c b/gdb/testsuite/gdb.base/ptype.c
index 8013435..07d6afe 100644
--- a/gdb/testsuite/gdb.base/ptype.c
+++ b/gdb/testsuite/gdb.base/ptype.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/ptype.exp b/gdb/testsuite/gdb.base/ptype.exp
index 1ef6771..98d4586 100644
--- a/gdb/testsuite/gdb.base/ptype.exp
+++ b/gdb/testsuite/gdb.base/ptype.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/recurse.c b/gdb/testsuite/gdb.base/recurse.c
index 1d6892d..7981778 100644
--- a/gdb/testsuite/gdb.base/recurse.c
+++ b/gdb/testsuite/gdb.base/recurse.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/relational.exp b/gdb/testsuite/gdb.base/relational.exp
index 6a0b38a..fd03a41 100644
--- a/gdb/testsuite/gdb.base/relational.exp
+++ b/gdb/testsuite/gdb.base/relational.exp
@@ -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" }
diff --git a/gdb/testsuite/gdb.base/restore.c b/gdb/testsuite/gdb.base/restore.c
index a65d648..2469430 100644
--- a/gdb/testsuite/gdb.base/restore.c
+++ b/gdb/testsuite/gdb.base/restore.c
@@ -248,7 +248,7 @@ driver (void)
/* generated code ends here */
-main ()
+int main ()
{
register int local;
#ifdef usestubs
diff --git a/gdb/testsuite/gdb.base/return.c b/gdb/testsuite/gdb.base/return.c
index e19d1a0..d11a4b5 100644
--- a/gdb/testsuite/gdb.base/return.c
+++ b/gdb/testsuite/gdb.base/return.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/run.c b/gdb/testsuite/gdb.base/run.c
index 40ec720..25b8a4a 100644
--- a/gdb/testsuite/gdb.base/run.c
+++ b/gdb/testsuite/gdb.base/run.c
@@ -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);
}
diff --git a/gdb/testsuite/gdb.base/scope.exp b/gdb/testsuite/gdb.base/scope.exp
index 6a92ca7..708bc42 100644
--- a/gdb/testsuite/gdb.base/scope.exp
+++ b/gdb/testsuite/gdb.base/scope.exp
@@ -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 ;
}
diff --git a/gdb/testsuite/gdb.base/scope0.c b/gdb/testsuite/gdb.base/scope0.c
index 3a1b89e..ad994fc 100644
--- a/gdb/testsuite/gdb.base/scope0.c
+++ b/gdb/testsuite/gdb.base/scope0.c
@@ -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 () {}
diff --git a/gdb/testsuite/gdb.base/scope1.c b/gdb/testsuite/gdb.base/scope1.c
index cccad6f..8c32522 100644
--- a/gdb/testsuite/gdb.base/scope1.c
+++ b/gdb/testsuite/gdb.base/scope1.c
@@ -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;
diff --git a/gdb/testsuite/gdb.base/sect-cmd.exp b/gdb/testsuite/gdb.base/sect-cmd.exp
index 27bde04..d07def5 100644
--- a/gdb/testsuite/gdb.base/sect-cmd.exp
+++ b/gdb/testsuite/gdb.base/sect-cmd.exp
@@ -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.
diff --git a/gdb/testsuite/gdb.base/setshow.c b/gdb/testsuite/gdb.base/setshow.c
index ed4e7a9..fbaba0f 100644
--- a/gdb/testsuite/gdb.base/setshow.c
+++ b/gdb/testsuite/gdb.base/setshow.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/setvar.c b/gdb/testsuite/gdb.base/setvar.c
index 7162155..969de0d 100644
--- a/gdb/testsuite/gdb.base/setvar.c
+++ b/gdb/testsuite/gdb.base/setvar.c
@@ -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. */
diff --git a/gdb/testsuite/gdb.base/setvar.exp b/gdb/testsuite/gdb.base/setvar.exp
index 96d3eb4..e7d31dc 100644
--- a/gdb/testsuite/gdb.base/setvar.exp
+++ b/gdb/testsuite/gdb.base/setvar.exp
@@ -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.
diff --git a/gdb/testsuite/gdb.base/shlib-call.exp b/gdb/testsuite/gdb.base/shlib-call.exp
index 414d742..4e1daac 100644
--- a/gdb/testsuite/gdb.base/shlib-call.exp
+++ b/gdb/testsuite/gdb.base/shlib-call.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/shmain.c b/gdb/testsuite/gdb.base/shmain.c
index dda5091..7013db5 100644
--- a/gdb/testsuite/gdb.base/shmain.c
+++ b/gdb/testsuite/gdb.base/shmain.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/shr1.c b/gdb/testsuite/gdb.base/shr1.c
index 0efaff5..a0257e4 100644
--- a/gdb/testsuite/gdb.base/shr1.c
+++ b/gdb/testsuite/gdb.base/shr1.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/shr2.c b/gdb/testsuite/gdb.base/shr2.c
index 94d5df9..de34986 100644
--- a/gdb/testsuite/gdb.base/shr2.c
+++ b/gdb/testsuite/gdb.base/shr2.c
@@ -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;
}
-
-
diff --git a/gdb/testsuite/gdb.base/sigall.c b/gdb/testsuite/gdb.base/sigall.c
index 1ab08e7..30d06f3 100644
--- a/gdb/testsuite/gdb.base/sigall.c
+++ b/gdb/testsuite/gdb.base/sigall.c
@@ -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 */
@@ -7,429 +8,784 @@
/* 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
{
}
@@ -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;
}
int
diff --git a/gdb/testsuite/gdb.base/signals.c b/gdb/testsuite/gdb.base/signals.c
index 280e6e7..f1ebcfc 100644
--- a/gdb/testsuite/gdb.base/signals.c
+++ b/gdb/testsuite/gdb.base/signals.c
@@ -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;
diff --git a/gdb/testsuite/gdb.base/signals.exp b/gdb/testsuite/gdb.base/signals.exp
index 16528f7..6511b2e 100644
--- a/gdb/testsuite/gdb.base/signals.exp
+++ b/gdb/testsuite/gdb.base/signals.exp
@@ -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.
diff --git a/gdb/testsuite/gdb.base/so-impl-ld.c b/gdb/testsuite/gdb.base/so-impl-ld.c
index a8fa189..9310bca 100644
--- a/gdb/testsuite/gdb.base/so-impl-ld.c
+++ b/gdb/testsuite/gdb.base/so-impl-ld.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/so-impl-ld.exp b/gdb/testsuite/gdb.base/so-impl-ld.exp
index a52aa1f..beb2a6a 100644
--- a/gdb/testsuite/gdb.base/so-impl-ld.exp
+++ b/gdb/testsuite/gdb.base/so-impl-ld.exp
@@ -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"}
diff --git a/gdb/testsuite/gdb.base/so-indr-cl.c b/gdb/testsuite/gdb.base/so-indr-cl.c
index dc29bad..f31800d 100644
--- a/gdb/testsuite/gdb.base/so-indr-cl.c
+++ b/gdb/testsuite/gdb.base/so-indr-cl.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/so-indr-cl.exp b/gdb/testsuite/gdb.base/so-indr-cl.exp
index e37878e..6847289 100644
--- a/gdb/testsuite/gdb.base/so-indr-cl.exp
+++ b/gdb/testsuite/gdb.base/so-indr-cl.exp
@@ -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"}
diff --git a/gdb/testsuite/gdb.base/solib.c b/gdb/testsuite/gdb.base/solib.c
index ff9d359..6fb9f5e 100644
--- a/gdb/testsuite/gdb.base/solib.c
+++ b/gdb/testsuite/gdb.base/solib.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/solib.exp b/gdb/testsuite/gdb.base/solib.exp
index f452194..5e25b68 100644
--- a/gdb/testsuite/gdb.base/solib.exp
+++ b/gdb/testsuite/gdb.base/solib.exp
@@ -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
diff --git a/gdb/testsuite/gdb.base/solib1.c b/gdb/testsuite/gdb.base/solib1.c
index eecf024..2e51750 100644
--- a/gdb/testsuite/gdb.base/solib1.c
+++ b/gdb/testsuite/gdb.base/solib1.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/solib2.c b/gdb/testsuite/gdb.base/solib2.c
index 2cd4513..8c69d8b 100644
--- a/gdb/testsuite/gdb.base/solib2.c
+++ b/gdb/testsuite/gdb.base/solib2.c
@@ -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
diff --git a/gdb/testsuite/gdb.base/step-test.c b/gdb/testsuite/gdb.base/step-test.c
index 7130725..a1e1dc4 100644
--- a/gdb/testsuite/gdb.base/step-test.c
+++ b/gdb/testsuite/gdb.base/step-test.c
@@ -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 () {
diff --git a/gdb/testsuite/gdb.base/step-test.exp b/gdb/testsuite/gdb.base/step-test.exp
index 85744d7..6eeda0b 100644
--- a/gdb/testsuite/gdb.base/step-test.exp
+++ b/gdb/testsuite/gdb.base/step-test.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.base/term.exp b/gdb/testsuite/gdb.base/term.exp
index 211a94c..26c1032 100644
--- a/gdb/testsuite/gdb.base/term.exp
+++ b/gdb/testsuite/gdb.base/term.exp
@@ -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}
diff --git a/gdb/testsuite/gdb.base/twice.c b/gdb/testsuite/gdb.base/twice.c
index c50a2b3..09eb2dd 100644
--- a/gdb/testsuite/gdb.base/twice.c
+++ b/gdb/testsuite/gdb.base/twice.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/twice.exp b/gdb/testsuite/gdb.base/twice.exp
index 8d8c403..4c96b36 100644
--- a/gdb/testsuite/gdb.base/twice.exp
+++ b/gdb/testsuite/gdb.base/twice.exp
@@ -60,4 +60,5 @@ if [runto_main] then {
gdb_test "step" "nothing \\(\\) at.*"
}
+remote_exec build "rm -f twice.c"
return 0
diff --git a/gdb/testsuite/gdb.base/varargs.c b/gdb/testsuite/gdb.base/varargs.c
index 729d7df..6664253 100644
--- a/gdb/testsuite/gdb.base/varargs.c
+++ b/gdb/testsuite/gdb.base/varargs.c
@@ -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 */
diff --git a/gdb/testsuite/gdb.base/varargs.exp b/gdb/testsuite/gdb.base/varargs.exp
index 72fd2f5..2fb8f3b 100644
--- a/gdb/testsuite/gdb.base/varargs.exp
+++ b/gdb/testsuite/gdb.base/varargs.exp
@@ -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 {
diff --git a/gdb/testsuite/gdb.base/volatile.exp b/gdb/testsuite/gdb.base/volatile.exp
index a2a2b59..7796ed5 100644
--- a/gdb/testsuite/gdb.base/volatile.exp
+++ b/gdb/testsuite/gdb.base/volatile.exp
@@ -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" }
diff --git a/gdb/testsuite/gdb.base/watchpoint.c b/gdb/testsuite/gdb.base/watchpoint.c
index bd54f3e..14ccecd 100644
--- a/gdb/testsuite/gdb.base/watchpoint.c
+++ b/gdb/testsuite/gdb.base/watchpoint.c
@@ -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;
}
diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp
index 53f2e8b..7dced3b 100644
--- a/gdb/testsuite/gdb.base/watchpoint.exp
+++ b/gdb/testsuite/gdb.base/watchpoint.exp
@@ -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"}
+ }
+ }
}
diff --git a/gdb/testsuite/gdb.base/whatis.c b/gdb/testsuite/gdb.base/whatis.c
index 6d8d1e6..63d5d3d 100644
--- a/gdb/testsuite/gdb.base/whatis.c
+++ b/gdb/testsuite/gdb.base/whatis.c
@@ -188,7 +188,7 @@ enum cars {chevy, ford, porsche} clunker;
/***********/
-main ()
+int main ()
{
#ifdef usestubs
set_debug_traps();
diff --git a/gdb/testsuite/gdb.base/whatis.exp b/gdb/testsuite/gdb.base/whatis.exp
index 1f4e8b3..d540e4c 100644
--- a/gdb/testsuite/gdb.base/whatis.exp
+++ b/gdb/testsuite/gdb.base/whatis.exp
@@ -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" \
diff --git a/gdb/testsuite/gdb.c++/member-ptr.exp b/gdb/testsuite/gdb.c++/member-ptr.exp
index 7b4dd7c..9bf2431 100644
--- a/gdb/testsuite/gdb.c++/member-ptr.exp
+++ b/gdb/testsuite/gdb.c++/member-ptr.exp
@@ -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."
}
diff --git a/gdb/testsuite/gdb.chill/ChangeLog b/gdb/testsuite/gdb.chill/ChangeLog
index 9db44ea..fe5a317 100644
--- a/gdb/testsuite/gdb.chill/ChangeLog
+++ b/gdb/testsuite/gdb.chill/ChangeLog
@@ -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.
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 95ed534..cb277be 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -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;
diff --git a/gdb/top.c b/gdb/top.c
index af5c40b..fa0c9d0 100644
--- 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;
diff --git a/gdb/utils.c b/gdb/utils.c
index c2c12dd..03f0aa4 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -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
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 26bd235..d585aa6 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -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
diff --git a/sim/common/cgen-engine.h b/sim/common/cgen-engine.h
index 9421332..e7d27e0 100644
--- a/sim/common/cgen-engine.h
+++ b/sim/common/cgen-engine.h
@@ -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) \
diff --git a/sim/common/genmloop.sh b/sim/common/genmloop.sh
index 865fe72..6720799 100644
--- a/sim/common/genmloop.sh
+++ b/sim/common/genmloop.sh
@@ -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;
}
diff --git a/sim/mcore/ChangeLog b/sim/mcore/ChangeLog
index f8b9d93..7bb8877 100644
--- a/sim/mcore/ChangeLog
+++ b/sim/mcore/ChangeLog
@@ -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.
diff --git a/sim/mcore/sysdep.h b/sim/mcore/sysdep.h
index adf9b5e..e2e92e1 100644
--- a/sim/mcore/sysdep.h
+++ b/sim/mcore/sysdep.h
@@ -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();