Fri Dec 30 17:58:55 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* config/m68k/tm-est.h:  Remove cruft.


Thu Dec 29 22:40:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Allow up to 10 whitespace separated arguments to user defined
	commands.
	* top.c (struct user_args): Structure for holding arguments to
	user defined commands.
	(print_command_line): Delete unused "tmp_chain" variable.  Clean
	up flow control by having cases exit in the same manner.
	Before executing a command or evaluating an expression, substitute
	the current $arg0..$arg9 values if the command/expression uses them.
	(arg_cleanup): New function.
	(setup_user_args, locate_arg, insert_args): Likewise.
	(execute_user_command): Allow arguments to user defined commands.

	* Allow if/while commands to be used within a breakpoint command
	list.
	* breakpoint.c (bpstat_do_actions): Call execute_control_command
	rather than execute_command (passes entire command structure rather
	than just the command line text).
	(breakpoint_1): Use "print_command_line" to print a breakpoint
	command line (including control structures).
	* gdbcmd.h (execute_control_command): Provide extern decl.
	(print_command_line): Likewise.
	* top.c (execute_control_command): No longer static.
	(print_command_line): New function to recursively print a command
	line, including control structures.

Thu Dec 29 18:18:31 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* hppa-tdep.c (pa_print_registers): Extract register values stored
	in big endian format on big and little endian hosts.

	* array-rom.c: Support for Array Tech LSI33k based RAID disk
	controller board.
	* configure.in: Recognize "mips*-*-ecoff*" rather than
	"mips*-idt-ecoff*" so it'll work for the LSI33k.

	* monitor.[ch], op50-rom.c, rom68k-rom.c, w89k-rom.c: Add support
	to monitor config structure for supported baud rates for a target
	and variable stop bits.
	* monitor.c (monitor_fetch_register): Store register values in big
	endian format on any host.

Wed Dec 28 19:27:22 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (hppa_fix_call_dummy): Prefer import stubs over
	export stubs and actual shared library functions so that lazy
	binding works correctly.  Try both __d_plt_call and __gcc_plt_call
	trampolines for calling import stubs.

Wed Dec 28 15:29:02 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* a29k-tdep.c (pop_frame): Fix a variable name.

Wed Dec 28 12:21:39 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (push_dummy_frame): Refine code to determine what
	space ID to place in the stack & inf_status structure.
	(hppa_pop_frame): Don't walk through trampoline code if popping a
	call dummy frame.
	(hppa_fix_call_dummy): Call the stack dummy directly if the
	current PC is in a shared library.

	* hppa-tdep.c (push_dummy_frame): Return type is void.  Clear
	in_syscall bit in flags.  Don't depend on the PC queue registers
	when in_syscall is set, they're not valid.
	* config/pa/tm-hppa.h (PUSH_DUMMY_FRAME): Pass inf_status down to
	push_dummy_frame.
	(SR4_REGNUM): Define.

	* hppa-tdep.c: Misc. lint changes.

Tue Dec 27 12:32:43 1994  Jeff Law  (law@snake.cs.utah.edu)

	* breakpoint.c (watchpoint_check): Don't bother restoring the
	"selected" frame anymore, it's not necessary.  Initialize the
	frame cache before trying to find the current frame in the frame
	chain.

	* somsolib.c (som_solib_add): Return without loading any shared
	libraries if symfile_objfile is NULL.
	(som_solib_create_inferior_hook): Likewise.

Fri Dec 23 17:03:13 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote-est.c:  New file supports EST-300 CPU32 background 
	mode ICE.
	* remote-utils.c (sr_com):  Call registers_changed.
	* configure.in (m68*-*-est*):  New configuration.
	* config/m68k/tm-est.h:  New file.

Fri Dec 23 16:18:50 1994  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (CLIBS):  Put LIBIBERTY last.

Thu Dec 22 09:27:16 1994  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* ser-tcp.c (tcp_open): Cast to struct sockaddr when passing to
	function which expects that.

Thu Dec 22 13:25:33 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* nlm/gdbserve.c, nlm/ppc.c, nlm/ppc.h: Don't try to use
	  ALTERNATE_MEM_FUNCS.

Wed Dec 21 14:00:26 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.c: Now supports xmodem as a remoteloadprotocol.

Tue Dec 20 23:01:17 1994  Stu Grossman  (grossman@cygnus.com)

	* config/mips/xm-irix4.h, config/mips/xm-irix5.h:  #define
	_BSD_COMPAT to get reliable signal handling.

Tue Dec 20 11:44:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sparc-tdep.c, a29k-tdep.c, findvar.c (get_saved_register):
	if !target_has_registers, call error().

	* value.h: Remove obsolete comments about FRAME vs struct
	frame_info *.


Sun Dec 18 11:52:58 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sparc-tdep.c (sparc_pop_frame):  Remove erroneous extra argument
	to write_register.

Sat Dec 17 13:23:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* tm-sparc.c (EXTRA_FRAME_INFO): New field sp_offset.
	* sparc-tdep.c (sparc_init_extra_frame_info): Set it.
	(examine_prologue, sparc_init_extra_frame_info): Use ->frame plus
	->sp_offset to compute the address something is saved at, not
	->bottom.

	* sparc-tdep.c (get_saved_register): New function.
	* tm-sparc.h: Define GET_SAVED_REGISTER; don't define
	FRAME_FIND_SAVED_REGS, HAVE_REGISTER_WINDOWS or REGISTER_IN_WINDOW_P.
	* stack.c (frame_info): Add comment about what to do if
	FRAME_FIND_SAVED_REGS is not defined.

	* sparc-tdep.c (sparc_init_extra_frame_info): Set ->frame field
	here.  Get it right for flat frames.
	* sparc-tdep.c (sparc_frame_chain): Instead of returning
	meaningful value for ->frame field, just return dummy value.
	This change is needed because the old code didn't deal with mixed
	flat and non-flat frames.

	* sparc-tdep.c (sparc_pop_frame): Write SP_REGNUM from
	frame->frame, don't go through saved regs for this.

	* sparc-tdep.c: Move guts of skip_prologue to new function
	examine_prologue.  Check for flat prologue and set is_flat.
	Provide the caller with the information about what is saved where
	if desired.
	(skip_prologue, sparc_frame_find_saved_regs): Call examine_prologue.

	* sparc-tdep.c: Replace union sparc_insn_layout and anonymous
	union in isannulled, which won't work on a little-endian host,
	with X_* macros.

	* sparc-tdep.c (sparc_frame_saved_pc): If addr == 0, the saved PC
	is still in %o7.

	* config/sparc/tm-sparc.h: Define INIT_FRAME_PC and
	INIT_FRAME_PC_FIRST.
	* blockframe.c (get_prev_frame_info): Modify comments regarding
	INIT_FRAME_PC_FIRST and the sparc.

	* sparc-tdep.c (single_step): Use 4 not sizeof (long) for size of
	instruction. 

Sat Dec 17 02:33:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-typeprint.c (c_type_print_base):  Use `show' of -1 to print
	the return type of methods to avoid infinite loops with anonymous
	types.
	* valops.c (search_struct_field):  Handle anonymous unions.

	* sparc-tdep.c (sunos4_skip_trampoline_code):  New function
	to correctly handle steps into -g compiled PIC objects in the
	main executable.
	* config/sparc/tm-sun4os4.h (SKIP_TRAMPOLINE_CODE):
	Redefine to use sunos4_skip_trampoline_code.

	* dwarfread.c (DWARF_REG_TO_REGNUM):  Provide a default mapping
	from DWARF to GDB register numbering.
	* dwarfread.c (locval):  Use DWARF_REG_TO_REGNUM to map the
	register value.
	* config/mips/tm-mipsv4.h (DWARF_REG_TO_REGNUM):  Define.

Fri Dec 16 10:56:29 1994  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (uninstall): transform file names.

Thu Dec 15 16:55:35 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* defs.h: Include progress.h.
	(QUIT): Call PROGRESS.
	* main.c (main): Call START_PROGRESS and END_PROGRESS, break
	usage message into shorter strings.
	* source.c:  Change long command help strings into concats of
	shorter ones, for picky ANSI compilers.

	* top.c (command_loop): For space usage display, show both
        absolute size and the change from before command execution.

Thu Dec 15 16:40:10 1994  Stu Grossman  (grossman@cygnus.com)

	* defs.h, main.c (gdb_fputs), top.c: Add stream arg to
	fputs_unfiltered_hook.
	* defs.h, top.c, utils.c (error): Add error_hook.

Tue Dec 13 15:15:33 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* breakpoint.c, infrun.c, printcmd.c: Change long command help
        strings into concats of shorter ones, for picky ANSI compilers.

Mon Dec 12 17:08:02 1994  Stan Shebs  <shebs@andros.cygnus.com>

	Sparc flat register window support.
	* sparc-tdep.c (sparc_insn_layout): New union, defines layout of
        instructions symbolically (used to be local to skip_prologue).
	(sparc_init_extra_frame_info): New function.
	(sparc_frame_chain): Add flat cases throughout.
	(skip_prologue): Add recognition of flat prologues.
	(sparc_frame_find_saved_regs): Add flat cases.
	(sparc_pop_frame): Ditto.
	* config/sparc/tm-sparc.h (EXTRA_FRAME_INFO): New slots.
	(INIT_EXTRA_FRAME_INFO): Call sparc_init_extra_frame_info.
	(PRINT_EXTRA_FRAME_INFO): Define.


Mon Dec 12 13:06:59 1994  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* f-lang.c: Remove duplicate declaration of
	builtin_type_f_integer, and only include it in the f_builtin_types
	once.

	* somread.c (som_symfile_read): Just assign to objfile->obj_private,
	not OBJ_UNWIND_INFO.  Assigning to a cast is a GCC-ism which
	the HP compiler doesn't like.


Fri Dec  9 15:50:05 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c (remote_wait): Pass string instead of char to strcpy.

Fri Dec  9 04:43:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/low-lynx.c (mywait): Remove debugging printf.

Thu Dec  8 15:07:29 1994  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* frame.h: Restore pre-Nov 3 comments about FRAME_FP with minor
	changes.  They are correct, unlike the post-Nov 3 comment
	(FRAME_FP doesn't have any machine-independent relationship with
	FP_REGNUM or any other such notion of a "frame pointer").

Wed Dec  7 14:50:54 1994  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* gdbserver/remote-utils.c (write_ok): Write "OK", not "Ok", to
	match stubs and protocol spec.
	* gdbserver/remote-utils.c (remote_open): Cast to struct sockaddr
	when passing to function which expects that.

	The following changes aren't quite enough to make things work with
	LynxOS (apprently kernel problems).
	* infrun.c (wait_for_inferior): When resuming new thread, pass pid
	not -1 for remote case.
	* thread.c (info_threads_command): Give error if !target_has_stack. 
	* infrun.c (start_remote): Call init_thread_list.
	* thread.c (info_threads_command): Don't call kill for remote
	debugging target.
	* target.c (normal_pid_to_str): Print "thread" not "process" for
	remote.
	* remote.c, gdbserver/*: Add 'H', 'S', and 'C' requests, 'X'
	response, and `thread' part of 'T' response.
	* gdbserver/*: If program exits, send packet to GDB before
	exiting.  Handle termination with a signal the same as exiting
	with an exitstatus.
	* remote.c: Don't try to kill program after getting an 'X'
	response.
	* infrun.c (wait_for_inferior): Add comment about kill versus mourn.

Thu Dec  8 12:37:38 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* config/pa/tm-pro.h tm-hppap.h, hppapro.mt: Rename tm-hppap.h to
	tm-pro.h.

Wed Dec  7 18:22:59 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* source.c: Various cosmetic changes.
	(forward_search_command): Handle very long source lines correctly.

Wed Dec  7 13:21:47 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* hppa-tdep.c: Use GDB_TARGET_IS_PA_ELF so SOM target support will
	stop being linked in.

	* config/pa/tm-hppap.h: New file. Set GDB_TARGET_IS_PA_ELF,
	otherwise it looks like BSD-ELF.

Mon Dec  5 21:43:52 1994  Stu Grossman  (grossman@cygnus.com)

	* inftarg.c: include <sys/types.h> to get def of pid_t.

Fri Dec  2 15:03:07 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* solib.c (auto_solib_add_at_startup): New global.
	(solib_create_inferior_hook): Call solib_add only if
	auto_solib_add_at_startup is nonzero.
	(_initialize_solib): New command "set auto-solib-add".

Fri Dec  2 12:52:04 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* parse.c (msymbol_addr_type):  Replaced by
	lookup_pointer_type (builtin_type_void).

	* printcmd.c (_initialize_printcmd):  Give examine_*_type
	a name for `ptype $_'.

Fri Dec  2 12:52:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_formatted): Call val_print_string directly,
	rather than via value_print.

Wed Nov 30 22:27:27 1994  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c (som_solib_get_got_by_pc): New function.
	* somsolib.h (som_solib_get_got_by_pc): Add extern decl.
	* hppa-tdep.c (hppa_fix_call_dummy): Handle case where FUN is the
	function's export stub or real address in a shared library.

Tue Nov 29 13:40:25 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* config/i386/nbsd.mh (REGEX, REGEX1): No longer define.

	* configure.in (i[345]86-*-freebsd*): New configuration.
	* config/i386/{fbsd.mh,fbsd.mt,nm-fbsd.h}: New files.

Tue Nov 29 12:23:25 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* top.c (read_next_line): Pass annotation suffix "commands"
	instead of "command", matches documentation.

Mon Nov 28 14:53:21 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/a29k/tm-a29k.h (setup_arbitrary_frame): Replace
	FRAME_ADDR with CORE_ADDR in prototype.

	* top.c (command_line_input): If annotation suffix is NULL,
	replace it with an empty string.
	(read_next_line): Pass "command" as annotation suffix to
	command_line_input.

Mon Nov 28 11:03:14 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* config/rs6000/tm-rs6000.h (setpgrp): move defn from here...
	* config/rs6000/xm-rs6000.h: ...to here.


Fri Nov 25 21:26:02 1994  Jeff Law  (law@snake.cs.utah.edu)

	* tm-hppa.h (skip_trampoline_code): Add extern decl.
	* hppa-tdep.c (hppa_pop_frame): Silently restart the inferior and
	allow it to execute any return path trampoline code.  Stop the
	inferior and give the user control when the trampoline has
	finished executing.
	(in_solib_call_trampoline): Handle export stubs which also perform
	parameter relocations.
	(in_solib_return_trampoline): Likewise.

Fri Nov 25 13:37:10 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* coffread.c, symfile.h (coff_getfilename):  Make it static again.
	* xcoffread.c (coff_getfilename):  Use a static copy from
	coffread.c, modified for accessing the static xcoff strtbl.

Fri Nov 25 00:51:05 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (in_solib_call_trampoline): Recognize calls through
	_sr4export and $$dyncall as trampolines.  Likewise for long-call
	stubs and parameter relocation stubs.
	(in_solib_return_trampoline): Recognize a return trampoline for
	return value relocation stubs.

	* hpread.c: Include hp-symtab.h instead of hpux-symtab.h.
	Various name changes to match those used by hp-symtab.h.

Thu Nov 24 00:39:27 1994  Jeff Law  (law@snake.cs.utah.edu)

	* blockframe.c (find_pc_partial_function): Inhibit mst_trampoline
	symbol special handling when INHIBIT_SUNSOLIB_TRANSFER_TABLE_HACK
	is defined.
	* infrun.c (IN_SOLIB_CALL_TRAMPOLINE): Renamed from
	IN_SOLIB_TRAMPOLINE.  All callers changed.
	(IN_SOLIB_RETURN_TRAMPOLINE): Provide default definition.
	(wait_for_inferior): Handle single stepping through trampolines on
	return paths from shared libraries.
	* config/pa/tm-hppa.h (IN_SOLIB_CALL_TRAMPOLINE): Use
	in_solib_call_trampoline.
	(IN_SOLIB_RETURN_TRAMPOLINE): Use in_solib_return_trampoline.
	(INHIBIT_SUNSOLIB_TRANSFER_TABLE_HACK): Define.
	* hppa-tdep.c (in_solib_call_trampoline): New function.
	(in_solib_return_trampoline): New function.	

Wed Nov 23 21:43:03 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* tm-h8300.h (REMOTE_BREAKPOINT): Define.
	* h8300-tdep.c (h8300_pop_frame): Remove redundant call.

	* remote-e7000.c (HARD_BREAKPOINTS): Reenable.
	(BC_BREAKPOINTS): Disable.
	* sh-tdep.c (print_insn): Cope with big and little endian machines.
	* sh/sh.mt: Use libsim.a
	* sh/tm-sh.h (TARGET_BYTE_ORDER_SELECTABLE): New
	(BREAKPOINT): Changed to be byteorder independent.

Tue Nov 22 19:13:39 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Maintenance commands to report time and space usage.
	* main.c (display_time, display_space): New globals.
	(main): Add argument --statistics to enable reporting, display
	time and space after startup is done.
	* maint.c (maintenance_time_display, maintenance_space_display):
	New commands.
	* top.c (command_loop): Display time and space after command
	execution.

	* top.c (pre_init_ui_hook): New global.
	(gdb_init): If pre_init_ui_hook set, call before all other init.

Tue Nov 22 10:25:59 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* a29k-tdep.c (examine_tag): Fix a bug in stack frame size.

Sat Nov 19 03:10:51 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/i386/i386sol2.mh:  Reenable core file support.

	* symfile.c (deduce_language_from_filename):  Treat .c++ as a
	C++ extension.

	* valops.c (destructor_name_p):  Do not compare the template
	part for template classes.

Fri Nov 18 14:55:59 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* defs.h, infcmd.c (reg_names): Don't declare as constant.
	* remote-mips.c (mips_open): Read and set the processor type.
	* mips-tdep.c (mips_set_processor_type): Always return an int.

Fri Nov 18 10:38:12 1994  J.T. Conklin  <jtc@rtl.cygnus.com>

	* nlm/alpha.c (strtol): Remove, it is provided by NetWare C library.
	* nlm/gdbserve.def (strtol): Add to import list.
	* nlm/fake_aio.c: Remove file, no longer used.

	* Makefile.in (LD_FOR_TARGET, NLMCONV_FOR_TARGET): Remove.
	* nlm/Makefile.in (gdbserve.O): Link with ${CC_FOR_TARGET}.
	(LD_FOR_TARGET): Remove.

Thu Nov 17 22:09:50 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.h, monitor.c, w89k-rom.c, op50n-rom.c, idp-rom.c: Add
	support	for two variables used to control the load protocol and
	conversion type.

Thu Nov 17 17:51:12 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Support for different MIPS IDT processor models.
	* mips-tdep.c (mips_processor_type, tmp_mips_processor_type,
	mips_generic_reg_names, mips_r3041_reg_names,
	mips_r3051_reg_names, mips_r3081_reg_names,
	mips_processor_type_table): New	globals.
	(mips_do_registers_info): Don't display register if name is empty.
	(mips_set_processor_type_command): New command.
	(mips_show_processor_type_command): New command.
	(mips_set_processor_type): New function.
	(mips_read_processor_type): New function.
	* config/mips/tm-idt.h (DEFAULT_MIPS_TYPE): New macro.
	* config/mips/tm-mips.h (DEFAULT_MIPS_TYPE): New macro.
	(NUM_REGS): Increase to account for all CP0 registers.
	(REGISTER_NAMES): Add empty names for CP0 registers.
	(FIRST_EMBED_REGNUM, LAST_EMBED_REGNUM): Adjust.
	(PRID_REGNUM): New macro.

Wed Nov 16 16:41:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* README: Add warning about termcap in Ultrix and OSF/1.

Wed Nov 16 15:28:29 1994  Rob Savoye  (rob@cygnus.com)


	* hppa-tdep.c: Remove including sys/dir.h from a target file.

Wed Nov 16 10:31:27 1994  J.T. Conklin  (jtc@cygnus.com)

	* config/powerpc/gdbserve.mt (TDEPFILES): Remove fake_aio.o.

	* nlm/gdbserve.c: Include <nwtypes.h> before other NetWare headers.
	* nlm/ppc.c: Likewise. 

	* nlm/ppc.c (strtol): Remove, it is provided by NetWare C Library.
	(StopBell): New function (stubbed out).

Wed Nov 16 00:12:21 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (skip_trampoline_code): Handle shared library import
	trampolines.

Tue Nov 15 16:18:52 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* c-exp.y (yylex): Fix a bug in template scanning.

Tue Nov 15 14:25:47 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i386-stub.c, m68k-stub.c, sparc-stub.c, sparcl-stub.c: Mask out
	the top bit returned by getDebugChar.

Tue Nov 15 01:03:56 1994  Rob Savoye  (rob@slipknot.cygnus.com)

	* op50-rom.c, w89k-rom.c, monitor.c: Modify to usr two variables
	to set remote load type and protocol.
	* rom68k-rom.c: Add to_stop in target_ops.


Sat Nov 12 21:55:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c: Add TODO list.
	(som_solib_add): Immediately return if $SHLIB_INFO$ sections does
	not exist or has size zero.  Slightly simplify error handling.
	Keep an internal list of all the loaded shared libraries and
	various tidbits of information about the loaded shared libraries.
	Build section tables for each loaded shared library and add those
	tables to the core target if necessary.
	(som_solib_create_inferior_hook): Force re-reading of shared
	libraries at exec time.
	(som_sharedlibrary_info_command): New function for dumping
	information about the currently loaded shared libraries.
	(_initialize_som_solib): New function.

Sat Nov 12 02:26:50 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* Makefile.in (copying.o, f-exp.tab.o, dpx2-nat.o, dstread.o,
	i386aix-nat.o, i386m3-nat.o, irix5-nat.o, lynx-nat.o, m3-nat.o,
	mipsm3-nat.o, ns32km3-nat.o, remote-e7000.o, remote-os9k.o):
	Add dependencies.
	(copying.o, os9kread.o, remote.o):  Update dependencies.

	* valarith.c (value_sub):  When subtracting pointers, only
	check for a match of the pointed to element lengths.
	Cast element length to LONGEST to obtain a signed result for
	pointer subtractions.

Fri Nov 11 10:51:07 1994  Jeff Law  (law@snake.cs.utah.edu)

	* ch-exp.y (yylex): Fix off-by-one error when converting string to
	lowercase.  Null terminate new string.

	* hppa-tdep.c (rp_saved): Handle IMPORT stubs too.

	* somsolib.c (som_solib_add): Check the value of __dld_flags, if
	it indicates __dld_list is not valid return an error.  If it
	indicates that libraries were not mapped privately, issue a
	warning.

Thu Nov 10 23:17:45 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symfile.c (syms_from_objfile): Only call find_lowest_section if
	no ".text" section exists.

Thu Nov 10 15:16:21 1994  Rob Savoye  <rob@rtl.cygnus.com>

	* rom68k-rom.c: New file. Replaces the old remote-mon.c and uses
	the new generic ROM interface in monitor.c.
	* config/m68k/monitor.mt: Use new ROM support.
	* monitor.c: Add support for xmodem download protocol.

Wed Nov  9 18:46:24 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* findvar.c (find_saved_register): Fix a frame variable name.
	* infcmd.c (finish_command): Ditto.

Tue Nov  8 13:20:14 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Remove "Watchpoints seem not entirely reliable, though
	they haven't failed me recently." item--this old (4.6 at least)
	item is too vague to be useful (some watchpoint bugs have been
	fixed since then).
	* TODO: Add explanation of "RPC interface" item.

Mon Nov  7 22:25:21 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (read_unwind_info): Use "text_offset" for linker
	stub unwind descriptors too.

	* Enable backtracing from inside a SOM shared library back into
	user code.
	* hppa-tdep.c (internalize_unwinds): Accept and use new
	"text_offset" argument for dynamic relocation of
	region_{start,end} fields in the unwind descriptor.
	(read_unwind_info): Pass text_offset to internalize unwinds.

Mon Nov  7 14:34:42 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m3-nat.c: Remove comments about arbitrary limit in
	printf_filtered; that limit is gone.

Mon Nov  7 00:27:16 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Beginnings of SOM shared library support.  Breakpoints and
	single frame backtracing within the library only.  Only works when
	using the HPUX 9 dynamic linker.  More functionality to be added
	soon.

	* somsolib.c, somsolib.h: New files.
	* Makefile.in (HFILES_NO_SRCDIR): Add somsolib.h
	(ALLDEPFILES): Add somsolib.c.
	(somsolib.o): Add some dependencies.
	* somread.c (som_symtab_read): Accept multiple section offsets.
	All callers changed.  Adjust all text symbols with the first
	section offset.
	* symfile.c (find_lowest_section): Enable this function.  Add some
	tie-breaking logic when sections have the same vma.
	(syms_from_objfile): Use find_lowest_section rather than looking
	for ".text" by name.  Relax warning to only warn if the lowest
	section is not a code section.
	* config/pa/{hppabsd.mh, hppahpux.mh} (NATDEPFILES): Add somsolib.o
	* config/pa/{nm-hppab.h, nm-hppah.h}: Include somsolib.h.
	
Sun Nov  6 12:54:54 1994  Jeff Law  (law@snake.cs.utah.edu)

	* partial-stab.h (N_TEXT): Put back GDB_TARGET_IS_HPPA kludge,
	it is still needed for GCC-2.6 compiled code.
	* TODO (GDB_TARGET_IS_HPPA): Note this kludge can be nuked
	sometime after GCC-2.7 has been released.

	* hppa-tdep.c (frame_saved_pc): Mask off low two bits when
	retrieving the PC from a signal handler caller.  Fix thinko
	in Stan's last change ("frame", should have been "frame->next").
	If the next frame is a signal handler caller and it's a system
	call which has entered the kernel ((PSW & 0x2) != 0), then the
	saved pc is in %r2 instead of %r31.
	
Fri Nov  4 23:47:07 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (hppa_frame_find_saved_regs): Change "frame" to
	"frame_info" throughout.

Fri Nov  4 16:26:59 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* sparcl-stub.c: get rid of defs.h.

Fri Nov  4 13:11:54 1994  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* gdbserver/Makefile.in (MMALLOC_CFLAGS): Add -I${MMALLOC_DIR}.
	Correct definition of MMALLOC_DIR to reflect fact this is
	gdb/gdbserver/Makefile.in, not gdb/Makefile.in.

	* gdbserver/server.c (main): After we kill the inferior in
	response to a 'k' request, exit.

	* remote.c (remote_kill): Use catch_errors when calling putpkt.
	(putpkt): Return int, not void, to match catch_errors calling
	convention.

Fri Nov  4 10:52:38 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* rs6000-tdep.c (pop_frame): Correct a variable name.

Fri Nov  4 05:43:35 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Re-write item about SIGINT handling to reflect the fact
	that target_stop now exists.

Thu Nov  3 15:19:17 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Replace useless FRAME, FRAME_ADDR types with struct frame_info *
	and CORE_ADDR, respectively.
	* frame.h (FRAME, FRAME_INFO_ID, FRAME_ADDR): Remove.
	* blockframe.c (get_frame_info): Remove.
	* a29k-tdep.c, alpha-tdep.c, blockframe.c, breakpoint.c,
	breakpoint.h, energize.c, findvar.c, gould-pinsn.c,
	h8300-tdep.c, h8500-tdep.c, hppa-tdep.c, i386-tdep.c, i960-tdep.c,
	infcmd.c, inferior.h, infrun.c, m68k-tdep.c, m88k-tdep.c,
	mips-tdep.c, nindy-tdep.c, printcmd.c, pyr-tdep.c, rs6000-tdep.c,
	sh-tdep.c, sparc-tdep.c, stack.c, valops.c, z8k-tdep.c,
	config/a29k/tm-a29k.h, config/alpha/tm-alpha.h,
	config/gould/tm-pn.h, config/h8300/tm-h8300.h,
	config/h8500/tm-h8500.h, config/mips/tm-mips.h,
	config/ns32k/tm-merlin.h, config/ns32k/tm-umax.h,
	config/pyr/tm-pyr.h, config/sparc/tm-sparc.h): Replace FRAME with
	struct frame_info * everywhere, replace FRAME_ADDR with CORE_ADDR,
	rename variables consistently (using `frame' or `fi'), remove
	calls to get_frame_info and FRAME_INFO_ID, remove comments about
	FRAME and FRAME_ADDR cruftiness.

Thu Nov  3 14:25:24 1994  Stu Grossman  (grossman@cygnus.com)

	* corelow.c, exec.c, inftarg.c, m3-nat.c, op50-rom.c, procfs.c,
	remote-adapt.c, remote-e7000.c, remote-eb.c, remote-es.c,
	remote-hms.c, remote-mips.c, remote-mm.c, remote-mon.c,
	remote-nindy.c, remote-os9k.c, remote-pa.c, remote-sim.c,
	remote-st.c, remote-udi.c, remote-vx.c, remote-z8k.c, remote.c,
	w89k-rom.c, target.c, target.h:  Add support for target_stop().

Thu Nov  3 01:23:45 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* osfsolib.c (solib_map_sections, first_link_map_member,
	next_link_map_member, xfer_link_map_member):  Retrieve and use
	shared library relocation offset from runtime loader structures.
	Use libxproc.a routines to get a working version if
	USE_LDR_ROUTINES is defined.
	* README:  Remove item about shared library relocation for
	Alpha OSF/1.

Wed Nov  2 15:05:39 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* c-exp.y (yylex): scan template names, and scan nested class
	names.

Wed Nov  2 11:01:55 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlm/Makefile.in: install gdbserve.nlm.


Tue Nov  1 13:00:46 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-valprint.c (c_value_print):  Check for plain literal `char'
	target type when suppressing `(char *)' output for strings.

Mon Oct 31 19:19:51 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coffread.c (coff_symfile_init): Remove unused local abfd.
	* utils.c [NO_MMALLOC] (mmalloc, mrealloc): Define and use size_t
	instead of long, for compatibility with mmalloc.h.

Sat Oct 29 02:40:40 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* top.c (line_completion_function):  Renamed from
	symbol_completion_function, takes the line buffer and the
	point in the line buffer as additional arguments.
	(readline_line_completion_function):  New function, interface
	between readline and line_completion_function.
	(init_main):  Use it.
	(complete_command):  Use line_completion_function instead of
	abusing rl_line_buffer. Free completion strings after printing
	them.
	* symtab.c (completion_list_add_name):  Recheck for duplicates
	if we intend to add a modified symbol.

	* gdbtypes.h (cplus_struct_type):  nfn_fields_total no longer
	includes the number of methods from the baseclasses.
	* stabsread.c (attach_fn_fields_to_type):  No longer add the
	number of methods from the baseclasses to TYPE_NFN_FIELDS_TOTAL,
	the baseclass type might not have been completely filled in yet.
	* symtab.c (total_number_of_methods):  New function to compute
	the total number of methods for a type, including the methods
	from baseclasses.
	(decode_line_1):  Use it instead of TYPE_NFN_FIELDS_TOTAL to
	allocate the symbol array for find_methods.

	* stabsread.c (scan_file_globals):  Add default case to minimal
	symbol type switch, to avoid gcc -Wall warnings.

	* config/rs6000/tm-rs6000.h (INIT_EXTRA_FRAME_INFO):
	Don't test for zero backchain pointer to recognize a signal
	handler frame, if read() gets interrupted by a signal, the
	backchain will be non zero.
	(SIG_FRAME_FP_OFFSET):  Move to here from rs6000-tdep.c,
	improve comment.
	(SIG_FRAME_PC_OFFSET):  New definition.
	(FRAME_SAVED_PC):  Return saved pc from sigcontext if this
	is a signal handler frame.
	* rs6000-tdep.c (function_frame_info):  Do not error out
	if we can't access the instructions.

	* config/rs6000/tm-rs6000.h (CONVERT_FROM_FUNC_PTR_ADDR):
	New definition to get the function address from a function pointer.
	* valops.c (find_function_addr):  Use it when calling a user
	function through a function pointer.

Fri Oct 28 16:16:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (MMALLOC_DIR): New definition.
	(MMALLOC): Use MMALLOC_DIR.
	(MMALLOC_CFLAGS): Look in MMALLOC_DIR for mmalloc.h.
	(OPCODES): Remove gratuitous "./".
	* defs.h (mmalloc.h): Include.
	(mmalloc, mrealloc, etc): Remove decls.
	(cplus_demangle, cplus_demangle_opname): Remove decls.

Wed Oct 26 15:41:07 1994  Stu Grossman  (grossman@cygnus.com)

	* defs.h, main.c, top.c:  Change sense and name of
	no_windows variable.  Now called use_windows, and defaults to off
	(for compatibility).

Wed Oct 26 12:20:53 1994  Jim Kingdon  <kingdon@cygnus.com>

	* coffread.c (coff_symtab_read): If we get the address from
	target_lookup_symbol, set the section to -2 not SECT_OFF_BSS.
	(coff_symtab_read): Set value and section of symbol that
	process_coff_symbol returns.

Tue Oct 25 09:53:04 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/i386/tm-nbsd.h: Enable longjmp support.

Sat Oct 22 03:41:13 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valarith.c (value_binop):  Take care of ANSI `value preserving'
	rule, which was not addressed by the previous change.

	* rs6000-tdep.c (skip_prologue):  Handle `mr r31,r1', which is
	generated by gcc-2.6, as a synonym for `oril r31,r1,0'.

	* TODO:  Remove item about RS/6000 shared libraries.

Thu Oct 20 17:35:45 1994  Stu Grossman  (grossman@cygnus.com)

	* defs.h, infrun.c (wait_for_inferior), top.c:  Call
	target_wait_hook to allow GUI to handle blocking for inferior.  Call
	call_command_hook in execute_command to provide means for wrapping
	commands with GUI state change updates.

	* infrun.c (wait_for_inferior):  Make sure
	through_sigtramp_breakpoint is non-null before deleting.

Thu Oct 20 10:26:43 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/powerpc/ppc-nw.mt (TDEPFILES): Removed exec.o.

Thu Oct 20 06:56:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (coffread.o): Depend on target.h.
	(remote-vx.o): Depend on gdb-stabs.h objfiles.h symfile.h $(bfd_h).

Wed Oct 19 22:49:31 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Fix typo.

Wed Oct 19 11:32:15 1994  Jim Kingdon  <kingdon@cygnus.com>

	* objfiles.c (objfile_relocate): When relocating ->sections, use
	objfile not symfile_objfile.

	* symtab.h, minsyms.c (minsyms_sort): New function.
	* objfiles.c (objfile_relocate): Call it.

	* remote-vx.c (vx_add_symbols): Call breakpoint_re_set.

	* objfiles.c, objfiles.h (objfile_to_front): New function.
	* remote-vx.c (vx_add_symbols): Call it.

	* coffread.c (coff_symtab_read): Handle common symbols the same
	way that partial-stab.h does.

Wed Oct 19 21:06:12 1994  Rob Savoye  (rob@cirdan.cygnus.com)

	* hppa-tdep.c: Remove include files a.out.h, ioctl.h, and
	machine/psl.h. These are host files.

Wed Oct 19 15:13:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* objfiles.h (struct objfile): Fix comment--minimal_symbol_count
	does *not* include the terminating NULL msymbol.

Tue Oct 18 20:53:29 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.c (monitor_load_srec,monitor_make_srec): Add an asrecord
	loader that reads files using BFD and converts it on the fly.

Mon Oct 17 18:52:06 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.c (set_loadtype_command): Fixed so it doesn't core dump.
	* monitor.c (monitor_load): check the load type and load the file
	accordingly. Default to gr_load_image().
	* monitor.c (monitor_load_ascii_srec): Load an ascii file in
	srecord format by downloading to the monitor.
	* w89k-rom.c, op50n-rom.c: set supported load types.

Mon Oct 17 10:29:08 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (ALLDEPFILES): Remove xcoffexec.c.
	* Makefile.in: Remove xcoffexec.o rule.

	* exec.c (exec_file_command): Add comment.

	Fix data and bss relocation for VxWorks 5.1:
	* remote-vx.c (vx_add_symbols): New function.
	(vx_load_command, add_symbol_stub): Call it instead of
	symbol_file_add.
	(vx_wait): Remove comment which was wrong to useless.
	* remote-vx.c: Reindent much of file.
	* coffread.c (cs_to_section, find_targ_sec): New functions.
	(process_coff_symbol): Set SYMBOL_SECTION to result
	from cs_to_section.
	(coff_symtab_read): Call cs_to_section and deal with result
	rather than assuming sections are in a certain order.  Deal with
	BSS.
	* coffread.c: Remove text_bfd_scnum variable.

Sat Oct 15 16:55:48 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* corelow.c: Format to standard.
	(core_close): Use name instead of bfd_filename.

Fri Oct 14 10:29:08 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* exec.c (map_vmap): Cast return from xmalloc to its proper type,
	not to PTR.

	* symfile.c (reread_symbols): Include bfd_errmsg string in error
	message if bfd_close fails.
	* exec.c (exec_close), solib.c (clear_solib), corelow.c
	(core_close), objfiles.c (free_objfile), irix5-nat.c
	(clear_solib), osfsolib.c (clear_solib), remote-utils.c
	(gr_load_image): Check for errors from bfd_close.
	* solib.c (look_for_base), remote-utils.c (gr_load_image),
	remote-udi.c (download), corelow.c (core_open), symfile.c
	(symfile_bfd_open), symfile.c (generic_load): Add comment
	regarding error from bfd_close.
	* remote-udi.c (download), remote-utils.c (gr_load_image): Add
	comment about bogus handling of errors from bfd_openr.
	* exec.c (exec_close): Add comment regarding memory leak and
	dangling reference to vp->name.

Sat Oct 15 03:43:00 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* eval.c (evaluate_subexp):  Make fnptr a LONGEST instead
	of using longest_to_int.

	* infcmd.c (run_stack_dummy):  Reinstate set_current_frame call,
	mips and alpha targets need the real breakpoint pc for
	creating the breakpoint frame.

	* stack.c (return_command):  Cast return value to the return
	type of the function from which we return.
	* values.c (set_return_value):  Pass VALUE_CONTENTS unmodified
	to STORE_RETURN_VALUE.

	* symtab.c (lookup_symbol):  Remove search for `static mangled
	symbols', the search for `static symbols' already looks for
	mangled and demangled symbols via lookup_block_symbol.

	* valarith.c (value_binop):  Use ANSI C arithmetic conversions
	when performing integral evaluations, implement BINOP_EQUAL and
	BINOP_LESS.
	(value_equal, value_less):  Use value_binop to perform the
	comparison if both operands have TYPE_CODE_INT.

	* rs6000-tdep.c (pop_frame):  Make sure all registers are valid,
	as they are written back later. Handle sp restore for frameless
	functions. Use fdata.nosavedpc instead of fdata.frameless to
	determine if the pc has been saved.
	(function_frame_info):  Handle `mr r31,r1', which is generated by
	gcc-2.6, as a synonym for `oril r31,r1,0'.
	(skip_trampoline_code):  Handle shared library trampolines.
	* xcoffread.c (read_xcoff_symtabs):  Record XMC_GL symbols with
	their real name. Enables setting of breakpoints in shared libraries
	before the executable is run.

Fri Oct 14 19:39:47 1994  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.h, remote-mon.c: Hack up to so the old ROM monitor
	interface code still works with the new ROM monitor
	structures. Fake out a couple of fields.

Fri Oct 14 14:54:37 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* h8500-tdep.c (target_read_sp, target_write_sp, target_read_pc,
	target_write_pc, target_read_fp, target_write_fp): Rename to
	h8500_read_sp, etc.
	(h8500_read_pc, h8500_write_pc): Add pid argument.
	* config/h8500/tm-h8500.h (TARGET_READ_SP, TARGET_WRITE_SP,
	TARGET_READ_PC, TARGET_WRITE_PC, TARGET_READ_FP, TARGET_WRITE_FP):
	Change to match functions above.

Thu Oct 13 13:24:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* NEWS: Add item about if and while.

	* .gdbinit: Restore `end'; it was not excess.  Reindent
	list-objfiles to make this clear.  Comment out all of
	list-objfiles because old gdb's choke on it.

Wed Oct 12 23:19:08 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/mips/tm-bigmips64.h: Just define TARGET_BYTE_ORDER and
	include tm-mips64.h.

Wed Oct 12 18:02:17 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (ANNOTATE_OBS): New definition.
	(COMMON_OBS): Add exec.o.
	(annotate.o): Remove extra compile rule.
	* config/*/*.mh, config/*/*.mt: Remove exec.o from *DEPFILES lists
	everywhere.

 	* .gdbinit: Remove excess `end'.

	* exec.c: Merge in RS6000 support from xcoffexec.c.
	(symfile.h, objfiles.h, xcoffsolib.h): Include.
	(vmap): New global variable.
	(exec_close): Close and free objects in vmap chain.
	(exec_file_command) [IBM6000_TARGET]: Set up initial vmap.
	(bfdsec_to_vmap, map_vmap): Moved here from xcoffexec.c.
	(exec_files_info): Print vmap information.
	* xcoffexec.c: Remove.
	* config/rs6000/rs6000.mt, config/rs6000/rs6000lynx.mt
	(TDEPFILES): Use exec.o instead of xcoffexec.o.
	* TODO: Remove pertinent items.

Wed Oct 12 10:08:19 1994  Jeff Law  (law@snake.cs.utah.edu)

	* partial-stab.h (N_TEXT): Delete GDB_TARGET_IS_HPPA kludge; they
	are no longer needed as of gcc-2.6.0.

Tue Oct 11 15:51:01 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* lynx-nat.c (child_wait): Correct handling of byte reversed SPARC
        Lynx wait status.
	(fetch_core_registers): Don't try to fetch a register if
	regmap maps it to -1.
	* sparc-tdep.c (sparc_frame_find_saved_regs): Use FRAME_SAVED_I0
	and FRAME_SAVED_L0 when setting saved_regs_addr.  SPARC Lynx
	stores the registers in a weird order.

Sat Oct  8 20:59:13 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* blockframe.c (reinit_frame_cache): Reinstate select_frame call
	if inferior_pid is nonzero.

Sat Oct  8 04:27:21 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Speed up GDB startup time by not demangling partial symbols.
	* symfile.h (ADD_PSYMBOL_VT_TO_LIST),
	symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):
	No longer demangle partial symbols.
	* symtab.c (lookup_symbol, list_symbols): Handle mangled
	variables, e.g. C++ static members, via the minimal symbols.

	Handle reordered functions in an objfile, for Irix 5.2 shared
	libraries.
	* objfiles.h (OBJF_REORDERED):  New bit in the objfile flags,
	set if the functions in an objfile are reordered.
	* mdebugread.c (parse_partial_symbols):  Detect reordered
	functions in an objfile.
	* symtab.c (find_pc_psymtab, find_pc_symtab):  Use expensive
	lookup algorithm if the functions in the objfile are reordered.

	* xcoffexec.c (exec_close):  If the current target has a copy
	of the exec_ops sections, reflect the freeing of the sections
	in current_target.

	* valops.c (call_function_by_hand):  Use `sizeof dummy1', not
	`sizeof dummy', for constructing the call dummy code.

	* config/sparc/tm-sparc.h:  Add PARAMS declarations to all
	function declarations.
	* sparc-tdep.c (sparc_pop_frame):  Cast result of
	read_memory_integer to CORE_ADDR when passing it to PC_ADJUST.

	* irix5-nat.c (enable_break):  Set breakpoint at the entry point
	of the executable, to handle the case where main resides in a
	shared library.
	* irix5-nat.c (solib_create_inferior_hook):  Reset stop_soon_quietly
	after shared library symbol reading, to get rid of a warning from
	heuristic_proc_start if the startup code has no symbolic debug info.

	* breakpoint.h (struct breakpoint):  Add new fields language
	and input_radix, to enable breakpoint resetting with the
	proper language and radix.
	* breakpoint.c (set_raw_breakpoint):  Initialize them.
	(breakpoint_re_set_one):  Use them when resetting the breakpoint.
	(breakpoint_re_set):  Preserve current language and input_radix
	across breakpoint_re_set_one calls.

	* symtab.c (decode_line_1):  Do not build a canonical line
	specification for `*expr' line specifications.

	* breakpoint.h (bpstat_stop_status):  Fix prototype declaration.

Fri Oct  7 08:48:18 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	The point of these changes is to avoid reading the frame pointer
	and stack pointer during stepping, to speed things up.
	A.  Changes to not select a frame until we need a selected frame:
	    * blockframe.c (flush_cached_frames): Call select_frame (NULL, -1).
	    * infrun.c (wait_for_inferior): Move call to select_frame back to
	    normal_stop.  This reverts a change of 13 Apr 94 (it says Jeff
	    Law, but the change was my idea); the only reason for that change
	    was so we could save and restore the selected frame in
	    wait_for_inferior, and now that flush_cached frames clears the
	    selected frame, that should work OK now.
	B.  Changes to not create a current_frame until we need one:
	    * blockframe.c (get_current_frame): If current_frame is NULL, try
	    to create an innermost frame.
	    * sparc-tdep.c (sparc_pop_frame), infcmd.c (run-stack_dummy),
	    infrun.c (wait_for_inferior), thread.c (thread_switch),
	    convex-tdep.c (set_thread_command), a29k-tdep.c (pop_frame),
	    alpha-tdep.c (alpha_pop_frame), convex-xdep.c (core_file_command),
	    h8300-tdep.c (h8300_pop_frame), h8500-tdep.c (h8300_pop_frame),
	    hppa-tdep.c (hppa_pop_frame), i386-tdep.c (i386_pop_frame),
	    i960-tdep.c (pop_frame), m68k-tdep.c
	    (m68k_pop_frame), mips-tdep.c (mips_pop_frame), rs6000-tdep.c
	    (push_dummy_frame, pop_dummy_frame, pop_frame), sh-tdep.c
	    (pop_frame), config/arm/tm-arm.h (POP_FRAME),
	    config/convex/tm-convex.h (POP_FRAME), config/gould/tm-pn.h
	    (POP_FRAME), config/ns32k/tm-merlin.h (POP_FRAME),
	    config/ns32k/tm-umax.h (POP_FRAME), config/tahoe/tm-tahoe.h
	    (POP_FRAME), config/vax/tm-vax.h (POP_FRAME): Don't
	    call create_new_frame.
	    * corelow.c (core_open), altos-xdep.c (core_file_command),
	    arm-xdep.c (core_file_command), gould-xdep.c (core_file_command),
	    m3-nat.c (select_thread), sun386-nat.c (core_file_command),
	    umax-xdep.c (core_file_command): Don't call create_new_frame; do
	    call flush_cached_frames.
	    * blockframe.c (reinit_frame_cache): Don't call create_new_frame
	    or select_frame.
	C.  Changes to get rid of stop_frame_address and instead only
	fetch the frame pointer when we need it.
	    * breakpoint.c (bpstat_stop_status): Remove argument
	    frame_address; use FRAME_FP (get_current_frame ()).
	    * infrun.c (wait_for_inferior): Don't pass frame pointer to
	    bpstat_stop_status.
	    * infrun.c (wait_for_inferior): Use FRAME_FP (get_current_frame
	    ()) instead of stop_frame_address.
	    * infrun.c (save_inferior_status, restore_inferior_status),
	    inferior.h (struct inferior_status): Don't save and restore
	    stop_frame_address.
	    * inferior.h, infcmd.c, thread.c (thread_switch), m3-nat.c
	    (select_thread): Remove stop_frame_address and uses thereof.
	D.  Same thing for the stack pointer.
	    * infrun.c (wait_for_inferior): Remove stop_sp and replace
	    uses thereof with read_sp ().
	E.  Change to eliminate one nasty little spot where we were
	wanting to know the frame pointer from before the current step
	(idea from GDB 3.5, which saved my ass, because my other ideas of
	how to fix it were very baroque).
	    * infrun.c: Remove prev_frame_address.
	    * infrun.c (wait_for_inferior, step_over_function): Use
	    step_frame_address instead of prev_frame_address.
	F.  Same basic idea for the stack pointer.
	    * inferior.h, infcmd.c: New variable step_sp.
	    * infcmd.c (step_1, until_next_command): Set it.
	    * infrun.c: Remove prev_sp and replace uses by step_sp.
	    * infrun.c (wait_for_inferior): If we get out of the step
	    range, then set step_sp to the current stack pointer before we
	    start going again.

Fri Oct  7 12:17:17 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* top.c (target_byte_order_auto): New static variable.
	(set_endian): Mention that ``auto'' is permitted.
	(set_endian_auto): New static function.
	(show_endian): Change message based on target_byte_order_auto.
	(set_endian_from_file): New function.
	(init_main): Add command ``auto'' to endianlist.
	* exec.c (exec_file_command): Call set_endian_from_file.
	* defs.h (set_endian_from_file): Declare.

Thu Oct  6 18:10:41 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlm/i386.c (flush_i_cache): New function, does nothing.
	(frame_to_registers, registers_to_frame, set_step_traps,
	clear_step_traps, do_status): Make non-static.

Thu Oct  6 12:26:42 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/mips/tm-mips.h (GDB_TARGET_IS_MIPS64): If not already
	defined, define as 0.
	(FIX_CALL_DUMMY): Rewrite to remove presumption that host and
	target are similar.
	* config/mips/tm-idt.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	* config/mips/tm-idtl.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	* config/mips/tm-idt64.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	(BREAKPOINT): Remove definition.
	* config/mips/tm-idtl64.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	(BREAKPOINT): Remove definition.
	* config/mips/tm-mips64.h (GDB_TARGET_IS_MIPS64): Define with a
	value of 1, rather than without a value.
	* config/mips/tm-bigmips64.h (GDB_TARGET_IS_MIPS64): Likewise.
	* mips-tdep.c: Rewrite uses of GDB_TARGET_IS_MIPS64 to switch at
	run time rather than at compile time.

	* remote-mips.c (break_insn): Remove.
	(BREAK_INSN, BREAK_INSN_SIZE): Define.
	(mips_insert_breakpoint): Use BREAK_INSN, not break_insn.
	(mips_remove_breakpoint): Likewise.

	* defs.h: If TARGET_BYTE_ORDER_SELECTABLE is defined by tm.h,
	define TARGET_BYTE_ORDER as target_byte_order, and declare
	target_byte_order as an extern int, and define BITS_BIG_ENDIAN as
	a test of TARGET_BYTE_ORDER.
	* top.c: Several additions if TARGET_BYTE_ORDER_SELECTABLE is
	defined:
	(endianlist, target_byte_order): New variables.
	(set_endian, set_endian_big, set_endian_little): New functions.
	(show_endian): New function.
	(init_cmd_lists): Initialize endianlist.
	(init_main): Add commands ``set endian big'', ``set endian
	little'', and ``show endian''.
	* a29k-pinsn.c: Rewrite uses of TARGET_BYTE_ORDER and
	BITS_BIG_ENDIAN to switch at run time rather than at compile time.
	* coffread.c, dwarfread.c, findvar.c, mips-tdep.c: Likewise.
	* remote-os9k.c, stabsread.c, valarith.c, valprint.c: Likewise.
	* values.c: Likewise.

Wed Oct  5 11:41:24 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlm/configure.in: ${gdb_host_cpu} defaults to ${host_cpu}.

	* nlm/Makefile.in: Get rid of NWINCLUDES.
	* config/{alpha,powerpc}/gdbserve.mt: Remove NWINCLUDES.
	  User should now configure with --with-headers.

Mon Oct  3 07:48:34 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/server.c (main): Silently accept all unrecognized
	requests and send back a zero length acknowledge.  That is what
	*-stub.c do and is what remote.c expects.

Mon Oct  3 05:11:47 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* corelow.c (core_open):  Copy the modified to_sections_end
	vector from current_target to core_ops too.

	* gdbserver/server.c (main):  Silently accept query requests
	and send back a zero length acknowledge.

Fri Sep 30 17:17:21 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

        * nlm/Makefile.in: Don't define NWINCLUDES.
        * config/{alpha,powerpc}/gdbserve.mt: define NWINCLUDES.

Fri Sep 30 15:59:55 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/low-lynx.c (create_inferior): Pass all 4 args to ptrace.

Fri Sep 30 06:42:42 1994  Ian Lance Taylor  (ian@cygnus.com)

	* lynx-nat.c (child_wait): Use status.w_status, not status, in
	arithmetic.  status is a `union wait'.

	* config/nm-lynx.h (PTRACE_ARG3_TYPE): Define to int, not char *.

	* lynx-nat.c (child_wait): Pass fourth argument to ptrace.

Thu Sep 29 08:22:27 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): Fix comment for yesterday's change.

Wed Sep 28 17:48:18 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffread.c (complete_symtab): If last_source_file is set upon
	entry, free it.

Wed Sep 28 08:59:14 1994  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (read_xcoff_symtab, case C_FILE):
	Set main_aux before using it.

	* xcoffexec.c (exec_close): If quitting, don't call clear_symtab_users.

	* xcoffread.c (read_xcoff_symtab): Process XTY_LD symbols we were
	ignoring before.  But continue to ignore XMC_DS.

Wed Sep 28 00:35:23 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hpread_read_array_type): Do not change the type code
	to TYPE_CODE_PTR for "char foo[]".  Just make it a zero length
	array type.

	* hpread.c (hpread_type_translate): Handle T_UNS_LONG types with
	lengths other than 32bits (HP C 9.69 represents an "unsigned char"
	as an T_UNS_LONG with length 8).

	* hpread.c (struct hpread_symfile_info): Delete have_module field
	and accessor macro.  Minor indentation fix.
	(hpread_build_psymtabs, case K_MODULE):  Only start a new psymtab
	and reset state variables have_name & texthigh if pst is NULL.
	(hpread_build_psymtabs, case K_SRCFILE): Only reset the name of a
	partial symbol table if pst is non-NULL.  If pst is NULL, then
	start a new psymtab.
	(hpread_process_one_debug_symbol, case K_MODULE): Now empty.
	(hpread_process_one_debug_symbol, case K_SRCFILE): Simplify and
	correct handling of subfiles.

Mon Sep 26 02:59:00 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* defs.h (misc_command_type):  Remove trailing comma from
	enumerator list.

Sun Sep 25 23:19:58 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (frame_saved_pc): Fix thinko in code to dig saved pc
	out of an interrupt frame.

Sun Sep 25 12:50:17 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* infcmd.c (do_registers_info) [INVALID_FLOAT]: Only use if
	defined.
	* values.c (unpack_double) [INVALID_FLOAT]: Ditto.
	* mips-tdep.c (mips_print_register): Don't test float validity.
	* config/a29k/tm-a29k.h, config/alpha/tm-alpha.h,
	config/arm/tm-arm.h, config/convex/tm-convex.h,
	config/h8300/tm-h8300.h, config/h8500/tm-h8500.h,
	config/i386/tm-i386v.h, config/i386/tm-sun386.h,
	config/i960/tm-i960.h, config/m68k/tm-m68k.h,
	config/m88k/tm-m88k.h, config/mips/tm-mips.h,
	config/ns32k/tm-merlin.h, config/ns32k/tm-nbsd.h,
	config/ns32k/tm-ns32km3.h, config/ns32k/tm-umax.h,
	config/pa/tm-hppa.h, config/pyr/tm-pyr.h,
	config/rs6000/tm-rs6000.h, config/sh/tm-sh.h,
	config/sparc/tm-sparc.h, config/z8k/tm-z8k.h (INVALID_FLOAT):
	Remove definition.

Sun Sep 25 06:07:37 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Remove item about adding general multi-threaded stuff;
	this is done.
	Remove item about specifying arbitrary locations of stack frames
	(this works on some machines).
	Remove item about debugging functions without a frame pointer
	(this works on some machines).
	Remove item about re-writing macros which handle frame chaining and
	frameless functions.  They have been re-written at least once
	since that item was written.
	Remove item about gdb catching SIGINT when attached; this is done.
	Remove item about having list_command not read symbols--why bother?

Sat Sep 24 17:40:10 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* TODO: Append contents of Projects file.
	* Projects: Remove.

Sat Sep 24 01:47:25 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* corelow.c (add_solib_stub):  Remove copying of to_sections,
	pass current_target to SOLIB_ADD. The Sep 10 change failed
	if SOLIB_ADD errored out, or if SOLIB_ADD was trying to access
	target memory.
	* corelow.c (core_open):  After reading the shared libraries,
	copy the modified to_sections vector from current_target to
	core_ops, so that core_close can free it later.
	* config/rs6000/nm-rs6000.h, rs6000-nat.c (xcoff_relocate_core):
	Pass down target parameter from SOLIB_ADD and use it instead of
	directly accessing core_ops.

Fri Sep 23 14:58:49 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* solib.c: *BSD systems need <a.out.h> to be included before
	  <link.h>.

	* i386b-nat.c: Add i386_float_info(), etc.
	* config/i386/nm-nbsd.h: #define FLOAT_INFO.

	* config/nm-nbsd.h: New file, for generic NetBSD native support.
	* config/i386/nm-nbsd.h: Use it.
	* config/sparc/nm-nbsd.h: Use it.
	* config/ns32k/nm-nbsd.h: Use it.

	* configure.in (i386-*-netbsd): Use config/i386/nbsd.m[ht].
	  (ns32k-*-netbsd): Use config/ns32k/nbsd.m[ht].
	* config/i386/{nbsd.mh,nbsd.mt,nm-nbsd.h,tm-nbsd.h,xm-nbsd.h}:
	  New files, support for NetBSD/i386.
	* config/ns32k/{nbsd.mh,nbsd.mh,nm-nbsd.h,tm-nbsd.h,xm-nbsd.h}:
     	  New files, support for NetBSD/ns32k.

Tue Sep 20 11:34:27 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* .gdbinit: Add list-objfiles command.

	* TODO: Reword item regarding NO_STD_REGS.

	* coffread.c (record_minimal_symbol, coff_read_enum_type,
	coff_read_struct_type): Allocate on symbol_obstack, not directly
	via malloc/savestring.

Tue Sep 20 15:42:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* TODO: Add more items.
	* tests: Remove the directory and all of its (obsolete) contents.

Tue Sep 20 11:34:27 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffread.c (init_stringtab): When copying length to stringtab,
	use target format, not host format, since that is what the rest of
	the code assumes.

Mon Sep 19 15:48:10 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* Makefile.in: Removed prelude.o, i386-nlmstub.o, nlmstub.o,
	  nlmstub.nlm, and nlmstub targets.  Removed NWSOURCE and
	  NWINCLUDES definitions.
	* i386-nlmstub.c: Removed.

Mon Sep 19 07:48:36 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (read_dbx_dynamic_symtab): Cast bfd_asymbol_name to
	char * (from const char *) before assigning.  Don't save string we
	pass to record_minimal_symbol (it already saves it).


Sat Sep 17 02:26:58 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* cp-valprint.c (static_field_print):  New variable, controls
	printing of static members.
	(_initialize_cp_valprint):  New print set subcommand
	"static-members". Turn on printing of static members by default.
	(cp_print_value_fields):  Print static members if necessary.

	* solib.c:  Remove inclusion of libelf.h and elf/mips.h.
	(elf_locate_base):  Use only standard BFD functions to collect
	information about the .dynamic section. Check for DT_MIPS_RLD_MAP
	tag only if it got defined via the inclusion of <link.h>.

	* f-exp.y:  Write block for OP_VAR_VALUE.
	* f-valprint.c (info_common_command):  Handle `info common'
	without an argument correctly.

	* c-typeprint.c (c_type_print_base):  Handle template constructors.
	* symtab.c (gdb_mangle_name):  Handle template method mangling,
	get rid of GCC_MANGLE_BUG code, which only applied to gcc-2.2.2.

Fri Sep 16 16:06:08 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* gdbtypes.h (TYPE_INDEX_TYPE):  New macro.
	* ch-typeprint.c, ch-valprint.c:  Use TYPE_INDEX_TYPE.
	* ch-valprint.c (chill_val_print):  Pass index type directly
	(instead of its TYPE_TARGET_TYPE) to print_type_scalar.
	* stabsread.c (read_type):  Don't set TYPE_FLAG_TARGET_STUB
	if the index type is a stub.

Fri Sep 16 17:18:44 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/i386/{i386aix.mh, i386bsd.mh, i386lynx.mh, i386sco.mh,
	i386sco4.mh, i386sol2.mh, i386v.mh, i386v32.mh, i386v4.mh,
	ncr3000.mh, ptx.mh, ptx4.mh}, config/m68k/{altos.mh, apollo68v.mh,
	delta68.mh, dpx2.mh, hp300bsd.mh, hp300hpux.mh, m68klynx.mh,
	m68kv4.mh}, config/m88k/{delta88.mh, delta88v4.mh},
	config/mips/riscos.mh, config/pa/hppahpux.mh,
	config/rs6000/rs6000lynx.mh, config/sparc/{sparclynx.mh,
	sun4sol2.mh}, config/tahoe/tahoe.mh, config/vax/{vaxbsd.mh,
	vaxult.mh, vaxult2.mh} (REGEX, REGEX1, SYSV_DEFINE): No longer
	define.
	* config/i386/i386sco4.mh (MUNCH_DEFINE): No longer define.

Fri Sep 16 15:40:34 1994  Stu Grossman  (grossman@cygnus.com)

	* defs.h (QUIT):  Call interactive_hook to allow GUI to interrupt.
	Also, add decl for symtab_to_filename.
	* source.c (symtab_to_filename):  New.  Returns the file
	associated with a symtab.
	* top.c:  Define interactive_hook.  Called during QUIT to animate
	the GUI.

Fri Sep 16 00:14:40 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* stabsread.c (read_type):  Handle stub types for bitstrings.
	* stabsread.c (read_array_type):  Check for stub domain type
	using TYPE_FLAG_STUB, not its length.
	* gdbtypes.c (create_set_type):  Handle a stub domain type.

	* ch-exp.y:  Get rid of some extra non-terminals, and move
	their rules into primitive_value.
	* parser-defs.h:  Add comment about unary postfix operators.
	* ch-lang.c (chill_op_print_tab):  Add '->', postfix and prefix.
	* expprint.c (print_subexp):  Recognize unary postfix operator.

Wed Sep 14 18:27:42 1994  Jason Molenda  (crash@phydeaux.cygnus.com)

        * remote-hms.c: use remote_debug instead of hms_silent toggle.
        Add warnings about depreciation of `snoop' cmd.

Wed Sep 14 18:18:58 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote-hms.c (hms_read_inferior_memory):  Cope when
	target sends both \r and \n.

Wed Sep 14 17:14:57 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* remote-mips.c (mips_error): Place NORETURN macro correctly.
	* TODO: Add item about START_INFERIOR_TRAPS_EXPECTED.

Wed Sep 14 14:26:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): Fix obsolete comment about
	mst_solib_trampoline.

	* f-valprint.c (f_val_print): Change cast of valaddr from
	CORE_ADDR * to char **, since that is how it is used.

	* dbxread.c (read_dbx_dynamic_symtab): Save copy of symbol names
	using obsavestring, and pass that to prim_record_minimal_symbol.
	Having the objfile point to bfd_asymbol_name directly doesn't work
	if we save and restore a mapped symbol file.


Tue Sep 13 18:23:26 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* w89k-rom.c, op50-rom.c, monitor.c, config/pa/hppapro.mt: New files
	to add a generic ROM monitor interface, and support file for the
	WinBond W89K and the Oki OP50N PA based target boards.


Sun Sep 11 22:34:57 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppa.h (REGISTER_NAMES): Use r26-r23 for arg0-arg3.

Sun Sep 11 04:36:47 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix5-nat.c, osfsolib.c, solib.c (solib_add):  Simplify last
	change by replacing `symbols_added' with `so_last'.
	* mdebugread.c (parse_external, parse_partial_symbols):  Ignore
	global common symbols, they will be resolved by the runtime loader.
	* mdebugread.c (parse_symbol, parse_partial_symbols, cross_ref):
	Handle scSCommon like scCommon symbols.

Sat Sep 10 01:43:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* corelow.c (add_solib_stub):  Copy to_sections changes from
	core_ops to current_target after adding the shared libraries.
	* partial-stab.h (N_EXCL), dbxread.c (add_old_header_file,
	find_corresponding_bincl_psymtab):  Change `repeated header not seen'
	error to a complaint, simplify complaint.
	* procfs.c (signalname, errnoname):  Make `name' const.
	* symfile.c (reread_symbols):  Use filename from old BFD to
	reopen the objfile.
	* values.c (record_latest_value):  Don't record value in the
	history chain until we are sure there won't be an error.

Fri Sep  9 15:52:09 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlm/Makefile.in: remove MMALLOC, READLINE, TERMCAP, and other
	  cruft.

	* config/i386/gdbserve.mt: New file, defs for i386 nlm stub.

Thu Sep  8 17:14:43 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote.c (fromhex): Make error more explicit.
	(read_frame): Don't print bad checksum information unless
	remote_debugging.  Don't use repeat count unless it's > 0.
	* remote-e7000.c (expect): When echoing, ignore multiple newlines.
	(e7000_insert_breakpoint, e7000_remove_breakpoint, target_ops):
	Optionally cope with BC style breakpoints.  
	(e7000_command):  After command send directly to the E7000 mark
	registers as changed. 
	(why_stop, e7000_wait: Understand BC style stop condition.
	* sh-tdep.c (sh_skip_prologue):  Understand more complicated
	sequences.  (frame_find_saved_regs): Likewise.
	* config/h8500/tm-h8500.h (target_write_pc, TARGET_WRITE_PC):
	Handle extra arg.
	* config/i386/xm-go32.h (GDBINIT_FILENAME): Set to gdb.ini.
	(more work here to come)
	* config/sh/tm-sh.h (EXTRA_FRAME_INFO): Add f_offset and leaf_function
	fields.

Thu Sep  8 16:15:34 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* sparclite/Makefile.in: Assorted stuff needed for eload.

	* sparclite/eload.c: Merge in command line argument parsing and
	  error message handling improvements orignally made to aload.c.

Wed Sep  7 23:24:50 1994  Jeff Law  (law@snake.cs.utah.edu)

	* defs.h (enum misc_command_type, command_control_type): Enums
	for describing the command and control types.
	(struct command_line): Add new fields to keep track of the command
	type and body associated with the command.
	* top.c: Include value.h.  Delete whitespace at the end of lines.
	(build_command_line, get_command_line): New functions.
	(execute_control_command, while_command, if_command): Likewise.
	(realloc_body_list, read_next_line): Likewise.
	(recurse_read_control_structure): Likewise.
	(execute_user_command): Call execute_control_command.
	(read_command_lines): Simplify by calling read_next_line, call
	read_control_structure for "if" and "while" commands.
	(free_command_lines): Free new fields in the command structure.
	(define_command): Reset control_level to zero.
	(init_main): Install command handlers for "if" and "while" commands.

Tue Sep  6 16:24:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	 * c-typeprint.c (c_type_print_varspec_prefix,
	 c_type_print_varspec_suffix): Add cases for Fortran type codes.
	 * eval.c (evaluate_subexp): For OP_ARRAY expressions in Fortran,
	 call f77_value_literal_string instead.
	 * f_exp.y: Include <string.h>, move include of parser-defs.h.
	 (parse_number): Translate 'd' floats to 'e' so atof() works. 
	 (yylex): Remove unused variables.
	 * f-lang.c: Include <string.h>.
	 (get_bf_for_fcn): Remove unused variable.
	 * f-typeprint.c (f_type_print_varspec_prefix,
	 f_type_print_varspec_suffix): Remove unused
	 variables, add cases to switch statements.
	 (f_type_print_base): Remove unused variables.
	 * f-valprint.c (gdbcore.h, command.h): Include.
	 (f77_get_dynamic_lowerbound, f77_get_dynamic_upperbound):
	 Call read_memory_integer with correct number of arguments.
	 (f77_get_dynamic_upperbound): Call f77_get_dynamic_lowerbound
	 with correct argument type.
	 (f77_print_array): Removed unused array array_size_array.
	 (f_val_print): Don't use a CORE_ADDR as a char *.
	 * valops.c (value_cast): Handle COMPLEX and BOOL types.
	 (value_assign): Handle Fortran literal string and complex values.
	 (f77_cast_into_complex, f77_assign_from_literal_string,
	 f77_assign_from_literal_complex): New functions.

Mon Sep  5 14:46:41 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-typeprint.c (chill_type_print_base):  Make TYPE_CODE_RANGE
	case more robust.

Sun Sep  4 16:06:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i960-tdep.c (signal.h): Don't include.

	* cxux-nat.c (target_is_m88110): Remove definition.

	* configure.in (config/nm-empty.h): If cross only, use instead
	of config/nm-trash.h.
	* config/nm-trash.h: Remove.
	* config/nm-empty.h: New file.
	* config/i386/nm-m3.h: New file, includes config/nm-m3.h.
	* config/mips/nm-m3.h: New file, includes config/nm-m3.h.
	* config/m68k/nm-sysv4.h: New file, includes config/nm-sysv4.h.
	* config/mips/nm-sysv4.h: New file, includes config/nm-sysv4.h.
	* config/sparc/nm-sysv4.h: New file, includes config/nm-sysv4.h.


Fri Sep  2 17:35:55 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* configure.in: No longer look for nm, tm, and xm headers in
	  config/<header>; they are always in config/<cpu>/<header>.

Fri Sep  2 16:40:03 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* objfiles.c (allocate_objfile): Add the newly-created objfile to
	the end of the list of objfiles, instead of at the beginning.

	* xcoffread.c (allocate_include_entry): New function, abstracted
	from code in record_include_begin.
	(record_include_begin, record_include_end): Call it.

	* blockframe.c (reinit_frame_cache): Test inferior_pid instead of
	target_has_stack to decide whether to create a real stack frame
	for the cache.

	* coffread.c (process_coff_symbol) [CXUX_TARGET]: Ignore vendor
	section.
	* config/m88k/tm-cxux.h (CXUX_TARGET): Define.

	* h8300-tdep.c: Include "dis-asm.h" instead of <dis-asm.h>.

Fri Sep  2 09:51:46 1994  J.T. Conklin  (jtc@cygnus.com)

	* config/sparc/tm-nbsd.h: Add #defines to map NetBSD struct and
	  field names into what is expected by sparc-nat.c.

Thu Sep  1 17:32:54 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* c-typeprint.c (c_typedef_print):  Add missing Chill support.

Thu Sep  1 15:41:21 1994  Stu Grossman  (grossman@cygnus.com)

	* rs6000-pinsn.c (print_insn):  Use powerpc disassembler when
	doing Power PC.
	* config/powerpc/tm-ppc-nw.h:  Define GDB_TARGET_POWERPC.

	* config/i386/i386lynx.mh, config/m68k/m68klynx.mh,
	config/rs6000/rs6000lynx.mh, config/sparc/sparclynx.mh:  Enable
	ser-tcp.

	* nlm/Makefile.in:  Get rid of NWSOURCE.
	* nlm/alpha-io.S (inVti, outVti):  Remove extraneous ldha's.
	* nlm/gdbserve.o:  Add dummy __main routine.
	* nlm/gdbserve.def:  Turn on debug.

Thu Sep  1 12:36:39 1994  Jim Kingdon  (kingdon@cygnus.com)

	* config/xm-nbsd.h: Don't define SET_STACK_LIMIT_HUGE; it is obsolete.

Thu Sep  1 11:01:40 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* config/tm-nbsd.h: New file, support for all NetBSD targets.
	* config/xm-nbsd.h: fix typo.
	* config/sparc/{nm,tm,xm}-nbsd.h: New files, renamed from
	  {nm,tm,xm}-sparcnbsd.h to conform to prefered file naming
	  conventions.
	* configure.in: (sparc-*-netbsd): use config/sparc/nbsd.m[ht].

Wed Aug 31 14:40:33 1994  Jason Molenda (crash@phydeaux.cygnus.com)

	* remote-udi.c (udi_read_inferior_memory,udi_write_inferior_memory): 
	change typeo in error msg (`inferrior' -> `inferior').

Wed Aug 31 09:17:02 1994  Jim Kingdon  (kingdon@cygnus.com)

	* inflow.c (set_sigint_trap, clear_sigint_trap): Check for
	attach_flag (this check was performed by the callers).  Also check
	inferior_thisrun_terminal.
	* inftarg.c (child_wait), lynx-nat.c (child_wait),
	procfs.c (wait_fd), symm-nat.c (child_wait): Don't check
	attach_flag in deciding whether to call set_sigint_trap and
	clear_sigint_trap. 

	* value.h (struct value): Change literal_data from PTR to char *,
	since that is the way it is used.

Tue Aug 30 21:56:54 1994  Jeff Law  (law@snake.cs.utah.edu)

	* somread.c (som_symfile_read): Force unwinds to be re-read after
	reading in a new partial symbol table.

Tue Aug 30 13:14:16 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/h8500/tm-8500.h (DONT_USE_REMOTE): Remove definition,
	an obsolete conditional.
	* config/pa/tm-hppa.h (BREAKPOINT) [KERNELDEBUG]: Remove use,
	an obsolete conditional.
	* config/rs6000/rs6000.mh, config/rs6000/rs6000.mt: Clean up
	comments.

Mon Aug 29 14:39:42 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (ns32k-opcode.h): Remove reference.
	(ns32k-pinsn.o): Update dependencies.
	* ns32k-opcode.h: Remove file.
	* ns32k-pinsn.c (print_insn): Call version in libopcodes, remove
	all other code in this file. 

Mon Aug 29 12:04:07 1994  Stu Grossman  (grossman@cygnus.com)

	* nlm/configure.in:  Stop using cpu.c.  Put it in TDEPFILES instead.
	* config/alpha/gdbserve.mt (TDEPFILES):  Remove alpha-patch.o.

	* nlm/Makefile.in:  Add rule for .S.o.
	* nlm/aio.h:  Protect from multiple inclusions.
	* nlm/alpha-io.S:  Remove everything we don't need.
	* nlm/{alpha-patch.c, alpha-patch.h, alpha-uart.c, alpha-uart.h}:
	Remove, no longer needed.
	* nlm/alpha.c:  Merge in lots of stuff from previous files.
	* nlm/alpha.h:  Don't #include alpha-patch.h.  Make
	breakpoint_insn extern.
	* Move stuff from alpha-patch.h into here.

	* config/alpha/gdbserve.mt (TDEPFILES):  Get rid of alpha-uart.o.

Mon Aug 29 11:34:34 1994  Jim Kingdon  (kingdon@cygnus.com)

	* annotate.c (annotate_starting): Flush output.

Sat Aug 27 23:32:43 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symfile.c (symbol_file_add):  Move reinit_frame_cache call to
	the callers of symbol_file_add. Gets rid of heuristic fence-post
	warnings on mips and alpha targets when the PC resides in a shared
	library which is not yet read in.
	* coff-solib.c (coff_solib_add), cxux-nat.c (add_shared_symbol_files),
	irix5-nat.c (solib_add), osfsolib.c (solib_add),
	remote-vx.c (vx_open), solib.c (solib_add):
	Add call to reinit_frame_cache after all shared libraries are read in.
	* remote-udi.c (udi_load), remote-vx.c (vx_load_command),
	symfile.c (symbol_file_command, add_symbol_file_command):
	Add call to reinit_frame_cache after symbol_file_add.

Wed Aug 24 17:45:14 1994  J.T. Conklin  (jtc@cygnus.com)

	* config/xm-nbsd.h: New file, support for all NetBSD ports.
	* config/sparc/{nm-sparcnbsd.h,tm-sparcnbsd.h,xm-sparcnbsd.h,
	  sparcnbsd.mh,sparcnbsd.mt}: New files, support for NetBSD/sparc.
	* configure.in: Add sparc-*-netbsd target.

Wed Aug 24 13:17:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* remote-vx.c (vx_attach): Interpret the command argument as an
	unsigned long.

Wed Aug 24 13:08:08 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Change i[34]86 to i[345]86.
	* nlm/configure.in: Likewise.
	* gdbserver/configure.in: Likewise.

Wed Aug 24 09:41:09 1994  J.T. Conklin  (jtc@cygnus.com)

	* configure.in (i386-*-netware): Automatically configure nlm
	  subdir.

Tue Aug 23 17:51:13 1994  J.T. Conklin  (jtc@cygnus.com)

	* nlm/gdbserve.c: conditionalize header file inclusion for either
	  NetWare 4.0 or PIN targets.
	* nlm/i386.c: include appropriate header files.
	* nlm/prelude.c: define TERMINATE_BY_UNLOAD for NetWare 4.0
	  targets.

Tue Aug 23 16:54:16 1994  Stu Grossman  (grossman@cygnus.com)

	* nlm/ppc.c (set_step_traps clear_step_traps):  Cleanups.
	* nlm/gdbserve.def:  Autoload clib.

Tue Aug 23 12:05:19 1994  Jim Kingdon  (kingdon@cygnus.com)

	* breakpoint.c (condition_command): Call breakpoints_changed.

	* gdbtypes.h: Declare f77_create_literal_string_type and
	f77_create_literal_complex_type.
	* valops.c (f77_value_literal_string, f77_value_substring,
	f77_value_literal_complex): Use xmalloc not malloc.
	* valops.c (f77_value_literal_string, f77_value_substring):
	Make addr char * not CORE_ADDR.
	* value.h (struct value): Add new field literal_data of aligner union.
	(VALUE_LITERAL_DATA): Use it.
	* f-lang.h: Declare find_common_for_function.
	* value.h, valops.c: Split VALUE_SUBSTRING_START into memaddr and
	myaddr fields of a union.  Don't overload it with the frame field
	(not sure this is necessary; I'm not sure what lval_* codes
	VALUE_SUBSTRING_* can be used with).

Mon Aug 22 11:45:01 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/a29k/{a29k-kern.mt,a29k-udi.mt,a29k.mt,ultra3.mh,
	ultra3.mt}: Clean up comments, remove no-longer-used definitions.

	* rs6000-nat.c: Include libbfd.h again, needed until reference
	to bfd_cache_lookup is cleaned out.

	* config/i386/linux.mh (XM_CLIBS): Add -lm.

Mon Aug 22 10:42:15 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	Work to reduce the interrupts-off duration when running in DOS.
	* ser-go32.c:  (dos_async_ready): See if anything is in the buffer.
	(dos_async_rx): rewrite to unpack as many characters from the
	asynctsr as possible into a local buffer.
	
Fri Aug 19 14:55:45 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Initial Fortran language support, adapted from work by Farooq Butt
	(fmbutt@engage.sps.mot.com).
	* Makefile.in: Add Fortran-related files and dependencies.
	* defs.h (language_fortran): New language enum.
	* language.h (_LANG_fortran): Define.
	(MAX_FORTRAN_DIMS): Define.
	* expression.h: Reformat to standard.
	(MULTI_F77_SUBSCRIPT, OP_F77_UNDETERMINED_ARGLIST,
	OP_F77_LITERAL_COMPLEX, OP_F77_SUBSTR): New expression opcodes.
	* gdbtypes.h (TYPE_CODE_COMPLEX, TYPE_CODE_LITERAL_COMPLEX,
	TYPE_CODE_LITERAL_STRING): New type codes.
	(type): New fields upper_bound_type and lower_bound_type.
	(TYPE_ARRAY_UPPER_BOUND_TYPE, TYPE_ARRAY_LOWER_BOUND_TYPE,
	TYPE_ARRAY_UPPER_BOUND_VALUE, TYPE_ARRAY_LOWER_BOUND_VALUE): New
	macros.
	(builtin_type_f_character, etc): Declare.
	* value.h (VALUE_LITERAL_DATA, VALUE_SUBSTRING_START): Define.
	* f-exp.y: New file, Fortran expression grammar.
	* f-lang.c: New file, Fortran language support functions.
	* f-lang.h: New file, Fortran language support declarations.
	* f-typeprint.c: New file, Fortran type printing.
	* f-valprint.c: New file, Fortran value printing.
	* eval.c (evaluate_subexp): Add code for new expression opcodes,
	fix wording of error message.
	* gdbtypes.c (f77_create_literal_complex_type,
	f77_create_literal_string_type): New functions.
	* language.c (set_language_command): Add Fortran info.
	(calc_f77_array_dims): New function.
	* parse.c (length_of_subexp, prefixify_subexp): Add cases for new
	expression opcodes.
	* symfile.c (deduce_language_from_filename): Recognize .f and .F
	as Fortran source files.
	* valops.c (f77_value_literal_string, f77_value_substring,
	f77_value_literal_complex): New functions.

Fri Aug 19 13:35:01 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-typeprint.c (c_print_type):  Assume demangled arguments
	if a '(' is found in varstring, looking for ')' at the end of
	varstring did fail with demangled const member functions, which
	have a trailing `const'.
	* remote.c (get_offsets, putpkt):  Change to `char' buffers,
	to avoid errors when compiling with DEC c89.
	(remote_wait):  Cast to `char *' before passing buffer to
	fputs_filtered, to avoid errors when compiling with DEC c89.
	(remote_wait):  Do not return inferior_pid by default, this
	statement is never reached, which causes warnings from some
	compilers.
	* stabsread.c (scan_file_globals):  Ignore static minimal symbols.
	* symfile.c (load_command):  If called with no argument, try
	to get the filename from the executable file.
	(generic_load):  Remove check for NULL filename, it is done
	in load_command now.

Fri Aug 19 10:36:15 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Makefile.in (ALLDEPFILES): Add hpread.c.
	(hpread.o): Add dependencies.

	* somread.c: Do not include "aout/aout64.h".  SOM has nothing to
	do with a.out.
	(BYTES_IN_WORD): Delete.
	(som_symfile_read): Call hpread_build_psymtabs to build any
	minimal symbols based on the HP C native debug symbols.
	(som_symfile_finish): Call hpread_symfile_finish.
	(som_symfile_init): Call hpread_symfile_init.
	* config/pa/tm-hppa.h (HPREAD_ADJUST_STACK_ADDRESS): Define.
	* hppa-tdep.c (hpread_adjust_stack_address): New function.

	* config/pa/hppabsd.mh (NATDEPFILES): Add hpread.o
	* config/pa/hppahpux.mh (NATDEPFILES): Likewise.
	* hpread.c: New file.

Fri Aug 19 00:40:55 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (skip_trampoline_code): Revert incorrect change
	from June 2, 1994 (what was I thinking?!?).  Fix it right this
	time.

Thu Aug 18 17:01:35 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* nlm/i386.c, nlm/i386.h: New files that contain i386 specific code.

Thu Aug 18 14:39:46 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* README: Grammar improvements, clarifications, updates.

Wed Aug 17 23:08:53 1994  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (TARGET_FLAGS_TO_PASS):  Pass down LD_FOR_TARGET and
	NLMCONV_FOR_TARGET.  (SUBDIRS):  Add nlm target.
	* configure.in (powerpc-*-netware*):  Automatically configure nlm
	subdir.
	* nlm/Makefile.in:  Add {CC NLMCONV LD}_FOR_TARGET.  Remove alpha
	specific stuff.  Make things more configurable.
	* nlm/configure.in:  Add powerpc-*-netware* target.  Use
	gdbserve.mt/cpu.c/cpu.h for target stuff.  Get rid of tm/xm/nm.h
	files.
	* nlm/gdbserve.c:  Move Alpha specific stuff into other files.
	Remove lots of architecture-specific stuff.
	* nlm/gdbserve.def:  Add new imports.
	* nlm/ppc.c, nlm/ppc.h:  New files that contain PowerPC specific code.
	* nlm/prelude.c:  Don't include libhooks.h, get rid of call to
	register library.
	* nlm/prelude.o:  What was this doing here?
	* config/alpha/gdbserve.mt:  Defs for alpha nlm stub.
	* config/powerpc/gdbserve.mt: Defs for PowerPC nlm stub.
	* config/powerpc/ppc-nw.mt:  Defs for PowerPC target for GDB.
	* config/powerpc/tm-ppc-nw.h:  Ditto.

	* nlmstub.def:  New file, contains imports for 386 nlm stub.

Wed Aug 17 23:17:33 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* remote-pa.c: New file for HPPA embedded support. Currently it's
	a copy of remote.c.
	* config/pa/hppabsd.mt,hppahpux.mt,hppaosf.mt: User remote-pa.c.

Wed Aug 17 13:19:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/m68k/tm-delta68.h (EXTRACT_RETURN_VALUE,
	STORE_RETURN_VALUE): Define to use %a0 for pointers.

Wed Aug 17 07:43:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-mips.c: Remove unused declaration of mips_load.

Tue Aug 16 16:45:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coffread.c: General cleanup, and support for section offsets.
	(time.h, sys/types.h, libbfd.h): Don't include.
	(cur_src_start_addr, cur_src_end_addr): Rename to
	current_source_start_addr, current_source_end_addr.
	(nlist_stream_global): Remove.
	(nlist_bfd_global): New global variable.
	(coff_symfile_read): Remove code that gets and uses fileno()
	directly.
	(read_coff_symtab, enter_linenos, process_coff_symbol): Add
	section_offsets parameter, add text/data section offset to
	appropriate symbols' values.
	(read_one_sym): Use bfd_read instead of fread.
	(init_stringtab, init_lineno): Change first parameter to a bfd,
	use bfd routines instead of raw I/O.

Tue Aug 16 15:24:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (decode_line_1): If funfirstline and we get a
	non-LOC_BLOCK symbol (e.g. variable or type), then error().

	* Makefile.in (TARFILES, NONSRC, SFILES_STAND, SFILES_KGDB):
	Remove; unused.
	(TAGFILES_NO_SRCDIR): Remove ALLPARAM.
	(HFILES_NO_SRCDIR): Remove all files in config sub-directory.
	(TAGS): Also pass result of find on config sub-directory to etags.
	(ALLPARAM): Remove; now unused.

Sun Aug 14 13:05:26 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.13.1
	* NEWS, README:  Update to match gdb 4.13 release version.

Sat Aug 13 08:22:50 1994  Fred Fish  (fnf@cygnus.com)

	Harris CX/UX support, from Bob Rusk (rrusk@mail.csd.harris.com).
	* cxux-nat.c:  Remove dangling #else block.
	(m88k_harris_core_register_addr):  New function.

	* environ.c (init_environ):  If no environment, do nothing.

Fri Aug 12 19:30:53 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Delete rest of TODO list.  Do not include "libbfd.h",
	<time.h>, <sys/types.h>, "demangle.h", <sys/file.h>,
	"expression.h", "language.h", "gdbtypes.h", "demangleh".
	Move all global variables into the private symbol table structure
	and add accessor macros.  Update some comments.
	(hpread_build_psymtabs): Delete dbsubc_addr, we don't need it.
	(hpread_end_psymtab): New function to end a partial symbol table,
	all callers changed (no more bogus sharing with dbxread.c).

Fri Aug 12 15:52:37 1994  Stu Grossman  (grossman@cygnus.com)

	* remote.c (remote_wait):  Return inferior_pid instead of 0 for
	`W` message.

Fri Aug 12 11:47:10 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* sparclite/aload.c (sys_error, error): Use vfprintf for variable
	  argument lists.

Thu Aug 11 04:06:42 1994  Doug Evans  (dje@canuck.cygnus.com)

	* defs.h (concat, basename, buildargv, freeargv, strerrno, strsigno,
	errno_max, signo_max, strtoerrno, strtosigno):  Delete.
	Include "libiberty.h" instead.

Wed Aug 10 13:23:47 1994  Rick Sladkey  (jrs@world.std.com)

	* i386v-nat.c (i386_insert_nonaligned_watchpoint):
	add additional argument specifying raw address to permit
	proper release of debug registers.
	(i386_insert_watchpoint, i386_insert_aligned_watchpoint):
	change all callers.

Wed Aug 10 16:13:45 1994  Stu Grossman  (grossman@cygnus.com)

	* defs.h, top.c:  Use `extern' in declarations of GUI hooks, and
	define them in top.c.  Add comments to the hooks.

Wed Aug 10 15:57:43 1994  Doug Evans  (dje@canuck.cygnus.com)

	* remote-sim.c (gdbsim_ops): Set `to_insert_breakpoint' and
	`to_remove_breakpoint' fields.

Wed Aug 10 15:46:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infcmd.c (run_command): Remove comment suggesting using
	target_has_execution instead of inferior_pid.

Wed Aug 10 10:33:20 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* remote-mips.c (mips_open): add code to handle baud rate.

Tue Aug  9 09:44:42 1994  Stu Grossman  (grossman@cygnus.com)

	* infrun.c (wait_for_inferior):  Call target_resume() upon
	detection of new processes.

	* procfs.c (create_procinfo):  Return pointer to new procinfo
	structure.
	* (do_detach):  Spacing & formatting cleanup.
	* (procfs_wait):  Move wait_again label to ensure that we really
	wait again.  On exit from fork, release new child from gdbs'
	clutches.
	* (procfs_set_sproc_trap):  Enable trapping of fork and vfork.

Mon Aug 08 15:34:13 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hpread_process_one_debug_symbol): Fix block scoping
	problem (losing localvars on the close-brace instead of after
	the close brace).

Mon Aug  8 15:09:32 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* i386-nlmstub.c (handle_exception): Wait until the thread has
	  been started before killing the NLM by pointing the PC at
	  _exit().

Sat Aug  6 22:27:30 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-irix5.h (IN_SIGTRAMP):  Redefine for Irix 5,
	Irix 5 has a standard _sigtramp signal handler.
	* irix5-nat.c (solib_add):  Get rid of sigtramp_address handling,
	it is not needed for a standard _sigtramp signal handler.
	Add shared library sections to the section table of the target
	before adding the symbols.
	* mips-tdep.c (mips_skip_prologue):  Do not skip load immediate
	instructions that do not prepare a stack adjustment.
	* regex.c (SIGN_EXTEND_CHAR):  Update to emacs-19.25 definition,
	which does the right thing on machines where `char' is unsigned.

Fri Aug  5 17:50:59 1994  Stu Grossman  (grossman@cygnus.com)

	* remote.c (remote_open):  Move setting of inferior_pid prior to
	call to remote_start_remote.  Also use unique value for pid to
	avoid confusion with read_register_pid & friends.
	* (remote_wait):  Return inferior_pid instead of 0 in all cases.

Fri Aug  5 12:23:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* dwarfread.c (bfd.h): Don't include.

Fri Aug  5 09:08:34 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* i386-nlmstub.c (handle_exception): Point the PC at _exit() to
	  kill the program being debugged.  KillMe(), the undocumented
	  call intended for this purpose, causes the server to hang.

Thu Aug  4 16:26:06 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote.c (read_frame): Calculate run length encoded checksum
	correctly.
	* config/sh/stub.c: New file.

Thu Aug  4 14:34:12 1994  Stu Grossman  (grossman@cygnus.com)

	* target.c (find_default_run_target):  Make sure to_can_run is set
	before calling it.

Thu Aug  4 11:46:27 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Remove note about fast watchpoints and remove obsolete
	Mach stuff.

Thu Aug  4 11:08:03 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/i386/xm-i386v4.h, config/m68k/xm-m68kv4.h,
	config/sparc/xm-sun4sol2.h (NORETURN): Don't define.
	* config/m88k/tm-cxux.h (ARCH_NUM_REGS): Undefine before defining.

Thu Aug  4 10:26:36 1994  Stu Grossman  (grossman@rtl.cygnus.com)

	* target.c (add_target):  Don't call clean_target on target
	vectors anymore.
	* (unpush_target):  Test for to_close being set before calling.
	* (target_xfer_memory, target_info):  Check for to_has_memory
	before playing with memory.

	* remote.c (remote_open):  Set inferior_pid to make kill command
	happy.
	* inflow.c (kill_command):  Revert change of Aug 2.  Use
	inferior_pid to determine whether to print out "The program is not
	being run." message.

Thu Aug  4 07:55:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/i386m3.mh (NAT_CLIBS): Add -lmachid and -lnetname.
	* m3-nat.c, config/nm-m3.h: #if 0 REQUEST_QUIT stuff.
	* m3-nat.c: Pass argument to return_to_top_level.
	Declare m3_kill_inferior before use.
	(port_chain_insert): In "can't happen" case, abort rather than
	setting `mid' to large decimal constant (which gcc warns about).
	(get_thread_name): Use cast to convert const char * to char *.
	(add_mach_specific_commands): #if 0 "thread break" command.
	(m3_trace_him): Call push_target.
	(mach_really_wait): New argument pid; remove unused
	variable pid.
	(intercept_exec_calls): Call target_terminal_init and
	target_terminal_inferior once the child execs.
	* infrun.c (proceed): Pass argument to PREPARE_TO_PROCEED.

Wed Aug  3 22:41:13 1994  Tom Lord  (lord@x1.cygnus.com)

	* procfs.c (procfs_mourn_inferior): don't dereference the
	procinfo pointer after it has been freed.

Wed Aug  3 12:05:13 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* breakpoint.c (breakpoint_1): Improve pluralization in display
	of breakpoint hit counts.

	* language.h (struct language_defn): Remove unused field
	la_longest_float.
	(longest_float): Remove, no longer used.
	* language.c (unknown_language_defn, auto_language_defn,
	local_language_defn): Remove init of la_longest_float field.
	* c-lang.c (c_language_defn, cplus_language_defn,
	asm_language_defn): Ditto.
	* ch-lang.c (chill_language_defn): Ditto.
	* m2-lang.c (m2_language_defn): Ditto.

Tue Aug  2 10:58:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* defs.h (bfd_read, bfd_seek): Remove declarations.
	* os9kread.c, rs6000-nat.c (libbfd.h): Don't include.

Tue Aug  2 09:50:50 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* inflow.c (kill_command): Fix a bug which prevented target
	  programs to be killed.

Mon Aug  1 18:48:47 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* defs.h: Change two-line declarations to one-line form.
	(NORETURN): Define as "volatile" only for older GCCs.
	(ATTR_NORETURN): Define for newer GCCs.
	* procfs.c (proc_init_failed): Add ATTR_NORETURN to declaration.

Mon Aug  1 16:43:24 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (mention), main.c (fputs_unfiltered): Add comments.
	* breakpoint.c (delete_breakpoint, enable_breakpoint,
	disable_breakpoint): Don't call breakpoints_changed; it is now
	called via the *_breakpoint_hook functions.
	* annotate.c (_initialize_annotate, breakpoint_changed): New functions.

Mon Aug  1 13:38:04 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* stabsread.c (read_type): Fix a bug in enum size calculation.

Mon Aug  1 01:36:13 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (compare_unwind_entries): Add "const" to both
	argument types to shut up GCC.

	* hppa-tdep.c (saved_pc_after_call): If the saved PC is in a
	linker stub, then return the address the stub will return to.
	(frame_saved_pc): Correctly restart the search for the saved
	pc when a linker stub is encountered.

	* hppa-tdep.c (inst_saves_gr): Handle 16 and 8 bit instruction
	register stores emitted by the version 9 HP compilers.
	(inst_saves_fr): Relax test for a specific base register (%r1);
	this avoids losing with the version 9 HP compilers.
	(skip_prologue): Try to skip argument stores emitted by the HP
	compilers.  It's not perfect, but it's better than before.

Fri Jul 29 23:20:30 1994  Stu Grossman  (grossman@cygnus.com)

	* findvar.c (write_pc write_pc_pid):  Remove casts to long when
	calling write_register_pid.
	* (write_register_pid):  Add prototype.

Fri Jul 29 21:56:23 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote.c (read_frame):  Split readchar/checksum calculation into
	two parts since evaluation order is undefined.

Fri Jul 29 13:46:08 1994  Fred Fish  (fnf@cygnus.com)

        From Kevin A. Buettner (kev@cujo.geg.mot.com).
	* Makefile.in (coredep.o):  Add inferior.h as dependency.
	* inflow.c:  Add F_SETOWN to list of defines to check
	around code that uses F_SETOWN.

Fri Jul 29 09:59:05 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): If using newlib,
	  set the -L and -B directory prefixes so we can link with it.

Thu Jul 28 14:37:36 1994  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (INSTALLED_LIBS, CLIBS, DEPFILES):  Add support for
	--enable-xxx configure option by adding ENABLE_{CLIBS DEPFILES}
	where appropriate.

	* General hackery to support alternate user-interface.
	* breakpoint.c (mention, delete_breakpoint, enable_breakpoint,
	disable_breakpoint):  Call hooks for alternate user-interface.
	* defs.h:  Add declarations for alternate user-interface hooks.
	* main.c (main):  Add --nw (and --nowindows) options to disable
	the GUI.
	* (near call to command_loop):  Call command_loop_hook if set.
	* (fputs_unfiltered):  Call fputs_unfiltered_hook if set.
	* stack.c:  Call print_frame_info_listing_hook if set.
	* top.c (gdb_init):  Initialize targets.c and utils.c prior to
	other files to make sure that calls to error and warning will
	work.  Call init_ui_hook after everything else.
	* utils.c (query):  Call query_hook if set.
	* (gdb_flush):  Call flush_hook if set.
	* Change _initialize_utils to initialize_utils cuz we don't use
	automatic initialization of utils.c anymore.


	* remote.c:  Get rid of #ifdef DONT_USE_REMOTE.  It's no longer
	necessary.

Thu Jul 28 14:52:01 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): Use newlib if it is
	  there and we are using the gcc from the tree.
	  (LD_FOR_TARGET): Look for ld in ../ld/ld.new.

Thu Jul 28 10:43:36 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (annotate.o):  Add dependencies.

Wed Jul 27 14:34:42 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* sparclite/aload.c: Added new -q (quiet) option.
	  return 0 exit status if file was successfully downloaded.

	* nlm/gdbserve.c: merge in command line argument parsing changes
	  and bug fixes made to i386-nlmstub.c.

	* i386-nlmstub.c: The returnLength field must be initialized
	  before portConfig is passed to AIOGetPortConfiguration.
	  Compare command line arguments with strnicmp(); args are
	  case insensitive on netware.

Wed Jul 27 09:24:19 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (DISTSTUFF):  Add definition.
	(diststuff):  Add for new distribution support.
	(gdb.tar.Z, make-proto-gdb.dir, setup-to-dist,
	gdb-$(VERSION).tar.Z, make-proto-gdb-1, make-proto-testsuite.dir):
	Remove old distribution building rules, now uses standard
	distribution support in parent directory Makefile.in.

Tue Jul 26 14:15:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.c (push_target): Cast result from xmalloc.

Tue Jul 26 18:20:46 1994  Paul Flinders  (ptf@smee)

	* elfread.c (elf_symtab_read): Discard compiler labels generated
	by the Solaris 2.1/Intel SunPro compiler.

Mon Jul 25 18:19:24 1994  Stu Grossman  (grossman@cygnus.com)

	* target.c (nomemory):  Fix prototype and routine to take correct
	args.

Mon Jul 25 15:38:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (clean): Remove libgdb-files.

Mon Jul 25 11:50:57 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coredep.c: Include inferior.h.

Mon Jul 25 11:36:02 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* i386-nlmstub.c: Add support for NODE, PORT and BAUD command
	  line arguments.

Sat Jul 23 14:36:09 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* symfile.c (deduce_language_from_filename): Recognize .S as asm,
	.cp as C++, alphabetize better.

	* breakpoint.c (ignore, condition): Move usage note into body of
	help text, so first line can be one-line summary.

Sat Jul 23 00:58:15 1994  Stu Grossman  (grossman@cygnus.com)

	* target.c (unpush_target):  Fix handling of removal of top target.

Fri Jul 22 17:30:39 1994  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in: Add stuff to build nlmstub.
	* Add rule for annotate.o to keep Sun make happy.
	* configure.in:  Add config for powerpc/Netware.

	* partial-stab.h (near N_SO):  Don't call START_PSYMTAB with null
	filename.  This speeds up handling of trailing N_SO stabs (they
	mark the end of a .o file).

	* target.c, target.h:  Change the way pushing and popping of
	targets work to support target overlays and inheritance.
	* corelow.c, hppa-tdep.c, inflow.c, remote-nindy.c, utils.c:
	Fixup references to current_target, due to previous changes.

	* config/i386/tm-i386nw.h:  Enable longjmp support.  More work is
	needed to get the address of longjmp out of the target.

Tue Jul 19 13:25:06 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* main.c: Include <ctype.h>.

Mon Jul 18 15:32:17 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* remote-mips.c (mips_readchar): Fix a bug in checking <IDT>
	prompt.

Mon Jul 18 14:26:35 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* solib.c (look_for_base): Don't deref exec_bfd if NULL.

Sun Jul 17 15:38:36 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.12.4.

Sun Jul 17 12:20:35 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Harris CX/UX support, from Bob Rusk (rrusk@mail.csd.harris.com).
	* configure.in (m88*-harris-cxux*): New configuration.
	* cxux-nat.c, config/m88k/cxux.mh, config/m88k/cxux.mt,
	config/m88k/xm-cxux.h, config/m88k/tm-cxux.h, config/m88k/nm-cxux.h:
	New files.
	* config/m88k/tm-m88k.h: Add comment about Harris OS.
	(TARGET_WRITE_PC): Pass pid through to register writers.

	* configure.in (m68*): Put vendor-only-specified host configs
	after vendor-and-os-specified configs.
	(m68*-atari-sysv4*, m68*-cbm-sysv4*): Replace with m68*-*-sysv4.

	* config/m88k/delta88.mh (MUNCH_DEFINE): Remove.
	* config/m88k/delta88.mt, config/m88k/delta88v4.mh: Format
	consistently.

Sat Jul 16 23:39:17 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfread.c (elf_symtab_read):  Handle error return from
	bfd_get_dynamic_symtab_upper_bound gracefully.

Sat Jul 16 14:43:17 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* inferior.h (ARCH_NUM_REGS): New macro, actual number of
	registers in use by the inferior.
	* coredep.c (fetch_core_registers, register_addr): Use it.
	* findvar.c (registers_changed, registers_fetched,
	read_register_bytes): Ditto.
	* infcmd.c (do_registers_info, registers_info): Ditto.
	* infptrace.c (fetch_inferior_registers,
	store_inferior_registers): Ditto.
	* stack.c (frame_info): Ditto.

	* coredep.c (CORE_REGISTER_ADDR): New macro.
	(fetch_core_registers): Use it.

	* breakpoint.c (ignore, condition): Add usage notes to help strings.
	* symfile.c (add-symbol-file): Add usage note to help string.
	(add_shared_symbol_files_command): New command.

	gcc -Wall lint.
	* inferior.h (read_pc_pid): Declare.
	* breakpoint.c (watchpoint_check): Cache breakpoint in local
	variable b, remove unused variable other_type_used.
	* main.c (inferior.h, call-cmds.h): Include.
	(gdb_init): Declare.
	* remote.c (remote_wait): Return 0 by default.

Fri Jul 15 16:43:33 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Stop printing at null char option, from Oliver Meyer
	(omeyer@i3.informatik.rwth-aachen.de).
	* valprint.h, valprint.c (stop_print_at_null): New global.
	* valprint.c (_initialize_valprint): New print set subcommand
	"null-stop".
	* c-valprint.c (c_val_print): If stop_print_at_null is on, and
	printing a char	array, adjust the number of chars to print.

Fri Jul 15 14:33:40 1994  Stan Shebs  (shebs@andros.cygnus.com)

        From Kevin A. Buettner (kev@cujo.geg.mot.com).
	* m88k-tdep.c (examine_prologue): Modified to handle prologues for
	pic code in addition to prologues where an instruction from the
	prologue gets moved into the delay slot of a branch instruction
	immediately following the prologue.  A table of potential prologue
	instructions (prologue_insn_tbl) is now used for picking apart a
	function prologue.
	(frame_find_saved_regs): Changed the way in which limit gets set
	so that the delay slot of branch instructions immediately
	following the prologue gets examined.
	(pushed_size, store_parm_word, store_parm, push_parameters,
	collect_returned_value):  Deleted.

Fri Jul 15 01:06:00 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior):  Handle stepping into leaf
	functions whose prologue consists of gp loading code only.

Thu Jul 14 14:22:12 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* dbxread.c: Don't include libbfd.h.
	* dwarfread.c, elfread.c somread.c: Don't include libbfd.h,
	<time.h>, or <sys/types.h>.
	* elfread.c (elf_symfile_read): Use only standard BFD functions to
	collect information about the stab and stab string sections.

Thu Jul 14 13:17:39 1994  Kung Hsu  (kung@x1.cygnus.com)

	* stabsread.c (read_huge_number): handle large unsigned number
	for stabs generated by os9k C compiler.

Wed Jul 13 18:58:15 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Breakpoint hit counts, from Bob Rusk (rrusk@mail.csd.harris.com).
	* breakpoint.h (hit_count): New breakpoint field.
	* breakpoint.c (show_breakpoint_hit_counts): New variable.
	(clear_breakpoint_hit_counts): New function.
	(bpstat_stop_status): Increment the hit count.
	(breakpoint_1): Display the hit count.
	* infcmd.c (run_command): Reset breakpoint hit counts.
	* target.c (generic_mourn_inferior): Don't clear ignore counts if
	displaying hit counts.
	
Tue Jul 12 12:23:15 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfread.c (elf_symfile_read):  Unconditionally add dynamic
	symbols for all symbol files.  Makes skipping over the
	trampoline code work when stepping from a function in a shared
	library into a function in a different shared library for Irix 5.
	Other ELF targets do not have enough information in their
	dynamic symbol tables to make this work.
	(elf_symtab_read):  Relocate mst_solib_trampoline address.

Mon Jul 11 16:38:49 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Atari support, from Uwe Seimet (seimet@chemie.uni-kl.de).
	* configure.in (m68*-atari-sysv4*): New configuration.
	(m68*-cbm-sysv4*): Use m68kv4 instead of amix.
	* m68k-tdep.c (R_PS): Define as R_SR if necessary.
	* config/m68k/m68kv4.mh, config/m68k/m68kv4.mt,
	config/m68k/tm-m68kv4.h, config/m68k/xm-m68kv4.h: New files.
	* config/m68k/amix.mh, config/m68k/amix.mt,
	config/m68k/tm-amix.h, config/m68k/xm-amix.h: Removed, superseded
	by m68kv4 files.

Sat Jul  9 16:28:43 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.c (find_function_start_sal):  New function to find
	the start of a function from a function symbol.
	(decode_line_1, decode_line_2):  Use it instead of open coded
	partial copies of the code.
	(list_symbols):  Quote symbol name before passing it to
	break_command to enable proper handling of mangled symbols.

Wed Jul  6 20:22:07 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-exp.y (match_simple_name_string):  Don't lower-case here.
	* ch-exp.y (yylex):  First try name lookup using exact name
	typed by user;  if that fails, try lower-cased name.

Wed Jul 06 12:39:07 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: More cleanups.  Delete lots of trailing whitespace.
	Remove some items from the TODO list and notes throughout code
	for things which need fixing.  Add more comments.
	Document bogus struct symloc sharing with dbxread.c.  Delete more
	useless variables.  Add more PARAM prototypes.  Fixup more
	indention problems that have crept in.
	(SET_NAMESTRING): Accept new namep and objfile arguments so that
	it doesn't depend on the variable names on the procedures it's
	used from.  
	(hpread_symfile_init): Delete incorrect checks for bogus sizes of
	the debug sections.

Wed Jul  6 00:48:57 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c, elfread.c, mipsread.c, nlmread.c, os9kread.c:
	Move "no debugging symbols found" test to symfile.c.
	* symfile.c (syms_from_objfile, reread_symbols):  Add
	"no debugging symbols found" test.
	* coffread.c (init_stringtab):  Handle stripped files with a
	stringtab offset of zero gracefully.
	* osfsolib.c (solib_create_inferior_hook):  Use DYNAMIC flag from
	BFD instead of stop_pc heuristic to determine if it is a dynamically
	linked object file.
	* procfs.c (wait_fd):  Handle ENOENT error return from PIOCWSTOP
	ioctl, it indicates that the process has exited.

Mon Jul 04 19:48:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hpread_symfile_init): Make sure to initialize all the
	private data to zero.  Not having any HP C debug symbols is not an
	error.  Just return.

Mon Jul  4 19:28:56 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (read_unwind_info): ELF unwind information is in the
	.PARISC.unwind section now.

Mon Jul  4 17:06:26 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* breakpoint.c (mention): Always show breakpoint address if no
	source file.

Sat Jul  2 01:51:33 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* solib.c (bfd_lookup_symbol, look_for_base):  Reinstate to reenable
	handling of shared libraries for non-ELF executables, but only if
	HANDLE_SVR4_EXEC_EMULATORS is defined.
	(locate_base):  Try to find debug_base in the dynamic linker
	for non-ELF executables if HANDLE_SVR4_EXEC_EMULATORS is defined.
	* config/sparc/tm-sun4sol2.h (HANDLE_SVR4_EXEC_EMULATORS):
	Define to enable handling of shared libraries for a.out executables,
	run under Solaris BCP.

Fri Jul 01 19:50:21 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Change contribution notice to the Cygnus/Utah agreed
	upon notice.  Delete some stuff from the TODO list.  Rework
	many comments to be clearer.  Major cleanups.  Consistently
	use "hpread_" prefix.  Delete unnecessary macros, structures
	variables, fiels, functions and #if 0 code.  Mark code which
	still needs to be cleaned up.  PARAMize and make most functions
	static. Fix error checking when reading in the debug section
	contents.  No more minimal symbol table handling in this code!

Thu Jun 30 13:59:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Print "Program exited normally"
	regardless of batch_mode.
	* defs.h, top.c (batch_mode): Removed.

Wed Jun 29 18:53:36 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (dcache_h): Remove redundant definition.
	(init.c): Add a comment.
	(top.c): Remove explicit compile action.
	* breakpoint.c (mention): Share code indicating location of
	break/watchpoints, don't print address if addressprint is off.
	* breakpoint.c, c-typeprint.c, c-valprint.c, energize.c, symtab.h
	(demangle): Remove redundant declarations.
	* eval.c: Remove redundant function declarations.
	* objfiles.h: Cosmetic and grammatical improvements.
	* TODO: Various updates.

	* remote-mips.c: Replace all \r chars with \015.
	(mips_receive_header): Display control characters readably.
	(mips_xfer_memory): Add a simple progress display.

Wed Jun 29 13:11:45 1994  Steve Chamberlain  (sac@cirdan.cygnus.com)

	* remote-e7000.c (e7000_open): Don't try a tcp open if we're
	using go32.
	* remote-hms.c (flush): New function.
	(expect): Get edge case right.
	(hms_read_inferior_memory): Be more tolerant of line noise.

Tue Jun 28 14:17:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Use i386m3.mh and i386m3.mt as names of host and
	target files, not non-existent mach3.mh and mach3.mt.

Wed Jun 29 00:26:17 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (dbx_symfile_read):  Unconditionally add dynamic
	symbols for all symbol files.  Makes skipping over the
	trampoline code work when stepping from a function in a shared
	library into a function in a different shared library.
	(read_dbx_dynamic_symtab):  Relocate mst_solib_trampoline address.

Tue Jun 28 15:28:01 1994  Stu Grossman  (grossman@cygnus.com)

	* dbxread.c, partial-stab.h (near N_SO):  SO stabs with blank
	names mean end of .o file.
	* infrun.c (wait_for_inferior):  Clean up multi-thread logic near
	top of routine.  Handle new thread notification cleanly.
	* lynx-nat.c (child_wait):  General cleanups, handle new LynxOS
	thread notification scheme.
	* (child_resume):  General cleanups, handle resumption of all
	threads properly.

Mon Jun 27 09:57:23 1994  Steve Chamberlain  (sac@cirdan.cygnus.com)

	* ser-go32.c: Rewrite to run under windows.
	* ser-e7kpc.c: New file to support the E7000 with the PC ISA
	bus interface.
	* serial.c (serial_open): Notice device "pc".
	* remote-e7000.c: Fix copyright date.
	(expect): Compare \n and \r the same.
	(e7000_open): Allow pc as a serial port
	* sh/sh.mt: Add ser-e7kpc.
	* h8300/h8300hms.mt: Add ser-e7kpc.
	* main.c (proc_wait): Don't wait if using go32.

Mon Jun 27 00:35:51 1994  Jeff Law  (law@snake.cs.utah.edu)

	* somread.c: Simplify by using stabsect_build_psymtabs.
	* dbxread.c (stabsect_build_psymtabs): New argument "text_name"
	corresponding to the name of the text section.  All references
	changed.
	(somstab_build_psymtabs): Delete function, no longer needed.

Sun Jun 26 23:54:08 1994  Jeff Law  (law@snake.cs.utah.edu)

	* somread.c: Renamed from paread.c.  Changed function names and
	comments to reflect that this file deals with SOM (an object file
	format), rather than the PA (a cpu).
	(Makefile.in): Chaned appropriately.
	(config/pa/hppabsd.mh, config/pa/hppahpux.mh): Likewise.
	* dbxread.c (somstab_build_psymtabs): Renamed from
	pastab_build_psymtabs.

Fri Jun 24 08:15:42 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* core-sol2.c:  New file to handle ELF and BCP core file flavours.
	* config/sparc/sun4sol2.mh (NATDEPFILES):  Use it instead of
	core-svr4.
	* Makefile.in:  Updated for core-sol2.c.
	* README:  Add notes about SPARCworks cc under Solaris 2.x,
	from Casper H.S. Dik (casper@fwi.uva.nl).
	* config/mips/xm-makeva.h:  Removed, no longer necessary.
	* Makefile.in, config/mips/xm-irix3.h, config/mips/xm-irix5.h,
	config/mips/xm-mips.h, config/mips/xm-news-mips.h,
	config/mips/xm-riscos.h:  Remove references to xm-makeva.h

Wed Jun 22 17:48:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdba.el: Put program input and output in a separate buffer.

Wed Jun 22 16:54:15 1994  Fred Fish  (fnf@cygnus.com)

	* energize-patches, main.c (main), top.c (gdb_init, pwd_command),
	top.h: Change all occurances of dirbuf to gdb_dirbuf.  Collides
	with global variable of same name in libnsl.so on UnixWare.

Wed Jun 22 14:40:52 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* symtab.c (decode_line_1): fix a bug in dealing with '<>'
	embedded in template name.

Tue Jun 21 14:06:46 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* config/i386/nm-linux.h: change calling convention of 
	TARGET_CAN_USE_HARDWARE_WATCHPOINT() and
	target_insert_watchpoint() and
	target_remove_watchpoint().

	* config/mips/tm-mips64.h: define FORCE_LONG_LONG to force LONGEST
	to be long long in gdb.
	* config/mips/tm-bigmips.h: ditto.

Mon Jun 20 23:54:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-lang.c (asm_language_defn):  New definitions for language_asm,
	mostly copied from c_language_defn, to avoid warnings when
	switching between c and asm stack frames.

Mon Jun 20 13:51:55 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* mdebugread.c (parse_symbol): Don't call ecoff_swap_tir_in or
	ecoff_swap_rndx_in directly; use the debug_swap pointer instead.
	(upgrade_type, handle_psymbol_enumerators): Likewise.
	(has_opaque_xref, cross_ref): Likewise.
	(elfmdebug_build_psymtabs): Call swap->read_debug_info to read
	debugging information, rather than doing it here.
	* mipsread.c (mipscoff_symfile_read): Call read_debug_info entry
	point in ecoff_debug_swap backend structure, rather than calling
	ecoff_slurp_symbolic_info directly.

Fri Jun 17 20:58:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c: Include annotate.h.  Call annotate_field rather
	than printing annotation directly.

	* main.c: Include string.h.

Thu Jun 16 14:41:37 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* fork-child.c (startup_inferior) [STARTUP_INFERIOR]: If defined,
	call it instead of doing normal loop.
	* infcmd.c (attach_command): Don't call wait_for_inferior if
	running	Mach 3.
	* infrun.c (proceed) [PREPARE_TO_PROCEED]: If defined, call
	hook that can decide whether to step over the next breakpoint.
	* utils.c (wrap_here): Abort if wrap_buffer not allocated.
	(request_quit) [REQUEST_QUIT]: If defined, call it instead of
	doing normal quit.

	* configure.in: Improve sorting/formatting of hosts and targets.
	(i[34]86-*-mach3*, i[34]86-*-osf1mk*, mips-*-mach3*,
	m88*-*-mach3*, ns32k-*-mach3*): Recognize.
	* Makefile.in (stop-gdb): New target.
	* stop-gdb.c: New file, utility to get attention of waiting GDBs
	in Mach 3.

Wed Jun 15 00:41:03 1994  Tom Lord  (lord@rtl.cygnus.com)

	* top.c (gdb_init): Init current_directory in gdb_init.  Probably
	the identical initialization can be deleted from main.c, but i
	haven't done so just in case.

Tue Jun 14 17:24:41 1994  Tom Lord  (lord@x1.cygnus.com)

	* gdba.el: Added menu windows and slightly improved window
	handling to gdba.el.  Fixed numerous minor bugs that were causing
	emacs and gdb to fall out of sync.

Tue Jun 14 16:18:44 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* breakpoint.c: annotate changes lost at merge, put back in.

Mon Jun 13 17:28:50 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config/i386/i386sco.mh, i386sco4.mh (XDEPFILES): Remove
	i387-tdep.o.

Sun Jun 12 03:51:52 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/m68k/dpx2.mh (NATDEPFILES):  Remove duplicate inclusion
	of inftarg.o.
	* config/m68k/tm-dpx2.h (CANNOT_STORE_REGISTER):  Define to inhibit
	writing of floating registers, the dpx2 kernel disallows it.
	* irix5-nat.c (LM_ADDR):  The loaded address of the shared library
	is contained in o_praw.
	* irix5-nat.c (solib_map_sections):  Adjust sections by the
	difference between the loaded address and the prelinked address.
	* irix5-nat.c (solib_address):  Use LM_ADDR for the loaded start
	address.
	* mdebugread.c (parse_symbol):  Do not relocate stEnd/scText
	symbols, their value is absolute.
	* mdebugread.c (parse_partial_symbols):  Handle Irix 5.2 shared
	libraries fh->adr fields of zero. Relocate minimal symbol values
	upon readin. Relocate non-stabs symbols upon readin.
	* mdebugread.c (psymtab_to_symtab_1):  Use pst->textlow for the
	start address of the outermost block.
	* mdebugread.c (parse_lines, parse_procedure):  Pass in pst
	instead of section_offsets and use relocated pst->textlow for
	line number and procedure address relocations.

	From gmo@MicroUnity.com (Guillermo A. Loyola):
	* mdebugread.c (parse_symbol, parse_partial_symbols, cross_ref):
	Handle SGI Irix5 stIndirect symbol type.

Fri Jun 10 14:52:56 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* breakpoint.c: fix a syntax error native cc does not like.

	* Makefile.in: change sparclite-tdep.c to sparcl-tdep.c.
	* sparclite/Makefile.in: ditto.
	* sparcl-tdpe.c: change file name because first 8 chars has to be 
	unique.
	* sparcl-stub.c: ditto.

	* sparclite/Makefile.in: fix INCLUDE_CFLAGS to have {srcdir}/../config.

Fri Jun 10 10:38:15 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (target_read_pc, target_write_pc): Accept (and
	ignore) a PID argument.
	(hppa_pop_frame): Pass a PID to target_write_pc.
	* config/pa/tm-hppa.h (TARGET_READ_PC, TARGET_WRITE_PC): Accept
	and pass through a PID argument.
	(target_read_pc, target_write_pc): Update prototypes.

Thu Jun  9 18:10:44 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* Makefile.in: add new file sparclite-tdep.c.
	* sparclite/Makefile.in: add new file sparclite-stub.c.
	* sparclite/hw_breakpoint.note: note for SPARClite hardware breapoint
	support.
	* config/sparc/sparclite.mt: add sparclite-tdep.o.
	* config/sparc/tm-sparclite.h: add hardware breakpoints support 
	defiines and code.
	* sparclite-tdep.c: new file, contains hardware breakpoint support
	code.
	* sparclite-stub.c: new file, stub code that add support hardware
	breakpoint support.
	* breakpoint.c: add hardware breakpoint support.
	* breakpoint.h: add new breakpoint type to support hardware
	breakpoint.
	* config/mips/nm-irix4.h: change interface for target dependent
	code supporting watch point.
	* config/pa/nm-hppab.h: change interface for target dependent
	code supporting watch point.

Thu Jun  9 14:59:58 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* remote-os9k.c (rombuf_command): fix a bug accepting rombug
	output.
	* stabsread.c (read_struct_fields): os9k nested structure does not
	have terminating ';', instead it just get to ',' and bit position
	and length.

Wed Jun  8 23:20:45 1994  Stu Grossman  (grossman@cygnus.com)

	* nlmread.c (nlm_symtab_read):  Clean up a bit.
	* (nlm_symfile_read):  Record bounds of main() so that backtrace
	command will know where to stop.
	* objfiles.c (objfile_relocate):  Relocate entry point/func info
	for backtrace as well.
	* objfiles.h:  Define values for invalid PCs for entry point info.
	* symfile.c (init_entry_point_info):  Initialize invalid values
	with aforementioned macros.
	* config/alpha/tm-alphanw.h:  Turn on FRAME_CHAIN_VALID_ALTERNATE
	to cause backtrace to stop when it gets back to main().
	* config/i386/tm-i386nw.h:  Ditto.

Sat Jun  4 18:17:03 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	Fix value_print, which used to be ostensibly language-independent,
	but would print pointers and arrays in C syntax.  Instead, call
	a language-specific function.
	* language.h (struct language_defn):  New functional field
	la_value_print.
	(LA_VALUE_PRINT):  New macro.
	* language.c (unk_lang_value_print):  New stub/dummy function.
	(unknown_language_defn, auto_language_defn, local_language_defn):
	Use it.
	* c-valprint.c (c_value_print):  New function, with code moved from:
	* valprint.c (value_print):  ... here.  Now just invoke
	LA_VALUE_PRINT to do language-specific stuff.
	* valprint.c (value_print_array_elements):  Make non-static.
	* c-lang.c (c_language_defn, cplus_language_defn):  Add
	c_value_print in the la_value_print field.
	* m2-lang.c (m2_language_defn):  Likewise.
	* ch-lang.c (chill_language_defn):  But here use chill_value_print.
	* ch-valprint.c (chill_val_print):  Print null pointer as NULL.
	* ch-valprint.c (chill_value_print):  New function, based on
	c_value_print, but use Chill "look and feel."
	* c-lang.h (c_value_print):  New prototype.
	* ch-lang.h (chill_value_print):  New prototype.
	* value.h (value_print_array_elements):  New prototype.

	* ch-valprint.c (chill_val_print, case TYPE_CODE_BITSTRING
	and case TYPE_CODE_SET):  Check that the element type isn't a stub.

Fri Jun  3 09:15:00 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c: Move entire file except for #ifndef MAIN_OVERRIDE code
	to new file top.c.  Make things extern instead of static and
	similar rearrangements to deal with this.
	* top.h: New file.
	* utils.c: Move fputs_unfiltered to main.c.  Remove 
	FPUTS_UNFILTERED_OVERRIDE ifndef.
	* Makefile.in: Change so that gdb uses main.c, utils.c, and top.c,
	and libgdb uses utils.c and top.c.

Thu Jun  2 23:19:10 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (skip_trampoline_code): Fix typo.

Thu Jun  2 18:09:59 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-valprint.c (chill_val_print_array_elements):  New function.
	A Chill version of val_print_array_elements, it prints the
	array index labels, in additions ot the array element values.
	(chill_val_print):  Use the new function.

Thu Jun  2 08:50:00 1994  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Add nlm subdir to configdirs for alpha-*-netware
	target.
	* defs.h (enum language):  Add language_asm.
	* findvar.c (read_register_bytes read_register_gen
	write_register_bytes read_register read_register_pid
	write_register write_register_pid supply_register):  Move multi-
	thread handling down into these routines.  Create XXX_pid routines
	that allow register references to specify the pid.
	* findvar.c infcmd.c (read_pc read_pc_pid write_pc write_pc_pid
	read_sp write_sp read_fp write_fp):  Move these routines from
	infcmd to findvar to centralize the whole mess.
	* i386-nlmstub.c:  Portability fixes.
	* infptrace.c (child_resume):  Conditionalize to allow other natives
	to override it.  Remove PIDGET gubbish, it's no longer necessary.
	* infrun.c (wait_for_inferior):  Put registers_changed() before
	target_wait() to speed up remote debugging.
	* Replace code that reads registers from other threads with much
	nicer looking new function calls (see changes to findvar.c).
	* Don't skip prologues if debugging assembly source.
	* lynx-nat.c (child_resume):  Lynx now needs it's own version of
	child_resume to handle multi-thread debugging properly.
	* remote.c:  Add O response to get console output from target.
	* (readchar): Add timeout parameter.  Handle SERIAL_EOF and
	SERIAL_ERROR here to simplify callers.
	* Change static var timeout to remote_timeout.
	* (fromhex):  Remove unnecessary return -1 at end of routine.
	* (remote_wait):  Turn this into a big switch statement.  Add
	support for O response.
	* (putpkt):  Remove unnecessary handling of SERIAL_EOF/ERROR.
	* (getpkt):  Split getpkt into two parts.  read_frame deals with
	all formatting issues, run-length encoding, and framing.  getpkt
	now handles error recovery, and frame detection.
	* ser-tcp.c (tcp_readchar):  Handle EINTR from read().
	* ser-unix.c (hardwire_raw):  Set CLOCAL so that we ignore modem
	control.  (hardwire_readchar):  Handle EINTR from read().
	* symfile.c (deduce_language_from_filename):  Add support for .s
	files.
	* config/nm-lynx.h:  Define CHILD_WAIT so that lynx-nat.c can
	override infptrace's child_wait.
	* config/rs6000/rs6000lynx.mh:  Use xm-rs6000ly.h & nm-rs6000ly.h
	instead of XXXlynx.h.
	* config/rs6000/rs6000lynx.mt:  Use tm-rs6000ly.h instead of
	tm-rs6000lynx.h.
	* nlm/gdbserve.c:  Portability fixes.

Tue May 31 20:35:44 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* inftarg.c (child_wait): Call proc_wait, not wait.
	(child_mourn_inferior): Call proc_remove_foreign.
	* main.c (gdb_init): Call init_proc.
	* main.c: Provide dummy versions of init_proc, proc_wait, and
	proc_remove_foreign for the gdb case (the libgdb case provides its
	own versions of these functions).
	* Makefile.in (libgdb-files): Add libproc.a.

Wed Jun  1 11:08:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Hardware watchpoints for Linux, from Rick Sladkey
	(jrs@world.std.com).
	* infrun.c (wait_for_inferior) [HAVE_CONTINUABLE_WATCHPOINT]: Add
	new hardware breakpoint recovery method.
	* i386v-nat.c (i386_insert_watchpoint,
	i386_insert_nonaligned_watchpoint, i386_remove_watchpoint,
	i386_stopped_by_watchpoint) [TARGET_CAN_USE_HARWARE_WATCHPOINT]:
	New functions to support the 386 hardware debugging registers.
	* config/i386/nm-linux.h (TARGET_CAN_USE_HARDWARE_WATCHPOINT,
	HAVE_CONTINUABLE_WATCHPOINT, STOPPED_BY_WATCHPOINT,
	target_insert_watchpoint, target_remove_watchpoint): Define these
	macros to use the hardware debugging functions in i386v-nat.c.

Wed May 25 17:06:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Replace libgdb.a with libgdb-files.  Make "all"
	build it.

Thu May 19 09:56:20 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.c, target.h: New variables target_activity_function and
	target_activity_fd.
	* inflow.c, inferior.h: New functions set_sigio_trap and
	clear_sigio_trap.
	* inftarg.c (child_wait), procfs.c (wait_fd): Call them.

Wed May 18 13:01:55 1994  Doug Evans  (dje@canuck.cygnus.com)

	* remote-sim.h (sim_verbose): Delete.
	Document callbacks needed.
	(sim_*): Change result to void where there isn't one.
	(sim_open): Clarify argument and error response.
	(sim_close): Declare.
	(sim_load): Change bfd_handle argument to file name.  Clarify result.
	(sim_create_inferior): Renamed from sim_set_args.
	(sim_set_pc): Delete.
	(sim_info): Delete printf_fn argument.
	* remote-sim.c (gdbsim_kill): Add comment describing purpose.
	(gdbsim_load): Try sim_load first.
	(gdbsim_create_inferior): Call sim_create_inferior.
	(gdbsim_open): Handle args == NULL.  Update call to sim_open.
	(gdbsim_close): Call sim_close.
	(gdbsim_files_info): Update call to sim_info.
	(gdbsim_ops): Realign comments.

	* printcmd.c (decode_format): Allow TARGET_PTR_BIT to be non-constant.

Tue May 17 16:45:20 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): For C_FILE symbols, only use
	the auxent if the symbol's name is ".file".  From David Edelsohn 
	<c1dje@watson.ibm.com>.

Tue May 17 11:08:22 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (breakpoint_1): Fix typo.

	* annotate.c (annotate_field_end): Fix typo.

	* Makefile.in: Move annotate.o from COMMON_OBS to OBS.

	* Makefile.in (TSSTART): Remove; no longer used.

	* utils.c (vfprintf_maybe_filtered, vfprintf_unfiltered): Call
	fputs_unfiltered and exit directly, rather than fatal.  The latter
	calls vfprintf_unfiltered!

	* gdbtypes.h, gdbtypes.c (can_dereference): New function.
	* value.h, printcmd.c (print_value_flags): Move from here...
	* annotate.c: ...to here, and make it use can_dereference.

Sat May 14 15:13:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* inflow.c (job_control, attach_flag, generic_mourn_inferior):
	Remove, needed for both native and cross.
	* target.c (attach_flag, generic_mourn_inferior): Put here.
	* utils.c (job_control): Put here.
	(terminal.h): Don't include anymore.

Sat May 14 09:11:44 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* source.c (find_source_lines): Always use code that was #ifdef
	BROKEN_LARGE_ALLOCA.  Do the cleanup before returning, rather than
	leaving it on the chain.  Reindent much of this function.
	* config/sparc/{xm-sun4sol2.h,xm-sun4os4.h},
	config/i386/{xm-sun386.h,xm-i386m3.h,xm-i386mach.h},
	config/m68k/{sun3os4.h,xm-news.h,xm-hp300hpux.h},
	config/ns32k/xm-ns32km3.h: Remove all references to
	BROKEN_LARGE_ALLOCA; with the above change it is no longer needed.
	* main.c, fork-child.c, many config files: Remove all
	SET_STACK_LIMIT_HUGE code; with the above changes it should no
	longer be needed.

	* symtab.c (lookup_partial_symbol): Use if and abort, not assert.
	This avoids __eprintf troubles.

Fri May 13 08:10:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (main): Surround in #ifndef MAIN_OVERRIDE.  Move
	initialization code which needs to be called even if we bypass the
	command line stuff into gdb_init.
	* utils.c (fputs_unfiltered): Surround in #ifndef
	FPUTS_UNFILTERED_OVERRIDE.
	* Makefile.in (libgdb.a): New target.

	* utils.c: Rearrange I/O stuff a bit so that all output goes
	through fputs_unfiltered.  Use vasprintf; removes arbitrary limit
	which made %s not work with arbitrarily large strings.
	* printcmd.c (printf_command): Use printf_filtered, not
	printf_unfiltered and printf, now that arbitrary limit is gone.

	gcc -Wall lint:
	* breakpoint.c (watchpoint_check): Remove unused variable b.
	* stack.c (print_frame_info): Move sp and buf inside #if.
	* eval.c (evaluate_subexp): Remove unused variables pp,
	mangle_ptr, ptr, and mangle_tstr.
	* valarith.c (value_x_binop): Remove unused variables mangle_tstr
	and mangle_ptr.
	* symtab.c (lookup_symtab): Put variable copy inside #if.
	(decode_line_1): Put variable q1 inside #if 0.
	* target.h: Declare target_link.
	* infrun.c (wait_for_inferior): Remove unused variables signame.
	* remote.c (remote_resume): Remove unused variable name.
	* c-exp.y (parse_number): Parenthesize operand of shift.
	* dbxread.c (record_minimal_symbol): Parenthesize operand of &&
	(this is a semantic change, the warning seems to have detected a bug).
	* dbxread.c (end_psymtab): Move variable p1 inside #if.
	* coffread.c: Move variable temptype inside #if.
	* ch-typeprint.c (chill_type_print_base): Remove unused variable
	name.
	* ch-valprint.c: #include typeprint.h and ch-lang.h.
	(chill_val_print): Remove unused variable in_range.
	(chill_val_print): Remove statement "length > TYPE_LENGTH (type);".
	(chill_val_print): Add default case for switch.
	* stabsread.h: Declare stabsect_build_psymtabs.
	* os9kread.c (read_minimal_symbols): Make this return void.
	(os9k_symfile_read): Remove unused variables stb_exist and val.
	(os9k_symfile_init): Remove unused variable val.
	(fill_sym): Remove unused variable id.
	(read_os9k_psymtab): Put variable back_to inside #if 0.  Remove
	unused variable nsl.
	Remove unused variable symfile_bfd.
	#if 0 unused variables lbrac_unmatched_complaint and
	lbrac_mismatch_complaint.
	Remove declaration for non-existent function os9k_next_symbol_text.

	* annotate.c, annotate.h: New files, containing a function for
	each annotation which outputs it.
	* Move breakpoints_changed from breakpoint.c to annotate.c.
	* breakpoint.c, blockframe.c, infrun.c, cp-valprint.c, main.c,
	printcmd.c, source.c, stack.c, utils.c, valprint.c:
	Use annotate.c functions to output annotations.
	* Makefile.in (OBS): Add annotate.o.

Thu May 12 10:46:27 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (read_unwind_info): Make sure elf_unwind_size and
	elf_unwind_entries are always initialized.

	* hppa-tdep.c (skip_trampoline_code): Handle argument relocation
	stubs which return directly to the caller rather than to the stub
	itself.

Wed May 11 20:11:51 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* c-exp.y (yyerror): Display a more informative error message.
	* ch-exp.y (yyerror): Ditto, don't use global yychar.
	* m2-exp.y (yyerror): Ditto.

Tue May 10 11:57:53 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* inflow.c (job_control): Move definition to front of file.

Tue May 10 14:42:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* maint.c (print_section_table): Rename SEC_SHARED_LIBRARY to
	SEC_COFF_SHARED_LIBRARY to match corresponding change in bfd.

Fri May  6 13:30:22 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (kdb): Remove old init.c creation commands.
	* configure.in (sparclite): Match on sparclite*.
	* sparclite/aload.c (main): Only change section addresses for
	a.out format object files.

Fri May  6 13:24:04 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/i386/go32.mh: Define CC.

Fri May  6 11:56:54 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* gdbserver/Makefile.in: Remove irrelevant definitions and
	comments inherited from the gdb Makefile.
	(BFD_DIR, BFD, BFD_SRC, BFD_CFLAGS): Add from gdb Makefile.
	(VERSION): Update to 4.12.3.
	(gdbserver): Remove any existing executable first.
	(distclean, realclean): Remove nm.h.
	* gdbserver/low-lynx.c: Add Sparc Lynx support.
	* gdbserver/low-sparc.c, gdbserver/low-sun3.c (sys/wait.h):
	Don't use absolute pathname.

Thu May  5 12:00:22 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* rs6000-nat.c (vmap_ldinfo): Don't fail if fstat returns an
	error.

Wed May  4 06:56:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (proceed, normal_stop, wait_for_inferior), breakpoint.c
	(print_it_normal): Add annotations for the inferior starting and
	stopping, and for all the various messages related to how it
	stopped.

	* printcmd.c (do_one_display): Annotate.
	* stack.c (print_frame_info): Annotate printing of stack frames.

Wed May  4 18:15:51 1994  Stu Grossman  (grossman@cygnus.com)

	* remote.c (get_offsets):  Handle case where stub doesn't support
	qOffsets message.

Wed May  4 15:30:39 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	Add partial support for g++ code compiled with -fvtable-thunks.
	* c-valprint.c (c_val_print):  Add vtblprint support
	when using thunks.
	* cp-valprint.c (cp_is_vtbl_member):  A vtable can be an array of
	pointers (if using thunks) as well as array of structs (otherwise).
	* cp-valprint.c (vtbl_ptr_name_old, vtbl_ptr_name):  Move to global
	level, and make the latter non-static (so define_symbol can use it).
	* stabsread.c (define_symbol):  If the type being defined is a
	pointer type named "__vtbl_ptr_type", set the TYPE_NAME to that name.
	* symtab.h (VTBL_PREFIX_P):  Allow "_VT" as well as "_vt".
	* values.c (value_virtual_fn_field):  Handle thunks.
	* values.c (value_headof):  Minor efficiency hack.
	* values.c (value_headof):   Incomplete thunk support.  FIXME.

Wed May  4 06:56:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valprint.c (print_longest): Clarify comment about use_local.
	* printcmd.c, defs.h (print_address_numeric), callers in
	symmisc.c, symfile.c, stack.c, source.c, remote.c, infcmd.c,
	cp-valprint.c, core.c, ch-valprint.c, c-valprint.c, breakpoint.c,
	exec.c: New argument use_local.
	* source.c (identify_source_line): Use filtered output.  Use
	print_address_numeric. 

	* core.c (memory_error), symtab.c (cplusplus_hint, decode_line_1),
	language.c (type_error, range_error): Use filtered output.
	* utils.c (error_begin): Update comment to tell people to use
	filtered output.

	* Makefile.in (HFILES_WITH_SRCDIR): List bfd.h.
	(HFILES_NO_SRCDIR): List gdbcore.h not gdbcore_h, so as not to get
	bfd.h.

Tue May  3 07:41:33 1994  Jim Kingdon  (kingdon@cygnus.com)

	* procfs.c (procfs_wait): Reinstate code which deduces the signal
	from the fault, #ifndef FAULTED_USE_SIGINFO.
	* config/sparc/tm-sun4sol2.h: Define FAULTED_USE_SIGINFO.

Fri Apr 29 18:15:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (breakpoint_1): Annotate each field of the headers.
	Explicitly annotate each record.

Fri Apr 29 15:56:18 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* xcoffexec.c: Reformat to standards and lint.
	(language.h): Include.
	(exec_close): Declare arg "quitting".
	(file_command): Declare arg "from_tty".
	(map_vmap): Cast xmalloc result to PTR.
	* rs6000-nat.c: Reformat to standards and lint.
	(exec_one_dummy_insn): Use char array for saved instruction.
	(fixup_breakpoints): Declare.
	(vmap_ldinfo): Be more informative in fatal error messages.
	(xcoff_relocate_symtab): Define to return void.
	* xcoffsolib.h: Reformat to standards, improve comments.
	* config/rs6000/nm-rs6000.h (xcoff_relocate_symtab): Declare.

Thu Apr 28 08:40:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c, defs.h (error_begin): New function.
	(quit): Print annotation before printing the error message.
	* main.c (return_to_top_level): Print annotation before doing the
	longjmp.
	* symtab.c (decode_line_1): Call error not warning and then
	return_to_top_level.  Call error_begin and printf_unfiltered
	rather calling warning (before calls to return_to_top_level).
	* core.c (memory_error): Use error_begin, printf_unfiltered,
	print_address_numeric and return_to_top_level instead of error.
	Cleans up a FIXME-32x64.
	* language.c (type_error, range_error): Call error_begin
	not just target_terminal_ours.

	* dbxread.c (stabsect_build_psymtabs): Assign to sym_stab_info
	directly, rather than via DBX_SYMFILE_INFO.  A cast on the left
	side of an assignment is non-portable.

	* utils.c (query): Change syntax of query annotations to be
	consistent with other input annotations.
	(prompt_for_continue): Likewise for prompt-for-continue annotation.

Thu Apr 28 01:20:39 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (psymtab_to_symtab_1):  Do not call sort_blocks
	for stabs symtabs.
	* mips-tdep.c (mips_skip_prologue):  Handle prologues for functions
	that have a stack frame size of 32k or larger (from Paul Flinders).
	Remove #if 0'd code.

Wed Apr 27 16:33:51 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* lynx-nat.c (CANNOT_STORE_REGISTER): Add a fallback definition
	for Lynx platforms that need it.
	* config/nm-lynx.h (__LYNXOS): Define if not already defined.

Wed Apr 27 16:01:37 1994  Jim Kingdon  (kingdon@cygnus.com)

	* procfs.c (procfs_wait): Use the signal from the pr_info rather
	than trying to deduce it from the fault.

Wed Apr 27 12:22:46 1994  Steve Chamberlain  (sac@cygnus.com)

	* printcmd.c (print_address_symbolic): Initialize name to empty
	string to avoid core dump if lookup fails.
	* remote-e7000.c (printf_e7000debug): Error if target not open.

Tue Apr 26 22:45:24 1994  Stu Grossman  (grossman at cygnus.com)

	* i386-nlmstub.c:  Update to be more in line with PIN stub.
	* nlm/gdbserve.c (putDebugChar):  Install bug fix from i386-nlmstub.
	* (hex2mem):  Init ptr.
	* General cleanups to use ConsolePrintf, standard prologues, etc...

Tue Apr 26 10:23:04 1994  Stu Grossman  (grossman at cygnus.com)

	* i386-nlmstub.c:  More changes to be compatible with remote.c.

	* dbxread.c:  Move a bunch of strncmps out of process_one_symbol
	into (the far less frequently called) dbx_symfile_read.

	* i386-nlmstub.c:  An interim version till we get PIN for the x86.

Tue Apr 26 09:50:45 1994  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (record_minimal_symbol):  Record the section
	associated with the symbol to make dynmaic relocation work.
	* (dbx_symfile_read, process_one_symbol):  Fixes to work around
	Solaris brain-damage which don't apply to relocatable object
	files.
	* (stabsect_build_psymtabs):  New routine to read stabs out of an
	arbitrarily named section.
	* nlmread.c (nlm_symtab_read):  Read ALL syms from the NLM, not just
	globals.
	* (nlm_symfile_read):  Call stabsect_build_psymtabs to read the
	stabs out of the nlm.
	* partial-stabs.h (cases 'f' & 'F'):  Fixes to work around Solaris
	brain-damage which don't apply to relocatable object files.
	* remote.c (putpkt):  Improve error reporting and error handling.
	* (get_offsets):  Temporary kludge to force data & bss sections to
	have the same relocation.
	* stabsread.c (define_symbol, scan_file_globals):  Record section
	info in sym.

Sat Apr 23 19:05:52 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (breakpoint_1): Annotate each field of output.  Add
	FIXME-32x64 comment.

Fri Apr 22 16:43:54 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Move call to flush_cached_frames
	to after call to target_wait.  This means that flush_cached_frames
	can call target_terminal_ours if it wants to.
	* infrun.c (wait_for_inferior) [HAVE_NONSTEPPABLE_WATCHPOINT]: Add
	comment about why the code is dubious.

	* stabsread.c (read_type): Call read_type, not nonexistent
	os9k_read_type.

Fri Apr 22 14:25:36 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* remote-os9k.c (rombug_fetch_registers): set trace mode
	correctly.
	* remote-os9k.c (rombug_read_inferior_memory): cache data in
	buffer.
	* os9kread,c (read_os9k_psymtab): process file symbol to truncate
	extra info.
	* os9kread.c (os9k_read_ofile_symtab): proper casting of args
	passed to process_one_symbol.
	* stabsread.c (read_type): process os9k functio prototype.

Fri Apr 22 11:27:39 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* solib.c (symbol_add_stub): If so->textsection is NULL, don't
	dump core.

Thu Apr 21 07:45:49 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (prompt_for_continue): Annotate prompt.
	(query): Annotate query.
	* printcmd.c (print_frame_args): Change syntax of argument
	annotation to make name and value part of a single group of
	annotations, not two separate groups.
	* cp-valprint.c (cp_print_value_fields): Likewise for fields.
	* valprint.c (val_print_array_elements): Change syntax of
	annotation to be more concise.
	* main.c, defs.h (command_line_input): New argument tells what
	string to include in the annotations.
	* symtab.c (decode_line_2), main.c (read_command_lines,
	command_loop): Change callers.

	* breakpoint.c (watch_command): Use (CORE_ADDR)0, not NULL, for
	target null pointer.
	* blockframe.c (find_frame_addr_in_frame_chain): Likewise.

	* printcmd.c (output_command): Annotate things we print here too.
	* printcmd.c (print_command_1): Add "value-history-value" annotation.
	* Move declaration of print_value_flags from defs.h to value.h.
	* main.c (command_line_input): Call wrap_here as well as gdb_flush.

Thu Apr 21 09:29:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (read_dbx_dynamic_symtab):  Reinstall support for sun3,
	BFD handles sun3 dynamic relocations now.
	* elfread.c (elf_symtab_read, elf_symfile_read):  Handle dynamic
	symbol table.

Wed Apr 20 19:41:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_command_1): Annotate the top-level expressions
	that we print.
	(print_frame_args): Annotate each argument.
	* printcmd.c, defs.h (print_value_flags): New function.
	* cp-valprint.c (cp_print_value_fields): Annotate each field.
	* valprint.c (val_print_array_elements): Annotate each array element.

Wed Apr 20 13:18:41 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* findvar.c (read_var_value):  Handle LOC_REPARM_ADDR case correctly,
	the register contains a pointer to the type, not the type itself.

Mon Apr 11 10:44:35 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* main.c (main): Accept --annotate=N option and make --fullname
	the same as --annotate=1.
	(command_line_input): Print annotatation before and after prompt.
	* blockframe.c (flush_cached_frames): Print annotation.
	* Rename frame_file_full_name to annotation_level and move it from
	symtab.h to defs.h.
	* source.c (identify_source_line): If annotation_level > 1,
	change output format.
	* breakpoint.c: Print annotation whenever a breakpoint changes.
	* main.c: New variable server_command.
	(command_line_input): Parse "server " and set server_command.
	(dont_repeat): Check server_command.

Wed Apr 20 08:37:16 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (xcoff_next_symbol_text): Don't return before
	updating raw_symbol and symnum.  Return a value in the case where
	we complained.

	* dstread.c, coffread.c: Don't define pending_blocks; buildsym.c
	takes care of it.
	* parse.c: Don't define block_found; it is defined in symtab.c.
	* parser-defs.h: Add comment regarding block_found.

Tue Apr 19 09:46:05 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (internalize_unwind_info): Delete unused indexp
	argument.

Mon Apr 18 13:18:56 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (read_dbx_dynamic_symtab):  Relocate BFD symbols by
	section vma. Do not read dynamic relocs for sun3 executables to
	avoid BFD assertion message.

Mon Apr 18 10:08:07 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* nm-hppab.h (KERNEL_U_ADDR): Define.
	(FIVE_ARG_PTRACE): Likewise.
	(CANNOT_STORE_REGISTER): Likewise.
	* nm-hppah.h (KERNEL_U_ADDR): Define.
	(FIVE_ARG_PTRACE): Likewise.
	(CANNOT_STORE_REGISTER): Likewise.
	(NEED_TEXT_START_END): Likewise.

	* tm-hppah.h (NEED_TEXT_START_END): Delete definition.
	* xm-hppah.h (KERNEL_U_ADDR): Delete definition.
	(FIVE_ARG_PTRACE): Likewise.
	* xm-hppab.h (KERNEL_U_ADDR): Delete definition.
	(FIVE_ARG_PTRACE): Likewise.

	* hppa-tdep.c (read_unwind_info): Make static.
	(restore_pc_queue): Indirect through the target vector to
	reload the register state.

Sat Apr 16 22:20:51 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* paread.c (compare_unwind_entries): Delete function.  It's been
	moved into hppa-tdep.c.
	(read_unwind_info): Likewise.
	(pa_symfile_read): No longer call read_unwind_info.  The unwind
	tables will be read in as they are needed.

	* hppa-tdep.c (compare_unwind_entries): New function.
	(read_unwind_info, internalize_unwinds): Likewise.
	(find_unwind_entry): Read in unwind information on demand.

Fri Apr 15 11:53:46 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* source.c (DIRNAME_SEPARATOR): New macro, replaces all references
	to : in search path processing.
	* defs.h (qsort): Rename argument in prototype.
	* symtab.h (SAYMBOL_VALUE): Rename value field, avoids bugs in
	some compilers.
	* breakpoint.c, exec.c, mdebugread.c, mipsread.c, xcoffexec.c
	(false): Eliminate usages.

Fri Apr 15 11:35:19 1994  Steve Chamberlain  (sac@cygnus.com)

	* h8500-tdep.c (initialize_h8500_tdep, large_command):
	All references to value changed to value_ptrlage_command is now
	called big_command.
	All references to value changed to value_ptr.
	* remote-e7000.c (e7000_wait): Use target_waitstatus and SETSTOP
	* remote-hms.c (hms_wait): Timeout after five seconds.
	* ser-go32.c (dosasync_read): Poll if timeout < 0.
	* config/tm/tm-h8500.h (BEFORE_MAIN_LOOP_HOOK): Deleted.
	* config/sh/tm-sh.h (BREAKPOINT): Is now sleep opcode.

Thu Apr 14 07:01:56 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* procfs.c (procfs_wait): Protect watchpoint code with appropriate
	#ifdefs.
	(procfs_set_watchpoint, procfs_stopped_by_watchpoint): Likewise.

Wed Apr 13 14:52:46 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* breakpoint.h (enum bptype): Add bp_hardware_watchpoint and
	bp_watchpoint_scope breakpoints.
	(struct breakpoint): Add val_chain and related_breakpoint fields
	for use by watchpoints.

	* breakpoint.c (within_scope): Delete.  No longer used.
	(TARGET_CAN_USE_HARDWARE_WATCHPOINT): Provide default definition.
	(target_{remove,insert}_watchpoint): Likewise.
	(can_use_hardware_watchpoint): New function.
	(remove_breakpoint): New function to remove a single breakpoint
	or hardware watchpoint.
	(insert_breakpoints): Handle insertion of hardware watchpoints.
	Store a copy of the value chain derived from the watchpoint
	expression.
	(remove_breakpoints): Simplify by using remove_breakpoint.
	(delete_breakpoint): Likewise.
	(watchpoint_check): Delete the watchpoint and watchpoint scope
	breakpoints when the watchpoint goes out of scope.  Save & restore
	the current frame after checking watchpoints.
	(breakpoint_init_inferior): Likewise (restarting the program
	makes all local watchpoints go out of scope).
	(bpstat_stop_status): Handle hardware watchpoints much like normal
	watchpoints. Delete the watchpoint and watchpoint scope breakpoint
	when the watchpoint goes out of scope.  Remove and reinsert all
	breakpoints before returning if we stopped when a hardware watchpoint
	fired.
	(watch_command): Use a hardware watchpoint when possible.  If
	watching a local expression, build a scope breakpoint too.
	(map_breakpoint_numbers): Also call given function for any
	related breakpoints.
	(disable_breakpoint): Never disable a scope breakpoint.
	(enable_breakpoint): Handle hardware breakpoints much like normal
	breakpoints, but recompute the watchpoint_scope breakpoint's
	frame and address  (if we have an associated scope breakpoint).
	(read_memory_nobpt): Handle hardware watchpoints like normal 
	watchpoints.  When necessary handle watchpoint_scope breakpoints.
	(print_it_normal, bpstat_what, breakpoint_1, mention): Likewise.
	(clear_command, breakpoint_re_set_one, enable_command): Likewise.
	(disable_command): Likewise.

	* blockframe.c (find_frame_addr_in_frame_chain): New function.
	Extern prototype added to frame.h

	* infrun.c (wait_for_inferior): Set current_frame and select
	a frame before checking if we stopped due to a hardare watchpoint
	firing.  Handle stepping over hardware watchpoints.
	(normal_stop): Remove unnecessary call to select_frame.

	* value.h (value_release_to_mark): Declare.
	* values.c (value_release_to_mark): New function.

	* procfs.c (procfs_wait): Add cases for hardware watchpoints.
	(procfs_set_watchpoint, procfs_stopped_by_watchpoint): New functions.

	* hppab-nat.c (hppa_set_watchpoint): New function.

	* config/pa/nm-hppab.h (STOPPED_BY_WATCHPOINT): Define.
	(HAVE_STEPPABLE_WATCHPOINT): Define.
	(TARGET_CAN_USE_HARDWARE_WATCHPOINT): Define.
	(target_{insert,delete}_watchpoint): Define.

	* config/mips/nm-irix4.h (TARGET_CAN_USE_HARDWARE_WATCHPOINT): Define.
	(STOPPED_BY_WATCHPOINT, HAVE_NONSTEPPABLE_WATCHPOINT): Likewise.
	(target_{insert,remove}_watchpoint): Likewise.

Mon Apr 11 19:21:27 1994  Stu Grossman  (grossman at cygnus.com)

	* xcoffread.c (read_xcoff_symtab):  Ignore symbols of class C_EXT,
	smtyp XTY_LD, sclass XMC_DS (external data segment label).  They
	often have the same names as debug symbols for functions, and
	confuse lookup_symbol().

Mon Apr 11 10:44:35 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote.c: Around redefinition of PBUFSIZE, adjust whitespace.
	* config/pa/tm-hppa.h (REGISTER_BYTES): Use 4 rather than
	REGISTER_RAW_SIZE (1).
	Together these changes work around a bug in HP's compiler.  Both
	seem to be necessary.

Mon Apr 11 09:18:24 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* paread.c (pa_symtab_read): Handle ST_STUB symbols and symbols
	with scope SS_EXTERNAL.  ST_ENTRY symbols in dynamic executables
	are type mst_solib_trampoline.

Fri Apr  8 17:14:37 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* config/m68k/es1800.mt: Change comments.

Fri Apr  8 17:14:37 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* config/m68k/monitor.mt (TDEPFILES): Don't include remote-es.o.

Fri Apr  8 15:35:30 1994  Stu Grossman  (grossman at cygnus.com)

	* lynx-nat.c:  Restore regmap structure for SPARC.  It's needed
	for core files.

Fri Apr  8 14:53:35 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* values.c (unpack_long): Remove obsolete comment about using a
	switch statement.

	* symfile.c (symbol_file_command): Add comments about command syntax.

Thu Apr  7 17:25:21 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  Jim Kingdon  (kingdon@cygnus.com)

	* infrun.c (IN_SOLIB_TRAMPOLINE):  Correct comment, trampolines
	are in the .plt section.
	* minsyms.c (lookup_solib_trampoline_symbol_by_pc,
	find_solib_trampoline_target):  New functions for handling
	stepping into -g compiled shared libraries.
	* symtab.h (lookup_solib_trampoline_symbol_by_pc,
	find_solib_trampoline_target):  Add prototypes.
	* config/tm-sunos.h (IN_SOLIB_TRAMPOLINE, SKIP_TRAMPOLINE_CODE):
	Define to handle stepping into  -g compiled shared libraries.
	* config/tm-sysv4.h (SKIP_TRAMPOLINE_CODE):  Define to handle
	stepping into  -g compiled shared libraries.

Thu Apr  7 17:22:54 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.in:  Add mips-*-sysv4* support.
	* config/mips/mipsv4.mh, config/mips/mipsv4.mt,
	config/mips/tm-mipsv4.h, config/mips/xm-mipsv4.h, mipsv4-nat.c:
	New files for MIPS SVR4 support.
	* Makefile.in:  Update for new mipsv4 files.
	* alpha-tdep.c (heuristic_proc_desc, find_proc_desc):  Use
	read_next_frame_reg to obtain the frame relative stack pointer.
	* mips-tdep.c (heuristic_proc_desc):  Use read_next_frame_reg to
	obtain the frame relative stack pointer.
	* mdebugread.c (parse_partial_symbols, psymtab_to_symtab1):
	Handle stStatic and stStaticProc symbols in stabs-in-ecoff output
	by entering them into the minimal symbol table.
	* printcmd.c (print_scalar_formatted):  Do not try to unpack to
	a long for float formats.
	* solib.c:  Include "elf/mips.h" only if DT_MIPS_RLD_MAP does not
	get defined in <link.h>.
	* solib.c (solib_add):  Add shared library sections to the section
	table of the target before adding the symbols.
	* partial-stab.h:  Relocate static and global functions.
	* dbxread.c (read_dbx_symtab):  Remove unused variable
	end_of_text_address.  Relocate text_addr when passing it
	to end_psymtab.

	For Alpha OSF/1 targets, enable gdb to set breakpoints in shared
	library functions before the executable is run. Retrieve dynamic
	symbols from stripped executables.
	* mipsread.c (read_alphacoff_dynamic_symtab):  New function.
	* mipsread.c (mipscoff_symfile_read):  Use it. Issue warning message
	if no debugging symbols were found.
	* alpha-tdep.c (alpha_skip_prologue):  Silently return the unaltered
	pc if memory at the pc is not accessible and GDB_TARGET_HAS_SHARED_LIBS
	is defined.
	* config/alpha/nm-alpha.h (GDB_TARGET_HAS_SHARED_LIBS):  Define,
	OSF/1 has shared libraries.

Thu Apr  7 15:11:11 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* dbxread.c (read_dbx_dynamic_symtab): Adjust for recent changes
	to BFD handling of dynamic symbols.

Tue Apr  5 15:29:25 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (hppa_fix_call_dummy): If FUN is a procedure label,
	then gets its real address into FUN and its GOT/DP value into %r19.

	* tm-hppa.h (CALL_DUMMY): Use %r20, not %r19 as a temporary.

	* hppa-tdep.c (frameless_function_invocation): If no unwind
	descriptor was found, then assume this was not a frameless
	function invocation.
	(frame_saved_pc): If the saved PC is in a linker stub, then
	return the return address which the linker stub will return to.

        * xm-hppab.h: Never define USG.
        * xm-hppah.h: Always define USG.

Tue Apr  5 12:58:47 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* values.c (unpack_long, value_from_longest),
	valarith.c (value_binop):  Allow TYPE_CODE_RANGE.

Fri Apr  1 14:04:34 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* symfile.c (deduce_language_from_filename): .cpp is a C++ extension.

Fri Apr  1 00:44:00 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	For SVR4 targets, enable gdb to set breakpoints in shared
	library functions before the executable is run.
	* elfread.c (elf_symtab_read):  Handle symbols for shared library
	functions.
	* sparc-tdep.c (in_solib_trampoline):  Renamed to in_plt_section
	and moved to objfiles.c.
	* objfiles.c (in_plt_section):  Moved to here from sparc-tdep.
	* config/tm-sysv4.h (IN_SOLIB_TRAMPOLINE):  Use new in_plt_section.
	* config/sparc/tm-sun4sol2.h (IN_SOLIB_TRAMPOLINE):  Removed,
	the new generic definition from tm-sysv4.h works for Solaris.

Wed Mar 30 16:14:27 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfread.c (elf_symtab_read): Change storage_needed,
	number_of_symbols and i to long.  Rename get_symtab_upper_bound to
	bfd_get_symtab_upper_bound.  Check for errors from
	bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	* nlmread.c (nlm_symtab_read): Same changes.

Wed Mar 30 11:43:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (xcoff_next_symbol_text): New function.
	(read_xcoff_symtab): Set next_symbol_text_func to it.
	Move raw_symbol outside of read_xcoff_symtab.

	* remote.c (getpkt): Remove unused "out" label.

Wed Mar 30 09:15:42 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* breakpoint.c (print_it_normal): Allow GDB to notify the user
	about more than one watchpoint being triggered.

Wed Mar 30 08:24:18 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/tm-dpx2.h: Include tm-m68k.h not nonexistent tm-68k.h.

Wed Mar 30 00:31:49 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* blockframe.c (find_pc_partial_function):  mst_file_text
	symbols do not live in the shared library transfer table.
	* ch-exp.y (decode_integer_value, match_character_literal,
	match_bitstring_literal):  Guard tolower calls with isupper,
	tolower on old BSD systems blindly subtracts a constant.
	* dbxread.c (read_ofile_symtab):  Check for __gnu_compiled_* as
	well when determining the producer of the object file.
	* mdebugread.c (has_opaque_xref):  New function to check for
	cross reference to an opaque aggregate.
	* mdebugread.c (parse_symbol, parse_partial_symbols):  Do not
	enter typedefs to opaque aggregates into the symbol tables.
	* mdebugread.c (parse_external):  Remove skip_procedures argument,
	it has always been 1.  Remove code that handled stProc symbols,
	it was never executed and was wrong, as the index of a
	stProc symbol points to the local symbol table and not to the
	auxiliary symbol info. Update caller.
	* mdebugread.c (parse_partial_symbols):  Do not enter external
	stProc symbols into the partial symbol table, they are already
	entered into the minimal symbol table.
	* config/i386/tm-symmetry.h:  Clean up, it is now only used for Dynix.
	Remove all conditionals and definitions for ptx.
	I386_REGNO_TO_SYMMETRY moved to here from symm-tdep.c.
	Fix addresses of floating point registers in REGISTER_U_ADDR.
	STORE_STRUCT_RETURN now handles cc and gcc conventions.
	FRAME_CHAIN, FRAMELESS_FUNCTION_INVOCATION, FRAME_SAVED_PC,
	IN_SIGTRAMP, SIGCONTEXT_PC_OFFSET defined to make backtracing through
	signal trampoline code work.
	* config/i386/xm-symmetry.h:  Clean up, it is now only used for Dynix.
	Remove all conditionals and definitions for ptx.
	Remove KDB definitions.
	* symm-nat.c (store_inferior_registers):  Fetch registers before
	storing them to obtain valid floating point control registers.
	Store fpu registers.
	* symm-nat.c (print_1167_control_word):  Dynix 3.1.1 defines
	FPA_PCR_CC_C0 and FPA_PCR_CC_C1, avoid duplicate case value.
	* symm-nat.c (fetch_inferior_registers, child_xfer_memory):
	Fix typos.
	* symm-nat.c (child_resume):  Update type of `signal' parameter.
	* symm-tdep.c (I386_REGNO_TO_SYMMETRY):  Moved to tm-symmetry.h.

Tue Mar 29 23:01:33 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (hppa_fix_call_dummy): Use an alternate method for
	calling import stubs for functions in shared libraries.

Tue Mar 29 21:14:04 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-exp.y:  Implement SIZE(mode_name) and SIZE(expression).

	* ch-lang.c (chill_is_varying_struct):  Magic string is
	was "<var_length>" is now "__var_length" (more portable).

Tue Mar 29 19:41:34 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c (getpkt): If we get a timeout, actually retry rather
	than just giving up the first time it happens.
	* remote.c: Document sequence numbers.
	(remote_store_registers): Change syntax of 'P' request so that it
	never looks like a sequence number.

Tue Mar 29 16:06:01 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* os9kread.c (record_minimal_symbol): add section_offset to
	relocate minimal symbol table.
	* os9kread.c (read_minimal_symbols): ditto.
	* os9kread.c (os9k_symfile_init): increase size of dbg and stb
	file names.
	* os9kread.c (read_os9k_psymtab): if there's no dbg file, just
	return. Also if file addr is 0 leave it 0, not to relocate.
	* remote-os9k.c (_initialize_remote_os9k): add 'set remotexon',
	'set remotexoff' and 'set remotelog' commands.

Tue Mar 29 12:38:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c (remote_store_registers): Add 'P' request to set an
	individual register.
	(remote_write_bytes, remote_read_bytes): Use %lx, not %x, to print
	a target address.

Sat Mar 26 07:05:18 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/sparc/tm-sparc.h: Define USE_REGISTER_NOT_ARG.
	* stabsread (define_symbol): If USE_REGISTER_NOT_ARG, go back to
	combining all 'p' and 'r' pairs into a LOC_REGPARM.

	* command.c (do_setshow_command, case var_string): Never add a
	space to the end of the string.
	* NEWS: Document this change.
	* .gdbinit: Add a space to the "set prompt" command.

Fri Mar 25 12:40:41 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	*  m3-nat.c, i386m3-nat.c, config/i386/i386m3.mh: Many minor
	changes to make it compile (it doesn't link yet).

	* buildsym.c (start_subfile, patch_subfile_names), demangle.c
	(set_demangling_style, set_demangling_command): Use savestring not
	strdup.  We were not dealing properly with a NULL return from
	strdup, and were not declaring strdup (the system header may or
	may not have it).

	* valprint.c (val_print): Remove inaccurate comment about what
	types can be stub types.

	* config/i386/ptx.mh (XDEPFILES): Add coredep.o.  Delete infptrace.o.
	* symm-nat.c (child_wait, _initialize_symm_nat, kill_inferior):
	Supply alternate version if ATTACH_DETACH is not defined.
	* ptx4-nat.c, config/i386/{nm-ptx4.h, ptx4.mh, ptx.mt, ptx4.mt,
	tm-ptx.h, tm-ptx4.h, xm-ptx.h, xm-ptx4.h}: New files.
	* configure.in: Recognize i[34]86-sequent-sysv4* host.

Fri Mar 25 10:14:03 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (skip_prologue): Do nothing if not at the beginning
	of a function.
	(skip_trampoline_code): Rewrite and add support for argument
	relocation stubs stubs, import/export stubs, calls through
	"_sr4export" and cascaded trampolines.

	* hppa-tdep.c (skip_prologue): Return "pc" not zero
	if no unwind descriptor is found.

	* tm-hppa.h (NUM_REGS): Bump to 128 registers.
	(REGISTER_NAMES): Add entries for "right-half" of FP registers.
	(REGISTER_RAW_SIZE, MAX_REGISTER_RAW_SIZE): Do not treat FP regs
	differently.  All registers are four bytes.
	(REGISTER_BYTES, REGISTER_BYTE): Simplify now that all registers are
	the same size.
	(REGISTER_VIRTUAL_TYPE): Use builtin_type_float for all FP regs.

	* hppa-tdep.c (pa_print_fp_reg): Update to print even numbered FP
	registers as both single and double values (fetching 2nd 32bit half
	as necessary).  Annotate each register printed with its precision.

	* paread.c (read_unwind_info): Fix off-by-one error.

Fri Mar 25 08:33:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (complete_command): Deal with it if arg is NULL.

Thu Mar 24 07:12:09 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/tm-mips.h (SETUP_ARBITRARY_FRAME): Revise comment
	regarding using the PC--using the PC is necessary and all the
	FIXME comments in the world won't make it go away.

	* valops.c (value_at, value_at_lazy): Give error if we dereference
	a pointer to void.
	* gdbtypes.h: Fix comments regarding TYPE_CODE_VOID.
	* stabsread.c: Use 1, not 0, for TYPE_LENGTH of void types.

	* stabsread.c (patch_block_stabs): Add comment about what happens
	if the definition is in another compilation unit from the stab.

	* dbxread.c (end_psymtab): Add comment about empty psymtabs.

Wed Mar 23 07:50:33 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (complete_command): New command, from Rick Sladkey
	<jrs@world.std.com>.
	(symbol_completion_function): Don't declare rl_point and
	rl_line_buffer; they are now declared in readline.h.
	(show_commands): Don't declare history_base; it is declared in
	history.h.
	* command.c (lookup_cmd): Don't delete trailing whitespace.
	Reverts change of 14 May 1989.

Wed Mar 23 16:14:52 1994  Stu Grossman  (grossman at cygnus.com)

	* minsyms.c (prim_record_minimal_symbol):  Move section deduction
	code from prim_record_minimal_symbol_and_info() to here.  Callers
	of the latter can legitimately supply a section number of -1.

Wed Mar 23 07:50:33 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbtypes.h, gdbtypes.c: Add comments regarding whether static
	member functions have an element in args for a (nonexistent) this
	pointer.

Tue Mar 22 20:12:53 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppao.h (NO_PC_SPACE_QUEUE_RESTORE): Define.

	* hppa-tdep.c (hppa_pop_frame): Do not restore the PC space
	queue if NO_PC_SPACE_QUEUE_RESTORE is defined.

	* stabsread.c (REG_STRUCT_HAS_ADDR): Accept additional argument
	for the structure's type.  All callers changed.

	* valops.c (call_function_by_hand): Check REG_STRUCT_HAS_ADDR
	for each structure argument rather than assuming it's either
	true or false for all structure arguments.

	* config/pa/tm-hppa.h (REG_STRUCT_HAS_ADDR): Depend only
	on the length structure passed, not the compiler used.

	* config/sparc/tm-sparc.h (REG_STRUCT_HAS_ADDR): Accept additional
	argument for the structure's type.

Tue Mar 22 15:28:33 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* values.c (set_internalvar): Don't set var->value until we are
	sure there won't be an error().

	* remote.c (get_offsets): Reinstate comment which was in
	remote_wait about use of SECT_OFF_TEXT and so on.

Mon Mar 21 13:11:30 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symmisc.c (maintenance_check_symtabs):  New function to check
	consistency of psymtabs and symtabs.
	* symtab.h (maintenance_check_symtabs):  Add prototype.
	* maint.c:  Add new `maint check-symtabs' command.
	* config/i386/tm-i386aix.h, config/i386/tm-sun386.h,
	config/i386/tm-symmetry.h (REGISTER_CONVERT_TO_RAW):  Fix typo.
	* config/i386/tm-symmetry.h:  Make comment inside #if 0 a real
	comment.
	* config/i386/tm-symmetry.h (STORE_STRUCT_RETURN):  Cast argument
	to write_memory to avoid warnings from gcc.
	* config/i386/xm-symmetry.h:  Add missing #endif.
	* config/i386/nm-symmetry.h (NO_PTRACE_H):  Add for Dynix.
	* config/i386/symmetry.mt (TDEPFILES):  Add i386-tdep.o.
	* config/i386/symmetry.mh (NAT_FILE, NATDEPFILES):  Add.

Mon Mar 21 11:50:28 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (hppa_fix_call_dummy): Use value_ptr.
	(hppa_push_arguments): Likewise.

Mon Mar 21 11:02:51 1994  Stu Grossman  (grossman at cygnus.com)

	* alpha-tdep.c:  Gobs of changes (many imported from mips-tdep) to
	improve remote debugging efficiency.  Also fixed problems with
	doing function calls for programs with no entry points.
	* infcmd.c (run_stack_dummy):  Use CALL_DUMMY_ADDRESS instead of
	entry_point_address.
	* inferior.h (PC_IN_CALL_DUMMY):  ditto.
	* mdebugread.c (parse_symbol, parse_procedure, parse_external,
	parse_lines):  Pass section_offsets info to these routines so that
	we can relocate symbol table entries upon readin.
	* (psymtab_to_symtab_1):  Set symtab->primary to tell
	objfile_relocate to do relocations for our symbols.
	* (ecoff_relocate_efi):  New routine to relocate adr field of PDRs
	(which hang off of the symbol table).
	* Use prim_record_minimal_symbols_and_info instead of
	prim_record_minimal_symbols to supply section info to make minimal
	symbol relocations work.
	* minsyms.c (prim_record_minimal_symbols_and_info):  If section is
	-1, try to deduce it from ms_type.
	* objfiles.c (objfile_relocate):  Use ALL_OBJFILE_SYMTABS where
	appropriate.  Handle relocation of MIPS_EFI symbols special. Also,
	add code to relocate objfile->sections data structure.
	* remote.c (get_offsets):  Use new protocol message to acquire
	section offsets from the target.
	* (remote_wait):  Get rid of relocation stuff.  That's all handled
	by objfile_relocate now.
	* config/alpha/alpha-nw.mt (TM_FILE):  Use tm-alphanw.h.
	* config/alpha/tm-alpha.h:  Define CALL_DUMMY_ADDRESS, and
	VM_MIN_ADDRESS.
	* config/alpha/tm-alphanw.h:  DECR_PC_AFTER_BREAK=0, VM_MIN_ADDRESS=0.

Mon Mar 21 10:09:06 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (_initialize_hpuxread): Don't call add_symtab_fns if
	HPREAD is not defined.

Sun Mar 20 15:21:57 1994  Doug Evans  (dje@cygnus.com)

	* sparc-tdep.c (sparc_frame_find_save_regs): Use REGISTER_RAW_SIZE
	instead of 4.
	* sp64-tdep.c (target_ptr_bit, set_target_ptr_bit): Deleted,
	can no longer set this at run time.
	* config/sparc/sp64.mt (SIMFILES): Use remote-sim.o now.
	(TM_CLIBS): Define to -lm, the simulator uses the sqrt() function.
	* config/sparc/tm-sp64.h (FPS_REGNUM, CPS_REGNUM): Define (so
	sparc-tdep.c compiles).
	(TARGET_PTR_BIT): Must be a constant now, fix at 64.

Sat Mar 19 08:51:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/{cisco.mt,tm-cisco.h}: New files.
	* Makefile.in (ALLPARAM, ALLCONFIG): Add them.
	* configure.in: Recognize m68*-cisco*-*.

	* Makefile.in (TAGS): Use variables directly, rather than using
	find, to locate TM_FILE, XM_FILE, and NAT_FILE.  This is faster
	and means that these filenames no longer need be unique across all
	the config/* directories.
	* configure.in: Put the config/*/ into TM_FILE, etc.

	* m68k-stub.c (computeSignal): Return SIGFPE, not SIGURG, for chk
	and trapv exceptions.

	* target.h (struct section_table), objfiles.h (struct obj_section):
	Change name of field sec_ptr to the_bfd_section.  More mnemonic
	and avoids the (sort of, for the ptx compiler) name clash with
	the name of the typedef.
	* exec.c, xcoffexec.c, sparc-tdep.c, rs6000-nat.c, osfsolib.c,
	solib.c, irix5-nat.c, objfiles.c, remote.c: Change users.

	* utils.c: Include readline.h.
	* Makefile.in (utils.o): Add dependency.

	* remote.c (getpkt): Add support for run-length encoding.

Fri Mar 18 19:11:15 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* utils.c (prompt_for_continue): Call readline, not gdb_readline.

Fri Mar 18 10:25:55 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dstread.c (record_minimal_symbol): New arg objfile.  Pass it to
	prim_record_minimal_symbol.
	Callers: Pass it.

	* regex.c (EXTEND_BUFFER): Adjust pointers within buffer by
	computing their offset from the start of the old buffer and adding
	to the new buffer, rather than by assuming we can add the
	difference between the old buffer and the new buffer (it might not
	fit in an int).  Merge in cosmetic differences from emacs regex.c
	version of this macro.

Wed Mar 16 15:28:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (install-only): Fix use of program_transform_name.

Wed Mar 16 07:18:43 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c: Remove "set print fast-symbolic-addr off" command.
	The bug which it worked around was fixed on 25 Feb 94 in coffread.c,
	so I'm nuking the command.
	* symtab.c (find_addr_symbol): Comment out, no longer used.

	* main.c (main): Don't init_source_path for the -cd argument.  Now
	that source_path doesn't contain the current_directory from when
	GDB started up, init_source_path is no longer useful (and is
	harmful because it clobbers a source_path set in $HOME/.gdbinit).

	* TODO: Remove item about line numbers being off.  It is useless
	and confusing without a reproducible test case (it mentions
	proceed(), but I was able to step through proceed without trouble).

Tue Mar 15 13:39:23 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	For Sunos 4.x targets, enable gdb to set breakpoints in shared
	library functions before the executable is run. Retrieve dynamic
	symbols from stripped executables.
	* symtab.h (minimal_symbol_type):  Add mst_solib_trampoline type.
	* parse.c (write_exp_msymbol), symmisc.c (dump_msymbols),
	symtab.c (list_symbols):  Handle mst_solib_trampoline.
	* minsyms.c (lookup_minimal_symbol):  Handle mst_solib_trampoline
	for all targets, remove IBM6000_TARGET dependencies.
	* dbxread.c (read_dbx_dynamic_symtab):  New function.
	* dbxread.c (dbx_symfile_read):  Use it.
	* dbxread.c (SET_NAMESTRING):  Set namestring to
	"<bad string table index>" instead of "foo" if the string index is
	corrupt.
	* xcoffread.c (read_xcoff_symtab):  Use mst_solib_trampoline instead
	of mst_unknown.
	* symtab.c (list_symbols):  Take from_tty as parameter and pass it
	to break_command. Handle mst_file_* minimal symbol types.
	* config/i386/tm-i386bsd.h: Give just macro name, not args, to #undef.

Tue Mar 15 11:40:43 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* c-exp.y(yylex): fix potential memory overflow.

Tue Mar 15 10:33:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* environ.c (set_in_environ): Eliminate special handling of PATH and
	GNUTARGET.
	* putenv.c: Removed, conflicts with system declaration of
	putenv on RS/6000 running AIX 3.2.5, and above change makes it
	unnecessary. 
	* Makefile.in: Change accordingly.
	* procfs.c (procfs_create_inferior): Change comment accordingly.

Tue Mar 15 10:05:27 1994  Jim Kingdon  (kingdon@cygnus.com)

	* rs6000-tdep.c: Change value to value_ptr.

Sun Mar 13 17:19:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hpux_symtab: Correctly determine the namespace
	and address class of SVAR, DVAR, TYPEDEF, TAGDEF, CONST, and
	MEMENUM symbols.  Do not include function-scoped variables in
	the partial symbol table.

Sun Mar 13 09:45:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* i386m3-nat.c: Include floatformat.h.
	(get_i387_state): Use memset not bzero.

	* Version 4.12.3.

	* Makefile.in: Enable commented out getopt_h, bfd_h, etc.  Change
	ieee-float.h to floatformat.h.

	* valprint.c (val_print_string): Ignore error if the error
	happened after a terminating '\0'.

	* c-valprint.c (c_val_print): Never add 1 to return value from
	val_print_string; just return what it returns.

	* target.h (enum target_signal): Add TARGET_SIGNAL_FIRST, for
	looping through all of the enums.
	* infrun.c (signals_info): Use it.

Fri Mar 11 08:08:50 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (main): When printing warning about bad baud rate, don't
	use warning(); it relies on current_target which isn't set up yet.

	* breakpoint.c (_initialize_breakpoint): Update docstring for
	tbreak to match what the code actually does.  Don't mention tbreak
	in docstrings for "enable once" or "enable breakpoints once".

Thu Mar 10 08:52:38 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symfile.h (ADD_PSYMBOL_VT_TO_LIST): Don't put a semicolon after
	while (0).  That defeats the whole purpose of using do . . . while (0).
	* mdebugread.c (parse_partial_symbols): Don't use ?: expression as
	list for ADD_PSYMBOL_TO_LIST; the macro takes its address and
	using a ?: expression as an lvalue is not portable.

	* stabsread.c (define_symbol): If REG_STRUCT_HAS_ADDR, also
	convert a LOC_ARG to a LOC_REF_ARG.  Update code which combines
	'p' and 'r' symbol descriptors into a single symbol to look for a
	LOC_REF_ARG.
	* README, config/sparc/tm-sparc.h: Update comments.

Wed Mar  9 21:43:24 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_type):  Do not complain for types with
	an `indexNil' aux index, these are simply undefined types.
	Remove indexNil check from caller of parse_type.
	* mdebugread.c (parse_partial_symbols):  Do not enter
	stGlobal, scCommon symbols into the minimal symbol table, their
	value is the size of the common, not its address.
	Handle scInit, scFini, scPData and scXData sections.
	Use minimal symbol type mst_file_* for stLabel symbols, instead of
	mst_*.
	Enter stProc symbols into the global_psymbols list once, not into
	the static_psymbols_list.
	Get rid of dummy psymtab if it is empty, to allow proper detection
	of stripped executables.
	* mdebugread.c (cross_ref):  Allow cross references to Fortran
	common blocks.

Wed Mar  9 15:23:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (common_block_end, fix_common_block): Stash the
	struct pending * in the SYMBOL_TYPE, not the SYMBOL_NAMESPACE, so
	as to not assume that a pointer fits in an enum.

Wed Mar  9 18:56:36 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* os9kread.c (fill_sym): check compiler verion number for pre-
	UltraC compiler.
	* os9kread.c (os9k_process_one_symbol): address of symbol is
	relative to section not module.
	* stabsread.c (define_symbol): add symbol type 's' as local
	symbol for os9k.
	* remote-os9k.c: add command 'set monitor_log' to turn on or off
	monitor logging.
	* remote-os9k.c: fix bug in delete breakpoint, single step trace.
	* remote-os9k.c: fix bug in 'set remotebaud' function.
	* remote-os9k.c (rombug_link): minimize checking so to improve
	speed.
	* symfile.c (symbol_file_command): check if failed to link, also make
	the command be able to accept more than one filenames.
	* target.c (target_link): check if failed to link with rombug.
	* config/i386/tm-i386os9k.h : add #define DECR_PC_AFTER_BREAK 0.

Wed Mar  9 15:23:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-es.c (es1800_child_ops): Don't declare it static.

Tue Mar  8 11:42:39 1994  Jim Kingdon  (kingdon@cygnus.com)

	* config/i386/tm-i386v4.h: Give just macro name, not args, to #undef.

Tue Mar  8 06:56:13 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c: New variable lowest_text_address.
	(record_minimal_symbol, read_dbx_symtab): Set it.
	(read_dbx_symtab): Use lowest_text_address + text_size instead of
	end_of_text_address.
	* config/gould/tm-pn.h: Add comment regarding END_OF_TEXT_DEFAULT.

	* dbxread.c (end_psymtab): Remove old and commented out
	capping_global and capping_static.  Fix comments regarding
	N_SO_ADDRESS_MAYBE_MISSING to match the real name of the macro.

	* parser-defs.h: Add "extern" to start of variable declarations so
	we don't end up with commons.
	* parse.c: Define these variables.

	* irix5-nat.c (find_solib): Cast o_path to CORE_ADDR when using it
	as one.

Mon Mar  7 13:00:50 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* alpha-tdep.c: Change value to value_ptr.

Sun Mar  6 17:36:53 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* solib.c (elf_locate_base):  New function to locate the address
	of the dynamic linker's runtime structure in the dynamic info section.
	* solib.c (locate_base):  Use it instead of iterating over the list
	of mapped address segments.
	* solib.c (look_for_base, bfd_lookup_symbol):  Removed, no longer
	necessary.

Fri Mar  4 09:50:47 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (pc_in_linker_stub): Move decl to beginning of file.
	(pc_in_interrupt_handler): New function.  Also add PARAM decl.
	(find_proc_framesize): Deal with HPUX setting SAVE_SP bit for
	signal trampoline and interrupt routines.
	(frame_saved_pc): Handle signal trampolines and interrupt routines.
	(frame_chain, frame_chain_valid): Likewise.
	(hppa_frame_find_saved_regs): Likewise.  Also deal with special
	saved regs convention for SP.
	
	* tm-hppa[bho].h: FRAME_FIND_SAVED_PC_IN_SIGTRAMP): Define.
	(FRAME_BASE_BEFORE_SIGTRAMP): Define.
	(FRAME_FIND_SAVED_REGS_IN_SIGTRAMP): Define.

	* tm-hppah.h (IN_SIGTRAMP): Define.

Thu Mar  3 12:41:16 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* ch-exp.y (match_simple_name_string): Accept '_' as well as an
	alphabetic character as the start of a name.

	* sparclite/Makefile.in (all install): Build and install aload.

	* configure.in: Accept i[34]86-*-*sysv32 because that is what
	config.guess and config.sub produce.

	* mips-tdep.c: Change value to value_ptr.

Wed Mar  2 09:17:55 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* breakpoint.c, breakpoint.h, c-valprint.c, ch-valprint.c,
	cp-valprint.c, eval.c, expprint.c, findvar.c, language.c,
	objfiles.h, infcmd.c, printcmd.c, stack.c, typeprint.c,
	valarith.c, valops.c, valprint.c, value.h, values.c: Replace
	value with value_ptr.  This is for the ptx compiler.
	* objfiles.h, target.h: Don't declare a "sec_ptr" field using a
	"sec_ptr" typedef.
	* symm-nat.c: Add a bunch of stuff for symmetry's ptrace stuff.
	#if 0 i386_float_info.
	* symm-tdep.c (round): Remove.  Also remove sgttyb.
	* symm-tdep.c: Remove lots of stuff which duplicates stuff from
	i386-tdep.c.  Remove register_addr and ptx_coff_regno_to_gdb.
	* i386-tdep.c (i386_frame_find_saved_regs): Put in
	I386_REGNO_TO_SYMMETRY check in case it is needed for Dynix
	someday.
	* config/i386/nm-symmetry.h: Change KERNEL_U_ADDR.  Move
	stuff from PTRACE_READ_REGS, PTRACE_WRITE_REGS macros to
	symm-nat.c.  Define CHILD_WAIT and declare child_wait().
	* config/i386/tm-symmetry.h: Remove call function stuff; stuff in
	tm-i386v.h is apparently OK.
	* config/i386/xm-symmetry.h [_SEQUENT_]: Define HAVE_TERMIOS not
	HAVE_TERMIO.  Define MEM_FNS_DECLARED, NEED_POSIX_SETPGID, and
	USE_O_NOCTTY.

Wed Mar  2 11:31:08 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* osfsolib.c (xfer_link_map_member): Update to use new
	target_read_string interface.

Wed Mar  2 09:17:55 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* infrun.c (wait_for_inferior): In checking
	remove_breakpoints_on_following_step, check
	through_sigtramp_breakpoint as well as step_resume_breakpoint.

Tue Mar  1 16:22:56 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* os9kread.c (os9k_process_one_symbol): Rename
	VARIABLES_INSIDE_BLOCK to OS9K_VARIABLES_INSIDE_BLOCK.
	* symfile.c (symbol_file_command): Check for (CORE_ADDR)-1, not
	(CORE_ADDR)0, from target_link, since that is what it uses.
	Process name at end, not during parsing (like we did before Kung's
	change), so that -readnow and -mapped can appear anywhere.
	Make text_relocation a local variable.
	* config/i386/i386os9k.mt: Fix comment.
	* Makefile.in (ALLDEPFILES): Add remote-os9k.c.
	* os9kread.c: Put "comments" after #endif inside /* */.
	* stabsread.h: Add os9k_stabs variable.
	* stabsread.c (start_stabs), os9kread.c (os9k_process_one_symbol):
	Set it.
	* stabsread.c (define_symbol): If os9k_stabs, put a 'V' symbol
	descriptor in global_symbols not local_symbols.
	(read_type): If os9k_stabs, accept 'c', 'i', and 'b' type
	descriptors.
	(read_type): If os9k_stabs, accept function parameters after 'f'
	type descriptor.
	(read_array_type): If os9k_stabs, don't expect index type and
	expect lower and upper to be separated by ',' not ';'.
	(read_enum_type): If os9k_stabs, read a number before the first
	enumeration constant.
	(os9k_init_type_vector): New function.
	(dbx_lookup_type): Call it when starting new type vector.
	* config/i386/tm-i386os9k.h: Define BELIEVE_PCC_PROMOTION.
	* (os9k_process_one_symbol): Call define_symbol not os9k_define_symbol.
	* os9kstab.c: Removed.
	* Makefile.in: Update accordingly.
	* objfiles.c (objfile_relocate_data): Removed.
	* remote-os9k.c (rombug_wait): Call objfile_relocate
	not objfile_relocate_data.
	* objfiles.h, objfiles.c: Remove find_pc_objfile.
	* remote-os9k.c (rombug_wait): Call find_pc_section not
	find_pc_objfile.
	* main.c (quit_command): Check inferior_pid; revert Kung change.
	* remote-os9k.c (rombug_create_inferior): Set inferior_pid.

Tue Mar  1 14:56:14 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* os9kread.c: New file to read os9000 style symbo table.
	* os9kstab.c: new file to read os9000 style stabs.
	* remote-os9k.c: remote protocol talking to os9000 rombug monitor.
	* objfiles.c (find_pc_objfile): new function to search objfile
	from pc.
	* objfiles.c (objfile_relocate_data): new function to relocate
	data symbols in symbol table.
	* objfiles.h: Add two aux fields in struct objfile to handle
	multiple symbol table files situation like in os9000.
	* symfile.c: Change so 'symbol-file' command can handle multiple
	files. Also call target_link() to get relocation infos.
	* target.c (target_link): new function to get relocation info when
	a symbol file is requested to load.
	* main.c (quit_command): take out 'inferior_pid != 0' condition,
	because in cross mode there's no inferior pid, bit they need to
	be detached.
	Makefile.in: add os9kread.c os9kstab.c and .o's.
	configure.in: add i386os9k target.
	config/i386/i386os9k.mt: new add.
	config/i386/tm-i386os9k.h: new add.

Tue Mar  1 13:16:10 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/sparc/tm-sun4sol2.h (IN_SIGTRAMP):  Handle ucbsigvechandler.
	* sparc-tdep.c (sparc_frame_saved_pc):  Handle ucbsigvechandler.

Tue Mar  1 11:54:11 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* target.c, target.h (target_read_string): Provide error detection to
	caller.  Put string in malloc'd space, so caller need not impose
	arbitrary limits.
	* solib.c (find_solib): Update to use new interface.
	* irix5-nat.c (find_solib): Read o_path from inferior
	(clear_solib): Free storage for o_path.
	* valprint.c (val_print_string): Add comments.

Mon Feb 28 23:54:39 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.c (decode_line_1):  Handle the case when skip_quoted does not
	advance `p'.

Mon Feb 28 12:40:46 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* value.h (struct value): Add modifiable field.
	* values.c (allocate_value, record_latest_value, value_copy): Set it.
	(record_latest_value): Don't mess with VALUE_LVAL of value.
	* valops.c (value_assign): Check it.  Reword existing error
	message on not_lval.

	* mips-tdep.c (mips_step_skips_delay), config/mips/tm-mips.h
	(STEP_SKIPS_DELAY): Added.
	* infrun.c (proceed) [STEP_SKIPS_DELAY]: Check for a breakpoint in
	the delay slot.

	* valprint.c (val_print_string): If errcode is set, always print
	an error, regardless of force_ellipsis.  In the non-EIO case,
	just print the error message rather than calling error().  Don't
	access *(bufptr-1) if bufptr points to the start of the buffer.
	When looking for '\0', don't increment bufptr and addr if bufptr
	started out already at limit.  If an error happens on fetching the
	first character, don't print the string.

Sun Feb 27 21:05:06 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* config/m68k/tm-apollo68b.h: Remove HAVE_68881 define; it is
	obsolete. 

	* i387-tdep.c, i386-tdep.c i386v-nat.c, i386aix-nat.c,
	i386m3-nat.c, config/m68k/tm-m68k.h, i960-tdep.c
	config/i960/tm-i960.h, remote-nindy.c, config/m88k/tm-m88k.h,
	m88k-tdep.c: Use floatformat.h instead of ieee-float.h.
	* sparc-tdep.c: Remove now-obsolete ieee-float.h stuff
	* findvar.c: Update comment regarding ieee-float.h.

Sun Feb 27 21:39:48 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/i386/tm-i386v4.h (I386V4_SIGTRAMP_SAVED_PC, IN_SIGTRAMP,
	FRAME_CHAIN, FRAMELESS_FUNCTION_INVOCATION, FRAME_SAVED_PC):
	Define to make backtracing through the various sigtramp handlers
	work.
	* i386-tdep.c (i386v4_sigtramp_saved_pc):  New routine to fetch
	the saved pc from ucontext on the stack for SVR4 signal handling.

Fri Feb 25 09:41:11 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote.c, remote-mon.c, remote-utils.c, remote-utils.h,
	target.h, remote-es.c, remote-nindy.c: Don't set baud rate if
	baud_rate is -1.  Remove sr_get_baud_rate and sr_set_baud_rate;
	just use the global variable itself.  When printing baud rate,
	don't print a baud rate if baud_rate is -1.

	* coffread.c (read_coff_symtab): Pass mst_file_* to
	record_minimal_symbol for C_STAT symbols.  Put C_EXT and C_STAT
	symbols in the minimal symbols regardless of SDB_TYPE.

Thu Feb 24 08:30:33 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* breakpoint.h (enum bptype): New type bp_through_sigtramp.
	(bpstat_what_main_action): New code BPSTAT_WHAT_THROUGH_SIGTRAMP.
	* breakpoint.c (bpstat_what): Return BPSTAT_WHAT_THROUGH_SIGTRAMP
	if we hit a bp_through_sigtramp breakpoint.  Remove kludge which
	ignored bs->stop for a bp_step_resume breakpoint.
	* infrun.c (wait_for_inferior): Make a through_sigtramp_breakpoint
	which performs one (the check_sigtramp2 one) of the functions
	which had been handled by the step_resume_breakpoint.  For each
	use of the step_resume_breakpoint, make it still use the
	step_resume_breakpoint, use the through_sigtramp_breakpoint, or
	operate on both.
	Deal with BPSTAT_WHAT_THROUGH_SIGTRAMP return from bpstat_what.
	When setting the frame address of the step resume breakpoint, set
	it to the address for frame *before* the call instruction is
	executed, not after.

	* mips-tdep.c (mips_print_register): Print integers using
	print_scalar_formatted rather than duplicating all the
	CC_HAS_LONG_LONG and so on.
	(mips_push_dummy_frame): Use read_register_gen rather than using
	read_register and then putting it back in target format with
	store_unsigned_integer.  If registers are more than 4 bytes, give
	an error rather than have some registers overwrite other
	registers.
	#if 0 unused include of opcode/mips.h.

	* symfile.h: Don't declare arguments for coff_getfilename.

	* defs.h: Revert Kung change regarding FORCE_LONG_LONG.

Thu Feb 24 08:06:52 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*-osf*): New configuration.
	* config/pa/hppaosf.mt: New target makefile fragment.
	* config/pa/tm-hppao.h: New target include file.

Thu Feb 24 04:29:19 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* exec.c (print_section_info):  Print entry point for exec_bfd only.
	* ser-unix.c (wait_for):  Fix typo in HAVE_TERMIO case.
	* dwarfread.c:  Remove second inclusion of <sys/types.h>, which
	causes problems if <sys/types.h> has no multiple inclusion protection.

Wed Feb 23 16:28:55 1994  Jeffrey A. Law  (law@cygnus.com)

	* tm-hppa.h (CALL_DUMMY): Add two NOP instructions to the end of
	the call dummy to avoid kernel bugs in HPUX, BSD, and OSF1.
	(CALL_DUMMY_LENGTH): Changed accordingly.

Wed Feb 23 16:21:25 1994  Stu Grossman  (grossman at cygnus.com)

	* sparc-stub.c (trap_low):  Make trap handler work for arbitrary
	numbers of register windows.

	* sparclite/hello.c:  Add factorial function for testing.
	* salib.c:  Use macros instead of constants for I/O addresses to
	make 931 support easier.
	* sparclite.h:  Change constraint for LOC to "rJ" to force use of
	register in sta/lda instructions.

Wed Feb 23 10:39:18 1994  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* dbxread.c (process_one_symbol): Set
	block_address_function_relative for COFF like we do for ELF and SOM.

Sat Feb 19 03:17:32 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (new_psymtab):  Pass in section_offsets and set
	them in the pst.
	* mdebugread.c (handle_psymbol_enumerators):  New function to enter
	the enumerators of an ecoff enum into the partial symbol table.
	* mdebugread.c (parse_partial_symbols):  Call it.
	* symfile.c (reread_symbols):  Initialize objfile->*_psymbols.next.
	* symmisc.c (dump_psymtab):  Fix typo, clean up output of section
	offsets. Cast psymtab->read_symtab to PTR before passing it to
	gdb_print_address.
	* i386-tdep.c (i386_skip_prologue):  Skip over instructions that
	set up the global offset table pointer in pic compiled code.
	* config/mips/tm-mips.h (FIX_CALL_DUMMY):  For big endian targets,
	error() on TYPE_CODE_FLT arguments whose size is greater than 8,
	swap all other TYPE_CODE_FLT arguments as mips_push_arguments
	ensures that floats are promoted to doubles before they are pushed
	on the stack.

Fri Feb 18 23:12:59 1994  Stu Grossman  (grossman at cygnus.com)

	* sparclite/Makefile.in, sparclite/salib.c, sparclite/sparclite.h:
	Fixup cache_on and flush_i_cache so that they work for both the
	930 and 932 processors.  Rewrite most low level funcs (uart
	access & cache stuff) to use new ASI access macros in sparclite.h.
	Also make it easy to access second serial port.

Fri Feb 18 22:17:33 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* hp300ux-nat.c: Don't incloude <sys/dir.h>, <sys/ioctl.h>, or
	<sys/stat.h>; not needed.

Fri Feb 18 08:26:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stack.c (print_frame_info): In "pathological" case, don't
	distrust the line number information.

Fri Feb 18 16:51:14 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* mips-tdep.c (mips_print_register): handle 64 bits register.
	* valprint.c (print_longest): fix a bug in printing 64 bits value.

Fri Feb 18 08:26:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Version 4.12.2.

	* Makefile.in (install): Do the sed for program_transform_name
	ourselves instead of worrying about INSTALL_XFORM.  This enables
	users to override INSTALL_PROGRAM in the standard way.

	* Makefile.in (c-exp.tab.o, ch-exp.tab.o, m2-exp.tab.o): Don't
	depend on Makefile.in.

	* defs.h, valprint.c: Make longest_to_int a function not a macro.
	Only test against INT_MIN if a LONGEST is bigger than an int.

	* README: Change GhostScript to Ghostscript.

Fri Feb 18 07:30:55 1994  Jim Kingdon  (kingdon@cygnus.com)

	* config/rs6000/{tm-rs6000lynx.h,nm-rs6000lynx.h,xm-rs6000lynx.h}:
	Rename to tm-rs6000ly.h, nm-rs6000ly.h, xm-rs6000ly.h for 14
	character file names.
	* Makefile.in (ALLPARAM): Add these files.

	* config/mips/littlemips64.mt: Rename to mipsel64.mt for 14
	character file names.
	* Makefile.in: Add Kung's new mips64 files.

Thu Feb 17 17:25:47 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* configure.in: add mips64-*-elf, mips64-*-ecoff, mips64el-*-elf,
	mips64el-*-ecoff and mips64-big-*.
	* defs.h: get rid of FORCE_LONG_LONG.
	* mips-tdep.c (mips_find_saved_regs): add sd and sdc1 instruction
	parsing. Change register size to be MIPS_REGSIZE.

Thu Feb 17 09:30:22 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* corelow.c, exec.c, irix5-nat.c, mipsread.c, objfiles.c, 
	osfsolib.c, rs6000-nat.c, solib.c, symfile.c, utils.c, 
	xcoffexec.c: Use bfd_get_error and bfd_set_error and new error names.

Fri Feb 11 21:47:24 1994  Steve Chamberlain  (sac@sphagnum.cygnus.com)

	* remote-hms.c (readchar, hms_open, hms_fetch_register): Made more robust.
	(remove_commands, add_commands): Add/remove hms-drain when target
	is connected.

Fri Feb 11 16:11:38 1994  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  Add Lynx/rs6000 support.
	* lynx-nat.c:  Clean up some Sparc stuff.  Clean up ptrace error
	messages.  Add rs6000 support.  Don't try to modify unwritable
	registers.
	* rs6000-nat.c:  Move lots of native dependent stuff (like core
	file support) from rs6000-tdep.c & xcoffexec.c to here.
	* rs6000-tdep.c:  Move native dependent stuff to nat.c.
	* xcoffexec.c:  Move native dependent stuff to nat.c.
	* config/rs6000/nm-rs6000.h:  Move defs of SOLIB_* macros to here
	from tm	file.
	* config/rs6000/tm-rs6000.h:  Remove defs of SOLIB_* funcs, cuz they're
	really native.
	* config/rs6000/tm-rs6000lynx.h, config/rs6000/xm-rs6000lynx.h:
	New files to support Lynx/rs6000.

Tue Feb  8 00:32:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* README:  Remove note about gcc warnings on alpha, these should be
	gone now.
	* c-exp.y, ch-exp.y, core.c, corelow.c, eval.c, fork-child.c, 
	m2-exp.y, minsyms.c, nlmread.c, parse.c, putenv.c, regex.c
	remote-utils.c, stabsread.c:  Include <string.h>.
	* regex.c:  Include "defs.h", change re_comp argument to const char *.
	* infptrace.c (fetch_register, store_inferior_registers):  Change
	regaddr to type CORE_ADDR.
	* config/alpha/alpha-nw.mt, config/alpha/alpha-osf1.mt (MT_CFLAGS):
	Remove, no longer necessary now that we use bfd_vma for a CORE_ADDR.

Mon Feb  7 09:21:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.h: Always define BYTE_BITFIELD to nothing.

Mon Feb  7 08:44:17 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* config/m68k/{m68k-em.mt,tm-m68k-em.h}: Remove; no longer used.
	* configure.in: Remove comment about m68k-em.mt.
	* Makefile.in: Remove references.

Mon Feb  7 08:22:42 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* defs.h [BFD64]: Use BFD_HOST_64_BIT, not nonexistent
	BFD_HOST_64_TYPE.

Sun Feb  6 15:56:09 1994  Jeff Law  (law@wild.cs.utah.edu)

	* hpread.c (hpux_symfile_init): Use obj_som_* rather than obj_* to
	access BFD private data.  Search for the "$TEXT$" space rather
	than ".text".
	(hppa_sym_fns): Add bfd target flavour to initializer.

Sun Feb  6 06:55:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.c (target_preopen): If target_kill doesn't remove the
	target from the stack, use pop_target to do it.

	* coffread.c (process_coff_symbol, case C_TPDEF): Don't set name
	of TYPE_CODE_PTR or TYPE_CODE_FUNC types.  This parallels similar
	changes to stabsread.c from summer 1993.

	* remote-udi.c (udi_files_info): If prog_name is NULL, just skip
	printing the program, rather than passing NULL to printf.
	(udi_detach): Set udi_session_id to -1 so that udi_close doesn't
	try to call UDIDisconnect again.  Print better message.
	(udi_kill): Just call UDIDisconnect ourselves, rather than doing
	it via udi_close.
	(udi_create_inferior): If udi_session_id is negative, open a new
	TIP rather than giving an error.

	* config/mips/mipsm3.mh, config/i386/i386m3.mh,
	config/ns32k/ns32km3.mh: Define NAT_FILE.
	* config/nm-m3.h: Change guard from _OS_MACH3_H_ and _OS_MACH3_H
	(it was inconsistent and namespace-wrong) to NM_M3_H.
	* m3-nat.c (mach_really_wait): Change parameter name to ourstatus.
	(m3_open): New function.
	(m3_ops): Use it.
	* TODO: Update Mach section.

	* Makefile.in: Remove "rapp" stuff; it is superseded by gdbserver.

Sun Feb  6 13:26:21 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* printcmd.c (printf_command):  Add missing single-letter
	backslash-escape sequences, and improve error message.

Sun Feb  6 06:55:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* corelow.c (solib_add_stub, core_open): Pass address of from_tty
	rather than trying to shove an int into a pointer and back out
	again.  This avoids compiler warnings.

	* defs.h (alloca): Declare as void *, not char *, on hpux.
	Don't prototype it, just declare the return type.

Sun Feb  6 03:25:41 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/i386/tm-sun386.h, config/i386/tm-symmetry.h
	(REGISTER_CONVERT_TO_RAW):  Add missing backslash.

Sat Feb  5 08:03:41 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-mips.c (mips_fetch_registers): If regno is FP_REGNUM or
	ZERO_REGNUM, just read it as zero without talking to the board.

	* config/i386/tm-i386aix.h (REGISTER_CONVERT_TO_RAW): Add missing
	backslash.
	* i386-tdep.c (i386_extract_return_value): Pass TYPE_LENGTH (type)
	to store_floating, not nonexistent variable len.

	* remote-mips.c (mips_insert_breakpoint, mips_remove_breakpoint):
	New functions.
	(mips_store_word): Change calling convention to return errors, and
	to provide old contents if the caller wants it.
	(mips_xfer_memory): Deal with errors from mips_store_word.
	* config/mips/tm-idt.h, config/mips/tm-idtl.h: Remove BREAKPOINT
	define now that remote-mips.c doesn't use BREAKPOINT.

	* remote-mips.c (mips_create_inferior): Call warning if arguments
	specified, and then execute "set args" command.  Call error, not
	mips_error, if executable file not specified.

	* remote-e7000.c: Replace "snoop" command (e7000_noecho) with
	remote_debug.

	* config/rs6000/tm-rs6000.h (STORE_STRUCT_RETURN): Don't cast
	to unsigned int.

Sat Feb  5 05:27:05 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* value.h (print_longest):  Rename "value" to "val" in prototype
	declaration because some compilers don't like arguments whose
	names are the same as types.
	* remote.c (remote_xfer_memory):  Cast "myaddr" to unsigned char *
	before passing it to remote_*_bytes.

Fri Feb  4 15:53:18 1994  Steve Chamberlain  (sac@cygnus.com)

	* h8500-tdep.c (saved_pc_after_call): The size of the
	pc is memory model dependent. (segmented_command,
	unsegmented_command, _initialize_h8500_tdep): New commands to
	change memory model.
	* remote-e7000.c (_initialize_remote_e7000): Change name of snoop
	command.
	* remote-hms.c (hms_load): Remove breakpoints when loaded.
	(hms_wait): Use new status structure
	(hms_open): Push the target here. (hms_before_main_loop): Not
	here.  (supply_val, hms_fetch_register, hms_store_register):  Cope
	with H8/500 names too. (hms_fetch_register): Take out REGISTER_TYPE.
	* sh-tdep.c (show_regs, initialize_sh_tdep): New command to print
	all registers in a compact way.

Fri Feb  4 07:41:13 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* config/rs6000/tm-rs6000.h: Declare rs6000_struct_return_address
	as CORE_ADDR to match definition in rs6000-tdep.c.

Fri Feb  4 01:14:20 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dwarfread.c (process_dies):  Skip nested TAG_compile_unit DIEs.
	* dwarfread.c (add_partial_symbol):  Do not enter opaque aggregate
	definitions into the psymtab.

Thu Feb  3 12:38:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m68k-stub.c: Treat mc68332 like mc68020 most places.  Provide
	a special exceptionSize for the 68332.

	* remote-udi.c (udi_attach): If no arguments, print error.

Thu Feb  3 17:34:05 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.12.1
	* NEWS, README:  Update to match 4.12 release.

Thu Feb  3 12:38:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* command.c (empty_sfunc): New function.
	(add_set_cmd): Use it instead of not_just_help_class_command.
	(not_just_help_class_command): Change calling convention back to
	what it was before yesterday's change.

	* stabsread.c (read_sun_builtin_type): Skip the semicolon at the end
	of the type if present.

Wed Feb  2 11:16:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (decode_format): Don't blithely set the size for
	an address to 'w'.  Make it 'g' or 'h', depending on TARGET_PTR_BIT.

	* defs.h: Just typedef CORE_ADDR to bfd_vma.  Include bfd.h.
	If BFD64, make a LONGEST a BFD_HOST_64_BIT.
	* defs.h (longest_to_int): Don't depend on CC_HAS_LONG_LONG; instead
	always just check against INT_MIN and INT_MAX (this also fixes things
	if sizeof (long) > sizeof (int), e.g. Alpha).
	* config/pa/tm-hppa.h, config/i386/sun386.h, config/rs6000/tm-rs6000.h:
	Don't define LONGEST or BUILTIN_TYPE_LONGEST.
	* gdbtypes.h: Remove BUILTIN_TYPE_LONGEST and
	BUILTIN_TYPE_UNSIGNED_LONGEST.
	* language.h, c-lang.c, ch-lang.c, m2-lang.c, language.c: Remove
	longest_int and longest_unsigned_int.
	* value.h (struct value): Just align to LONGEST, rather than worrying
	about CC_HAS_LONG_LONG.
	* valarith.c (value_binop): Figure out type ourself based on
	sizeof (LONGEST) rather than relying on BUILTIN_TYPE_LONGEST.  The
	point is that we don't depend on CC_HAS_LONG_LONG anymore.
	* valprint.c (val_print_type_code_int): Just call
	extract_unsigned_integer directly, rather than going through
	unpack_long.
	* printcmd.c (decode_format): Remove code which would sometimes
	change 'g' size to 'w' for integers.  print_scalar_formatted handles
	printing huge integers well enough, thank you.

	* command.c (add_set_cmd, not_just_help_class_command): Change
	to make this the sfunc, not cfunc, since that is how we call it.
	* command.h: Comment difference between sfunc and cfunc.
	* demangle.c (set_demangling_command): Add third arg since that
	is how it is called.
	(_initialize_demangler): Use sfunc, not cfunc, for
	set_demangling_command, since that is how it is called.
	Remove show_demangling_command; it has no effect.

	* command.c (shell_escape): Report errors correctly (with error
	message from strerror).

Wed Feb  2 14:35:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): Change CSECT_LEN to use
	x_scnlen.l rather than x_scnlen to match corresponding change in
	coff/internal.h.

Wed Feb  2 11:16:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbtypes.h, ch-typeprint.c, ch-valprint.c:
	Change comments regarding TYPE_CODE_BOOL.
	* language.c (boolean_type): Always return 1 for TYPE_CODE_BOOL,
	regardless of the language.
	(value_true): Just call value_logical_not regardless of language.
	* coffread.c (coff_read_enum_type), stabsread.c (read_enum_type):
	Remove #if 0'd code which makes some enums TYPE_CODE_BOOL.
	* language.h: Improve comment for la_builtin_type_vector.
	* m2-lang.c (_initialize_m2_language): Don't add any fields to
	builtin_type_m2_bool.

Tue Feb  1 17:13:32 1994  Kevin Buettner (kev@cujo.geg.mot.com)

	* config/m88k/{tm-delta88.h,tm-delta88v4.h}, m88k-tdep.c:
	Define IN_SIGTRAMP and backtrace correctly through signal handlers.

Tue Feb  1 22:13:25 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* procfs.c (wait_fd):  Handle EINTR error return from PIOCWSTOP ioctl
	by restarting the ioctl.

Tue Feb  1 16:16:25 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.h (target_wait): Add comment about calling
	return_to_top_level.

Tue Feb  1 12:21:00 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffread.c (read_one_sym): bfd_coff_swap_aux_in now takes
	additional arguments.
	* xcoffread.c (read_xcoff_symtab, read_symbol_lineno): Likewise.

Mon Jan 31 16:10:41 1994  Stu Grossman  (grossman at cygnus.com)

	* sparc-stub.c:  Remove unnecessary #include of memory.h.

Mon Jan 31 12:12:34 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mips-tdep.c: Remove code which sets saved_regs from
	init_extra_frame_info and put it in new function mips_find_saved_regs.
	(READ_FRAME_REG): Remove macro and replace uses with the expansion.
	* mips-tdep.c, config/mips/tm-mips.h: When examining ->saved_regs,
	check if it is NULL and call mips_find_saved_regs if so.

	* remote-mips.c: Use unfiltered, not filtered, output most places.

	* blockframe.c (get_prev_frame_info): Detect and stop an infinite
	backtrace.  Revise comments.

Mon Jan 31 09:40:33 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_procedure):  Remove _sigtramp kludges for
	alpha and irix. The _sigtramp case has to be handled properly
	in the tdep files if we have no ecoff debugging info.
	* alpha-tdep.c (alpha_frame_saved_pc, alpha_frame_chain),
	mips-tdep.c (mips_frame_saved_pc):  Handle signal handler frames
	without PC_REGNUM kludge.
	* mdebugread.c (fixup_sigtramp), mips-tdep.c (read_next_frame_reg):
	Clean up handling of mips sigtramp frames, improve comments.

Sat Jan 29 23:25:57 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* paread.c (read_unwind_info): Fix typo.

	* paread.c (pa_symtab_read): Update the "check_strange_names"
	filter to match GCC's current output.  Filter out section symbols
	(which the HP linker sometimes puts in the wrong place).

Sat Jan 29 07:44:59 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* serial.h (SERIAL_SET_TTY_STATE): Comment return value.

	* Makefile.in (TAGS): Just echo one line, rather than the whole thing.

	* Makefile.in: Remove all references to sparcly-nat.c.

	* Makefile.in (HFILES_NO_SRCDIR): Include dcache.h remote-utils.h
	remote-sim.h directly, rather than via $(remote_utils_h).  This avoids
	duplicating serial.h and target.h.

	* Makefile.in: Don't set M_INSTALL and M_UNINSTALL.  These variables
	are not used anywhere (a 5 Oct 1993 change removed the uses).

	* config/m68k/monitor.mt (TDEPFILE): Add remote-es.o.
	* config/m68k/es1800.mt: Add comment.
	* remote-es.c: Extensive changes to update to current conventions.

	* ser-unix.c (wait_for, hardwire_readchar) [HAVE_TERMIO, HAVE_TERMIOS]:
	If the timeout is too big to fit in c_cc[VTIME], then do multiple reads
	to achieve the desired timeout.
	* serial.h (serial_t): Add field timeout_remaining.

Fri Jan 28 08:45:02 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* c-exp.y (yylex): Reenable nested type code.

Fri Jan 28 15:40:33 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* a29k-tdep.c (examine_tag): Add comment regarding argcount.

	* remote-mips.c (mips_ops): Fix docstring.

	* remote-bug.c (bug_ops): Remove spurious newline from docstring.

	* config/m68k/tm-monitor.h: Changes to bring this into accordance
	with the old tm-m68k-em.h:
	(GDBINIT_FILENAME, DEFAULT_PROMPT): Remove.
	(HAVE_68881): Don't undefine; HAVE_68881 is obsolete.
	(REGISTER_NAMES): Don't muck with it; what tm-m68k.h has is fine.
	Add FIXME regarding GET_LONGJMP_TARGET.

	* remote-udi.c (udi_close, udi_detach, udi_kill): Add comments.
	* infptrace.c (kill_inferior): Add comments.
	* main.c (quit_command): Call target_close after we kill or
	detach.
	* remote-udi.c (udi_close): Don't error() if QUITTING.

Fri Jan 28 11:55:52 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* configure.in: Make m68k-coff and aout add monitor support in
	addition to the standard serial support.

Fri Jan 28 08:45:02 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* mdebugread.c (psymtab_to_symtab_1): Don't complain on stLabel with
	index indexNil.

Fri Jan 28 10:40:34 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/pa/tm-hppa.h: Define macro SMASH_TEXT_ADDRESS.
	* elfread.c (record_minimal_symbol_and_info),
	dwarfread.c (process_dies), paread.c (pa_symtab_read): Use it.

Thu Jan 27 15:12:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* i386-stub.c: Add ".text" right before "mem_fault:".

	* main.c (baud_rate): Add FIXME comment about printing -1 value.

	* remote-utils.c (usage): Fix message to be accurate and conform
	more closely to normal conventions.

	* remote-utils.c (gr_files_info): Have the exec_bfd test control
	whether to show information about exec_bfd, and not control whether
	to show information about device and speed.

	* remote-utils.c (gr_open): If sr_get_device returns NULL, give
	usage message, don't dump core.

	* remote-bug.c (bug_write_memory): Use alloca, not GCC extension
	for variable size array.
	(bug_fetch_register, bug_store_register): Rename "value" to
	"fpreg_buf" because some compilers don't like variables whose
	names are the same as types.
	(bug_store_register): Use a cast when converting char * to
	unsigned char *.

	* symmisc.c (maintenance_print_symbols): Don't refer to the name
	of the command in error message (the text was referring to the old
	name of the command).

	* symmisc.c (dump_symtab): Fix args to fprintf_filtered.

	* c-typeprint.c (c_type_print_base): Have SHOW == 0 mean to print
	full details on structure elements without names.  This partially
	reverts the changes of 1 Jul 1993 and 31 Aug 1993; I think this aspect
	of those changes was accidental.

	* stack.c (parse_frame_specification): If SETUP_ARBITRARY_FRAME is
	defined, make it an error to specify a single argument which is not
	a frame number.

	* Makefile.in (version.c), main.c (print_gdb_version): Use
	host_alias and target_alias, not host_canonical and
	target_canonical, to print configuration.

Wed Jan 26 10:57:21 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* parse.c (write_exp_msymbol): Use new type msymbol_addr_type instead
	of builtin_type_long.  It is necessary to get a type which is
	TARGET_PTR_BIT bits in size; builtin_type_long might not be big enough.

	Fix many sins which will come up in 32 bit x 64 bit GDB, and
	various miscellaneous things discovered in the process:
	* printcmd.c, defs.h (print_address_numeric): New function.
	* c-valprint.c (c_val_print), ch-valprint.c (chill_val_print)
	breakpoint.c (describe_other_breakpoints, breakpoint_1, mention),
	cp-valprint.c (cplus_print_value), infcmd.c (jump_command),
	printcmd.c, stack.c, symfile.c, symmisc.c, valprint.c:
	Use it.
	* utils.c, defs.h (gdb_print_address): New function.
	* expprint (dump_expression), gdbtypes.h: Use it.
	* breakpoint.c (describe_other_breakpoints),
	symmisc.c (dump_symtab, print_symbol):
	Use filtered not unfiltered I/O.
	(remove_breakpoints): Remove BREAKPOINT_DEBUG code.  Might as well
	just run gdb under a debugger for this (and it had problems with
	printing addresses, how to print b->shadow, etc.).
	* buildsym.c (make_blockvector), core.c (memory_error),
	exec.c (print_section_info), maint.c (print_section_table),
	mdebugread.c (parse_procedure), solib.c, source.c, symfile.c,
	symmisc.c, symtab.c, valops.c, valprint.c, xcoffexec.c:
	Add comments saying code is broken.  Marked with "FIXME-32x64".
	* dbxread.c (process_one_symbol), partial-stab.h (default),
	remote-vx.c (vx_run_files_info):
	Don't cast int being passed to local_hex_string.
	* symmisc.c (print_symbol): Don't cast long being passed to %lx.
	* symtab.h (general_symbol_info): Add comment about SYMBOL_VALUE
	only being a long.
	* symmisc.c (print_symbol): Print "offset" in message for LOC_ARG
	and LOC_LOCAL.
	* printcmd.c (print_address): Remove #if 0 code with ADDR_BITS_REMOVE.
	* source.c: Include <sys/types.h> regardless of USG.

Tue Jan 25 12:58:26 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valops.c (value_assign):  Set `type' after coercing toval.
	* c-valprint.c (c_val_print), ch-valprint.c (chill_val_print):
	Use extract_unsigned_integer to get the address of a reference.

Tue Jan 25 11:31:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (STABS_CONTINUE, error_type), partial-stab.h:
	AIX can use ? instead of \ for continuation.  Deal with it.

	* paread.c (read_unwind_info): Just assign to objfile->obj_private,
	not OBJ_UNWIND_INFO.  Assigning to a cast is a GCC-ism which
	the HP compiler in ANSI mode doesn't like.

	* main.c: When defaulting HAVE_SIGSETMASK based on USG, just do it
	based on USG, rather than defining HAVE_SIGSETMASK to an
	expression containing defined.  Having a macro used in #if expand
	to an expression containing "defined" is undefined according to
	ANSI, and the HP compiler in ANSI mode doesn't do what we wanted
	it to.

Mon Jan 24 20:51:29 1994  John Gilmore  (gnu@cygnus.com)

	* sparc-nat.c (fetch_inferior_registers, store_inferior_registers):
	Clean up the changes of 11 Jan, as recommended by Peter Schauer.

Fri Jan 21 19:10:44 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-exp.y (match_string_literal):  Allow a zero-length string.
	* ch-lang.c (chill_printstr):  Don't print zero-length string funny.

Sat Jan 22 17:08:48 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* i386aix-nat.c (i386_float_info): Reverse order of registers before
	passing them to print_387_status.
	(print_387_status): Don't subtract top from 7 before using it.
	* i387-tdep.c: Remove comment about AIX wanting "top" subtracted
	from 7; the above explains it.

Sat Jan 22 20:25:11 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tdep.c (init_extra_frame_info):  Use frame relative stack
	pointer value when fixing up the frame at the start of a function.

Sat Jan 22 12:29:13 1994  Stu Grossman  (grossman at cygnus.com)

	* lynx-nat.c (fetch_core_registers):  Load the I & L regs for the
	Sparc from the stack.

Sat Jan 22 08:30:42 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote-mips.c (mips_initialize): Clear mips_initializing via
	cleanup chain, not directly.

	* ser-unix.c (wait_for) [HAVE_TERMIO, HAVE_TERMIOS]: Make a timeout
	of -1 mean forever, like in the HAVE_SGTTY case.  Warn if we are
	munging the timeout due to the limited range of c_cc[VTIME].

	* fork-child.c, inferior.h (fork_inferior): New argument shell_file.
	* procfs.c (procfs_create_inferior), inftarg.c (child_create_inferior),
	m3-nat.c (m3_create_inferior): Pass it.
	* procfs.c: Remove ptrace function.  It was declared in a way which
	conflicted with the prototype in unistd.h on Solaris.

Sat Jan 22 01:37:40 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sparc-tdep.c (frame_saved_pc):  Get the pc from the saved pc
	in the sigcontext if it is a signal trampoline frame.
	* config/sparc/tm-sun4sol2.h (IN_SIGTRAMP, SIGCONTEXT_PC_OFFSET):
	Define for Solaris2.

Sat Jan 22 00:34:47 1994  Stu Grossman  (grossman at cygnus.com)

	* sparc-tdep.c, lynx-nat.c, config/sparc/tm-sparc.h,
	config/sparc/tm-sparclynx.h:  Move defs of FRAME_SAVED_I0/L0 to
	tm-sparc.h so they can be overridden if necessary.

Fri Jan 21 17:49:28 1994  Stu Grossman  (grossman at cygnus.com)

	* lynx-nat.c:  Add Sparc support.
	* sparcly-nat.c:  Remove.  It's useless.
	* config/sparc/nm-sparclynx.h:  Rewrite.
	* config/sparc/sparclynx.mh (NATDEPFILES):  Replace sparcly-nat.o
	with lynx-nat.o
	* config/sparc/tm-sparclynx.h:  Rewrite.

Fri Jan 21 19:08:48 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* rs6000-pinsn.c: Use the new disassembler in the opcodes
	directory.  Old code was discarded, since the new opcode table has
	a different format.

Fri Jan 21 14:28:30 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (realclean):  Remove info files per make-stds.texi.

Fri Jan 21 12:47:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c (end_psymtab): Only patch psymtab textlow and texthigh
	if N_SO_ADDRESS_MAYBE_MISSING is defined.
	* config/sparc/tm-sun4sol2.h: Define it.

Thu Jan 20 15:04:24 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* printcmd.c (print_address_symbolic):  Unconditionally use msymbol
	if we did not find a symbol.

Fri Jan 21 08:20:18 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* infptrace.c (child_xfer_memory): Only use if CHILD_XFER_MEMORY
	is not defined.

	* hppab-nat.c (call_ptrace): Delete redundant function.
	(kill_inferior, attach, detach, child_resume): Likewise.
	(child_xfer_memory): Likewise.

	* hppah-nat.c (call_ptrace): Delete redundant function.
	(kill_inferior, attach, detach, child_resume): Likewise.

	* config/pa/hppabsd.mh (NATDEPFILES): Add infptrace.o.

	* config/pa/hppahpux.mh (NATDEPFILES): Add infptrace.o.

	* config/pa/nm-hppab.h (FETCH_INFERIOR_REGISTERS): Define.

	* config/pa/nm-hppah.h (FETCH_INFERIOR_REGISTERS): define.
	(CHILD_XFER_MEMORY): Define.
	(PT_*): Define so that generic infptrace.c code can be used.

Fri Jan 21 09:23:33 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (xcoff_symfile_read): Make second parameter a
	struct section_offsets *, not a (nonexistent) struct section_offset *.

	* xcoffread.c (read_xcoff_symtab): Make main_aux just a union
	internal_xcoff_symtab, not an array of one of them.  Change lots of
	"main_aux" to "&main_aux" and so on.

	* coffread.c, xcoffread.c: Include <coff/internal.h>
	before "symfile.h".

Thu Jan 20 17:30:55 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffread.c (coff_getfilename): Make it not static.

	* xcoffread.c (read_xcoff_symtab): complain() not abort().

	* xcoffread.c (struct coff_symbol): Rename c_nsyms to c_naux (removes
	a completely gratuitous difference between xcoffread.c and coffread.c).

Wed Jan 19 15:09:44 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Don't set frame for
	step_resume_breakpoint for IN_SIGTRAMP cases.

	* infrun.c (wait_for_inferior), breakpoint.h (struct bpstat_what),
	breakpoint.c (bpstat_what): Move step_resume from its own field of
	the struct bpstat_what into the main_action.  Make it override
	other breakpoints.  This is a conservative change in the sense
	that before the step resume breakpoint was a breakpoint.c
	breakpoint, hitting the step resume breakpoint overrode even
	calling bpstat_stop_status.

Wed Jan 19 12:40:25 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (normal_stop):  Set stop_pc after popping the dummy frame
	in case execution was stopped in the called function.
	* stack.c (print_frame_info, frame_info):  If backtracing through
	a call dummy, handle the starting source line number on a line
	boundary like backtracing through sigtramp.
	* sparc-tdep.c (sparc_frame_find_saved_regs):  Get frame address
	for call dummy frame right.  Remove old test for dummy frame,
	it has been unused at least since gdb-3.5.
	* sparc-tdep.c (sparc_push_dummy_frame):  Set return address register
	of the dummy frame.

Tue Jan 18 16:16:35 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infcmd.c (signal_command): Accept 0 as legitimate signal number.

Tue Jan 18 14:09:25 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (signals_info), target.c (target_signal_from_name):
	Use ugly casts to avoid enumvar < enumvar or enumvar++.

Mon Jan 17 22:00:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* ser-unix.c (hardwire_noflush_set_tty_state): Don't muck with ICANON.
	* inflow.c (terminal_ours_1): When discussing how to deal with the
	tty state, make note of query() as well as readline.

	* infrun.c (_initialize_infrun): Add TARGET_SIGNAL_POLL to list of
	signals for which stop and print are cleared by default.

Mon Jan 17 20:00:51 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppa.h (unwind_table_entry): Use one of the
	reserved fields to hold a stub unwind entry type.  Fix typo.
	(stub_unwind_entry): New structure for raw stub unwind entries.
	(stub_unwind_types): The types of stubs we may encounter.
	(UNWIND_ENTRY_SIZE, STUB_UNWIND_ENTRY_SIZE): New defines.
	* hppa-tdep.c (rp_saved): Use additional information provided
	by linker stub unwind descriptors.
	(frameless_function_invocation): Likewise.
	(frame_chain_valid): Likewise.
	* paread.c (compare_unwind_entries): New function for sorting
	unwind table entries.
	(read_unwind_info): Rewrite to remove dependency on host endianness.
	Read in data from the $UNWIND_END$ subspace which contains linker
	stub unwind descriptors.  Merge that data into the basic unwind
	table.

	* hppab-nat.c (_initialize_kernel_u_addr): Delete unwanted functions.

Mon Jan 17 22:00:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (read_xcoff_symtab, case C_FILE): Accept the name
	from either the symbol name or the auxent.
	* coffread.c, symfile.h (coff_getfilename): Renamed from getfilename,
	no longer static.

Mon Jan 17 13:35:01 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (ALLPARAM):  Change irix5.h to nm-irix5.h.

Mon Jan 17 12:35:42 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* README:  Update notes for alpha port.

Mon Jan 17 11:15:57 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* i960-tdep.c (i960_fault_to_signal): Return TARGET_SIGNAL_ILL
	for operation fault, constraint fault, and type fault.

Sun Jan 16 12:46:01 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (init.c): Add comment explaining formatting conventions.

	* c-exp.y (parse_number): Assign to temporary between the right
	shifts, to work around a bug in the SCO compiler.

	* Makefile.in (ALLCONFIG, ALLPARAM, ALLDEPFILES, HFILES_NO_SRCDIR):
	Add various files which were added to GDB recently.

	* xcoffread.c (process_xcoff_symbol): Only change 'V' to 'S' if not
	within_function.

	* Makefile.in: Add mostlyclean target.

Sat Jan 15 10:20:13 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Version 4.11.4.

Sat Jan 15 18:27:34 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* main.c (show_commands):  Make return type of extern
	history_get be HIST_ENTRY, rather than struct _hist_entry.
	(The latter loses with the upcoming merged readline.)

Sat Jan 15 10:20:13 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* minsyms.c (prim_record_minimal_symbol_and_info): Make tempstring
	const char *, not char *.

	* symtab.h (struct symbol): Make section short, not unsigned short.

	* symtab.c (lookup_symbol): Add comment about QUIT here.

	* utils.c (fputs_unfiltered): Call fputs, not fputs_maybe_filtered.

	* c-exp.y (parse_number): Check for overflow regardless of range
	checking.  Fix overflow check to use unsigned LONGEST, not
	unsigned int.

	* c-exp.y (parse_number): Make it so that integer constants are
	builtin_type_long_long if builtin_type_long isn't big enough or if
	an "LL" suffix is used.  Properly handle "UL" or "LU" suffixes.

	* c-typeprint.c (c_type_print_varspec_suffix, case TYPE_CODE_FUNC):
	Print our "()" first, then recurse for the target type.

Fri Jan 14 21:55:39 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c (udi_create_inferior): Quote empty execfile argument.

	* gdbserver/low-lynx.c: Include <sys/wait.h> not "/usr/include/wait.h".

Fri Jan 14 14:17:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (request_quit): Re-establish signal handler regardless
	of USG.

	* config/mips/xm-irix4.h: Define HAVE_TERMIOS.

Fri Jan 14 21:55:39 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* i960-tdep.c: Include target.h.

Fri Jan 14 17:12:28 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* lynx-nat.c (sys/wait.h): Don't use absolute pathname.

Fri Jan 14 11:06:10 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* lynx-nat.c (child_wait): Fix thinkos in struct target_waitstatus
	changes (status -> ourstatus; declare status, etc.).
	* config/nm-lynx.h: Fix child_wait prototype and include target.h.

Fri Jan 14 14:17:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (ALLPARAM): Add config/nm-lynx.h.

Fri Jan 14 11:49:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* remote-mips.c (mips_request, mips_wait): Correct prototypes.

Fri Jan 14 11:37:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/xm-linux.h: Define HAVE_TERMIOS.

Fri Jan 14 01:04:36 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/alpha/tm-alpha.h (CALL_DUMMY):  Improve comment.

Thu Jan 13 10:32:38 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-vx.c (vx_wait): Only call i960_fault_to_signal if I80960
	is defined.  Otherwise just report TARGET_SIGNAL_UNKNOWN.

	* mips-tdep.c (mips_push_arguments): Byteswap struct_addr before
	writing it.

	Add search to target vector (#if 0'd until after 4.12):
	* target.h (to_search, target_search): Add.
	* gdbcore.h, core.c (generic_search): Add.
	* remote.c (remote_search): Add.
	* a29k-tdep.c (init_frame_info): Use target_search to find traceback
	tag.

	* printcmd.c (print_address_symbolic): If set print fast-symbolic-addr
	is on, call find_pc_function rather than relying just on the minimal
	symbols (probably only matters for symbol readers which don't put
	statics in the minimal symbols, but changing this strikes me as
	not conservative enough).
	Initialize name_location in all cases.
	If no symbol and no msymbol, don't print anything symbolic.

	* a29k-tdep.c (push_dummy_frame): Add comment about saving lr0.

Wed Jan 12 20:53:16 1994  John Gilmore  (gnu@cygnus.com)

	* printcmd.c (print_address_symbolic):  Make it search the
	symtabs for variables as well as functions.  Add `set print
	fast-symbolic-addr' and default it to fast (the old way).
	Print line numbers for data items as well as functions.

	* symtab.c (find_addr_symbol):  Return the symtab and the symbol
	address, if a symbol is found (take two more args pointing to
	where to store these results).

	* symtab.h (find_addr_symbol):  Add prototype.

Wed Jan 12 19:32:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* objfiles.h: Fix comments to reflect the fact that the phrase
	"top of stack" always refers to where the pushing and popping takes
	place, regardless of whether it is at the highest or lowest address.

Wed Jan 12 13:23:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_symbol):  Do not set TYPE_TAG_NAME for
	compiler generated tag names.
	* mdebugread.c (parse_type):  Handle cross references to qualified
	aggregate types.
	* valops.c (value_struct_elt):  Improve error message if the
	address of a method is requested from an object instance.
	* valops.c (search_struct_method):  Make name_matched non-static
	to get it initialized correctly.
	* config/i386/nm-i386sco.h (CANNOT_STORE_REGISTER):  Define to
	exclude segment register which are not writable on newer SCO versions.

Wed Jan 12 14:44:45 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* go32-xdep.c: Remove unused function uerror.
	(sigsetmask): Declare return type.  Declare argument (to match the
	way it is called).  Explicitly return 0.

Wed Jan 12 01:44:25 1994  John Gilmore  (gnu@cygnus.com)

	* symtab.h (struct symbol, general_symbol_info, minimal_symbol,
	partial_symbol):  Shrink the storage sizes of symbols, by making
	enums into 1-byte bitfields when compiled __GNUC__, moving all the
	enums and small ints to the end of each struct to improve
	alignment, and switching the section number from int to unsigned
	short.

Wed Jan 12 00:16:26 1994  John Gilmore  (gnu@cygnus.com)

	* symtab.c (find_addr_symbol):  New routine that will find the nearest
	symbol associated with an address.  It does so by exhaustive
	search of the symtabs, so it's slow but complete.

Tue Jan 11 23:57:30 1994  John Gilmore  (gnu@cygnus.com)

	* coffread.c (read_coff_symtab):  Set PC bounds of _globals_ symtab
	to [0,0] rather than [0, end of first source file].  This avoids
	problems with other parts of GDB looking for linetables in the
	_globals_ symtab.  Eliminate variables num_object_files and
	first_object_file_end.

Tue Jan 11 00:53:46 1994  John Gilmore  (gnu@cygnus.com)

	* a29k-tdep.c (init_frame_info):  Cast null arg to examine_tag.
	(pop_frame):  Restore PC2 and LR0 from dummy frames.
	(push_dummy_frame):  Save PC2 and LR0 into dummy frames.
	(setup_arbitrary_frame):  Handle 3 args and set up real frames.
	* config/a29k/tm-a29k.h (FRAME_NUM_ARGS):  Update comments.
	(DUMMY_FRAME_RSIZE):  Add 2 longwords for PC2 and LR0.
	(SETUP_ARBITRARY_FRAME):  Define.

Tue Jan 11 06:59:10 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* infrun.c, config/mips/tm-irix5.h: Remove #if 0'd AT_FUNCTION_START.

Tue Jan 11 14:27:03 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* remote-udi.c (udi_resume): Correct prototype.

Tue Jan 11 11:10:30 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

        * config/pa/tm-hppa.h (FRAME_FIND_SAVED_REGS): Call
	hppa_frame_find_saved_regs.
	* hppa-tdep.c (dig_fp_from_stack): Delete function.
	(prologue_inst_adjust_sp): New function.
	(is_branch, inst_saves_gr, inst_saves_fr): New functions.
	(skip_prologue): Completely rewrite to use unwind information.
	(hppa_frame_find_saved_regs): Likewise.

Tue Jan 11 06:59:10 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote-mips.c (mips_wait): Use new function mips_signal_from_protocol
	to convert a signal number with appropriate bounds checking.

	* remote-mips.c (mips_wait): Fix typos (0x177 -> 0177, 0x377 -> 0377).

Tue Jan 11 00:53:46 1994  John Gilmore  (gnu@cygnus.com)

	* stack.c (frame_info):  If FRAME_FIND_SAVED_REGS isn't defined,
	print a newline to end the display anyway.

	* sparc-tdep.c (sparc_pop_frame):  Pop the fsr and csr (float and
	coprocessor status regs) when popping a frame.  This fixes 
	float exceptions that occur after calling inferior functions.

	* sparc-nat.c (fetch_inferior_registers, store_inferior_registers):
	Read and write the fsr (float status register) to/from the child
	process along with the float regs.  Remove Peter Schauer's change
	of May 24 '93, which has higher overhead and doesn't solve the
	real problem (which was that FSR wasn't being set).

Mon Jan 10 23:16:42 1994  John Gilmore  (gnu@cygnus.com)

	* a29k-tdep.c (examine_prologue):  Don't worry if the ASGEQ
	stack overflow check isn't right after the register stack
	adjustment instruction.  Metaware R2.3u compiler moves other
	things in front of it.  This fix isn't perfect but is what's
	running.

Mon Jan 10 20:08:23 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* c-valprint.c (c_val_print): Treat TYPE_CODE_RANGE like TYPE_CODE_INT.

	* config/alpha/alpha-netware.mt: Rename to alpha-nw.mt for 14
	character filenames.
	* configure.in: Change accordingly.

Mon Jan 10 15:48:36 1994  Tom Lord  (lord@rtl.cygnus.com)

	* m68k-stub.c, sparc-stub.c: removed spurious introduction of 
	_filtered io routines from these two files.

Fri Jan  7 12:42:45 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/i386/tm-i386v.h, config/m68k/tm-m68k.h, config/mips/tm-mips.h,
	config/vax/tm-vax.h (CALL_DUMMY_BREAKPOINT_OFFSET):  Define.
	* mdebugread.c (parse_symbol):  Handle enum sh.type produced by
	DEC c89. 
	* mdebugread.c (add_line):  Handle zero linenos produced by DEC c89.

Fri Jan  7 12:55:25 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (print_sys_errmsg): Call gdb_flush (gdb_stdout) before
	printing to gdb_stderr.

	* remote-udi.c (udi_kill): Don't close the connection, just set
	inferior_pid to zero.
	(udi_mourn): Call remove_breakpoints.

	* remote-udi.c: Remove obsolete need_artificial_traps comment.

	* i386b-nat.c (sregmap): If sEAX, etc., not defined, use tEAX, etc.

Thu Jan  6 07:17:53 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* symtab.c (lookup_symbol): Don't try adding .c to the name.

	* remote-bug.c: At the start of each section, reset srec_frame
	back to 160.

	* target.h: Add TARGET_WAITKIND_LOADED and TARGET_WAITKIND_SPURIOUS.
	* target.c (store_waitstatus): Add CHILD_SPECIAL_WAITSTATUS hook.
	* infrun.c (wait_for_inferior): Replace SIGTRAP_STOP_AFTER_LOAD with
	code which looks for those two waitkinds.  Use switch statement.
	* config/rs6000/tm-rs6000.h: Replace SIGTRAP_STOP_AFTER_LOAD with
	CHILD_SPECIAL_WAITSTATUS.

	* procfs.c (procfs_wait): Fix argument name to match 4 Jan changes.
	* Move target_signal_from_host, target_signal_to_host, and
	store_waitstatus from inftarg.c to target.c.  procfs needs them.
	* target.c: Include "wait.h" and <signal.h>.
	* target.h, infrun.c (proceed), proceed callers: Pass new code
	TARGET_SIGNAL_DEFAULT instead of -1.  This avoids problems with
	enums being treated as unsigned and is cleaner.
	* infrun.c (signals_info): Don't print TARGET_SIGNAL_DEFAULT or
	TARGET_SIGNAL_0.
	* infcmd.c (signal_command), infrun.c (signals_info):
	Don't allow user to specify numeric equivalent of
	TARGET_SIGNAL_DEFAULT.

Tue Jan  4 15:34:36 1994  Stu Grossman  (grossman@cygnus.com)

	* config/alpha/alpha-netware.mt:  New target support for Alpha
	running Netware.
	* configure.in:  Add alpha-*-netware* target.

Tue Jan  4 14:51:35 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* remote-mips.c (mips_wait): Fix ref to TARGET_WAITKIND_STOPPED.

Tue Jan  4 09:47:14 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.h: Add enum target_waitkind, enum target_signal, and
	struct target_waitstatus.  Change status argument to target_wait to
	be struct target_waitstatus * instead of int *.
	* target.h, infrun.c, all targets: Change type of signal arguments
	to resume(), proceed(), and target_resume() from int to enum
	target_signal.
	* All targets (*_wait, *_resume): Change accordingly.
	* infcmd.c (program_info, signal_command), throughout infrun.c, 
	* fork-child.c, solib.c, hppa-tdep.c, osfsolib.c: Use this stuff.
	* convex-xdep.c, convex-tdep.c: Add FIXME's (getting the Convex
	signal code stuff right with the new signals would be non-trivial).
	* inferior.h (stop_signal): Make it enum target_signal not int.
	* target.c, target.h (target_signal_to_string, target_signal_to_name,
	target_signal_from_name): New functions.
	* inftarg.c, target.h (target_signal_to_host, target_signal_from_host,
	store_waitstatus): New functions.
	* procfs.c (procfs_notice_signals): Use them.
	* i960-tdep.c (i960_fault_to_signal): New function, to replace
	print_fault.
	* config/i960/tm-i960.h: Don't define PRINT_RANDOM_SIGNAL.

	* objfiles.c (build_objfile_section_table): Don't abort() if
	objfile->sections is already set.

	* objfiles.c (add_to_objfile_sections): Check SEC_ALLOC not SEC_LOAD
	to match recent change to exec.c.

	* Version 4.11.3.

	* main.c (print_gdb_version): Change year to 1994.

	* ChangeLog, ChangeLog-93: Split ChangeLog at 1994.
	* Makefile.in (NONSRC): Add ChangeLog-93.

Mon Jan  3 11:57:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (read_type): Allow defining several type numbers
	at once (e.g. "(1,2)=(3,4)="...).

	* stabsread.c (read_enum_type): Use TARGET_INT_BIT not sizeof (int).

	* breakpoint.c (frame_in_dummy): Check PC as well as frame.

Mon Jan  3 02:47:03 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (psymtab_to_symtab_1):  Only pass N_STAB symbols
	to process_one_symbol.
	* symtab.c (find_pc_psymbol):  Search global_psymbols as well to
	avoid caching a bad endaddr in find_pc_partial_function.

Sun Jan  2 21:41:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/tm-sun3.h: Don't define BELIEVE_PCC_PROMOTION.

Sat Jan  1 04:35:23 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior):  Do not step or step resume past
	the end of a one-line function we just stepped into.

For older changes see ChangeLog-1993

Local Variables:
mode: indented-text
left-margin: 8
fill-column: 74
version-control: never
End:
