+Thu Apr 4 10:09:35 1991 John Gilmore (gnu at cygint.cygnus.com)
+
+ * tm-i386v.h (FLOAT_INFO): Don't define it, since the code
+ for printing the float info is host-dependent, not
+ target-dependent. FIXME.
+ * i386-pinsn.c: Move #includes to top, remove useless ones.
+ * i386-tdep.c: Don't bother including <.../reg.h> since we
+ don't use it (and it doesn't exist on host systems).
+
+ * ieee-float.c (ieee_extended_to_double): Convert NaN to Inf.
+ Convert negative numbers properly.
+ (ieee_test): Make numbers really random; fix format arg.
+
+ * infcmd.c (attach_command, detach_command): Don't repeat on CR.
+ * core.c (core_detach): Unpush core_ops, which might not be on
+ top. We used to just pop the top, which broke things. Don't
+ need dont_repeat() any more.
+ (core_file_command): Psst! Don't repeat it.
+ * remote-nindy.c (nindy_detach): Don't need dont_repeat() now.
+ * expprint.c (print_subexp): Avoid switch fallthru on
+ BINOP_ASSIGN_MODIFY, so we can print += and such.
+ * frame.h: Fix typo.
+ * inflow.c (kill_command): After killing inferior, print our
+ current frame in the core file, if we have one.
+ (generic_mourn_inferior): When inferior dies, either select
+ the current frame (in the new target, e.g. core file), or
+ set both the current and selected frames to NULL.
+
+ Changes from Peter Schauer.
+
+ * infptrace.c: Avoid <sys/ptrace.h> on USG.
+
+ * Make all file names fit in 14 characters (sigh and damn!):
+ mv hp300hpux-xdep.c hp300ux-xdep.c
+ mv symmetry-xdep.c symm-xdep.c
+ mv symmetry-tdep.c symm-tdep.c
+ mv convex-opcode.h convx-opcode.h
+ mv tm-vxworks960.h tm-vx960.h
+ mv tm-vxworks68.h tm-vx68.h
+ mv Makefile.srcdir Makefile.sdir
+ mv gdb-int.texinfo gdbint.texinfo
+ mv remote-sa.m68k.shar rem-m68k.shar
+ mv remote-multi.shar rem-multi.shar
+ * Makefile.dist, README, config.gdb, convex-pinsn.c,
+ tconfig/symmetry, tconfig/vxworks960, tconfig/vxworks68,
+ xconfig/hp300hpux, xconfig/symmetry: Change names to shorter
+ names.
+
+ * command.c (user_info_1, user_info): New command for listing
+ the user-defined commands.
+
+Wed Apr 3 15:00:26 1991 John Gilmore (gnu at cygint.cygnus.com)
+
+ * dbxread.c (really_free_pendings): Clear file_symbols
+ and global_symbols after freeing them; otherwise, running
+ this function twice (if it appears twice on the cleanup
+ chain), we try to free things twice.
+
+ * dbxread.c (read_dbx_symtab): Calculate end_of_text_addr
+ based on text_addr (the address of text in core), not on addr (the
+ offset between text in the .o file and in core). This change
+ is from Peter Schauer.
+
+ * main.c: Define ALL_CLEANUPS as a cast of zero.
+ (return_to_top_level): Use it.
+ (main): Do all cleanups after each command run as part
+ of the gdb startup sequence. Also do all cleanups before
+ entering the command loop, and every time we exit the command
+ loop and reenter. Before, the cleanups from the startup sequence
+ were being left undone until the first error!
+ (command_loop): Rename do_nothing cleanup to command_loop_marker
+ so we can see it easily when examining the cleanup chain.
+ (init_signals): Add another do_nothing for signal handling.
+ (quit_command): Only try to kill target if it has execution.
+ Problems in the target stack got us into a state where
+ inferior_pid was nonzero but none of the targets had execution.
+ In this state you couldn't exit gdb.
+
+ * dbxread.c: Two changes from Peter Schauer.
+ (echo_command): Fflush output after an echo command.
+ (show_history): Pass all args to cmd_show_list.
+
+ * utils.c (init_malloc): Call mtrace to turn on tracing
+ if the environment variable MALLOC_TRACE is set to a file name.
+ * mtrace.c: Add source file which provides a log of every malloc,
+ free, and realloc to a trace file.
+ * mtrace.awk: Add source file which analyzes the trace file.
+ * Makefile.dist (GNU_MALLOC, MALLOCSRC): Add mtrace.{c,o,awk}.
+ (VERSION): Roll to 3.94.3.
+
+ * breakpoint.c (breakpoint_1): Add a space to "i watch" output.
+ (check_duplicates): Don't bother with watchpoints.
+ (set_raw_breakpoint): Comment about danger of this routine.
+ (watch_command): Parse and eval all args before calling
+ set_raw_breakpoint.
+
+ * solib.c (find_solib): Avoid error in referencing memory to
+ see if any more shared libraries have been added. This is
+ particularly useful if the target has terminated. Bug reported
+ by Peter Schauer.
+
+ Changes from Peter Schauer <pesrem@regent.e-technik.tu-muenchen.de>
+ in bringing up 3.94.2 on the Sun-3.
+
+ * Makefile.dist: Include CFLAGS in rule for cplus-dem.o.
+ * breakpoint.c (enable_breakpoint): Check for valid watchpoint
+ expression (in scope) before reenabling watchpoint.
+ * signame.c (init_sigs): Add missing declaration of i, fix
+ sys_siglist declaration.
+ * source.c (list_command): Fixed range computation to use
+ lines_to_list ().
+ * stack.c (backtrace_command): Do not allow command if target has
+ no stack, print informative error message.
+ * target.c (target_command): Do not write into command line
+ because this fails if the target command is used in a user defined
+ command. [This change was enhanced by gnu to support any-
+ unique-prefix matching on target names.]
+ * valops.c (value_struct_elt): Avoid infinite loop on an
+ erroneous attempt to print the member of function (try p main.p).
+
+Mon Apr 1 17:05:45 1991 John Gilmore (gnu at cygint.cygnus.com)
+
+ * expread.y (name_no_typename): Avoid reduce/reduce errors
+ caused by ambiguity in handling NAME_OR_INT and NAME_OR_UINT.
+ Since the GDB parser really doesn't use name_no_typename in a
+ name-only context, the parser can't tell the diff between
+ names and numbers here. Avoid allowing a name_no_typename
+ to be a NAME_OR_*INT to resolve the conflict.
+
+Sun Mar 31 20:12:07 1991 John Gilmore (gnu at cygint.cygnus.com)
+
+ Bugfixes from Mark Fox (markf@wrs.com) (test=testField.c):
+
+ * valprint.c (val_print_fields): bitfield printing didn't handle
+ byte order. Indirect through a few more fns to cope.
+
+ * values.c (modify_field): also cope with byte order.
+
Sat Mar 23 10:02:21 1991 John Gilmore (gnu at cygint.cygnus.com)
Cleanup for release 3.94.2:
# system malloc, uncomment the following two lines.
#GNU_MALLOC =
#MALLOC_CFLAGS = -DNO_MALLOC_CHECK
-GNU_MALLOC = gmalloc.o mcheck.o
+GNU_MALLOC = gmalloc.o mcheck.o mtrace.o
MALLOC_CFLAGS =
# Where is the "include" directory? Traditionally ../include or ./include
ADD_FILES = ${OBSTACK} ${REGEX} ${ALLOCA} ${GNU_MALLOC} ${GETOPT}
ADD_DEPS = ${OBSTACK} ${REGEX1} ${ALLOCA1} ${GNU_MALLOC} ${GETOPT}
-VERSION = 3.94.2
+VERSION = 3.94.3
DIST=gdb-$(VERSION)
LINT=/usr/5bin/lint
value.h
OPCODES = pn-opcode.h np1-opcode.h sparc-opcode.h vax-opcode.h m68k-opcode.h \
- ns32k-opcode.h convex-opcode.h pyr-opcode.h mips-opcode.h \
+ ns32k-opcode.h convx-opcode.h pyr-opcode.h mips-opcode.h \
am29k-opcode.h
-REMOTE_EXAMPLES = remote-sa.m68k.shar remote-multi.shar
+REMOTE_EXAMPLES = rem-m68k.shar rem-multi.shar
-MALLOCSRC = gmalloc.c mcheck.c ansidecl.h stdlib.h gmalloc.h stddef.h
+MALLOCSRC = gmalloc.c mcheck.c mtrace.c mtrace.awk \
+ ansidecl.h stdlib.h gmalloc.h stddef.h
GETOPTSRC = $(GETOPT_DIR)/getopt.c $(GETOPT_DIR)/getopt1.c
POSSLIBS_MAINDIR = obstack.h obstack.c regex.c regex.h alloca.c \
# tdesc-lib cannot be named simply tdesc, because if if it were GNU make
# would try to make it from tdesc.c.
# tdesc-lib removed from the list due to Motorola copyrights...gnu@cygnus.com
-OTHERS = Makefile.dist depend alldeps.mak Makefile.srcdir \
+OTHERS = Makefile.dist depend alldeps.mak Makefile.sdir \
createtags munch config.gdb config.status \
ChangeLog ChangeLog-3.x \
README TODO TAGS WHATS.NEW \
- gdb.texinfo gdb-int.texinfo gdbrc.tex threecol.tex \
+ gdb.texinfo gdbint.texinfo gdbrc.tex threecol.tex \
.gdbinit COPYING expread.tab.c stab.def \
copying.c Projects Convex.notes copying.awk \
saber.suppress standalone.c stuff.c kdb-start.c \
${srcdir}/munch ${RAPP_OBS} > rapp_init.c
${CC-LD} $(LDFLAGS) -o $@ rapp_init.c $(RAPP_OBS)
-Makefiles= Makefile.srcdir $(M_MAKEFILE) \
+Makefiles= Makefile.sdir $(M_MAKEFILE) \
${srcdir}/alldeps.mak ${srcdir}/Makefile.dist
MAKE_MAKEFILE= echo "M_MAKEFILE=$(M_MAKEFILE)" | \
# When used with GDB, the demangler should never look for leading underscores
# because GDB strips them off during symbol read-in. Thus -Dnounderscore.
cplus-dem.o : cplus-dem.c
- ${CC} -c -Dnounderscore `echo ${srcdir}/cplus-dem.c | sed 's,^\./,,'`
+ ${CC} -c ${CFLAGS} -Dnounderscore `echo ${srcdir}/cplus-dem.c | sed 's,^\./,,'`
you are back to debugging the core file -- you might even want to swap
back and forth between the two, or between two core files.
+Add a command for searching memory, a la adb. It specifies size,
+mask, value, start address. ADB searches until it finds it or hits
+an error (or is interrupted).
+
# Local Variables:
# mode: text
# End:
shell_escape (p, from_tty);
}
+static void
+user_info_1 (c, stream)
+ struct cmd_list_element *c;
+ FILE *stream;
+{
+ register struct command_line *cmdlines;
+
+ cmdlines = c->user_commands;
+ if (!cmdlines)
+ return;
+ fprintf_filtered (stream, "User command %s:\n", c->name);
+ while (cmdlines)
+ {
+ fprintf_filtered (stream, "%s\n", cmdlines->line);
+ cmdlines = cmdlines->next;
+ }
+ fputs_filtered ("\n", stream);
+}
+
+/* ARGSUSED */
+static void
+user_info (args, from_tty)
+ char *args;
+ int from_tty;
+{
+ struct cmd_list_element *c;
+ extern struct cmd_list_element *cmdlist;
+
+ if (args)
+ {
+ c = lookup_cmd (&args, cmdlist, "", 0, 1);
+ if (c->class != class_user)
+ error ("Not a user command.");
+ user_info_1 (c, stdout);
+ }
+ else
+ {
+ for (c = cmdlist; c; c = c->next)
+ {
+ if (c->class == class_user)
+ user_info_1 (c, stdout);
+ }
+ }
+}
+
void
_initialize_command ()
{
add_com ("make", class_support, make_command,
"Run the ``make'' program using the rest of the line as arguments.");
+
+ add_info ("user", user_info, "Show definitions of user defined commands.\n\
+Argument is the name of the user defined command.\n\
+With no argument, show definitions of all user defined commands.");
}
.)
;;
*)
- echo "srcdir=${srcdir}" >./Makefile.srcdir
+ echo "srcdir=${srcdir}" >./Makefile.sdir
grep -s "source ${srcdir}/.gdbinit" .gdbinit 2>/dev/null || \
echo "source ${srcdir}/.gdbinit" >> .gdbinit
if [ ! -d readline ]; then
unsigned i:5, j:5, k:2; /* operand formats */
};
-#include "convex-opcode.h"
+#include "convx-opcode.h"
unsigned char formdecode [] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
char *args;
int from_tty;
{
- dont_repeat ();
if (args)
error ("Too many arguments");
- pop_target ();
+ unpush_target (&core_ops);
if (from_tty)
printf ("No core file now.\n");
}
char *filename;
int from_tty;
{
+ dont_repeat (); /* Either way, seems bogus. */
if (!filename)
core_detach (filename, from_tty);
else
next1 = next->next;
free (next);
}
+ file_symbols = 0;
+
for (next = global_symbols; next; next = next1)
{
next1 = next->next;
free (next);
}
+ global_symbols = 0;
}
/* Take one of the lists of symbols and make a block from it.
#ifdef END_OF_TEXT_DEFAULT
end_of_text_addr = END_OF_TEXT_DEFAULT;
#else
- end_of_text_addr = addr + text_size;
+ end_of_text_addr = text_addr + text_size;
#endif
symtab_input_desc = desc; /* This is needed for fill_symbuf below */
-/* A Bison parser, made from ../expread.y */
+/* A Bison parser, made from expread.y */
#define INT 258
#define CHAR 259
#define DECREMENT 295
#define ARROW 296
-#line 29 "../expread.y"
+#line 29 "expread.y"
#include <stdio.h>
#include "defs.h"
/* Allow debugging of parsing. */
#define YYDEBUG 1
-#line 125 "../expread.y"
+#line 125 "expread.y"
typedef union
{
LONGEST lval;
767, 768, 770, 772, 775, 782, 784, 786, 788, 790,
792, 794, 796, 798, 801, 804, 807, 809, 811, 813,
817, 818, 824, 830, 839, 844, 851, 852, 853, 854,
- 855, 858, 859, 860, 861
+ 855, 858, 859
};
static const char * const yytname[] = { 0,
78, 78, 78, 78, 78, 79, 79, 79, 79, 79,
79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
80, 80, 80, 80, 81, 81, 82, 82, 82, 82,
- 82, 83, 83, 83, 83
+ 82, 83, 83
};
static const short yyr2[] = { 0,
1, 3, 6, 8, 9, 1, 1, 1, 1, 2,
3, 2, 3, 2, 2, 2, 2, 1, 2, 1,
1, 1, 1, 1, 1, 3, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
+ 1, 1, 1
};
static const short yydefact[] = { 0,
switch (yyn) {
case 3:
-#line 224 "../expread.y"
+#line 224 "expread.y"
{ write_exp_elt_opcode (BINOP_COMMA); ;
break;}
case 4:
-#line 229 "../expread.y"
+#line 229 "expread.y"
{ write_exp_elt_opcode (UNOP_IND); ;
break;}
case 5:
-#line 232 "../expread.y"
+#line 232 "expread.y"
{ write_exp_elt_opcode (UNOP_ADDR); ;
break;}
case 6:
-#line 235 "../expread.y"
+#line 235 "expread.y"
{ write_exp_elt_opcode (UNOP_NEG); ;
break;}
case 7:
-#line 239 "../expread.y"
+#line 239 "expread.y"
{ write_exp_elt_opcode (UNOP_ZEROP); ;
break;}
case 8:
-#line 243 "../expread.y"
+#line 243 "expread.y"
{ write_exp_elt_opcode (UNOP_LOGNOT); ;
break;}
case 9:
-#line 247 "../expread.y"
+#line 247 "expread.y"
{ write_exp_elt_opcode (UNOP_PREINCREMENT); ;
break;}
case 10:
-#line 251 "../expread.y"
+#line 251 "expread.y"
{ write_exp_elt_opcode (UNOP_PREDECREMENT); ;
break;}
case 11:
-#line 255 "../expread.y"
+#line 255 "expread.y"
{ write_exp_elt_opcode (UNOP_POSTINCREMENT); ;
break;}
case 12:
-#line 259 "../expread.y"
+#line 259 "expread.y"
{ write_exp_elt_opcode (UNOP_POSTDECREMENT); ;
break;}
case 13:
-#line 263 "../expread.y"
+#line 263 "expread.y"
{ write_exp_elt_opcode (UNOP_SIZEOF); ;
break;}
case 14:
-#line 267 "../expread.y"
+#line 267 "expread.y"
{ write_exp_elt_opcode (STRUCTOP_PTR);
write_exp_string (yyvsp[0].sval);
write_exp_elt_opcode (STRUCTOP_PTR); ;
break;}
case 15:
-#line 273 "../expread.y"
+#line 273 "expread.y"
{ write_exp_elt_opcode (STRUCTOP_MPTR); ;
break;}
case 16:
-#line 277 "../expread.y"
+#line 277 "expread.y"
{ write_exp_elt_opcode (STRUCTOP_STRUCT);
write_exp_string (yyvsp[0].sval);
write_exp_elt_opcode (STRUCTOP_STRUCT); ;
break;}
case 17:
-#line 283 "../expread.y"
+#line 283 "expread.y"
{ write_exp_elt_opcode (STRUCTOP_MEMBER); ;
break;}
case 18:
-#line 287 "../expread.y"
+#line 287 "expread.y"
{ write_exp_elt_opcode (BINOP_SUBSCRIPT); ;
break;}
case 19:
-#line 293 "../expread.y"
+#line 293 "expread.y"
{ start_arglist (); ;
break;}
case 20:
-#line 295 "../expread.y"
+#line 295 "expread.y"
{ write_exp_elt_opcode (OP_FUNCALL);
write_exp_elt_longcst ((LONGEST) end_arglist ());
write_exp_elt_opcode (OP_FUNCALL); ;
break;}
case 22:
-#line 304 "../expread.y"
+#line 304 "expread.y"
{ arglist_len = 1; ;
break;}
case 23:
-#line 308 "../expread.y"
+#line 308 "expread.y"
{ arglist_len++; ;
break;}
case 24:
-#line 312 "../expread.y"
+#line 312 "expread.y"
{ write_exp_elt_opcode (UNOP_MEMVAL);
write_exp_elt_type (yyvsp[-2].tval);
write_exp_elt_opcode (UNOP_MEMVAL); ;
break;}
case 25:
-#line 318 "../expread.y"
+#line 318 "expread.y"
{ write_exp_elt_opcode (UNOP_CAST);
write_exp_elt_type (yyvsp[-2].tval);
write_exp_elt_opcode (UNOP_CAST); ;
break;}
case 26:
-#line 324 "../expread.y"
+#line 324 "expread.y"
{ ;
break;}
case 27:
-#line 330 "../expread.y"
+#line 330 "expread.y"
{ write_exp_elt_opcode (BINOP_REPEAT); ;
break;}
case 28:
-#line 334 "../expread.y"
+#line 334 "expread.y"
{ write_exp_elt_opcode (BINOP_MUL); ;
break;}
case 29:
-#line 338 "../expread.y"
+#line 338 "expread.y"
{ write_exp_elt_opcode (BINOP_DIV); ;
break;}
case 30:
-#line 342 "../expread.y"
+#line 342 "expread.y"
{ write_exp_elt_opcode (BINOP_REM); ;
break;}
case 31:
-#line 346 "../expread.y"
+#line 346 "expread.y"
{ write_exp_elt_opcode (BINOP_ADD); ;
break;}
case 32:
-#line 350 "../expread.y"
+#line 350 "expread.y"
{ write_exp_elt_opcode (BINOP_SUB); ;
break;}
case 33:
-#line 354 "../expread.y"
+#line 354 "expread.y"
{ write_exp_elt_opcode (BINOP_LSH); ;
break;}
case 34:
-#line 358 "../expread.y"
+#line 358 "expread.y"
{ write_exp_elt_opcode (BINOP_RSH); ;
break;}
case 35:
-#line 362 "../expread.y"
+#line 362 "expread.y"
{ write_exp_elt_opcode (BINOP_EQUAL); ;
break;}
case 36:
-#line 366 "../expread.y"
+#line 366 "expread.y"
{ write_exp_elt_opcode (BINOP_NOTEQUAL); ;
break;}
case 37:
-#line 370 "../expread.y"
+#line 370 "expread.y"
{ write_exp_elt_opcode (BINOP_LEQ); ;
break;}
case 38:
-#line 374 "../expread.y"
+#line 374 "expread.y"
{ write_exp_elt_opcode (BINOP_GEQ); ;
break;}
case 39:
-#line 378 "../expread.y"
+#line 378 "expread.y"
{ write_exp_elt_opcode (BINOP_LESS); ;
break;}
case 40:
-#line 382 "../expread.y"
+#line 382 "expread.y"
{ write_exp_elt_opcode (BINOP_GTR); ;
break;}
case 41:
-#line 386 "../expread.y"
+#line 386 "expread.y"
{ write_exp_elt_opcode (BINOP_LOGAND); ;
break;}
case 42:
-#line 390 "../expread.y"
+#line 390 "expread.y"
{ write_exp_elt_opcode (BINOP_LOGXOR); ;
break;}
case 43:
-#line 394 "../expread.y"
+#line 394 "expread.y"
{ write_exp_elt_opcode (BINOP_LOGIOR); ;
break;}
case 44:
-#line 398 "../expread.y"
+#line 398 "expread.y"
{ write_exp_elt_opcode (BINOP_AND); ;
break;}
case 45:
-#line 402 "../expread.y"
+#line 402 "expread.y"
{ write_exp_elt_opcode (BINOP_OR); ;
break;}
case 46:
-#line 406 "../expread.y"
+#line 406 "expread.y"
{ write_exp_elt_opcode (TERNOP_COND); ;
break;}
case 47:
-#line 410 "../expread.y"
+#line 410 "expread.y"
{ write_exp_elt_opcode (BINOP_ASSIGN); ;
break;}
case 48:
-#line 414 "../expread.y"
+#line 414 "expread.y"
{ write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
write_exp_elt_opcode (yyvsp[-1].opcode);
write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); ;
break;}
case 49:
-#line 420 "../expread.y"
+#line 420 "expread.y"
{ write_exp_elt_opcode (OP_LONG);
if (yyvsp[0].lval == (int) yyvsp[0].lval || yyvsp[0].lval == (unsigned int) yyvsp[0].lval)
write_exp_elt_type (builtin_type_int);
write_exp_elt_opcode (OP_LONG); ;
break;}
case 50:
-#line 430 "../expread.y"
+#line 430 "expread.y"
{ YYSTYPE val;
parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
write_exp_elt_opcode (OP_LONG);
write_exp_elt_opcode (OP_LONG); ;
break;}
case 51:
-#line 443 "../expread.y"
+#line 443 "expread.y"
{
write_exp_elt_opcode (OP_LONG);
if (yyvsp[0].ulval == (unsigned int) yyvsp[0].ulval)
;
break;}
case 52:
-#line 455 "../expread.y"
+#line 455 "expread.y"
{ YYSTYPE val;
parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
write_exp_elt_opcode (OP_LONG);
;
break;}
case 53:
-#line 468 "../expread.y"
+#line 468 "expread.y"
{ write_exp_elt_opcode (OP_LONG);
write_exp_elt_type (builtin_type_char);
write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
write_exp_elt_opcode (OP_LONG); ;
break;}
case 54:
-#line 475 "../expread.y"
+#line 475 "expread.y"
{ write_exp_elt_opcode (OP_DOUBLE);
write_exp_elt_type (builtin_type_double);
write_exp_elt_dblcst (yyvsp[0].dval);
write_exp_elt_opcode (OP_DOUBLE); ;
break;}
case 56:
-#line 485 "../expread.y"
+#line 485 "expread.y"
{ write_exp_elt_opcode (OP_LAST);
write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
write_exp_elt_opcode (OP_LAST); ;
break;}
case 57:
-#line 491 "../expread.y"
+#line 491 "expread.y"
{ write_exp_elt_opcode (OP_REGISTER);
write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
write_exp_elt_opcode (OP_REGISTER); ;
break;}
case 58:
-#line 497 "../expread.y"
+#line 497 "expread.y"
{ write_exp_elt_opcode (OP_INTERNALVAR);
write_exp_elt_intern (yyvsp[0].ivar);
write_exp_elt_opcode (OP_INTERNALVAR); ;
break;}
case 59:
-#line 503 "../expread.y"
+#line 503 "expread.y"
{ write_exp_elt_opcode (OP_LONG);
write_exp_elt_type (builtin_type_int);
write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
write_exp_elt_opcode (OP_LONG); ;
break;}
case 60:
-#line 510 "../expread.y"
+#line 510 "expread.y"
{ write_exp_elt_opcode (OP_STRING);
write_exp_string (yyvsp[0].sval);
write_exp_elt_opcode (OP_STRING); ;
break;}
case 61:
-#line 517 "../expread.y"
+#line 517 "expread.y"
{ write_exp_elt_opcode (OP_THIS);
write_exp_elt_opcode (OP_THIS); ;
break;}
case 62:
-#line 524 "../expread.y"
+#line 524 "expread.y"
{
if (yyvsp[0].ssym.sym != 0)
yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym);
;
break;}
case 63:
-#line 541 "../expread.y"
+#line 541 "expread.y"
{ struct symbol *tem
= lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
VAR_NAMESPACE, 0, NULL);
yyval.bval = SYMBOL_BLOCK_VALUE (tem); ;
break;}
case 64:
-#line 551 "../expread.y"
+#line 551 "expread.y"
{ struct symbol *sym;
sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
VAR_NAMESPACE, 0, NULL);
write_exp_elt_opcode (OP_VAR_VALUE); ;
break;}
case 65:
-#line 563 "../expread.y"
+#line 563 "expread.y"
{
struct type *type = yyvsp[-2].tval;
if (TYPE_CODE (type) != TYPE_CODE_STRUCT
;
break;}
case 66:
-#line 576 "../expread.y"
+#line 576 "expread.y"
{
char *name = copy_name (yyvsp[0].sval);
struct symbol *sym;
;
break;}
case 67:
-#line 622 "../expread.y"
+#line 622 "expread.y"
{ struct symbol *sym = yyvsp[0].ssym.sym;
if (sym)
;
break;}
case 69:
-#line 697 "../expread.y"
+#line 697 "expread.y"
{
/* This is where the interesting stuff happens. */
int done = 0;
;
break;}
case 70:
-#line 732 "../expread.y"
+#line 732 "expread.y"
{ push_type (tp_pointer); yyval.voidval = 0; ;
break;}
case 71:
-#line 734 "../expread.y"
+#line 734 "expread.y"
{ push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; ;
break;}
case 73:
-#line 739 "../expread.y"
+#line 739 "expread.y"
{ yyval.voidval = yyvsp[-1].voidval; ;
break;}
case 74:
-#line 741 "../expread.y"
+#line 741 "expread.y"
{
push_type ((enum type_pieces) yyvsp[0].lval);
push_type (tp_array);
;
break;}
case 75:
-#line 746 "../expread.y"
+#line 746 "expread.y"
{
push_type ((enum type_pieces) yyvsp[0].lval);
push_type (tp_array);
;
break;}
case 76:
-#line 752 "../expread.y"
+#line 752 "expread.y"
{ push_type (tp_function); ;
break;}
case 77:
-#line 754 "../expread.y"
+#line 754 "expread.y"
{ push_type (tp_function); ;
break;}
case 78:
-#line 758 "../expread.y"
+#line 758 "expread.y"
{ yyval.lval = -1; ;
break;}
case 79:
-#line 760 "../expread.y"
+#line 760 "expread.y"
{ yyval.lval = yyvsp[-1].lval; ;
break;}
case 80:
-#line 764 "../expread.y"
+#line 764 "expread.y"
{ yyval.voidval = 0; ;
break;}
case 82:
-#line 769 "../expread.y"
+#line 769 "expread.y"
{ yyval.tval = lookup_member_type (builtin_type_int, yyvsp[-2].tval); ;
break;}
case 83:
-#line 771 "../expread.y"
+#line 771 "expread.y"
{ yyval.tval = lookup_member_type (yyvsp[-5].tval, yyvsp[-3].tval); ;
break;}
case 84:
-#line 773 "../expread.y"
+#line 773 "expread.y"
{ yyval.tval = lookup_member_type
(lookup_function_type (yyvsp[-7].tval), yyvsp[-5].tval); ;
break;}
case 85:
-#line 776 "../expread.y"
+#line 776 "expread.y"
{ yyval.tval = lookup_member_type
(lookup_function_type (yyvsp[-8].tval), yyvsp[-6].tval);
free (yyvsp[-1].tvec); ;
break;}
case 86:
-#line 783 "../expread.y"
+#line 783 "expread.y"
{ yyval.tval = yyvsp[0].tsym.type; ;
break;}
case 87:
-#line 785 "../expread.y"
+#line 785 "expread.y"
{ yyval.tval = builtin_type_int; ;
break;}
case 88:
-#line 787 "../expread.y"
+#line 787 "expread.y"
{ yyval.tval = builtin_type_long; ;
break;}
case 89:
-#line 789 "../expread.y"
+#line 789 "expread.y"
{ yyval.tval = builtin_type_short; ;
break;}
case 90:
-#line 791 "../expread.y"
+#line 791 "expread.y"
{ yyval.tval = builtin_type_long; ;
break;}
case 91:
-#line 793 "../expread.y"
+#line 793 "expread.y"
{ yyval.tval = builtin_type_unsigned_long; ;
break;}
case 92:
-#line 795 "../expread.y"
+#line 795 "expread.y"
{ yyval.tval = builtin_type_short; ;
break;}
case 93:
-#line 797 "../expread.y"
+#line 797 "expread.y"
{ yyval.tval = builtin_type_unsigned_short; ;
break;}
case 94:
-#line 799 "../expread.y"
+#line 799 "expread.y"
{ yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
expression_context_block); ;
break;}
case 95:
-#line 802 "../expread.y"
+#line 802 "expread.y"
{ yyval.tval = lookup_union (copy_name (yyvsp[0].sval),
expression_context_block); ;
break;}
case 96:
-#line 805 "../expread.y"
+#line 805 "expread.y"
{ yyval.tval = lookup_enum (copy_name (yyvsp[0].sval),
expression_context_block); ;
break;}
case 97:
-#line 808 "../expread.y"
+#line 808 "expread.y"
{ yyval.tval = lookup_unsigned_typename (TYPE_NAME(yyvsp[0].tsym.type)); ;
break;}
case 98:
-#line 810 "../expread.y"
+#line 810 "expread.y"
{ yyval.tval = builtin_type_unsigned_int; ;
break;}
case 99:
-#line 812 "../expread.y"
+#line 812 "expread.y"
{ yyval.tval = yyvsp[0].tsym.type; ;
break;}
case 100:
-#line 814 "../expread.y"
+#line 814 "expread.y"
{ yyval.tval = builtin_type_int; ;
break;}
case 102:
-#line 819 "../expread.y"
+#line 819 "expread.y"
{
yyval.tsym.stoken.ptr = "int";
yyval.tsym.stoken.length = 3;
;
break;}
case 103:
-#line 825 "../expread.y"
+#line 825 "expread.y"
{
yyval.tsym.stoken.ptr = "long";
yyval.tsym.stoken.length = 4;
;
break;}
case 104:
-#line 831 "../expread.y"
+#line 831 "expread.y"
{
yyval.tsym.stoken.ptr = "short";
yyval.tsym.stoken.length = 5;
;
break;}
case 105:
-#line 840 "../expread.y"
+#line 840 "expread.y"
{ yyval.tvec = (struct type **)xmalloc (sizeof (struct type *) * 2);
yyval.tvec[0] = (struct type *)0;
yyval.tvec[1] = yyvsp[0].tval;
;
break;}
case 106:
-#line 845 "../expread.y"
+#line 845 "expread.y"
{ int len = sizeof (struct type *) * ++(yyvsp[-2].ivec[0]);
yyval.tvec = (struct type **)xrealloc (yyvsp[-2].tvec, len);
yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
;
break;}
case 107:
-#line 851 "../expread.y"
+#line 851 "expread.y"
{ yyval.sval = yyvsp[0].ssym.stoken; ;
break;}
case 108:
-#line 852 "../expread.y"
+#line 852 "expread.y"
{ yyval.sval = yyvsp[0].ssym.stoken; ;
break;}
case 109:
-#line 853 "../expread.y"
+#line 853 "expread.y"
{ yyval.sval = yyvsp[0].tsym.stoken; ;
break;}
case 110:
-#line 854 "../expread.y"
+#line 854 "expread.y"
{ yyval.sval = yyvsp[0].ssym.stoken; ;
break;}
case 111:
-#line 855 "../expread.y"
+#line 855 "expread.y"
{ yyval.sval = yyvsp[0].ssym.stoken; ;
break;}
}
yystate = yyn;
goto yynewstate;
}
-#line 864 "../expread.y"
+#line 870 "expread.y"
\f
/* Begin counting arguments for a function call,
name_not_typename : NAME
| BLOCKNAME
- | NAME_OR_INT
- | NAME_OR_UINT
+/* These would be useful if name_not_typename was useful, but it is just
+ a fake for "variable", so these cause reduce/reduce conflicts because
+ the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
+ =exp) or just an exp. If name_not_typename was ever used in an lvalue
+ context where only a name could occur, this might be useful.
+ | NAME_OR_INT
+ | NAME_OR_UINT
+ */
;
%%
/* Print i386 instructions for GDB, the GNU debugger.
- Copyright (C) 1988, 1989 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1991 Free Software Foundation, Inc.
This file is part of GDB.
#include <stdio.h>
#include <ctype.h>
+/* For the GDB interface at the bottom of the file... */
+#include "defs.h"
+#include "param.h"
+#include "gdbcore.h"
+
#define Eb OP_E, b_mode
#define indirEb OP_indirE, b_mode
#define Gb OP_G, b_mode
}
}
-/* GDB interface */
-#include "defs.h"
-#include "param.h"
-#include "symtab.h"
-#include "frame.h"
-#include "inferior.h"
-#include "gdbcore.h"
-
#define MAXLEN 20
print_insn (memaddr, stream)
CORE_ADDR memaddr;
bcopy (&from[MANBYTE_L], &mant1, 4);
exp = ((ufrom[EXPBYTE_H] & (unsigned char)~SIGNMASK) << 8) | ufrom[EXPBYTE_L];
+#if 0
+ /* We can't do anything useful with a NaN anyway, so ignore its
+ difference. It will end up as Infinity or something close. */
if (exp == EXT_EXP_NAN) {
/* We have a NaN source. */
- dto = 0.123456789; /* Not much else useful to do */
- } else if (exp == 0 && mant0 == 0 && mant1 == 0) {
+ dto = 0.123456789; /* Not much else useful to do -- we don't know if
+ the host system even *has* NaNs, nor how to
+ generate an innocuous one if it does. */
+ } else
+#endif
+ if (exp == 0 && mant0 == 0 && mant1 == 0) {
dto = 0;
} else {
/* Build the result algebraically. Might go infinite, underflow, etc;
mant0 |= 0x80000000;
dto = ldexp ((double)mant0, exp - EXT_EXP_BIAS - 31);
dto += ldexp ((double)mant1, exp - EXT_EXP_BIAS - 31 - 32);
+ if (ufrom[EXPBYTE_H] & SIGNMASK) /* If negative... */
+ dto = -dto; /* ...negate. */
}
*to = dto;
}
extern struct ext_format ext_format_68881;
for (i = 0; i < n; i++) {
- di.i[0] = random();
- di.i[1] = random();
- double_to_ieee_extended (ext_format_68881, &di.d, exten);
- ieee_extended_to_double (ext_format_68881, exten, &result);
+ di.i[0] = (random() << 16) | (random() & 0xffff);
+ di.i[1] = (random() << 16) | (random() & 0xffff);
+ double_to_ieee_extended (&ext_format_68881, &di.d, exten);
+ ieee_extended_to_double (&ext_format_68881, exten, &result);
if (di.d != result)
printf ("Differ: %x %x %g => %x %x %g\n", di.d, di.d, result, result);
}
char *name;
int from_tty;
{
- dont_repeat ();
if (name)
error ("Too many arguments");
pop_target ();
static CONST char undoc[] = "unknown signal";
-CONST char *sys_siglist[NSIG];
+char *sys_siglist[NSIG];
#endif /* SYS_SIGLIST_MISSING */
/* Table of abbreviations for signals. Note: A given number can
static void init_sigs ()
{
#ifdef SYS_SIGLIST_MISSING
+ int i;
+
/* Initialize signal names. */
for (i = 0; i < NSIG; i++)
sys_siglist[i] = undoc;
#define INVALID_FLOAT(p, len) (0)
+#if 0
/* code to execute to print interesting information about the
- * floating point processor (if any)
- * No need to define if there is nothing to do.
+ floating point processor (if any)
+ No need to define if there is nothing to do.
+ On the 386, unfortunately this code is host-dependent (and lives
+ in the i386-xdep.c file), so we can't
+ do this unless we *know* we aren't cross-debugging. FIXME.
*/
#define FLOAT_INFO { i386_float_info (); }
+#endif 0
/* Say how long (ordinary) registers are. */
return val;
}
+/* Modify the value of a bitfield. ADDR points to a block of memory in
+ target byte order; the bitfield starts in the byte pointed to. FIELDVAL
+ is the desired value of the field, in host byte order. BITPOS and BITSIZE
+ indicate which bits (in target bit order) comprise the bitfield. */
+
void
modify_field (addr, fieldval, bitpos, bitsize)
char *addr;
error ("Value %d does not fit in %d bits.", fieldval, bitsize);
bcopy (addr, &oword, sizeof oword);
+ SWAP_TARGET_AND_HOST (&oword, sizeof oword); /* To host format */
- /* Shifting for bit field depends on endianness of the machine. */
+ /* Shifting for bit field depends on endianness of the target machine. */
#ifdef BITS_BIG_ENDIAN
bitpos = sizeof (oword) * 8 - bitpos - bitsize;
#endif
oword &= ~(((1 << bitsize) - 1) << bitpos);
oword |= fieldval << bitpos;
+
+ SWAP_TARGET_AND_HOST (&oword, sizeof oword); /* To target format */
bcopy (&oword, addr, sizeof oword);
}
\f