1999-07-07  Stan Shebs  <shebs@andros.cygnus.com>

	* gnu-regex.c, gnu-regex.h: Don't let indent mess with these.

Wed Jul  7 13:06:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-mips.c (fputs_readable): Rename puts_readable, add struct
 	gdb_file argument.
	(fputc_readable): Rename putc_readable, add struct gdb_file
 	argument.

	* remote-mips.c (mips_expect_timeout, mips_receive_header,
 	mips_send_packet, mips_receive_packet), remote-rdp.c (put_byte,
 	get_byte, put_word, rdp_init, rdp_init), remote-sds.c
 	(sds_interrupt, sds_wait, readchar, putmessage, read_frame,
 	getmessage), remote-udi.c (udi_store_registers, fetch_register):
	(store_register), xmodem.c (readchar), utils.c (puts_debug),
 	gnu-nat.h (debug), parse.c (parse_exp_1): Cleanup - send debug/log
 	messages to gdb_stdlog.

1999-07-06  Stan Shebs  <shebs@andros.cygnus.com>

	* exec.c: Remove long-#ifed-out section of code that confuses
	indent.
	* gdbtypes.c (add_mangled_type): Add some braces to indicate
	grouping better.
	* gnu-nat.c: Remove literal newlines embedded in strings,
	causes indent to weird out.
	* language.c (binop_result_type): Remove extra paren.
	* lynx-nat.c: Add a missing paren to fetch_core_registers decl.
	* nec4102rom.c (vr4102_insert_step): Fix typos.
	(_initialize_vr4102_rom): Remove literal newline in string.
	* config/a29k/tm-a29k.h: Suppress formatting of pictures.
	* config/m68k/xm-3b1.h: Remove excess #endif.

	Declare Pyramid configuration obsolete.
	* configure.host, configure.tgt: Comment out Pyramid configs.
	* Makefile.in: Comment out Pyramid-related actions.
	* pyr-xdep.c, pyr-tdep.c, config/pyr/*: Comment out.
	* NEWS: Mention obsolete status.

1999-07-06  Jason Molenda  (jsm@bugshack.cygnus.com)

	* remote.c: Include <sys/time.h> to pick up FD_SET et al defns on
	some old Linux distributions.
	* remote-os9k.c, remote-st.c, ser-tcp.c, ser-unix.c,
	sparcl-tdep.c, remote.c: Back out inclusion of <sys/select.h>.
	It isn't necessary after all.

1999-07-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (strip_bg_char): Remove assignment from 'if' condition.

1999-07-05  Jason Molenda  (jsm@bugshack.cygnus.com)

	* remote.c: Include <sys/select.h> if it exists in order to pick up
	FD_SET et al defns.
	* remote-os9k.c:  Same.
	* remote-st.c:  Same.
	* ser-tcp.c:  Same.
	* ser-unix.c:  Same.
	* sparcl-tdep.c:  Same.

Fri Jul  2 19:38:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* top.c (target_output_hook): Delete definition.
	* defs.h (target_output_hook): Delete declaration.

	* remote.c (remote_console_output): Delete call to
 	target_output_hook().  Send target output to gdb_stdtarg using an
 	unfiltered write. Make more robust.

	* remote-sim.c (gdb_os_write_stdout, gdb_os_write_stderr):
 	Ditto. For moment, do not try to separate target stdout and stderr
 	streams.

	* defs.h (gdb_stdtarg): New global. Output from target and
 	simulators.

1999-07-02  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (return_to_top_level): Do all the exec_cleanups too.

	* event-top.c (command_handler): Set up for a continuation, if we
 	are in the middle of running an execution command which will
 	finish later on. Do cleanups, an display of time/space only if not
 	running with an async target or not running an execution command.
	(command_line_handler_continuation): New function. Continuation
 	for command_line_handler.

	* utils.c (exec_cleanup_chain): New cleanup chain to be used in
 	async mode for the execution commands.
	(make_exec_cleanup): New function. Add a cleanup to the
 	exec_cleanup_chain.
	(do_exec_cleanups): New Function. Do cleanups on the
 	exec_cleanup_chain.
	(add_continuation): New function. Add a new continuation to the
 	cmd_continuation list.
	(do_all_continuations): New function. Do all the continuations on
 	the cmd_continuation list.

	* top.h (ALL_CLEANUPS): Move from here to defs.h.

	* defs.h (struct continuation_arg): New structure. Arg to pass to
 	the call to a command continuation.
	(struct continuation): New structure. Continuation for an
 	execution command.
	(ALL_CLEANUPS): Move here from top.h.
	
	* remote.c (remote_async_open_1): Set things up for telling the
 	target we are running the extended protocol, only after the target
 	has stopped.
	(set_extended_protocol): New function. Tell the target we are
 	using the extended protocol.
	(remote_async_resume): Set things up for sync execution only if
 	this is the first time we are called.

	* breakpoint.c (until_break_command_continuation): New function.
  	Stuff to be done after the target stops during the 'until'
 	command.
	(until_break_command): Set things up for completing the 'until'
 	command later on. Do the final cleanups only if not running
 	asynchronously or async execution is not supported by the target.

	* infcmd.c (until_command): Recognize '&' at end of command and
 	handle it properly.
	(finish_command_continuation): New function. Do whatever is needed
 	after the target has stopped.
	(finish_command): Recognize '&' at end of command and handle it
 	properly. Don't do stuff needed after target has stopped if
 	running asynchronously and target has async. Use exec_cleanup_chain
	if running asynchronously and target is asynchronous.

	* infrun.c (cmd_continuation): New gloabl variable. Used to
 	coplete execution commands in async mode, after the target has
 	stoped.
	(fetch_inferior_event): Use exec_cleanup_chain, instead of
 	cleanup_chain. Do all the exec cleanups at the end. Do all the
 	continuations at the end. Call complete_execution from here,
 	instead of normal_stop.
	(complete_execution): Cleanup the signals handlers for SIGINT
 	before displaying the prompt.
	(start_remote): Set target_executing to 1.
	(normal_stop): Don't call complete_execution from here.
	
Thu Jul  1 19:14:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (struct dummy_frame): Add member ``top''.
	(generic_push_dummy_frame): Initialize top to sp.
	(generic_save_dummy_frame_tos): New function.  Initialize top.
	(generic_find_dummy_frame): Check for the top of the frame.

	* blockframe.c (generic_push_dummy_frame): Free the dummy_frame
 	registers.

	* config/mn10300/tm-mn10300.h (SAVE_DUMMY_FRAME_TOS): Define.
	(TARGET_READ_FP): Return the SP as a best guess.

Wed Jun 30 15:45:48 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.host (hppa*-*-hpux11*): Accept any version of hpux11
	instead of hpux11.0*.

1999-06-30  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* source.c (directory_command): Add missing test for from_tty. 

1999-06-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c: Include event-loop.h.
	(remote_async_ops, extended_async_remote_ops): Define new target
 	vector structures for asynchronous debugging.
	(remote_async_open): New function. Asynchronous version of
 	remote_open.
	(extended_remote_async_open): New function. Asynchronous version
 	of extended_remote_open.
	(remote_async_open_1): New function. Async version of
 	remote_open_1.
	(remote_async_detach): New function. Async version of
 	remote_detach.
	(remote_async_resume): New function. Async version of
 	remote_resume.
	(initialize_sigint_signal_handler, handle_remote_sigint,
 	handle_remote_sigint_twice, async_remote_interrupt,
 	async_remote_interrupt_twice, cleanup_sigint_signal_handler): New
 	functions. Used for handling ^C while target is running.
	(remote_async_wait): New function. Async version of remote_wait.
	(remote_async_kill): New function. Async version of remote_kill.
	(extended_remote_async_create_inferior): New function. Async
 	version of extended_remote_create_inferior.
	(init_remote_async_ops): New function. Initialize target vector
 	for target async.
	(init_extended_async_remote_ops): New function. Initialize target
 	vector for target extended-async.
	(_initialize_remote): Initialize remote_async_ops and
 	extended_async_remote_ops.

	* infrun.c: Include "event-loop.h".
	(sync_execution): new global variable.
	(proceed): Invoke wait_for_inferior and normal_stop only if not
 	running in async mode or if target doesn't support async
 	execution.
	(start_remote): Don't call wait_for_inferior and normal_stop if
 	not running in async mode or if target not async. If running async
 	and target is async, start the target in simulated synchronous
 	mode.
	(async_ecss, async_ecs): New global vars, for inferior state.
	(fetch_inferior_event): New function. Async version of
 	wait_for_inferior.
	(complete_execution): New function. Reset of gdb prompt and stdin,
 	after inferior execution has completed.
	(normal_stop): Call complete_execution at end of asynchronous
 	execution.

	* infcmd.c (strip_bg_char): New function to detect the background
 	execution char '&'.
	(run_command): Modify to support background and foreground
 	execution in async mode.
	(continue_command): Ditto.
	(step_1): Ditto.
	(jump_command): Ditto.
	(interrupt_target_command): New function. Interrupt the
 	target execution.
	(_initialize_infcmd): Add new command 'interrupt'.
	
	* top.c (target_executing): New global variable.
	(execute_command): Reject commands that cannot be executed while
	the target is running asynchronously.

	* event-top.c (push_prompt): Make non static.
	(pop_prompt): Make non static. If the current prompt is empty,
 	don't try to copy it over the previous one.
	(handle_sigint): Make non static.
	(command_handler): Do the cleanups only when not executing with an
 	asynchronous target.

	* event-loop.c (delete_async_signal_handler): Pass a pointer to a
 	pointer to a signal handler, so that is can be freed at the end.

	* target.c (update_current_target): Inherit to_has_async_exec.

	* inferior.h: Add global variables target_executing, and
 	sync_execution. Export function fetch_inferior_event.

	* event-loop.h: Add push_prompt, pop_prompt, handle_sigint to the
 	exported functions. Update prototype for delete_signal_handler.

	* target.h (struct target_ops): New target op: to_has_async_exec.
	(target_has_async): New macro.

	* Makefile.in (infrun.o): Add dependency on event-loop.h.
	(remote.o): Ditto.

1999-06-28  Jim Blandy  <jimb@zwingli.cygnus.com>

	* solib.c (clear_solib): Don't disable breakpoints if we're
	running an a.out executable (Solaris's SunOS emulation).

1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c (main): Remove intialization of command_loop_hook, it
	is now done in _initialize_event_loop().
	* event-loop.c (gdb_do_one_event): Make static.
	(start_event_loop): New function. Just start the event loop.
	* event-top.c (cli_command_loop): New name for start_event_loop().
	(gdb_readline2): Make non static.
	(_initialize_event_loop): Set command_loop_hook to cli_command_loop.
	* event-loop.h: Adjust exported functions accordingly.

	* top.c (init_main): Move setting of async_command_editing_p from
 	here.  
	* event-top.c (_initialize_event_loop): To here.
	(change_line_handler): Revert previous change. Add comment.
	(_initialize_event_loop): Revert previous change.
	(cli_command_loop): New name for start_event_loop().
	(start_event_loop): New function. This just starts up the event loop.
	(gdb_readline2): Make non static.
	(_initialize_event_loop): Set command_loop_hook to cli_command_loop.

1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (change_line_handler): Get rid of the global
 	variable input_fd, use `fileno (instream)' instead.
	(_initialize_event_loop): Ditto
	
	* event-loop.c (add_file_handler): New function. Wrapper for
 	create_file_handler.
 	(create_file_handler): Make static.  
	* event-top.c (_initialize_event_loop): Call add_file_handler,
 	instead of create_file_handler.
	(change_line_handler): Ditto.  
	Remove poll.h include.
	* event-loop.h: Export add_file_handler instead of
 	create_file_handler.	

1999-06-24  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Altos configuration obsolete.
	* configure.host, configure.tgt: Comment out Altos config.
	* Makefile.in: Comment out Altos-related actions.
	* altos-xdep.c, config/m68k/altos.mh, altos.mt, tm-altos.h,
 	xm-altos.h: Comment out.
	* NEWS: Mention obsolete status.

1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* Makefile.in: Add MAKEHTML and MAKEHTMLFLAGS; pass them down;
	recognize html and install-html targets.
	* gdbserver/Makefile.in: Add empty html and install-html targets.
	* nlm/Makefile.in: Ditto.
	* rdi-share/Makefile.in: Ditto.

1999-06-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (agent_command): Remove vestigial call to ax_reqs.

1999-06-24  James Ingham  <jingham@leda.cygnus.com>

	* arm-tdep.c (arm_othernames): Change both gdb's register display
	AND the opcode disassembly register naming if the othernames
	command.  Fixes the gdb part of CR 101177.

1999-06-23  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Convex configuration obsolete.
	* configure.host, configure.tgt: Comment out Convex configs.
	* Makefile.in: Comment out Convex-related actions.
	* convex-xdep.c, convex-tdep.c, config/convex/*: Comment out.
	* NEWS: Mention obsolete status.

1999-06-23  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c: Turn on async by default by setting async_p to 1.

Wed Jun 23 15:44:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From Jimmy Guo <guo@cup.hp.com>:
	* frame.h (enum lval_type): Delcare when an __STDC__ compiler.
  	Reverts Mon Aug 11 16:08:52 1997 Fred Fish <fnf@cygnus.com>
 	change.
	* utils.c (gdb_file_rewind, gdb_file_put): Fix.  A void function
 	does not return a result.

Wed Jun 23 15:30:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (set_thread, remote_get_threadinfo,
 	remote_threads_info, remote_current_thread, remote_get_threadlist,
 	extended_remote_restart, get_offsets, remote_open_1,
 	remote_detach, remote_resume, remote_wait, remote_fetch_registers,
 	remote_store_registers, check_binary_download, remote_write_bytes,
 	remote_read_bytes, remote_search, putpkt_binary, putpkt_binary,
 	read_frame, compare_sections_command, remote_query,
 	packet_command, remote_info_process): Use alloca to create space
 	for arrays of size PBUFSIZ.

1999-06-22  Jason Molenda  (jsm@bugshack.cygnus.com)

	* top.c: Update copyright years to include 1999.

1999-06-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Move include of event-loop.h, to avoid redefinition of
 	NFDBITS.

	* event-loop.c (create_file_handler): Do not do a realloc of the
 	pollfd structure of the notifier, unless there is already one.
	Include <sys/types.h> for platforms that have no poll.
	
	* event-top.c: Fix prototype for _initialize_event_loop.
	(_initialize_event_loop): Do something only if running in async
 	mode.

1999-06-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	Make the '/c' print format use a true character type.  This is
	more appropriate than builtin_type_char for languages other than
	C, and C tolerates it.
	* gdbtypes.c (builtin_type_true_char): New variable.
	(build_gdbtypes): Initialize it.
	* gdbtypes.h (builtin_type_true_char): New declaration.
	* printcmd.c (print_scalar_formatted): When the format is 'c',
	extract the value as a builtin_type_true_char.

	* jv-exp.y (yylex): Say character literals are java_char_type, not
	builtin_type_char.  Java treats the latter like `byte'.

1999-06-17  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in (top_h): Define.
	(event-loop.o): Add dependencies on top.h and defs.h.
	(event-top.o): Add dependency on terminal.h.

	* event-loop.c: Get rid of #include <readline.h>.

	* event-loop.h: Get rid of nested #include's. 
	* event-loop.c: Rearrange includes to accomodate change in
 	event-loop.h. Include poll.h, not sys/poll.h.
	* event-top.c: Ditto.
	* main.c: Ditto.
	
1999-06-16  David Taylor  <taylor@louisiana.cygnus.com>

	* alpha-tdep.c (alpha_pop_frame): if frame->proc_desc
	is NULL, call find_proc_desc so we know how to restore
	the registers.

1999-06-15  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* event-top.c (start_event_loop): call get_prompt.
	(display_gdb_prompt): call get_prompt.
	(async_stop_sig): call get_prompt.

1999-06-15  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (delete_file_handler): When positioning prev_ptr,
 	keep looping while the one after is not equal to file_ptr, instead
 	of equal.

1999-06-14  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Add Jimmy Guo and Jim Blandy as HP testsuite and
	SVR4 solib maintainers, respectively.

1999-06-14  Michael Snyder  <msnyder@cleaver.cygnus.com>

	Add parameters to the gdb prompt.
	* top.c (prompt): Rename to gdb_prompt_string for clarity.
	(command_line_input): rename "prrompt" to prompt_arg for clarity.
	(gdb_readline): rename "prrompt" to prompt_arg for clarity.
	(read_command_lines): rename "prompt" to prompt_arg for clarity.
	(stop_sig): call get_prompt instead of reading prompt string directly.
	(command_loop): ditto.
	(gdb_prompt_escape): New variable.  Esc char for prompt parameters.
	(get_prompt_1): New function, workhorse for get_prompt.
	(get_prompt): Completely rewrite.  Add functionality for a 
	parameterized prompt, ie. the displayed prompt can change according
	to the value of one or more expressions given as parameters in the
	prompt string.
	(init_main): use renamed variable gdb_prompt_string.  Add new
	command "set prompt-escape-char" to set gdb_prompt_escape.
	
Sun Jun 13 10:44:13 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_stdlog), main.c: Declare.
	* main.c (main): Initialize.
	* gdbarch.c: Write trace messages to the log file.
	* remote.c: Update any debug/log prints.

1999-06-11  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Clean up new thread handling.
	(record_currthread): Announce new threads.

1999-06-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* partial-stab.h (case N_LSYM, 'T' descriptor): Don't create
	partial symbol table entries for nameless enums, even if the type
	name is " ".  (We still pick up the enum elements, though.)

	* partial-stab.h: Remove #if 0'd sections, dating back to 1992,
 	which set a variable which exists nowhere else in the source.
  	Please examine your test suite output carefully, and report any
 	problems to me.

1999-06-11  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (setup_event_loop): Change name to start_event_loop.
  	Move the intialization of event-loop variables to
 	_initialize_event_loop.
	(_initialize_event_loop): New function. Called at init time, to
 	set up important event-loop variables.

	* event-loop.h: setup_event_loop is now start_event_loop.
	* main.c (main): Ditto.

Fri Jun 11 18:34:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_rewind_ftype, gdb_file_rewind,
 	set_gdb_file_rewind, gdb_file_put_ftype, gdb_file_put,
 	set_gdb_file_put): Declare.
	
	* utils.c (gdb_file_new): Initialize ``rewind'' and ``put''.
	(struct gdb_file): Add to_rewind and to_put.
	(null_file_put, null_file_rewind, gdb_file_put, gdb_file_rewind,
 	set_gdb_file_put, set_gdb_file_rewind): New functions.
	(tui_file_rewind, tui_file_put): New functions.
	(tui_file_new): Add rewind and put.

Fri Jun 11 15:10:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_push_arguments): Fix order of arguments passed
 	to store_address.

Fri Jun 11 10:31:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (tty_input): Change array to pointer.
 	(_initialize_remote): Call build_remote_gdbarch_data.
	(build_remote_gdbarch_data): New function. Allocate space for
 	tty_input.
	(readsocket, readtty): Delete extern declaration of tty_input.

1999-06-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (gdb_readline2): Call the command handling function
 	via the input_handler pointer.
	(change_line_handler): When turning off editing, set input_handler
 	as well.

	* utils.c (prompt_for_continue): If running asynchronously, call
 	async_request_quit, instead of request_quit.

	* tracepoint.c (read_actions): If running asynchronously, set the
 	signal handler for STOP_SIGNAL to handle_stop_sig.

	* top.h: (source_line_number, source_file_name, source_error,
 	source_pre_error, history_expansion_p, server_command): export for
 	use of event-top.c.

	* event-top.c: Include top.h and terminal.h.
	(instream): Remove extern declaration.
	(handle_sigint, handle_sigquit, handle_sighup, handle_sigfpe,
 	handle_sigwinch, async_do_nothing, async_disconnect,
 	async_float_handler, async_stop_sig): Make static.
	(async_request_quit, async_do_nothing, async_disconnect,
 	async_float_handler, async_stop_sig): Add gdb_glient_data
 	argument.
	(handle_stop_sig): New function.
	(sigtstp_token): New variable.
	(sigint_token, sigquit_token, sigfpe_token, sigwinch_token):
 	Change their type tp PTR.
	(mark_async_signal_handler_wrapper): New function.
	(setup_event_loop): Initialize all the variables used by readline
 	only if not already done while reading the .gdbinit file.  Display
 	the initial gdb prompt, if .gdbinit took care of setting things up
 	for readline.
	(change_line_handler): When turning on the use of readline,
 	initialize input_handler as well.
	(command_line_handler): Set up the signal handler for STOP_SIGNAL
 	to be handle_stop_sig.
	(async_init_signals): Remove coercion of signal handlers in calls
 	to create_async_signal_handler.  Initialize token for stop signal.
	(handle_sigint): Call async_request_quit using one argument.
	(handle_sigint, handle_sigquit, handle_sighup, handle_sigfpe,
 	handle_sigwinch): Call mark_async_signal_handler_wrapper instead
 	of mark_async_signal_handler.

	* event-loop.h: Add extern declarations for handle_stop_sig,
 	async_command_editing_p, async_annotation_suffix,
 	new_async_prompt, the_prompts.

	* top.c (command_line_input): Set the signal handler to be
 	handle_stop_sig, in case gdb is running asynchronously.
	(get_prompt): Return the top of the prompt stack if running
 	asynchronously.
	(set_prompt): Set the top of the prompt stack if running
 	asynchronously.
	(init_main): Move ``extern'' vars from here to event-loop.h.
	
1999-06-10  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* values.c (value_from_string): new function.  Make a value_ptr
	from a string, with storage in local GDB memory (not in inferior).
	* value.h (value_from_string): add prototype.
	* remote.c (remote_cisco_ops): New remote target, "target cisco".
	(init_remote_cisco_ops): New function, initialize new target.
	(remote_cisco_mourn, remote_cisco_wait, remote_cisco_open, 
	remote_cisco_close): New functions, implement new target cisco.
	(minitelnet, readtty, readsocket) New functions, implement the
	I/O pass-through mode for target cisco.
	(remote_wait): Detect special enhanced version of the 'S' packet
	for target cisco.  
	(remote_cisco_expand): Perform Cisco variant of RLL decoding.

1999-06-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (gdb_wait_for_event): Initialize num_found to 0.

	* top.c (print_prompt): Delete this function.

	From: Andrew Cagney  <cagney@b1.cygnus.com>

	* event-top.c (async_hook): Delete extern declaration.

	* defs.h: Replace ``async_hook'' with ``async_p''.
	* top.c (gdb_init, init_main, init_main, init_main, init_main):
 	Replace ``async_hook'' with ``async_p''.

	* main.c: Rename ``async'' to ``async_p''.
	(main): Add --noasync option.
	(main): Hook in the asynchronous event-loop based CLI using
 	command_loop_hook instead of async_hook. Delete call to
 	async_hook().

Thu Jun 10 21:14:16 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (mn10300_store_return_value,
 	mn10300_extract_struct_value_address,
 	mn10300_extract_return_value), config/mn10300/tm-mn10300.h: New
 	functions.
	* config/mn10300/tm-mn10300.h (EXTRACT_STRUCT_VALUE_ADDRESS,
 	STORE_RETURN_VALUE, EXTRACT_RETURN_VALUE): Update.
	(TARGET_MN10300): Delete macro.  Not used.

Thu Jun 10 20:04:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (mn10300_register_names): Make static.
	(STORE_STRUCT_RETURN): Do not modify SP.

	* config/mn10300/tm-mn10300.h(mn10300_register_name),
 	mn10300-tdep.c : New function.
	* config/mn10300/tm-mn10300.h (REGISTER_NAME): Update.
	* config/mn10300/tm-mn10300.h (mn10300_saved_pc_after_call),
 	mn10300-tdep.c: New function.
	* config/mn10300/tm-mn10300.h (SAVED_PC_AFTER_CALL): Update.

1999-06-09  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
   
        * rs6000-tdep.c (skip_prologue): Don't mistake a branch for a     
        subroutine call.        

1999-06-08  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Add 'N' response packet, which is a
	stop with signal number plus section offsets for .text, .data and
	.bss.  This is used by Cisco to indicate relocation offsets.
	(remote_cisco_section_offsets, remote_cisco_objfile_relocate):
	new files to support 'N' packet.  
	(remote_info_process): New function.  Implements the 
	"info remote-process" command, by means of which the remote target 
	can report anything it wants to about the remote process/app being 
	debugged.  
	(_initialize_remote): add info remote-proc command.  
	(remote_threads_info): New function for "info threads" command.  
	Attempts to use new query "qfThreadInfo" instead of the old 
	undocumented query.
	* exec.c (exec_set_section_offsets) new files to support 'N' packet.

Tue Jun  8 13:33:42 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* inferior.h (generic_target_read_pc, generic_target_write_pc,
 	generic_target_read_fp, generic_target_write_fp,
 	generic_target_read_sp, generic_target_write_sp): Declare new
 	functions.
	* findvar.c (generic_target_read_pc, generic_target_write_pc,
 	generic_target_read_fp, generic_target_write_fp,
 	generic_target_read_sp, generic_target_write_sp): New functions.
	(TARGET_READ_PC, TARGET_WRITE_PC, TARGET_READ_FP, TARGET_WRITE_FP,
 	TARGET_READ_SP, TARGET_WRITE_SP): Default to corresponding generic
 	function.
	(write_pc_pid, write_pc_pid, read_sp, write_sp, read_fp,
 	write_fp): Simplify.

	* gdbarch.c (verify_gdbarch): Always verify TARGET_PTR_BIT,
 	TARGET_SHORT_BIT, TARGET_INT_BIT, TARGET_LONG_BIT,
 	TARGET_LONG_LONG_BIT, TARGET_FLOAT_BIT, TARGET_DOUBLE_BIT,
 	TARGET_LONG_DOUBLE_BIT, TARGET_READ_PC, TARGET_WRITE_PC,
 	TARGET_READ_FP, TARGET_WRITE_FP, TARGET_READ_SP, TARGET_WRITE_SP,
 	USE_GENERIC_DUMMY_FRAMES, CALL_DUMMY_BREAKPOINT_OFFSET_P,
 	CALL_DUMMY_P, CALL_DUMMY_STACK_ADJUST_P, GET_SAVED_REGISTER,
 	REGISTER_CONVERTIBLE, PUSH_ARGUMENTS, PUSH_RETURN_ADDRESS,
 	FRAME_CHAIN_VALID.
	(GET_GDBARCH, SET_GDBARCH): Delete macros.  Implement functions
 	directly.
	* gdbarch.h, gdbarch.c: Call fatal() instead of abort().  Identify
 	the function / macro with a problem.  Always verify a architecture
 	attribute before returning it.
	* gdbarch.h, gdbarch.c (generic_register_convertible_not): New
 	function.

	* mips-tdep.c (mips_push_return_address): New function.
	* config/mips/tm-mips.h (PUSH_RETURN_ADDRESS): Define.

	* mips-tdep.c (mips_gdbarch_init): Initialize short_bit,
 	double_bit, long_double_bit, read_pc, write_pc, read_fp, write_fp,
 	read_sp, write_sp, frame_chain_valid, get_saved_register,
 	push_arguments, push_return_address, register_convertible,
 	call_dummy_p, use_generic_dummy_frames,
 	call_dummy_breakpoint_offset_p, call_dummy_stack_adjust_p,
 	call_dummy_words and sizeof_call_dummy_words.
	* config/mips/tm-mips.h: Don't define CALL_DUMMY when multi-arch.

1999-06-07  Keith Seitz  <keiths@cygnus.com>

	* v850ice.c (init_hidden_window): Do not rely on the existence of
	a gui for window creation. Return boolean status.
	(v850ice_open): Use boolean status of init_hidden_window.
	Allow any ICE execution command to run under CLI. Maybe one
	day gdb will use a real event loop and allow this code to run.
	* configure.tgt: Configure the v850 ice for all cygwin-hosted
	toolchains.

Mon Jun  7 23:37:26 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (EXTRA_FRAME_INFO): Delete.
	* mips-tdep.c (mips_init_extra_frame_info): Allocate saved_regs.
	(temp_saved_regs): Replace struct with a simple pointer.
	(set_reg_offset, mips32_heuristic_proc_desc, heuristic_proc_desc,
 	mips_init_extra_frame_info): Update.

Mon Jun  7 21:40:12 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (EXTRA_FRAME_INFO): Move elements from here.
	* mips-tdep.c (struct frame_extra_info): To here.

	* mips-tdep.c (mips_print_extra_frame_info, mips_find_saved_regs,
 	mips_init_extra_frame_info, mips_pop_frame): Update
	(mips_init_extra_frame_info): Allocate space for the extra info.

Mon Jun  7 21:08:50 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (mips_init_extra_frame_info), mips-tdep.c:
 	Rename init_extra_frame_info.  Add argument ``fromleaf''.

	* config/mips/tm-mips.h (mips_print_extra_frame_info),
 	mips-tdep.c: New function.
	(PRINT_EXTRA_FRAME_INFO): Update definition.

Mon Jun  7 20:11:07 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h, config/mips/tm-irix3.h,
 	config/mips/tm-tx19.h, config/mips/tm-tx19l.h,
 	config/mips/tm-tx39.h, config/mips/tm-tx39l.h: Rename macro
	REGISTER_NAMES to MIPS_REGISTER_NAMES.

	* config/mips/tm-mips.h (REGISTER_NAME): Define.
	* mips-tdep.c (mips_processor_reg_names): New static variable.
	(mips_register_name): New function.
	(mips_set_processor_type): Update mips_processor_reg_names.
	(mips_generic_reg_names): Initialize using MIPS_REGISTER_NAMES.

Sun Jun  6 11:09:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (PBUFSIZ): Re-define so that value is computed at
 	run-time.
	(MAXBUFBYTES): Re-define as a macro function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for REGISTER_BYTES.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

1999-06-05  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* symtab.c (decode_line_1): Accept filenames with spaces in
	'linespecs' when enclosed in double quotation marks and handle
	drive specification is DOS format (D:).

1999-06-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	* parse.c: Don't include <ctype.h> twice.

1999-06-04  David Taylor  <taylor@louisiana.cygnus.com>

	Sat May 15 12:16:09 1999  Per Bothner  <bothner@deneb.cygnus.com>

        * eval.c (evaluate_subexp_standard):  Remove Gilmore rant.
        (Of course C has "expected types", at least if you allow
        brace-initializer expressions - as in Gcc.)
        Remove NULLing out expect_type.  Do pass NULL_TYPE in place
        the incoming expect_type where appropriate.

Fri Jun  4 10:56:23 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Make it work for GCC compiled
	executables without end.o.  Clean up lots of mis-guided comments.

Fri Jun  4 17:10:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parser-defs.h (std_regs): Replace array with pointer.
	* parse.c (build_parse): Build the std_regs table according to the
 	standard registers available.
	(_initialize_parse): Register std_regs and num_std_regs as
 	architecture specific.
	* gdbarch.h, gdbarch.c: Add multi-arch support for SP_REGNUM,
 	FP_REGNUM, PC_REGNUM, NUM_REGS, REGISTER_NAME.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.
	
1999-06-03  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* thread.c: eliminate the target_thread_vector (functionality
	moved into the standard target vector).
	* gdbthread.h: eliminate target_thread_vector.  Move all related
	defines into remote.c, since they are no longer shared with thread.c.
	* remote.c: eliminate the target_thread_vector.
 	(remote_find_new_threads): change return type to void, consistent
	with the target vector table.  (cont_thread): rename continue_thread.
	(record_currthread): remove dead code.  (remote_thread_alive):
	clean up and simplify.  (threadref etc.): move definitions to here
	from gdbthread.h.  

1999-06-02  Jason Molenda  (jsm@bugshack.cygnus.com)

	* inftarg.c (child_create_inferior): Remove dead HPUX specific code
	which tries to find csh.
	* fork-child.c: Remove DEBUGGING predefine and conditionalized
	printfs.
	(fork_inferior): Remove dead HPUX specific code which assumes shell
	is csh.

	* hppa-tdep.c: Remove DEBUGGING and #if 0 debugging printfs.
	* parse.c: Ditto.
	* somread.c: Ditto.

	* gdbarch.h: Forward decl of struct value.

Thu Jun  3 10:12:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (do_d10v_pop_frame): Rename d10v_pop_frame.  Make
 	static.
	* d10v-tdep.c (d10v_pop_frame), config/d10v/tm-d10v.h: New
 	function.  Call generic_pop_current_frame.
	* config/d10v/tm-d10v.h (POP_FRAME): Update.
	* gdbarch.h, gdbarch.c (frame_num_args_unknown): New function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for POP_FRAME,
 	SKIP_PROLOGUE, INNER_THAN, DECR_PC_AFTER_BREAK,
 	FUNCTION_START_OFFSET, REMOTE_TRANSLATE_XFER_ADDRESS, FRAME_CHAIN,
 	FRAME_CHAIN_VALID, FRAME_SAVED_PC, FRAME_ARGS_ADDRESS,
 	FRAME_LOCALS_ADDRESS, FRAME_ARGS_SKIP,
 	FRAMELESS_FUNCTION_INVOCATION, REGISTER_BYTE, REGISTER_RAW_SIZE,
 	REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE, SAVED_PC_AFTER_CALL,
 	FRAME_NUM_ARGS, MAX_REGISTER_RAW_SIZE, MAX_REGISTER_VIRTUAL_SIZE,
 	REGISTER_SIZE.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.
	* config/d10v/tm-d10v.h (DMEM_START, IMEM_START, STACK_START,
 	ARG1_REGNUM, ARGN_REGNUM, RET1_REGNUM): Move definitions from
 	here.
	* d10v-tdep.c: To here.
	* config/d10v/tm-d10v.h (struct type): Move declaration from here.
	* gdbarch.h: To here.
	* config/d10v/tm-d10v.h (struct frame_info, struct
 	frame_saved_regs, struct type): Delete declarations.
	
1999-06-02  Robert Hoehne  <robert.hoehne@gmx.net>

	* go32-nat.c: go32_terminal_init, go32_terminal_inferior and
	go32_terminal_ours are new functions to save/restore the inferior`s
	stdin/stdout filemodes

1999-06-02  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Add Mark Kettenis, Jeff Law, and Philippe De Muyter
	as maintainers for Hurd, HP/UX, and COFF, respectively.

1999-06-02  Mark Kettenis  <kettenis@gnu.org>

	* gnu-nat.c (inf_continue): New function.
	(struct inf): Use `unsigned int' instead of `int' for bit-fields.
	Add new bit-field named `nomsg'.
	(inf_validate_procinfo): Renamed from inf_validate_stopped, all
	callers changed.  Also update the `nomsg' and `traced' fields of
	INF.
	(make_inf): Initialize INF->nomsg.
	(inf_cleanup): Reset INF->nomsg.
	(inf_detach): Call `inf_validate_procinfo'.  Call `inf_continue'
	instead of `inf_signal' if the inferior does not have a message
	port.
	(gnu_resume): Likewise.
	(gnu_create_inferior): Reset INF->nomsg in `attach_to_child'.
	Call `inf_validate_procinfo' after returning from `fork_inferior'.
	(gnu_attach): Update signal thread and tracing state.

	* config/i386/tm-i386gnu.h: Include "i386/tm-i386.h" instead of
	"i386/tm-i386v.h".
	(STACK_END_ADDR): Remove.
	(SIGCONTEXT_PC_OFFSET): New define.
	Include "tm-sysv4.h".

1999-06-02  J.T. Conklin  <jtc@redback.com>

	* config/tm-vxworks.h: New file, header for definitions common to
 	all vxWorks targets.
	* config/a29k/tm-vx29k.h, config/i960/tm-vx960.h,
 	config/m68k/tm-vx68.h, config/mips/tm-vxmips.h,
 	config/sparc/tm-vxsparc.h: Include tm-vxworks.h.

Wed Jun  2 17:37:03 1999  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (IMPORT_SHLIB): New unwind stub type.

1999-06-02  Christopher Faylor <cgf@cygnus.com>

	* configure.tgt: Alphabetically reorder some targets.

1999-06-02  Keith Seitz  <keiths@cygnus.com>

	* v850ice.c (v850ice_xfer_memory): Insert lost "break".

1999-06-02  Jim Blandy  <jimb@zwingli.cygnus.com>

	* rs6000-tdep.c (variants): Fix description of 750 register set.
	(Thanks to J. T. Conklin.)

Wed Jun  2 16:10:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	STORE_STRUCT_RETURN, STORE_RETURN_VALUE,
 	EXTRACT_STRUCT_VALUE_ADDRESS, USE_STRUCT_CONVENTION,
	FRAME_INIT_SAVED_REGS and INIT_EXTRA_FRAME_INFO.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* config/d10v/tm-d10v.h (FRAME_INIT_SAVED_REGS): Replace
 	FRAME_FIND_SAVED_REGS.
	(d10v_frame_init_saved_regs): Replace d10v_frame_find_saved_regs.
	* d10v-tdep.c (d10v_pop_frame, d10v_frame_chain,
 	d10v_frame_init_saved_regs): Update.
	* gdbarch.h: Disallow FRAME_FIND_SAVED_REGS when multi-arch.

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	D10V_MAKE_DADDR, D10V_MAKE_IADDR, D10V_DADDR_P, D10V_IADDR_P,
 	D10V_CONVERT_DADDR_TO_RAW and D10V_CONVERT_IADDR_TO_RAW.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* config/d10v/tm-d10v.h (EXTRA_FRAME_INFO): Delete.
	* d10v-tdep.c (struct frame_extra_info): Define.
	(d10v_init_extra_frame_info, d10v_pop_frame, d10v_frame_chain,
 	d10v_frame_find_saved_regs): Update.
	* gdbarch.h: Disallow EXTRA_FRAME_INFO when multi-arch.

Tue Jun  1 13:36:31 1999  Philippe De Muyter  <phdm@macqel.be>

	* config/m68k/tm-delta68.h (FRAME_NUM_ARGS): Macro prototype fixed.
	* config/m68k/tm-news.h, config/ns32k/tm-merlin.h: Ditto.
	* config/ns32k/tm-umax.h (FRAME_NUM_ARGS): Old macro definition
	removed; new macro prototype fixed.

Wed Jun  2 11:18:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	EXTRACT_RETURN_VALUE, PUSH_ARGUMENTS, PUSH_DUMMY_FRAME,
 	PUSH_RETURN_ADDRESS, POP_FRAME, FRAME_FIND_SAVED_REGS.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
 	REGISTER_CONVERT_TO_RAW.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

	* defs.h (REGISTER_NAME): Move compatibility definition from here.
	* gdbarch.h: To here.

	* frame.h, blockframe.c (generic_fix_call_dummy): New
 	stub function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for FIX_CALL_DUMMY.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

Tue Jun  1 20:06:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_gdbarch_init): Set get_saved_register.
	* config/d10v/tm-d10v.h: Update.
	
Tue Jun  1 19:50:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for TARGET_READ_PC,
 	TARGET_WRITE_PC, TARGET_READ_FP, TARGET_WRITE_FP, TARGET_READ_SP
 	and TARGET_WRITE_SP.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

Tue Jun  1 19:19:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (default_gdbarch): Set field GET_SAVED_REGISTER to
 	generic_get_saved_register.
	* gdbarch.c: Change update dispatch functions so that they check
 	for a NULL function pointer.

Tue Jun  1 19:19:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for TARGET_INT_BIT,
 	TARGET_CHAR_BIT, TARGET_SHORT_BIT, TARGET_FLOAT_BIT,
 	TARGET_DOUBLE_BIT and TARGET_LONG_DOUBLE_BIT.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.
	
Tue Jun  1 18:47:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parse.c (build_parse): New function.  Initialize
 	msym_text_symbol_type, msym_data_symbol_type and
 	msym_unknown_symbol_type.
	(_initialize_parse): Call build_parse.
	(_initialize_parse): Register variables msym_text_symbol_type,
 	msym_data_symbol_type as msym_unknown_symbol_type as
 	per-architecture.

Tue Jun  1 11:30:09 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (_initialize_d10v_tdep): Register d10v as an
 	architecture.
	(d10v_gdbarch_init): New function.
	* confg/d10v/tm-d10v.h (GDB_MULTI_ARCH): Define.

Tue Jun  1 10:45:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (REGISTER_CONVERTIBLE,
 	REGISTER_CONVERT_TO_RAW, REGISTER_CONVERT_TO_VIRTUAL): Convert
 	macros into functions.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_register_convertable,
 	d10v_register_convert_to_virtual, d10v_register_convert_to_raw):
 	The new functions.

1999-05-31  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* stack.c (print_args_stub): Add missing stream parameter.

Mon May 31 15:50:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	Fri May 28 16:51:00 1999  Martin Dorey  <martin.dorey@madge.com>:
        * valops.c, value.h (default_push_arguments): Fix order of
 	parameters to match PUSH_ARGUMENTS arguments.

Thu May 27 11:42:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (EXTRACT_STRUCT_VALUE_ADDRESS): Return 0.

	* valops.c (value_assign): Delete redundant test of
 	REGISTER_CONVERTIBLE.

Thu May 27 11:33:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/w65/tm-w65.h, config/tic80/tm-tic80.h, config/sh/tm-sh.h,
 	config/i386/tm-i386m3.h, config/i386/tm-go32.h,
 	config/i386/tm-cygwin.h, config/h8500/tm-h8500.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h: Delete definition of
 	macro NAMES_HAVE_UNDERSCORE.

Thu May 27 09:31:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (EXTRACT_STRUCT_VALUE_ADDRESS,
 	EXTRACT_STRUCT_VALUE_ADDRESS_P): Provide default definitions.
	* values.c (value_being_returned): Use
 	EXTRACT_STRUCT_VALUE_ADDRESS when EXTRACT_STRUCT_VALUE_ADDRESS_P.

Wed May 26 13:51:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (tui_file_new, tui_file_delete, tui_fileopen): New
 	functions.
	(tui_file_isatty): Rename gdb_file_isatty.
	(gdb_file_init_astring): Use tui_file_new to create stream.
	(gdb_file_get_strbuf, gdb_file_adjust_strbuf): Call gdb_file_data
 	to access the tui_stream.
	(tui_file_flush): Rename gdb_flush. Call gdb_file_data to access
 	the tui_stream. Pass FILE and not STREAM down.
	
	* utils.c (struct stdio_file, stdio_file_flush, stdio_file_fputs,
 	stdio_file_isatty, stdio_file_delete, stdio_file_new,
 	stdio_fileopen): Define type and functions.  Implement a simple
 	STDIO based gdb_file.
	(struct gdb_file, gdb_file_new, gdb_file_delete, null_file_isatty,
 	null_file_flush, null_file_fputs, null_file_delete, gdb_file_data,
 	set_gdb_file_flush, set_gdb_file_isatty, set_gdb_file_fputs,
 	set_gdb_file_data, fputs_unfiltered, gdb_flush, gdb_file_isatty):
 	Define type and functions.  Implement virtual functions for
 	gdb_file.

	* defs.h (struct gdb_file): Declare.
	(GDB_FILE): Change type to struct gdb_file. Deprecate.
	(gdb_file_flush_ftype, gdb_file_fputs_ftype,
 	gdb_file_isatty_ftype, gdb_file_delete_ftype): Add function type
 	declarations.
	
	* defs.h (set_gdb_file_flush, set_gdb_file_fputs,
 	set_gdb_file_isatty, set_gdb_file_data, gdb_file_new,
 	gdb_file_delete, gdb_file_data, stdio_fileopen, tui_fileopen): Add
 	function declarations.
	(gdb_fopen): Re-implement. Call stdio_file_new.
	(gdb_fclose): Re-implement. Call gdb_file_delete.
	
	* main.c (tui_file_fputs): Rename fputs_unfiltered.  Use
 	gdb_file_data to gain access to the tui_stream data.  Use FILE
 	instead of STREAM where applicable.
	(main): Create gdb_stdout and gdb_stderr using tui_fileopen.
	
	* defs.h (struct tui_stream): Add field ts_magic.
	* utils.c (tui_file_magic): Local variable.
	(tui_file_new): Set field ts_magic.
	(tui_file_delete, tui_file_isatty, gdb_file_init_astring,
 	gdb_file_get_strbuf, gdb_file_adjust_strbuf, tui_file_flush):
 	Verify ts_magic.

1999-05-25  Jim Blandy  <jimb@zwingli.cygnus.com>

 	* breakpoint.c (insert_breakpoints, remove_breakpoint,
	breakpoint_1): Add a 'default' case, which prints a warning
	message, to remove EGCS warnings.

1999-05-25  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (gdb_file_adjust_strbuf): Take into account the
	possibility that the buffer has not been allocated yet.

Tue May 25 16:05:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
 	REGISTER_CONVERT_TO_RAW): Provide default definition.

	* valops.c (value_assign), infcmd.c (do_registers_info), findvar.c
 	(value_from_register, value_of_register): Remove #ifdef
 	REGISTER_CONVERTIBLE.  Assume REGISTER_CONVERTIBLE etc defined.

Tue May 25 16:18:25 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote-d10v.c (d10v_eva_prepare_to_trace,
 	d10v_eva_get_trace_data), remote-sim.c (_initialize_remote_sim):
 	Add declaraton.  Make static.

	* remote-d10v.c (_initialize_remote_d10v), d10v-tdep.c
 	(_initialize_d10v_tdep): Add declaration.
	* config/d10v/tm-d10v.h (d10v_frame_chain): Add declaration.

Tue May 25 15:20:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c (init_proc, proc_remove_foreign): Delete function.
	* inftarg.c (child_mourn_inferior): Update. Delete call to
 	proc_remove_foreign().
	* top.c (gdb_init): Update. Delete call to init_proc().

	* utils.c (pollquit, fmthex, hexlate): Delete function.

Tue May 25 13:01:43 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c (gdb_init): Move declaration from here.
	* top.h: To here.
	
	* defs.h (init_page_info): Add declaration.

	* top.c (initialize_utils): Move declaration from here.
	* defs.h: To here.

	* infcmd.c (target_map_name_to_register): Move declaration from
 	here.
	* parser-defs.h: To here.

	* c-typeprint.c (cp_type_print_method_args), target.c
 	(nosupport_runtime, normal_target_post_startup_inferior): Add
 	declaration.  Make static.

Tue May 25 13:53:23 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c: Include "event-loop.h".
	* Makefile.in (main.o): Add dependency.

	* top.h (setup_event_loop, async_init_signals), top.c
 	(set_async_editing_command, set_async_annotation_level,
 	set_async_prompt), event-loop.c (display_gdb_prompt): Move
 	declarations from here.
	* event-loop.h: To here.
	
	* event-loop.h (delete_async_signal_handler): Add function
 	declaration.

	* event-top.c (change_annotation_level, command_handler): Add
 	declaration.  Make static.

Tue May 25 12:44:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* tracepoint.c (free_actions_list, add_register): Add declaration.
  	Make static.
	(free_actions_list_cleanup_wrapper): New function.  Wraps
 	free_actions_list for make_cleanup.
	(trace_start_command): Pass free_actions_list_cleanup_wrapper
 	instead of free_actions_list to make_cleanup.
	(_initialize_tracepoint): Add extern declaration.

Tue May 25 12:23:39 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* jv-typeprint.c (java_type_print_base, jv-valprint.c
 	(java_print_value_fields): Add static declaration.

	* jv-lang.c (java_lookup_type, get_java_utf8_name,
 	java_lookup_type): Add static declaration.
	(get_java_class_symtab, java_class_is_primitive,
 	java_value_string): Add declaration. Make static.
	(java_rerun_cleanup): Add extern declaration for this stub
 	function.
	
Tue May 25 12:06:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: When multi-arch, check that REGISTER_NAMES was not
 	defined.

Mon May 24 16:16:29 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* inflow.c (_initialize_inflow), annotate.c
 	(_initialize_annotate), os9kread.c (_initialize_os9kread),
 	serial.c (_initialize_serial), nlmread.c (_initialize_nlmread),
 	f-valprint.c (_initialize_f_valprint), cp-valprint.c
 	(_initialize_cp_valprint), typeprint.c (_initialize_typeprint),
 	complaints.c (_initialize_complaints), scm-lang.c
 	(_initialize_scheme_language), m2-lang.c
 	(_initialize_m2_language), dbxread.c (_initialize_dbxread),
 	f-lang.c (_initialize_f_language), ch-lang.c
 	(_initialize_chill_language), c-lang.c (_initialize_c_language),
 	corefile.c (_initialize_core), stabsread.c
 	(_initialize_stabsread), mipsread.c (_initialize_mipsread),
 	elfread.c (_initialize_elfread), coffread.c
 	(_initialize_coffread), maint.c (_initialize_maint_cmds),
 	demangle.c (_initialize_demangler), maint.c
 	(_initialize_maint_cmds), language.c (_initialize_language): Add
 	external declaration.

Mon May 24 10:04:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.h, config/tahoe/tm-tahoe.h,
 	config/rs6000/tm-rs6000.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/pyr/tm-pyr.h, config/pa/tm-hppa.h,
 	config/ns32k/tm-merlin.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/mips/tm-mips.h,
 	config/m88k/tm-m88k.h, config/m68k/tm-news.h,
 	config/m68k/tm-delta68.h, config/m68k/tm-isi.h,
 	config/m68k/tm-m68k.h, config/m32r/tm-m32r.h,
 	config/i960/tm-i960.h, config/i386/tm-i386v.h,
 	config/i386/tm-i386.h, config/h8500/tm-h8500.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h,
 	config/convex/tm-convex.h, config/arc/tm-arc.h,
 	config/arm/tm-arm.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Re-write definition of FRAME_NUM_ARGS so
 	that it returns NUM_ARGS as a result instead of setting a variable
 	as a side effect.

	* ns32k-tdep.c (merlin_frame_num_args), tahoe-tdep.c
 	(tahoe_frame_num_args), vax-tdep.c (vax_frame_num_args),
 	m68k-tdep.c (news_frame_num_args, delta68_frame_num_args,
 	isi_frame_num_args), convex-tdep.c (convex_frame_num_args): New
 	functions.

	* stack.c (print_args_stub): Update use of FRAME_NUM_ARGS.

Mon May 24 11:57:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_xfer_memory): Re-write with assumption that
 	REMOTE_TRANSLATE_XFER_ADDRESS is defined.  Pass targ_addr and
 	targ_len by reference.
	(REMOTE_TRANSLATE_XFER_ADDRESS): Provide default definition.
	
	* remote-d10v.c (remote_d10v_translate_xfer_address): Update.
	* config/d10v/tm-d10v.h (REMOTE_TRANSLATE_XFER_ADDRESS): Update.

Mon May 24 12:10:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* value.h (default_push_arguments): Add function declaration.

	* alpha-tdep.c (alpha_about_to_return), gdbarch.c (verify_gdbarch,
 	arch_ok, set_arch), command.c (find_cmd), infrun.c
 	(follow_inferior_fork, follow_fork, follow_vfork,
 	set_schedlock_func, is_internal_shlib_eventpoint,
 	stopped_for_internal_shlib_event, stopped_for_shlib_catchpoint,
 	xdb_handle_command), infcmd.c (run_no_args_command, go_command),
 	symfile.c (add_filename_language, set_ext_lang_command,
 	info_ext_lang_command, init_filename_language_table), symtab.c
 	(overload_list_add_symbol), defs.h (default_get_saved_register),
 	ax-general.c (grow_expr, append_const, read_const, generic_ext):
 	Ditto.

	* infrun.c (currently_stepping): Ditto.  Make static.

	* valops.c (hand_function_call): Explictly type static variable
 	``checked''.

Mon May 24 08:36:18 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_breakpoint_from_pc, d10v_register_name,
 	d10v_register_byte, d10v_register_raw_size,
 	d10v_register_virtual_size, d10v_register_virtual_type,
 	d10v_make_daddr, d10v_make_iaddr, d10v_daddr_p, d10v_iaddr_p,
 	d10v_convert_iaddr_to_raw, d10v_convert_daddr_to_raw,
 	d10v_store_struct_return, d10v_store_return_value,
 	d10v_extract_struct_value_address, d10v_frame_saved_pc,
 	d10v_frame_args_address, d10v_frame_locals_address,
 	d10v_saved_pc_after_call): New functions.
	
	* config/d10v/tm-d10v.h (REGISTER_BYTE, REGISTER_RAW_SIZE,
 	REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE, STORE_STRUCT_RETURN,
 	D10V_MAKE_DADDR, D10V_MAKE_IADDR, D10V_DADDR_P, D10V_IADDR_P,
 	D10V_CONVERT_DADDR_TO_RAW, D10V_CONVERT_IADDR_TO_RAW,
 	STORE_STRUCT_RETURN, STORE_RETURN_VALUE,
 	EXTRACT_STRUCT_VALUE_ADDRESS, SAVED_PC_AFTER_CALL, FRAME_SAVED_PC,
 	FRAME_ARGS_ADDRESS): Re-define using new functions.

	* config/d10v/tm-d10v.h (BREAKPOINT_FROM_PC): Replace BREAKPOINT.
	(REGISTER_NAME): Replace REGISTER_NAMES.

	* utils.c (core_addr_lessthan, core_addr_greaterthan): New
 	functions.
	* defs.h (core_addr_lessthan, core_addr_greaterthan): Declare.
	
Sat May 22 16:44:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (n_spaces): Handle case where first call has N equal to
 	zero.
	(print_spaces): Use n_spaces.

Fri May 21 11:23:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* valops.c (value_push): Remove conditional definition based on
 	absense of macro PUSH_ARGUMENTS.  Pass SP and STRUCT_ADDR by
 	reference.
	(default_push_arguments): New function.

	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sparc/tm-sparc.h, config/sparc/tm-sp64.h,
 	config/sh/tm-sh.h, config/rs6000/tm-rs6000.h, config/pa/tm-hppa.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/mips/tm-mips.h, config/m32r/tm-m32r.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h, config/arm/tm-arm.h,
 	config/alpha/tm-alpha.h: Update definition of PUSH_ARGUMENTS.
  	Return updated SP.

	* rs6000-tdep.c (rs6000_push_arguments): Rename push_arguments.

Thu May 20 12:18:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (get_prev_frame): Remove #ifdef around test for
 	FRAMELESS_FUNCTION_INVOCATION.
  	(get_prev_frame): Change FRAMELESS_FUNCTION_INVOCATION call to a
 	function invocation.
	* i386-tdep.c (i386_frame_num_args), stack.c (frame_info): Ditto.
	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/vax/tm-vax.h,
 	config/sparc/tm-sparc.h, config/sh/tm-sh.h,
 	config/rs6000/tm-rs6000.h, config/pa/tm-hppa.h,
 	config/mips/tm-mips.h, config/m88k/tm-m88k.h,
 	config/m68k/tm-m68k.h, config/i960/tm-i960.h,
 	config/i386/tm-sun386.h, config/i386/tm-i386v.h,
 	config/i386/tm-i386.h, config/h8500/tm-h8500.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h,
 	config/convex/tm-convex.h, config/arm/tm-arm.h,
 	config/arc/tm-arc.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Update FRAMELESS_FUNCTION_INVOCATION.
	* fr30-tdep.c (fr30_frameless_function_invocation), convex-tdep.c
 	(convex_frameless_function_invocation), arm-tdep.c
 	(arm_frameless_function_invocation): New functions.

1999-05-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Change dates in comments to ISO format.

	* event-top.c: Ditto.
	* event-loop.c: Ditto.
	* main.c: Ditto.
	
1999-05-19  Keith Seitz  <keiths@cygnus.com>

	* monitor.c (monitor_open): Only assume we have eight
	breakpoints if the monitor implementation does not tell
	us how many there really are. Alloc memory for these
	dynamically.
	(monitor_close): Free memory associated with breakpoint
	storage.
	(monitor_insert_breakpoint): Don't rely on a hardcoded
	number of breakpoints.
	(monitor_remove_breakpoint): Ditto.
	(NUM_MONITOR_BREAKPOINTS): Removed and replaced with monitor_ops
	specification.
	* monitor.h (struct monitor_ops): Add new member so that the
	individual monitor implementations can tell us how many
	breakpoints the monitor supports.

1999-05-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Philippe De Muyter  <phdm@macqel.be>:
	* event-loop.h: Include sys/wait.h only if HAVE_SYS_WAIT_H.
	
1999-05-17  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* top.c (print_command_line): Added the missing stream argument.
	* gdbcmd.h: Added argument to prototype.
	* command.c: Fixed call to include extra argument.
	* breakpoint.c: Same.

1999-05-14  Jim Blandy  <jimb@zwingli.cygnus.com>

	Targets are #defining PREPARE_TO_PROCEED with inconsistent numbers
	of arguments.  Since the Mach 3 target needs an argument, we'll
	make things consistent by adding an argument everywhere.
	* infrun.c (proceed): Pass an argument to PREPARE_TO_PROCEED.
	* config/pa/nm-hppah.h (PREPARE_TO_PROCEED): Add ignored argument
	to definition.

1999-05-11  Stan Shebs  <shebs@andros.cygnus.com>

	Fri Apr 23 13:27:34 PDT 1999  Toshiyasu Morita  (tm@netcom.com)
	* sh-stub.c: Mostly localize processor dependencies.

1999-05-10  Martin Hunt  <hunt@cygnus.com>

	* debugify.c, debugify.h: Removed because they are no
	longer used.

1999-05-08  Jim Blandy  <jimb@zwingli.cygnus.com>

	* infrun.c (_initialize_infrun): Handle TARGET_SIGNAL_LWP,
	TARGET_SIGNAL_WAITING, and TARGET_SIGNAL_CANCEL like SIGALRM or
	SIGIO --- pass them through to the inferior silently. 
	* target.h (enum target_signals): Add TARGET_SIGNAL_CANCEL, for
	Solaris's SIGCANCEL.
	* target.c (target_signal_from_host, target_signal_to_host): Add
 	mapping between SIGCANCEL and TARGET_SIGNAL_CANCEL.
	(signals): Add entry for SIGCANCEL.

1999-05-07  Stan Shebs  <shebs@andros.cygnus.com>

	After years of talking about it, finally break up the
 	wait_for_inferior loop.
	* infrun.c (struct execution_control_state): New struct,
	holds what used to be local vars governing wfi behavior.
	(init_execution_control_state): New function, was code in
	wfi that set up execution control state.
	(handle_inferior_event): New function, was body of main
	wfi loop.  Rewrite all local var references to go through
	the ecs structure passed into this function.
	(wait_for_inferior): Rewrite to set up and use execution control
 	state, and to call the new functions.
	(currently_stepping): New function, was the macro
 	CURRENTLY_STEPPING.
	(enum infwait_states): Rename from wfi_states.
	(infwait_normal_state, etc): Similarly.

Thu May  6 15:25:32 1999  Philippe De Muyter  <phdm@macqel.be>

	* coffread.c (coff_symtab_read): Call `record_line' with the line
	number of the ".bf" symbol only for one-line functions.

1999-05-06  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* Makefile.in: thread.o depends on target.h.

1999-05-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (change_line_handler): Use POLLIN instead of
	POLLRDNORM, for compatibility with Linux.
	(setup_event_loop): Ditto.

1999-05-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* mips-tdep.c (heuristic_proc_start): Rewrite cryptic error
	message about hitting the "heuristic fence post" with something
	that actually gives the user a fighting chance of figuring out
	why GDB is unhappy.
	
1999-05-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Include event-loop.h.
	(init_main): Add async version of 'set prompt' command.
	If in async mode define the editing and annotate set 
	commands in a different way.
	Initialize new variable asyn_command_editing_p to 1.
	Initialize the gdb prompt for async mode.
	(quit_cover): Make not static, for use by the event loop.
	(gdb_init): Call async_init_signals for the asynchronous case.
	(source_line_number, source_file_name, source_error,
	source_pre_error, history_expansion_p): Make non-static, so
	event-top.c can use them.
	(command_loop_marker): Make non-static, for use in event-top.c.
	Include event-loop.h.
	
	* top.h: Add prototype for async_init_signals.
	(SET_TOP_LEVEL): Move here from main.c.
	Add setup_event_loop to exported functions.

	* defs.h: Add async_hook to exported variables.

	* main.c (SET_TOP_LEVEL): Move to top.h, so that it is visible in 
	event-loop.c.  Add new global variable async to determine whether 
	we are running in async mode or not.
	(main): Add support for --async switch. Use async_hook to call
	setup_event_loop, when running in async mode.

	* event-top.c: New file. Gdb input line handler and command line
	handler for the event loop. Initialization of signal handlers.
	All the handled	signals have handlers called handle_<signalname>.
	Set up all the appropriate tokens for asynchronous signal 
	handling.
		
	* event-loop.h: New file. Data structures and definitions for the
	event loop.

	* event-loop.c: New file. Functions for the event loop 
	implementation.

	* config.in: Regenerate with autoheader.

	* configure.in (AC_CHECK_FUNCS): Add poll to list of functions 
	to be checked for. 

	* configure: Regenerate.
                                                        
	* Makefile.in (SFILES): Add new source files.
	(eventloop_h): Define.
	(COMMON_OBS): Add new object files.
	(event-loop.o): Add rule for target object.
	(event-top.o): Ditto.

1999-05-05  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior): Transform breaks and continues
	into gotos, move the target_wait to the very top of the loop.

1999-05-05  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* configure.in: Ensure that GDB links with libuser32.a under
	cygwin because libreadline requires it.
	* Makefile.in (WIN32LIBS): Substitute in result from configure
	* configure: regenerate

1999-05-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix from John Rigby.  Richard Henderson says it seems okay.
	* alpha-tdep.c (PROC_DUMMY_FRAME): As long as we're abusing fields
	of (proc)->pdr, we ought to at least abuse one large enough to
	hold the value we're trying to store in it.  iopt is only 32 bits
	wide; cbLineOffset is a bfd_vma.

1999-05-04  DJ Delorie  <dj@cygnus.com>

	DJGPP changes from Robert Hoehne  <robert.hoehne@gmx.net>

	* ser-go32.c: correct includes
	* source.c (openp): use ROOTED_P instead of SLASH_P
	* go32-nat.c: enhance exception and NPX handling
	(go32_kill_inferior): fix small bug killing inferior
	* configure.in: don't look for termcap with djgpp
	* configure: rebuild

1999-05-04  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c (main): Comment out unused and undocumented command line
 	option '-'.

1999-04-30  Jim Blandy  <jimb@zwingli.cygnus.com>

	Cleanup from Philippe De Muyter:
	* configure.in (BFD_NEED_DECLARATION): Check also for strstr.
	* acconfig.h (NEED_DECLARATION_MALLOC, NEED_DECLARATION_REALLOC,
	NEED_DECLARATION_FREE, NEED_DECLARATION_STRERROR): Define slots
	removed; they are now generated automatically.
	* gdb_string.h (strstr): Provide function prototype if
	NEED_DECLARATION_STRSTR.
	* configure, config.in: Regenerated.

Fri Apr 30 11:16:09 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* target.h (to_find_new_threads): new target ops vector.
	(target_find_new_threads): define.
	* target.c (update_current_target): inherit new target ops vector.
	* remote.c: Setup to_find_new_threads vector.
	* sol-thread.c: ditto.
	* thread.c (target_find_new_threads): rename: local_find_new_threads.
	(info_threads_command): call target_find_new_threads by new method,
	as a target ops vector, rather than previous macro definition method.
	* infcmd.c (go_command): define only if in xdb mode.
	* procfs.c: fix typo in comment.
	
Fri Apr 30 01:02:05 1999  Jeffrey A Law  (law@cygnus.com)

	* hppah-nat.c: Fix various coding convention violations introduced
	by HP.
	(child_acknowledge_created_inferior): Do nothing if PT_SET_EVENT_MASK
	is not defined.

1999-04-28  Stan Shebs  <shebs@andros.cygnus.com>

	* TODO: Add some items inspired by review of the manual.

Tue Apr 27 17:38:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/z8k/tm-z8k.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/pyr/tm-pyr.h, config/pa/tm-hppa.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/mips/tm-mips.h, config/m88k/tm-m88k.h,
 	config/m68k/tm-m68k.h, config/m32r/tm-m32r.h,
 	config/i960/tm-i960.h, config/i386/tm-i386.h,
 	config/h8500/tm-h8500.h, config/h8300/tm-h8300.h,
 	config/fr30/tm-fr30.h, config/d30v/tm-d30v.h,
 	config/d10v/tm-d10v.h, config/alpha/tm-alpha.h,
 	config/arm/tm-arm.h, config/a29k/tm-a29k.h, config/arc/tm-arc.h:
 	Change SKIP_PROLOGUE and SKIP_PROLOGUE_FRAMELESS_P macros so that
 	they return the new address.

	* sparc-tdep.c (sparc_skip_prologue), hppa-tdep.c
 	(hppa_skip_prologue), m88k-tdep.c
 	(m88k_skip_prologue), i960-tdep.c
 	(i960_skip_prologue), arc-tdep.c
 	(arc_skip_prologue), a29k-tdep.c (a29k_skip_prologue): Rename
 	skip_prologue function.

	* config/m68k/tm-isi.h: Convert macro SKIP_PROLOGUE into a new
 	function.
	* m68k-tdep.c (isi_skip_prologue): That new function.
	* vax-tdep.c (vax_skip_prologue), config/vax/tm-vax.h: Ditto.
	* tahoe-tdep.c (tahoe_skip_prologue), config/tahoe/tm-tahoe.h: Ditto.
	* rs6000-tdep.c (rs6000_skip_prologue), config/rs6000/tm-rs6000.h:
 	Ditto.
	* ns32k-tdep.c (umax_skip_prologue), config/ns32k/tm-umax.h: Ditto.
	* config/ns32k/tm-merlin.h, ns32k-tdep.c (merlin_skip_prologue):
 	Ditto.
	* config/m68k/tm-altos.h, m68k-tdep.c (altos_skip_prologue): Ditto.
	* config/convex/tm-convex.h, convex-tdep.c (convex_skip_prologue):
 	Ditto.

	* symtab.c (in_prologue, find_function_start_sal, decode_line_1),
 	infrun.c (wait_for_inferior), blockframe.c
 	(frameless_look_for_prologue): Update.
	* config/fr30/tm-fr30.h (FRAMELESS_FUNCTION_INVOCATION): Update.

1999-04-27  Stan Shebs  <shebs@andros.cygnus.com>

	* TODO: Remove item about DEBUG_EXPRESSIONS, no longer meaningful.

	* infrun.c (enum wfi_state): New enum.
	(wait_for_inferior): Merge all but one of the target_wait calls
	into a single call, add a wfi_state variable to encode which of
	the calls is being made.

1999-04-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix from Dave Holcomb.
	* hpux-thread.c (init_hpux_thread_ops): Use the right function
	name when initializing hpux_thread_ops.to_thread_alive.

	* coffread.c (coff_symfile_read): If we have a `.stab' section,
	but no `.stabstr' section, then print an error message; don't
	crash.

1999-04-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	1999-04-25  Mark Kettenis  <kettenis@gnu.org>

	* gnu-nat.c (gnu_attach): Call target_terminal_init before calling
	inf_set_traced, since that function calls code that might try to
	restore the terminal settings.

Mon Apr 26 08:55:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: More format cleanups.

Sun Apr 25 18:54:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (CALL_DUMMY_STACK_ADJUST_P): Replace
 	SIZEOF_CALL_DUMMY_STACK_ADJUST_P.
	(CALL_DUMMY_STACK_ADJUST): Replace
 	SIZEOF_CALL_DUMMY_STACK_ADJUST_P.
	* gdbarch.c (gdbarch_call_dummy_stack_adjust,
 	set_gdbarch_call_dummy_stack_adjust): Define.

Fri Apr 23 15:00:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (arch_ok): New function. Fix logic test for a valid
 	architecture.
	(set_arch): Use.

1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)

        * README: Note that readline is not installed as a part of
        make install.

Thu Apr 22 21:02:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c (GET_SAVED_REGISTER, get_saved_register):
 	Add.
	(struct gdbarch, verify_gdbarch, gdbarch_alloc, gdbarch_dump,
 	default_gdbarch): Update.

	* value.h (get_saved_register): Cleanup prototype.
	* findvar.c (default_get_saved_register): Rename function
 	get_saved_register.
	(GET_SAVED_REGISTER): Define as default_get_saved_register when
 	undefined.
	(get_saved_register): Always declare. Call GET_SAVED_REGISTER.

	* sparc-tdep.c (sparc_get_saved_register): Rename function
 	get_saved_register.
	* config/sparc/tm-sparc.h (GET_SAVED_REGISTER): Update.
	* a29k-tdep.c (a29k_get_saved_register): Rename function
 	get_saved_register.
	* config/a29k/tm-a29k.h (GET_SAVED_REGISTER): Update.

	* config/d10v/tm-d10v.h, config/powerpc/tm-ppc-eabi.h,
 	config/h8300/tm-h8300.h, config/m32r/tm-m32r.h,
 	config/mn10200/tm-mn10200.h, config/mn10300/tm-mn10300.h,
 	config/sh/tm-sh.h, config/tic80/tm-tic80.h, config/v850/tm-v850.h:
 	Update macro GET_SAVED_REGISTER so that it calls
 	generic_get_saved_register.
	* v850-tdep.c, tic80-tdep.c, sh-tdep.c, mn10300-tdep.c,
 	mn10200-tdep.c, m32r-tdep.c, h8300-tdep.c, rs6000-tdep.c: Delete
 	function get_saved_register.

Thu Apr 22 13:32:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c: Cleanup.  Re-order the definition of the ``struct
 	gdbarch'' initialization functions so that maintenance is more
 	straightforward.
	
Thu Apr 22 11:07:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c (use_generic_dummy_frames,
 	USE_GENERIC_DUMMY_FRAMES): Add.
	(struct gdbarch, verify_gdbarch, gdbarch_alloc, gdbarch_dump,
 	default_gdbarch): Update.

	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sh/tm-sh.h, config/powerpc/tm-ppc-eabi.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/m32r/tm-m32r.h, config/h8300/tm-h8300.h,
 	config/fr30/tm-fr30.h, config/d10v/tm-d10v.h: Give the
 	USE_GENERIC_DUMMY_FRAMES macro the value one.
	* inferior.h (USE_GENERIC_DUMMY_FRAMES): Default to a value of
 	zero.

	* blockframe.c (generic_find_dummy_frame,
 	generic_pc_in_call_dummy, generic_read_register_dummy,
 	generic_push_dummy_frame, generic_pop_current_frame,
 	generic_pop_dummy_frame, generic_frame_chain_valid,
 	generic_get_saved_register): Always define.

	* breakpoint.c (frame_in_dummy): Convert #ifdef
 	USE_GENERIC_DUMMY_FRAMES to runtime test.

	* rs6000-tdep.c (pop_frame, push_arguments, push_arguments,
 	push_arguments, frame_saved_pc, rs6000_frame_chain,
 	rs6000_frame_chain): Convert #ifdef USE_GENERIC_DUMMY_FRAMES to
 	runtime test.
	(get_saved_register): Always define.

Wed Apr 21 17:15:52 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (gdbarch_dump): Fix robustness check on
 	BELIEVE_PCC_PROMOTION_TYPE.

Wed Apr 21 15:39:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (TARGET_BYTE_ORDER_SELECTABLE_P): When multi-arch,
 	force selectable byte order.
	(CALL_DUMMY): Check for CALL_DUMMY definition when multi-arch. Are
 	incompatible.
	* gdbarch.c (verify_gdbarch): Check call_dummy_stack_adjust.
	
Wed Apr 21 14:45:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (gdbarch_update): Move dump-arch code from here.
	(gdbarch_dump): To here.  Make more robust.
	* gdbarch.h (gdbarch_dump): Add prototype.
	
	* gdbarch.c (enum set_arch): Declare.
	(set_arch): Add type parameter.  Only disable
 	``target_architecture_auto'' when set_arch_manual.
	(set_architecture, set_architecture_from_arch_mach,
 	set_architecture_from_file): Update.
	(set_arch): When ``gdbarch_debug'', gdbarch_dump() the current
 	architecture.

Wed Apr 21 10:48:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h (generic_pc_in_call_dummy):  Make signature consistent
 	with other pc_in_call_dummy functions by adding SP parameter.
	* blockframe.c (generic_pc_in_call_dummy): Update.  Pass SP and
 	not FP to generic_find_dummy_frame().
	* breakpoint.c (frame_in_dummy): Update.
	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sh/tm-sh.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/m32r/tm-m32r.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d10v/tm-d10v.h: Update PC_IN_CALL_DUMMY definition.

Tue Apr 20 12:15:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (GDB_TARGET_IS_D10V): Move from here.
	* gdbarch.h (GDB_TARGET_IS_D10V): To here.  Implement using
 	TARGET_ARCHITECTURE.
	(D10V_MAKE_DADDR, D10V_MAKE_IADDR): Provide fatal default
 	definitions.

	* valops.c (value_at): Replace #ifdef GDB_TARGET_IS_D10V code with
 	runtime test.
	(value_fetch_lazy): Ditto.
	* values.c (unpack_long): Ditto.
	* printcmd.c (print_frame_args): Ditto.

Sat Apr 17 15:39:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: Cleanup multi-arch comments.

Fri Apr 16 15:39:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: Provide definition if GDB_MULTI_ARCH > 1 or
 	GDB_MULTI_ARCH > 0 and no previous definition.
	* gdbarch.c (verify_gdbarch): Only verify a full multi-arch
 	target.

1999-04-15  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior) [HAVE_STEPPABLE_WATCHPOINT,
 	HAVE_NONSTEPPABLE_WATCHPOINT, HAVE_CONTINUABLE_WATCHPOINT]: Test
 	at runtime instead of compile time.

1999-04-14  Philippe De Muyter  <phdm@macqel.be>

	* breakpoint.c (maintenance_info_breakpoints): Function made
 	static to match previous prototype.

	* coffread.c (coff_record_line): Static function removed.
	(enter_linenos): Call `record_line' instead of `coff_record_line'.
	(FILE-LEVEL, coff_start_symtab, coff_end_symtab): `coff_record_line'
	-related stuff removed.
	(coff_symfile_read): Redundant statement removed.
	(coff_symtab_read): `record_line' is now called with the first line
	number of each function, given by the ".bf" symbol.  This solves
	the line-number bug for one-line functions.

Wed Apr 14 11:09:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (BELIEVE_PCC_PROMOTION_TYPE, BELIEVE_PCC_PROMOTION):
 	Add multi-arch definitions.
	* gdbarch.c (gdbarch_believe_pcc_promotion,
 	gdbarch_believe_pcc_promotion_type): New functions.
	(gdbarch_update): Update
	(struct gdbarch default_gdbarch): Update.

	* stabsread.c (BELIEVE_PCC_PROMOTION_TYPE): Provide default.
	(define_symbol): Change #if BELIEVE_PCC_PROMOTION_TYPE and #if
 	BELIEVE_PCC_PROMOTION to if().

1999-04-13  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define if we're
	on a Solaris host (of any architecture).
	* configure: Regenerated.

Wed Apr 14 08:23:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (SET_GDBARCH, GET_GDBARCH, FSET_GDBARCH): New macros.
	(gdbarch_byte_order, gdbarch_long_bit, gdbarch_long_long_bit,
 	gdbarch_ptr_bit, gdbarch_call_dummy_location,
 	gdbarch_call_dummy_address, gdbarch_call_dummy_address,
 	gdbarch_call_dummy_breakpoint_offset,
 	gdbarch_call_dummy_breakpoint_offset, gdbarch_call_dummy_length,
 	gdbarch_pc_in_call_dummy, dbarch_call_dummy_breakpoint_offset_p,
 	dbarch_call_dummy_p, dbarch_call_dummy_words,
 	dbarch_sizeof_call_dummy_words, dbarch_call_dummy_stack_adjust,
 	dbarch_call_dummy_stack_adjust_p): Define using new macros.
	
1999-04-13  Jason Molenda  (jsm@bugshack.cygnus.com)

	* rom68k-rom.c (init_rom68k_cmds): Fix an accidental substitution
	in monitor command strings, fix some formatting mistakes.

1999-04-13  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (arm-*-*): Whack another vestige of wingdb.

1999-04-12  James Ingham  <jingham@cygnus.com>

	* arm-tdep.c (arm_pop_frame): don't clobber the previous frame's
	stack pointer (stored in frame->framereg's register) BEFORE
	reading it.  This was causing "return" to behave very oddly.

1999-04-12  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Mention tic80.

1999-04-12  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* a68v-nat.c: Remove reference to 'extern char registers[]' throughout.
	* altos-xdep.c: Ditto.
	* arm-xdep.c: Ditto.
	* convex-xdep.c:  Ditto.
	* cxux-nat.c: Ditto.
	* hp300ux-nat.c: Ditto.
	* hppab-nat.c: Ditto.
	* i386aix-nat.c: Ditto.
	* i386mach-nat.c: Ditto.
	* m88k-nat.c: Ditto.
	* ptx4-nat.c: Ditto.
	* pyr-xdep.c: Ditto.
	* rs6000-nat.c: Ditto.
	* sun3-nat.c: Ditto.
	* sun386-nat.c: Ditto.
	* symm-nat.c: Ditto.
	* umax-xdep.c: Ditto.
	* i386v4-nat.c: Ditto. Also include inferior.h.
	* m68k-tdep.c: Ditto. Also include inferior.h.

Mon Apr 12 15:57:16 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_STACK_ADJUST, CALL_DUMMY_STACK_ADJUST_P):
 	Provide default definitions.
	* valops.c (hand_function_call): Replace #ifdef
 	CALL_DUMMY_STACK_ADJUST with if (CALL_DUMMY_STACK_ADJUST_P).

	* gdbarch.h (SIZEOF_CALL_DUMMY_STACK_ADJUST,
	(SIZEOF_CALL_DUMMY_STACK_ADJUST_P): Define
	* gdbarch.c (struct gdbarch): Add call_dummy_stack_adjust,
 	call_dummy_stack_adjust_p.
	(gdbarch_call_dummy_stack_adjust,
 	set_gdbarch_call_dummy_stack_adjust,
 	gdbarch_call_dummy_stack_adjust_p,
 	set_gdbarch_call_dummy_stack_adjust_p): New functions.
	(default_gdbarch): Update.

1999-04-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c, ax-gdb.h, ax-general.c, ax.h: Remove RCS Id strings.
	They're a pain.

	* GDB 4.18 released.
	* Makefile.in (VERSION): Bump to 4.18.1.

Thu Apr  8 16:04:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_P, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS): Define macros.
	(PUSH_DUMMY_FRAME, FIX_CALL_DUMMY, STORE_STRUCT_RETURN): Provide
 	fatal default.

	* inferior.h, gdbarch.c (call_dummy_words,
 	sizeof_call_dummy_words): Declare/Define variables.
	* valops.c (value_arg_coerce, find_function_addr,
 	call_function_by_hand): Always define.
	(hand_function_call): Rename CALL_DUMMY version of
 	call_function_by_hand.  Make static.  Add prototype.
	(hand_function_call): Update.  Allocate space for *dummy and
 	*dummy1 using alloca.
	* breakpoint.c (frame_in_dummy): Update.

	* gdbarch.h (CALL_DUMMY_P, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS): Define.
	* gdbarch.c (gdbarch_call_dummy_p, set_gdbarch_call_dummy_p,
 	gdbarch_call_dummy_words, set_gdbarch_call_dummy_words,
 	gdbarch_sizeof_call_dummy_words,
 	set_gdbarch_sizeof_call_dummy_words): New functions.
	(gdbarch_alloc, verify_gdbarch, gdbarch_update, struct
 	default_gdbarch): Update.

1999-04-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (monitor_read_memory): If a MO_GETMEM_NEEDS_RANGE 
	monitor, increase the end address by one byte.

1999-04-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* dbug-rom.c (init_dbug_cmds): Fix strings in 
        dbug_cmds.{step,clr_break,clr_all_break,fill} to send correct
	commands to the monitor.

1999-04-08  Keith Seitz  <keiths@cygnus.com>

	* m32r-stub.c (branchDestination): Undo overly ambitious
	sed script's conversion of cast from "char" to "unsigned char".
	Return offset should now be properly computed.

Thu Apr  8 14:13:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): New macro.
  	Non-zero when CALL_DUMMY_BREAKPOINT_OFFSET is valid.

	* infcmd.c (breakpoint_auto_delete_contents): Always define.
	(run_stack_dummy): Update.
	* infrun.c (wait_for_inferior): Update

	* gdbarch.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): New macro.
	* gdbarch.c (set_gdbarch_call_dummy_breakpoint_offset_p,
 	gdbarch_call_dummy_breakpoint_offset_p): New functions.
	(struct gdbarch, gdbarch_alloc, default_gdbarch, gdbarch_update):
 	Update.

1999-04-07  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Mark Alexander can no longer maintain
	h8300 and other embedded targets, sniff.

1999-04-06  Stan Shebs  <shebs@andros.cygnus.com>

	* inftarg.c (child_wait): Initialize execd_pathname.
	* target.c (debug_to_has_execd): Handle NULL execd_pathname.

	* solib.c (clear_solib): Don't call disable_breakpoints_in_shlibs,
	this breaks rerunning on sun4 native.

1999-04-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* config/sparc/nm-linux.h: Don't redefine PT_ATTACH to use the
 	deprecated PTRACE_SUNATTACH compatibility commands.  The
	definitions from <sys/ptrace.h> are fine.

1999-04-06  Martin Hunt  <hunt@cygnus.com>

	* annotate.h: Declare annotate_signal_hook.

	* annotate.c (annotate_signal): Add a call to 
	annotate_signal_hook().

1999-04-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dwarf2read.c (dwarf_decode_lines): Don't call record_line when
	we hit a DW_LNE_end_sequence instruction.

	* README: Note that GDB requires an ANSI C compiler, and explain
	how to get GCC.

	* README: Update.

1999-04-05  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Add more notes about user-visible changes.

Mon Apr  5 14:56:59 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* target.c (target_signal_to_string): check for signal
	number in range; otherwise if the target board returns
	a bogus signal number we might core dump (per David Taylor).

1999-04-05  David Taylor  <taylor@ryobi.cygnus.com>

	* utils.c (fputs_maybe_filtered): test value of
	pagination_enabled before paginating.

1999-04-02  James Ingham  <jingham@cygnus.com>

	* blockframe.c (get_prev_frame): Remove the redundant
	get_prev_frame_info.  It is now exactly the same as
	get_prev_frame, so there is no reason to have both functions.
 	
	* rs6000-tdep.c (rs6000_init_extra_frame_info): 
	  frame.h: 
	  a29k-tdep.c (init_extra_frame_info): 
	  config/a29k/tm-a29k.h: 
	  i386-tdep.c:
        Change all references to get_prev_frame_info to get_prev_frame.
	
1999-04-02  Stan Shebs  <shebs@andros.cygnus.com>

	* bcache.c, bcache.h, breakpoint.c, defs.h, expprint.c,
 	expression.h, gdbarch.c, gdbtypes.c, gdbtypes.h, gnu-nat.c,
 	gnu-nat.h, hppa-tdep.c, maint.c, monitor.c, objfiles.h, parse.c,
 	remote-mips.c, remote-sds.c, remote.c, sol-thread.c, symmisc.c,
 	symtab.h, target.c, top.c, typeprint.c, config/nm-gnu.h: Evaporate
 	the unused MAINTENANCE_CMDS conditional.

1999-04-02  James Ingham  <jingham@cygnus.com>

	* config/arm/tm-arm.h: (EXTRACT_STRUCT_VALUE_ADDRESS): This needs
	to call extract_address, not just cast the first 4 bytes, since
	the result will be passed to value_at which expects host-byte
	order. 

	* arm-tdep.c (arm_scan_prologue): The prologue_start address was
	directly &'ed with 0x03fffffc, rather than using
	ADDR_BITS_REMOVE.  This would cause inferior function calls to
	report the stack incorrectly on return.


1999-04-02  Keith Seitz  <keiths@cygnus.com>

	* top.c (ui_loop_hook): Change declaration. Now returns an int.
	* win32-nat.c (child_wait): Timeout WaitForDebugEvent and call
	the ui_loop_hook if there was no debug event.
	* top.c (ui_loop_hook): Change to return an int and include
	on all non-Cygwin builds.
	* v850ice.c: Change prototype of ui_loop_hook.
	(v850ice_wait): Update call to ui_loop_hook.
	* ser-unix.c (hardwire_readchar): Enable ui_loop_hook callbacks
	for non-Cygwin builds. Check return status of ui_loop_hook and
	return a timeout if told to detach. Add more documentation.
	* ser-tcp.c (tcp_readchar): Break up timeouts into one second
	intervals and call ui_loop_hook so that other UIs can
	keep up to date. If ui_loop_hook returns non-zero, then
	return SERIAL_TIMEOUT to facilitate detaching from the
	target.
	* remote.c (remote_interrupted_already): Remove.
	(remote_interrupt_twice): Revive.
	(remote_interrupt): Call remote_stop to interrupt the target
	and install remote_interrupt_twice to take more severe
	actions if this fails.
	(remote_stop): Only attempt to stop the target. This separates
	the command line from other UIs.
	* remote-sim.c (gdb_os_poll_quit): Add a call to ui_loop_hook,
	if it is defined.

1999-04-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix for cross-debugging on an AIX host from Johanna Svenningsson:
	* ax-gdb.h (enum axs_lvalue_kind): Remove trailing comma from enum.
	* ax.h (enum agent_op): Same.
	* tracepoint.h (enum actionline_type): Same.
	* config/xm-aix4.h: Add declaration for termdef.

1999-03-31  Stan Shebs  <shebs@andros.cygnus.com>

	* jv-lang.h (dynamics_objfile): Remove decl, conflicts with static
	decl in jv-lang.c.

	* infrun.c (follow_inferior_fork): Add ifdefs around
 	SOLIB_REMOVE_INFERIOR_HOOK.

Wed Mar 31 11:39:49 1999  David Taylor  <taylor@ryobi.cygnus.com>

	* valops.c (search_struct_field): revert HP merge change
	to this function -- it causes messages to be printed about
	member class ambiguity when the compiler is happy.
	(search_struct_field_aux): delete -- added as part of HP merge
	change; with aforementioned change it is no longer called.

1999-03-30  Stan Shebs  <shebs@andros.cygnus.com>

	Make more HPUX-specific code generic.
	* infrun.c: Include top.h.
	(MAY_SWITCH_FROM_INFERIOR_PID, MAY_FOLLOW_EXEC,
 	USE_THREAD_STEP_NEEDED): New native macros.
	(may_switch_from_inferior_pid, may_follow_exec,
	use_thread_step_needed): New globals.
	(follow_inferior_fork): Remove HPUXHPPA ifdef.
	(follow_exec): Ditto, also save run target and re-push instead of
 	always pushing child_ops, add ifdefs around SOLIB_RESTART and
 	SOLIB_CREATE_INFERIOR_HOOK.
	(wait_for_inferior): Use new globals instead of ifdefing HPUXHPPA,
	always use printf_filtered to report new threads.
	(normal_stop): Ditto.
	* target.h, target.c (find_run_target): New function.
	* config/pa/nm-hppah.h: Define new macros.

1999-03-29  Stan Shebs  <shebs@andros.cygnus.com>

	* top.h: Include setjmp.h here.
	* main.c, top.c: Don't include it here.

1999-03-29  Keith Seitz  <keiths@cygnus.com>

	* symtab.c (decode_line_1): Take out change which breaks symbols
 	which include class names and methods, e.g., "Foo::bar".

1999-03-26  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (i[3456]86-*-sysv4.2MP, i[3456]86-*-sysv4.2uw2*):
	Recognize both, as i[3456]86-*-sysv4.2*.
	(i[3456]86-*-sysv5*): Recognize.

	* infrun.c (wait_for_inferior): Remove most #if 0 segments.

Fri Mar 26 17:27:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (pc_in_call_dummy_on_stack): Fix.  Had copied code
 	from at_entry_point.

Thu Mar 25 19:30:02 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* gdbarch.c: Include all headers.
	(struct gdbarch), gdbarch.h (CALL_DUMMY_LOCATION,
 	CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LENGTH,
 	PC_IN_CALL_DUMMY): Add ``call_dummy_location'',
 	``call_dummy_length'', ``pc_in_call_dummy'',
 	``call_dummy_start_offset'', ``call_dummy_breakpoint_offset'' to
 	multi-arch framework.

	* inferior.h, blockframe.c (pc_in_call_dummy_before_text_end,
 	pc_in_call_dummy_after_text_end, pc_in_call_dummy_on_stack,
 	pc_in_call_dummy_at_entry_point): Convert PC_IN_CALL_DUMMY macro's
 	into functions.

Tue Mar 23 17:22:57 1999  Philippe De Muyter  <phdm@macqel.be>

	* remote.c, parse.c: Include ctype.h.

1999-03-24  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.host (mips-dec-mach3*): Use mipsm3 not mach3.

	Attempt to sort out SCO-related configs.
	* configure.host (i[3456]86-*-sysv4.2*): Use instead of
	i[3456]86-*-sysv4.2MP and i[3456]86-*-sysv4.2uw2*.
	(i[3456]86-*-sysv5*): Recognize.
	* configure.tgt (i[3456]86-*-sco3.2v5*, i[3456]86-*-sco3.2v4*):
 	Recognize.

Wed Mar 24 16:19:01 1999  Christopher Faylor <cgf@cygnus.com>

	* MAINTAINERS: Add DJ Delorie (dj@cygnus.com) as the djgpp
	maintainer.

Wed Mar 24 21:19:57 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* target.h (enum target_signal): Do not hardwire values of MACH
 	signals.

1999-03-14  Ken Raeburn  <raeburn@raeburn.org>

	* target.h (enum target_signal): Add TARGET_SIGNAL_INFO.
	* target.c (signals): Add SIGINFO description.
	(target_signal_from_host, target_signal_to_host): Translate
	SIGINFO to/from TARGET_SIGNAL_INFO.

Wed Mar 24 01:01:27 1999  Andrew Cagney  <cagney@sludge.cygnus.com>

	* rs6000-tdep.c (rs6000_software_single_step): Change SIGNAL to
 	unsigned int.

	From Rodney Brown <rodneybrown@pmsc.com>
	* target.h (enum thread_control_capabilities), breakpoint.h (enum
 	bptype), breakpoint.c (enum insertion_state_t): Strict ISO-C
 	doesn't allow trailing comma in enum definition.
	
Mon Mar 22 15:56:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (inside_entry_file, inside_entry_func): Convert #if
 	CALL_DUMMY_LOCATION to if.
	* valops.c (call_function_by_hand): Ditto.
	* infcmd.c (run_stack_dummy): Ditto.
	* inferior.h (CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET): Provide default.

1999-03-23  Jason Molenda  (jsm@bugshack.cygnus.com)

	* hppa-tdep.c (pa_register_look_aside): Remove CPU_HPPA_RISC_20
	check, test for presence of struct save_state_t and the ss_wide 
	member directly.
	* configure.in:  Remove CPU_HPPA_RISC_20 test.  Add tests for
	HAVE_STRUCT_SAVE_STATE_T and HAVE_STRUCT_MEMBER_SS_WIDE.
	* acconfig.h: Add HAVE_STRUCT_SAVE_STATE_T HAVE_STRUCT_MEMBER_SS_WIDE.
	* configure, config.in: Regenerated.

Mon Mar 22 13:25:13 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infttrace.c (proc_wait): rename to ptrace_wait.

1999-03-18  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dwarf2read.c: Correctly recognize location expressions that
	designate LOC_REF_ARG arguments.  Doc fixes.
	(isderef): New global.  (Yuck.)
	(dwarf2_complex_location_expr): New complaint.
	(read_func_scope): Reject frame_base attributes that use the
	`deref' opcode as too complex.
	(new_symbol): If both regoff and isderef are set, and the base
	register is the frame pointer, then it's a LOC_REF_ARG argument.
	(decode_locdesc): Recognize the `deref' opcode in location
	expressions.  Complain if it's not the last op in the expression.

	* config/fr30/tm-fr30.h (COERCE_FLOAT_TO_DOUBLE): #define this to
	be true, or else value_arg_coere won't respect the (accurate)
	information we have about whether a function is prototyped.

1999-03-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	* config/fr30/tm-fr30.h (STACK_ALIGN): Define this here, so
 	calling functions by hand with odd-sized arguments doesn't munge
 	the stack.

1999-03-17  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define for Solaris
	hosts--gdb doesn't support this yet.
	* configure: Regenerated.

1999-03-16  Keith Seitz  <keiths@cygnus.com>

        * remote.c (remote_binary_checked): New file global.
        (check_binary_download): New function to check if
        stub supports binary downloading that works with
        stubs that are not eight bit clean.
        (remote_write_bytes): Check for binary download capability
        and use it if available.
        Remove references to global remote_binary_length. What a hack.
        (putpkt_binary): New function.
	(putpkt): Call putpkt_binary.
	Use xor to escape trouble characters.
	* m32r-stub.c (bin2mem): Follow escape char convention change.

Tue Mar 16 01:11:33 1999  Andrew Cagney  <cagney@rhino.cygnus.com>

	* target.h (struct target_ops), target.c (debug_to_query),
 	remote.c (pack_hex_byte, remote_query): Promote char parameters to
 	int.  Stops compile problems with pedantic ISO-C compilers.
	
Tue Mar 16 15:29:04 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* go32-xdep.c: Remove, no longer used by anything.
	* Makefile.in: Remove references.

	* jv-lang.c, jv-lang.h (java_primitive_type): Declare argument
	as int instead of char.

Mon Mar 15 11:42:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (push_stack_item, pop_stack_item): New function.
 	(d10v_push_arguments): Use.
	
	From Martin M. Hunt  <hunt@cygnus.com>:
	* d10v-tdep.c (d10v_push_arguments): When arguments
	must be pushed onto the stack, they go on in
	reverse order.

1999-03-16  Jim Blandy  <jimb@zwingli.cygnus.com>

	* symtab.c (make_symbol_overload_list): Don't try to stuff minimal
 	or partial symbols into the overload list; we don't know their
 	types.  (Thanks to Rajiv Mirani.)

1999-03-15  Jason Molenda  (jsm@bugshack.cygnus.com)

	* acinclude.m4 (--with-itclconfig, --with-itkconfig, --with-tixconfig):
	Fix whitespace so --help messages line up.
	* configure.in (--with-cpu): Fix capitalization for --help messages.
	* configure, aclocal.m4: Regenerated.

Mon Mar 15 11:39:03 1999  Ian Carmichael  <iancarm@cygnus.com>

        Support building gdb w/o simulator:
        * configure.in: Support --disable-sim. Check for sim directory.
        * Makefile.in (IGNORE_SIM, IGNORE_SIM_OBS): New.
        * acconfig.h (WITH_SIM): Define.
        * configure, config.in: Regenerate.

Mon Mar 15 08:01:33 1999  Elena Zannoni  <ezannoni@cygnus.com>

        Patch from Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* top.c (read_command_lines): Reset control_level to 0.
	(define_command): Don't do it here.

Sun Mar 14 16:12:15 1999  Andrew Cagney  <cagney@rhino.cygnus.com>

	* hppah-nat.c (store_inferior_registers): Delete extern
 	registers[] declaration.

Sun Mar 14 19:17:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* infrun.c (write_inferior_status_register): New function. Provide
 	update access to an inf_status register buffer.  Only used by HP.
	* inferior.h (write_inferior_status_register): Add prototype.

	* hppa-tdep.c (push_dummy_frame): Use
 	write_inferior_status_register when hacking around a sleeping
 	inferior.  Accidently fix byte-order problem.

Sun Mar 14 16:40:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/pa/tm-hppa.h (PUSH_DUMMY_FRAME): Fix parameter. Address
 	not needed.

Fri Mar 12 13:11:48 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_write_bytes): fix 'X' packet protocol so that it
	can't overwrite the end of its buffer with escaped characters.

1999-03-12  Jim Blandy  <jimb@zwingli.cygnus.com>

        Alpha patches from Richard Henderson:

	* alpha-tdep.c (alpha_skip_prologue): Recognize subq.

	* config/alpha/tm-alpha.h (REGISTER_NAMES): No f31, but fpcr.
	(FPCR_REGNUM): New.
	(REGISTER_CONVERTIBLE): Don't convert fpcr.
	(REGISTER_VIRTUAL_TYPE): Don't make fpcr a double.

	* stabsread.c (define_symbol): Only consider live range extension
	if we have an open parenthesis.

1999-03-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* monitor.c (monitor_fetch_register): Print RDEBUG info correctly
 	when the register name is null.

Thu Mar 11 19:33:07 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior): Change #if DECR_PC_AFTER_BREAK
	uses to expressions, remove redundant extern decls.

Thu Mar 11 18:05:11 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infptrace.c (proc_wait): Rename to ptrace_wait.
	* inftarg.c (child_wait): call ptrace_wait instead of proc_wait.
	* inferior.h: Declare ptrace_wait instead of proc_wait.

Thu Mar 11 11:46:25 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* breakpoint.c (create_solib_load_unload_event_breakpoint,
 	create_fork_vfork_event_catchpoint, tcatch_command,
 	create_exception_catchpoint, break_at_finish_at_depth_command_1,
 	catch_fork_command_1, ep_skip_leading_whitespace,
 	break_at_finish_command_1, catch_exec_command_1,
 	catch_exception_command_1, stop_command, stopin_command,
 	stopat_command, ep_parse_optional_filename,
 	ep_find_event_name_end, ep_parse_optional_if_clause,
 	catch_fork_command_1), stack.c (show_and_print_stack_frame_stub,
 	print_stack_frame_stub, print_only_stack_frame_stub,
 	backtrace_command_1, backtrace_full_command, func_command),
 	valprint.c (print_decimal), source.c (print_source_lines_base):
 	Add prototype.

	* stack.c (print_stack_frame_stub, show_and_print_stack_frame_stub,
 	print_only_stack_frame_stub): Make param void*.

Wed Mar 10 19:33:28 1999  Geoffrey Noer  <noer@cygnus.com>

	* win32-nat.c: If old Cygwin Win32 API headers aren't being used,
	 define some gdb-specific defines that shouldn't have been in the
	 global headers.

Wed Mar 10 21:20:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* findvar.c (registers, register_valid): Replace array with pointer.
	(build_findvar): New function.  Allocate space for REGISTERS and
 	REGISTER_VALID.
	(_initialize_findvar): Call build_findvar.
	(_initialize_findvar): Register REGISTERS and REGISTER_VALID as
 	arch dependant.
	
	* inferior.h (registers, register_valid): Replace array with
 	pointer.

	* inferior.h (struct inferior_status): Move definition from here.

  	* infrun.c (struct inferior_status): To here.
	(struct inferior_status): Change ``stop_registers'' and
 	``registers'' to pointers.
	(xmalloc_inferior_status, free_inferior_status): New functions.
	(restore_inferior_status): Call free_inferior_status.
	(save_inferior_status): Call xmalloc_inferior_status.
	(discard_inferior_status): New function, discard inf_status
 	buffer.  Call free_inferior_status.
	
	* inferior.h (stop_registers): Replace array with pointer.
	* infrun.c (stop_registers): Update.
	(build_infrun): Initialize stop_registers.
	(_initialize_infrun): Call build_infrun.
	(_initialize_infrun): Register ``stop_registers'' as arch dependant.

Wed Mar 10 14:50:42 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* alpha-tdep.c (alpha_linux_sigtramp_offset): Only compile when
 	LINUXALPHA target. Hack.

	* infrun.c (set_follow_fork_mode_command): Make static.  Add
 	prototype.
	* tracepoint.c (add_register): Ditto.
	* valprint.c (strcat_longest): Comment out.  Does not appear to be
 	used.
	* valops.c (find_method_list): Make static.  Add prototype.
	* thread.c (target_find_new_threads): Make static.  Add prototype.
	* stack.c (stack_publish_stopped_with_no_frame,
 	select_and_maybe_print_frame): Comment out.  Does not appear to be
 	used.
	(current_frame_command): Add prototype.
	* breakpoint.c (break_at_finish_command,
 	break_at_finish_at_depth_command, tbreak_at_finish_command): Make
 	static.  Add prototype.
	* findvar.c (read_relative_register_raw_bytes_for_frame): Ditto.

Wed Mar 10 23:38:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

 	* corefile.c (registers): Delete redundant variable declaration.
	* inferior.h (run_stack_dummy): Change array argument to pointer.
	* infcmd.c (run_stack_dummy): Update.
	* value.h (value_being_returned): Change RETBUF to a pointer.
	* values.c (value_being_returned): Update.

Wed Mar 10 11:08:16 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* source.c (list_command): GCC suggested explicit braces to avoid
 	ambiguous `else'.

	* jv-typeprint.c: Include "c-lang.h".
	* Makefile.in (jv-typeprint.o): Add dependency.
	* jv-valprint.c: Include "gdbcore.h", "annotate.h".
	* Makefile.in (jv-valprint.o): Add dependencies.
	* objfiles.c: Include "breakpoint.h".
	* Makefile.in (objfiles.o): Add dependency.
	* main.c: Include <unistd.h>.
	* parse.c: Include <ctype.h>.
	* remote.c: Include <ctype.h>.
	* ser-tcp.c: Include <unistd.h>.
	* ax-general.c: Include "value.h".
	* Makefile.in (ax-general.o): Add dependency.

	* alpha-tdep.c (alpha_push_arguments): Make ``i'' an int instead
 	of a register.
	* frame.h (show_and_print_stack_frame): Add function prototype.
	* language.h (language_enum): Add function prototype.
	* value.h (find_overload_match): Add function prototype.

	* defs.h, utils.c (subset_compare): Rename subsetCompare. Add
 	prototype.
	* stack.c (backtrace_command): Update.

Wed Mar 10 13:58:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Check for <sys/select.h>
	* configure, config.in: Re-generate.
	* inflow.c: Conditionally include <sys/select.h>.

Wed Mar 10 13:44:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h (struct dummy_frame): Move from here.
	* blockframe.c (struct dummy_frame): To here.

	* blockframe.c (struct dummy_frame): Replace ``regs'' with pointer
 	``registers''.
	(generic_pop_dummy_frame): Free it.
	(generic_push_dummy_frame): Allocate dummy frame register buffer.

Wed Mar 10 11:08:16 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* thread.c (_initialize_thread): Delete redundant ``extern struct
 	cmd_list_element *cmdlist''.
	* printcmd.c (print_command_1): Ditto for ``objectprint'';

1999-03-09  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: New file, list of maintainers and areas they
 	maintain.

1999-03-09  Rodney Brown  <RodneyBrown@pmsc.com>

	Get working on UnixWare 2.1.1.
	* acconfig.h: Update for defines for procfs.c.
	* configure.in: Identify defines for procfs.c.
	* configure.host: i386-*-sysv4.2uw2* => i386v42mp
	* configure.tgt:  i386-*-sysv4.2uw2* => i386v42mp
	* configure, config.in: Regenerate.
	* procfs.c: Rename HAVE_NO_PRRUN_T to HAVE_PRRUN_T (autoconf
 	standard), wrap UNIXWARE difference in THE_PR_LWP macro for
 	legibility.
	* config/i386/tm-i386v42mp.h: Remove HAVE_PSTATUS_T,
 	HAVE_NO_PRRUN_T; now set by configure.

Tue Mar  9 16:29:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* i386-tdep.c (gdb_print_insn_i386): Abort when disassembly_flavor
 	undefined..

	* fr30-tdep.c (_initialize_fr30_tdep): Add prototype.  Fix
	coding style.

	* target.c (debug_to_enable_exception_callback,
 	debug_to_get_current_exception_event): Return result of call to
 	debug_target().

1999-03-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	Another HURD fix from Mark Kettenis:
	* gnu-nat.c: Include <string.h>.  Remove declaration of strerror.
	Include <bits/waitflags.h> instead of <waitflags.h> and define
	_SYS_WAIT_H to prevent the warning that we should not include it.
	(gnu_create_inferior): Change return type of attach_to_child to
	void.  Do not return INFERIOR_PID.
	(gnu_pid_to_exec_file): Change return type to char *.
	Return NULL.

	Fix for the HURD from Mark Kettenis:
	* configure.in: Add AC_PROG_AWK.  Needed by the	machine-dependent
	makefile fragments for the Hurd.
	* Makefile.in (AWK): Add.  Set by configure.
	* configure: Regenerated.

1999-03-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* infttrace.c (hppa_get_process_events): Removed. Function only
 	usable on HPUX 10 and above.  It is not called by any other part
 	of GDB.
	* hppah-nat.c (hppa_get_process_events): Ditto.
	(child_pid_to_exec_file): Only call ptrace with
 	PT_GET_PROCESS_PATHNAME if that symbol has been defined.
	* config/pa/nm-hppah.h: Don't set up prototypes et al for 
	hppa_get_process_events.

	* config/pa/hppahpux.mh (TERM_LIB): Do not initialize, let autoconf
	determine best library automatically.
	* config/pa/hpux1020.mh: Ditto.
	* config/pa/hpux1100.mh: Ditto.
	* configure.in (TERM_LIB): Also check for libHcurses.
	* configure: Regenerated.

Thu Mar  4 17:16:04 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-stub.c: add support for crc "Compare" command.

1999-03-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	* fr30-tdep.c (fr30_store_return_value): Allocate zeroes
 	dynamically, to save BSS space, and to remove assumptions about
	the size of the largest value we'll return.

	* config/fr30/tm-fr30.h (fr30_store_return_value): Use PARAMS in
	prototype.

Thu Mar  4 08:37:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* sh3-rom.c (sh3_supply_register, sh3_supply_register),
 	mips-tdep.c (mips_push_arguments), m32r-rom.c
 	(m32r_upload_command), m32r-tdep.c (decode_prologue), monitor.c
 	(longlong_hexchars), tracepoint.c (validate_actionline,
 	read_actions), mdebugread.c
 	(parse_symbol), jv-typeprint.c
 	(java_type_print_base, java_type_print_base), mdebugread.c
 	(parse_symbol), top.c (source_command), utils.c
 	(floatformat_to_doublest): GCC suggest explicit braces to avoid
 	ambiguous `else'.
	
	* tracepoint.c (map_args_over_tracepoints, trace_actions_command),
 	m32r-rom.c (m32r_supply_register), win32-nat.c
 	(handle_output_debug_string, child_continue), i960-tdep.c
 	(pop_frame), m32r-rom.c (m32r_upload_command): GCC suggested
 	parentheses around assignment used as truth value.

	* remote-sds.c (sds_wait), monitor.c (monitor_fetch_register),
 	ser-e7kpc.c, (dosasync_write), arc-tdep.c (arc_get_frame_setup):
 	GCC suggested parentheses around operands.

	* c-typeprint.c (c_type_print_base): GCC suggested enclosing
 	"while" expression in paren.

Wed Mar  3 18:14:33 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* sol-thread.c (save_inferior_pid): Cast the saved pid to void*.
	(restore_inferior_pid): Takes void* as required by make_cleanup.
  	Casts pid back to an int.

	* procfs.c (make_cleanup_close_proc_file,
 	close_proc_file_cleanup): Create a proc_file cleanup.
	(info_proc): Use.

	* defs.h (make_cleanup_freeargv): Helper function.  Establish
 	cleanup using freeargv.  Can not just typecast/pass freeargv as it
 	violates ISO-C.
	* utils.c (do_freeargv): Helper.
	(make_cleanup_freeargv): New function.

	* symmisc.c (maintenance_print_symbols,
 	maintenance_print_psymbols, maintenance_print_msymbols), symfile.c
 	(symbol_file_command), stack.c (backtrace_command), remote-sim.c
 	(gdbsim_create_inferior, gdbsim_open), remote-mips.c
 	(common_open), procfs.c (info_proc), infrun.c (handle_command,
 	xdb_handle_command), exec.c (exec_file_attach): Call
 	make_cleanup_freeargv.

1999-03-03  James Ingham  <jingham@cygnus.com>

	* i386-tdep.c (_initialize_i386_tdep): Set the inital value for
	disassembly flavor at startup, rather than hardcoding it.

1999-03-03  Jim Blandy  <jimb@zwingli.cygnus.com>

	Put return values in the right place.
	* fr30-tdep.c (fr30_store_return_value): New function.
	* config/fr30/tm-fr30.h (STORE_RETURN_VALUE): Call
	fr30_store_return_value.

Wed Mar  3 18:10:55 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* gdbtypes.c (virtual_base_list_aux): Return void.  Add prototype.

	* breakpoint.c (map_catch_names): Comment out unused function.

1999-03-02  Jason Molenda  (jsm@bugshack.cygnus.com)

	* hppa-tdep.c (pa_register_look_aside): Only refer to save_state_t
	structure on PA 2.0 systems.

1999-03-02  Stan Shebs  <shebs@andros.cygnus.com>

	From Gary Thomas  <gthomas@cygnus.co.uk>:
	* arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT,
	THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Use illegal instruction
	instead of SWI 24.
	* config/arm/tm-arm.h (CALL_DUMMY): Ditto.
	(IN_SIGTRAMP): Define.

1999-03-02  Nick Clifton  <nickc@cygnus.com>

	* findvar.c (store_address): Delete incorrect big endian
        code. 

Tue Mar  2 18:02:42 1999  Andrew Cagney  <cagney@chook>

	* configure.in (gdb_cv_os_cygwin): Compat.  Continue to reconize
 	__CYGWIN32__.

1999-03-01  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Move setting of gdb_cv_os_cygwin to before
	setting of TERM_LIB.  Check for __CYGWIN__ instead of __CYGWIN32__.
	* configure: Regenerated.

1999-03-01  DJ Delorie  <dj@cygnus.com>

	* configure.in: Change -cygwin32* to -cygwin*.
	* configure: Ditto.

1999-02-25  Stan Shebs  <shebs@andros.cygnus.com>

	* breakpoint.c (SOLIB_LOADED_LIBRARY_PATHNAME,
 	SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_CREATE_CATCH_LOAD_HOOK,
 	SOLIB_CREATE_CATCH_UNLOAD_HOOK): Supply default definitions.
	* infrun.c (SOLIB_IN_DYNAMIC_LINKER): Ditto.

1999-02-25  Keith Seitz  <keiths@cygnus.com>

	* corelow.c (core_close): Clear out solib state before
	closing the bfd associated with the core file.
	* solib.c (clear_solib): Mention that clear_solib requires
	an open BFD in order for disable_breakpoints_in_shlibs to
	determine whether breakpoints live in shared libraries.

1999-02-24  Jason Molenda  (jsm@bugshack.cygnus.com)

        * configure.in: Set CPU_HPPA_RISC_20 if the host CPU is a PA 2.0 
        processor.
        * acconfig.h: Add CPU_HPPA_RISC_20
        * config.in, configure: Regenerated.
        * hppa-tdep.c (pa_register_look_aside): Only refer to new 
        structure elements if we are on a PA2.0 system.
        * defs.h: Include limits.h.

Tue Feb 23 14:37:08 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (wait_for_inferior): Check scheduler_locking state 
	before resuming after a thread-specific breakpoint.

1999-02-23  Jim Blandy  <jimb@zwingli.cygnus.com>

	* aclocal.m4, config.in, configure: Regenerated with latest
	autotools.

Mon Feb 22 12:32:19 1999  Per Bothner  <bothner@cygnus.com>

	* jv-valprint.c (java_val_print):  Restore line that somehow got lost.

	* jv-valprint.c (java_print_value_fields):  Check for NULL type.

1999-02-21  Jim Blandy  <jimb@zwingli.cygnus.com>

	* tm-h8500.h, i386lynx-nat.c: Removed.  These files are long
	dead; it seems that they only appeared due to some CVS weirdness.
	If they appear again, we may need to distribute garlic and holy
	water.

1999-02-19  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (TERM_LIB): Move checking for TERM_LIB, substituting.
	* configure: Regenerated.

1999-02-19 Robert Hoehne (robert.hoehne@gmx.net)

        * configure.host (i[3456]86-*-msdosdjgpp*): New host.
        * configure.tgt (i[3456]86-*-msdosdjgpp*): New target.
        * go32-nat.c: New file, native DJGPP support.
        * config/i386/go32.mh: Rewrite for DJGPP (go32) host.
        * config/i386/go32.mt: New file, DJGPP (go32) target.
        * config/i386/nm-go32.h: New file.
        * config/i386/tm-go32.h: New file.
        * config/i386/xm-go32.h: Rewritten for current DJGPP.

1999-02-18  Jason Molenda  (jsm@bugshack.cygnus.com)

	* reply_mig_hack.awk, config/nm-gnu.h, config/alpha/nm-linux.h
	config/alpha/xm-alphalinux.h, config/alpha/xm-alphaosf.h
	config/i386/nm-i386sco5.h, config/i386/tm-fbsd.h, config/i386/tm-i386.h
	config/powerpc/nm-aix.h, config/powerpc/tm-macos.h
	config/powerpc/tm-ppc-aix.h, config/powerpc/xm-aix.h
	config/rs6000/tm-rs6000-aix4.h, testsuite/gdb.chill/tests1.ch
	testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp:
	Update FSF address in copyright notices.

1999-02-18  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Quote "$GCC" correctly.
	* configure: Regenerated.

1999-02-18  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dbxread.c (elfstab_build_psymtabs): Don't assume that there's a
	section named ".text", which has all the code in it.  Instead, look
	at all the sections in the file with the `code' flag set.
	(find_text_range): New function, that does all the work.

Thu Feb 18 17:50:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c (FP_REGISTER_DOUBLE): Conditionally define.

Fri Jan 29 16:51:11 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (return_value_location): New function. Merge/rewrite
 	of return-value code in mips_extract_return_value,
 	mips_store_return_value.  Stop buffer overflow when 64 bit value
 	in 32 bit registers.  Extract 64bit float from 32 bit register
 	pair of correct order.
	(mips_extract_return_value, mips_store_return_value): Call
 	return_value_location.  For store, ensure that remainder of
 	register is zero.
	
Wed Feb 17 10:10:27 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* gdbtypes.h (get_discrete_bounds):  Remove duplicate decl.

	* jv-typeprint.c (java_type_print_base):  Change fputs => fputs_filtered.
	
Mon Jan 25 18:30:57 1999  Per Bothner  <bothner@cygnus.com>

	* jv-lang.h (JAVA_OBJECT_SIZE):  Change from hard-wired constant.
	(java_primitive_type_from_name, get_java_object_header_size):  Declare.
	* jv-lang.c (java_class_from_object):  Use get_java_object_type.
	* jv-lang.c:  Update Class field names:  dtable->vtable,
	msize->method_count, nfields->field_count, bfsize->size_in_bytes,
	nmethods->method_count.
	(type_from_class):  Demangle array type names.
	(java_link_class_type):  Array type names are now demangled.
	(get_java_object_type):  If not defined yet, try looking it up.
	(get_java_object_header_size):  New function.
	(java_primitive_type_from_name):  New function.
	(java_demangled_signature_length, java_demangled_signature_copy): New.
	(java_demangle_type_signature):  Re-implement using above functions.
	(evaluate_subexp_java):  For UNOP_IND, call evaluate_subexp_java
	to evaluate subexp (not evaluate_subexp_standard).
	For BINOP_SUBSCRIPT update for new array type naming scheme.
	* jv-valprint.c (java_value_print):  Use java_class_from_object.
	Update array printing to new array type naming convention.
	(java_val_print):  Doing check_typedef when printing a pointer is
	is a waste of effort.  Also, handle TYPE_CODE_INT, to make sure
	Java bytes as not printed as C chars.

Fri Jan  8 16:58:22 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* blockframe.c (find_pc_sect_partial_function):  Search full symtabs as
	a last ditch effort (after the partial & minimal symtabs).
	* defs.h utils.c:  Fixup prototypes for vprintf_filtered,
	vfprintf_filtered, vfprintf_unfiltered and vprintf_unfiltered to return
 	ints to match their standard equivalents.
	* defs.h symtab.c top.c:  Create skip_prologue_hook to allow Java to
	control the prologue skipping process.
	* jv-typeprint.c (java_type_print_base):  Remove extern for
	jv_class_demangle, add new arg for objfile (NULL).
	* symtab.h:  Remove struct sourcevector and struct source.  Definately
	not needed.
	* values.c (value_virtual_fn_field):  Fixes code to handle new vtable
	debug info format.  Patch from marka.
	
Wed Dec 16 23:11:25 1998  Stu Grossman  <grossman@fencer.cygnus.com>

	* jv-lang.c (java_class_from_object java_class_is_primitive
	is_object_type):  Change dtable to vtable.
	* (java_primitive_type):  Change arg to type char.
	* (_initialize_java_language):  Make java_char_type be unsigned.
	* jv-lang.h:  Fixup prototypes.
	
Mon Dec  7 19:02:15 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* jv-valprint.c (java_value_print):  Fix printing of values where
	run time type != compile time type.

Fri Dec  4 15:23:38 1998  Stu Grossman  <grossman@fencer.cygnus.com>

	* Makefile.in:  Whack out m2-typeprint.c.
	* c-typeprint.c (c_type_print_varspec_suffix) typeprint.h:  Make this
	global.  It's needed by Java.
	* (c_type_print_base):  Whack prefix off of qualified method names
	(names with name spaces).
	* gdbtypes.h (struct cplus_struct_type):  Add bits for Java attributes.
  	Shrink voffset
	to 16 bits to compensate for added bits above (hopefully this is still
 	enough).
	* Add new accessor macros (TYPE_FND_FIELD_PUBLIC, ...) for all new
	attribute bits.
	* jv-typeprint.c (java_type_print_base):  Fix printing of method
	attributes.  Handle JVM style manglings.
	* (java_print_type):  Enable code type print varspec_suffix to allow
	array indices to print out.
	* jv-valprint.c (java_val_print):  Minor formatting.
	* m2-lang.c (m2_language_d):  Change m2_print_type to c_print_type.
	* stabsread.c (read_member_functions):  Save public and static attributes.
	
Wed Feb 17 15:32:57 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (watch_command_1): Reformat comment.

	* c-typeprint.c (c_type_print_base): Reformat comments.

1999-02-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	* Makefile.in (VERSION): Bump version to 4.17.2.

Tue Feb 16 15:48:20 1999  Edith Epstein  <eepstein@sophia.cygnus.com>
 
        * config/pa/nm-hppah.h: Added prototype declarations for
        hppa_enable_page_protection_events and 
        hppa_disable_page_protection_events.
 
        * inftarg.c (child_wait): Fixed code that checks whether
        or not the target program has done a fork/vfork. 
        related_pid  does not have a value unless the target 
        program has forked/vforked.
 
        * infttrace.c (hppa_insert_hw_watchpoint): Make sure that
        function always returns a value.
        (hppa_remove_hw_watchpoint): Make sure that function always
        returns a value.

Tue Feb 16 06:31:58 1999  Keith Seitz  <keiths@cygnus.com>

	* config/powerpc/tm-ppc-eabi.h: Do not define PC_IN_CALL_DUMMY,
	let the generic call dummy infrastructure do it.

Sun Feb 14 18:21:08 1999  Mark Alexander  <marka@cygnus.com>

	* config/sh/tm-sh.h (BELIEVE_PCC_PROMOTION): Define, so that
	coffread.c will correctly handle char or short function parameters.

1999-02-11  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure, aclocal.m4: Regenerate with correct version of aclocal.

1999-02-10  Syd Polk  <spolk@cygnus.com>

	* acinclude.m4: Fix for new location of itclConfig.sh and itkConfig.sh.
	* aclocal.m4: Regnerate.
	* configure: Regenerate.

1999-02-10  Jason Molenda  (jsm@bugshack.cygnus.com)

        * demangle.c: Fix comments to mention "set demangle-style"
        instead of "set demangle".
        Run through indent to fix minor indenting problems.

Wed Feb 10 17:53:09 1999  Bob Manson  <manson@charmed.cygnus.com>

	* i386-tdep.c (gdb_print_insn_i386): Add missing returns.

Wed Feb 10 13:17:21 1999  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Gould configuration obsolete:
	* configure.host, configure.tgt: Comment out Gould configs.
	* Makefile.in: Comment out Gould-related actions.
	* gould-xdep.c, gould-tdep.c, config/gould/*: Comment out.
	* NEWS: Mention obsolete status.

1999-02-09  DJ Delorie  <dj@cygnus.com>

	* sparcl-tdep.c: UDP download works in cygwin

1999-02-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* gnu-regex.c: Check ENABLE_NLS instead of HAVE_LIBINTL_H.
	* configure.in: Don't check for libintl.h.
	* configure, config.in: Regenerated.

Mon Feb  8 18:10:50 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Mention new X packet and PowerPC variant support.

1999-02-08  Nick Clifton  <nickc@cygnus.com>

	* configure.host: Add support for StrongARM host.
	* configure.tgt: Add support for StrongARM target.

Mon Feb  8 12:05:05 1999  David Taylor  <taylor@texas.cygnus.com>

	* dsrec.c (make_srec): Cast targ_addr to int in call to sprintf
 	otherwise on big endian machine with a bfd_vma of 64 bits,
 	*everything* gets loaded at location 0.

Mon Feb  7 10:05:43 1999  Frank Ch. Eigler  <fche@cygnus.com>

       * infrun.c (wait_for_inferior): Allow SIGTRAP to be "pass"ed
       to target program.

Fri Feb  5 16:46:14 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Add mentions of various new things.

Thu Feb  4 00:19:14 1999  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Move termcap determination later in the
	file to catch setting of cygwin flag.
	* configure: Regenerate.

Wed Feb  3 14:16:38 1999  Christopher Faylor <cgf@cygnus.com>

	* config/i386/cygwin.mh: Move TERMCAP test code to configure.in.
	* configure.in: Treat libtermcap.a detection as a special case
	when hosting on cygwin.
	* configure: Regenerate.

1999-02-03  Keith Seitz  <keiths@cygnus.com>
 
        * remote.c (remote_binary_download, remote_binary_length): New
        static globals for dealing with binary transmissions.
        (remote_write_bytes): Add support for binary downloads
        by shadowing the "M" packet with a new "X" packet. This
        defaults to ON; if the stub does not understand this, it
        will fall back to using "M".
        (putpkt): Add support for binary downloading.
        * monitor.c (monitor_expect): The mon2000 monitor
        on the MSA2000 will also emit random DC1/DC3 chars.
        * m32r-stub.c: Change all char's to unsigned char's
        to support binary downloading.
        (handle_exception): Add support for binary downloading
        via a new "X" packet.
        (getpacket): Do NOT strip eighth bit of incoming chars.
        Watch out for escaped characters in the incoming stream.
        (putpacket): Do NOT strip eighth bit of incoming chars.
        (bin2mem): New function to write binary data directly to
        memory.
        * m32r-rom.c: Add new "mon2000" target.

Tue Feb  2 18:40:29 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c (hpread_build_psymtabs): Coerce first arg
	passed to make_cleanup to the correct type.
	(hpread_quick_traverse): Change fifth arg to call to 
	hpread_end_psymtab to be 0. 
	Compare CURR_MODULE_END to 0 rather than NULL.
	Get rid of ifdef'ed out code.
	(scan_procs): Get rid of ifdef'ed out code.

	* somread.c (som_symfile_read): Coerce first argument passed to
	make_cleanup to the correct type.

Tue Feb  2 17:36:29 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c (do_pxdb): New function. Check whether the
	file needs to be processed by pxdb (an HP debug info massaging
	tool), if so call it.
	(hpread_build_psymtabs): Initialize scan_start to 0 and
	simplify flow of control.

	* somread.c (som_symfile_read): Add call to do_pxdb (), 
	in hp-psymtab-read.c.

	* symfile.c (symbol_file_add): Remove ifdef'ed out HPUX specific
	code.
	(symfile_bfd_open): Remove HPUXHPPA ifdef'ed code. Code is now
	in hp-psymtab-read.c.

1999-02-02  Martin Hunt  <hunt@cygnus.com>

	* printcmd.c (print_scalar_formatted): Use strcat to concat all
	the output together before calling fprintf_filtered().

1999-02-01  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Require autoconf 2.13.
	(AM_EXEEXT): Replace with new AC_EXEEXT.
	* acinclude.m4: Move itcl header macros from aclocal.m4 to here.
	* aclocal.m4: Regenerated.
	* configure: Regenerated.

1999-02-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	Allow PPC users to select which PPC/RS6000 variant they're
 	debugging at run-time.  At the moment, the only thing this affects
 	is the set of registers visible.
	* config/rs6000/tm-rs6000.h (REGISTER_NAME): Define this as a call
	to the function rs6000_register_name.
	(rs6000_register_name): Include extern decl.
	(NUM_REGS): Bump to 183.  What's the right way to do this?
	(FIRST_UISA_SP_REGNUM, LAST_UISA_SP_REGNUM): Renamed from
	FIRST_SP_REGNUM, LAST_SP_REGNUM.
	(REGISTER_BYTES): Recompute this.
	* rs6000-tdep.c: Renamed all uses of FIRST_SP_REGNUM and
	LAST_SP_REGNUM to FIRST_UISA_SP_REGNUM and LAST_UISA_SP_REGNUM, with
	some concomitant formatting changes.
	#include "gdbcmd.h", so we can define commands here.
	(struct variant): New structure.
	(COMMON_UISA_REG_NAMES, PPC_UISA_SPR_NAMES, PPC_SEGMENT_REG_NAMES,
	PPC_32_OEA_SPR_NAMES, num_registers): New macros. 
	(register_names_rs6000, register_names_uisa, register_names_403,
 	register_names_403GC, register_names_505, register_names_860,
 	register_names_601, register_names_602, register_names_603,
 	register_names_604, register_names_750, variants): New variables.
	(rs6000_register_name, install_variant, find_variant_by_name,
	install_variant_by_name, list_variants, show_current_variant,
	set_processor, show_processor): New functions.
	(_initialize_rs6000_tdep): Define new commands `set processor' and
	`show processor', and call install_variant_by_name to set the
	default variant.
	* rs6000-nat.c: Renamed all uses of FIRST_SP_REGNUM and
	LAST_SP_REGNUM to FIRST_UISA_SP_REGNUM and LAST_UISA_SP_REGNUM, with
	some concomitant formatting changes.
	* configure.in: Accept the `--with-cpu' flag, to specify a default
	processor variant.
	* acconfig.h: Provide a blurb for TARGET_CPU_DEFAULT, which is set
	by configure's `--with-cpu' flag.
	* config.in, configure: Regenerated.

Sun Jan 31 15:24:24 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* buildsym.h, buildsym.c: Convert to ANSI-only.

	* buildsym.h, buildsym.c: Reformat to standard.

	* buildsym.c (merge_symbol_lists): Remove unused variable.
	(_initialize_buildsym): Remove, does nothing.

1999-01-31 J.T. Conklin  <jtc@redbacknetworks.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub, sparclet-stub.c: Change declaration of putDebugChar
 	to include explicit void return type as per documentation.  Fix up
 	occasions where stubs erroneously checked return type.

Sun Jan 31 13:18:33 1999  Stan Shebs  <shebs@andros.cygnus.com>

	From J.T. Conklin <jtc@redbacknetworks.com>:
	* remote.c (remote_query): Fix tipo.

Fri Jan 29 15:25:09 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (v850): Add wildcard to match.

Fri Jan 29 16:44:01 1999  Edith Epstein  <eepstein@sophia.cygnus.com>

	* inferior.h: Ran indent.

	* fork-child.c: Ran indent.

	* infrun.c : Ran indent.

Fri Jan 29 12:57:34 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infrun.c (_initialize_infrun): Do not stop or print anything
	when a SIGWINCH is received.

	* Makefile.in (m2-exp.tab.c): Use YACC not BISON.
	(f-exp.tab.c): Ditto.
	(jv-exp.tab.c): Ditto.
	(c-exp.tab.c): Ditto.
	(YACC): Define as @YACC@.

1999-01-29  Martin Hunt  <hunt@cygnus.com>

	Changes from Keith Seitz  <keiths@cygnus.com>
        * valops.c (value_assign): Add calls to register_changed_hook and
        memory_changed_hook to inform UIs that the user has changed
        the target's registers/memory.
        * findvar.c (write_register_gen): Remove call to pc_changed_hook.
        * defs.h: Remove declaration for pc_changed_hook and
        add declarations for register_changed_hook and
        memory_changed_hook.
        * top.c: Ditto.

1999-01-29  Mark Alexander  <marka@cygnus.com>

	* procfs.c (wait_fd): Handle deleted threads correctly.

1999-01-28  Jason Molenda  (jsm@bugshack.cygnus.com)

	* utils.c (init_page_info): Force window size if running under emacs.

1999-01-27  James Ingham  <jingham@cygnus.com>

	* typeprint.c (whatis_exp): Remove static declaration.

Wed Jan 27 16:50:25 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c: Reformat using indent.

Wed Jan 27 13:20:25 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c: Reformat comments, update copyright.

Tue Jan 26 16:02:47 1999  Mark Alexander  <marka@cygnus.com>

	* v850-tdep.c (v850_generic_reg_names, v850e_reg_names,
	v850_register_names, v850_processor_type_table): Declare tables
	and structures for handling differences in register names for
	v850 and v850e.
	(struct reg_list): Define new structure for creating tables
	of register bit masks in v850e instrutions.
	(handle_prepare, handle_pushm): New helpers for v850_scan_prologue.
	(v850_scan_prologue): Recognize v850e instructions: callt, prepare,
	and pushm.
	(v850_target_architecture_hook): New function to set register
	names based on current machine.
	(_initialize_v850_tdep): Set up target_architecture_hook.
	* config/v850/tm-v850.h (v850_register_names): Declare.
	(REGISTER_NAME): Define to refer to v850_register_names.
	(SR0_REGNUM, CTBP_REGNUM): Define.
	(PS_REGNUM): Redefine in terms of SR0_REGNUM.

Tue Jan 26 18:27:26 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in (c-exp.tab.c): Use BISON instead of YACC, to pick
	the correct value from configure output.
	(jv-exp.tab.c): Ditto.
	(f-exp.tab.c): Ditto.
	(m2-exp.tab.c): Ditto.

1999-01-26  Jason Molenda  (jsm@bugshack.cygnus.com)

	* breakpoint.h (ep_is_exception_catchpoint): Add prototype.
	* frame.h (select_and_print_frame): Add prototype.
	* stack.c (func_command): Call select_and_print_frame with correct
	number of arguments.  Reformat whitespace.

Tue Jan 26 16:53:54 1999  Fernando Nasser  <fnasser@cygnus.com>

	* remote.c (remote_query): fix maximum packet size to account for
	  remote_debug use.
	  (putpkt): add comment to alert about extra byte need.

Mon Jan 25 19:55:30 1999  Mark Alexander  <marka@cygnus.com>

	* sh-tdep.c (sh_target_architecture_hook): Return immediately
	when a matching machine is found.

Fri Jan 22 09:10:35 1999  Mark Alexander  <marka@cygnus.com>

	* remote-mips.c (mips_initialize): Fix parameters to clear_breakpoint.
	(common_breakpoint): Restore support for instruction breakpoints
	on non-LSI targets.

Thu Jan 21 17:16:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stack.c: Close open comment.
	* symtab.c (find_pc_sect_line): Ditto.

Thu Jan 21 17:51:51 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* procfs.c (init_procfs_ops): New function, fills in procfs_ops,
	init only nonzero fields, leave to_require_attach and
	to_require_detach empty, not needed for /proc systems yet.
	(_initialize_procfs): Call init_procfs_ops.

	From J.T. Conklin <jtc@redbacknetworks.com>:
	* top.c (init_main): Fix tipo in description of the remotetimeout
	variable.
	* breakpoint.c (bpstat_stop_status): Handle systems where
	DECR_PC_AFTER_BREAK != DECR_PC_AFTER_HW_BREAK.

Thu Jan 21 17:25:46 1999  Mark Alexander  <marka@cygnus.com>

	* mon960-rom.c (_initialize_mon960): Call init_mon960_cmds
	to fill in mon960_cmds structure properly.

Wed Jan 20 17:53:22 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-sds.c (sds_ops): Define only once.
	(init_sds_ops, sds_command, _initialize_remote_sds): Declare.
	(init_sds_ops): Init only non-zero fields.

Wed Jan 20 15:45:15 1999  Mark Alexander  <marka@cygnus.com>

	* h8300-tdep.c (original_register_names, h8300h_register_names,
	h8300_register_names): Define new variables.
	(set_register_names): New function to set register names based on
	current CPU type.
	(h8300_command, h8300h_command, h8300s_command): Call
	set_register_names.
	* config/h8300/tm-h8300.h (h8300_register_names): Declare.
	(REGISTER_NAME): Define to refer to h8300_register_names.

1999-01-19  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* sol-thread.c abug-rom.c cpu32bug-rom.c dbug-rom.c m32r-rom.c 
	mac-nat.c mon960-rom.c op50-rom.c ppc-bdm.c remote-adapt.c 
	remote-array.c remote-bug.c remote-e7000.c remote-eb.c remote-es.c 
	remote-est.c remote-hms.c remote-mm.c remote-nindy.c remote-nrom.c 
	remote-os9k.c remote-rdp.c remote-sds.c remote-sim.c remote-st.c 
	remote-udi.c rom68k-rom.c sh3-rom.c sparcl-tdep.c sparclet-rom.c 
	v850ice.c win32-nat.c: cosmetic changes to conform to coding
	standards. 

1999-01-19  Jim Blandy  <jimb@zwingli.cygnus.com>

	Use aclocal to generate GDB's aclocal.m4 script.  
	* acinclude.m4: New file, containing the hand-written local macro
 	definitions that used to be in aclocal.m4.  Don't sinclude
 	../bfd/aclocal.m4 any more; running aclocal in this directory will
 	get us the definitions we need.  HOWEVER: Do sinclude
 	../bfd/acinclude.m4, because we need the definition of
 	BFD_NEED_DECLARATION.
	* aclocal.m4: Regenerated by aclocal.
	* configure: Regenerated by autoconf.

Tue Jan 19 10:27:23 1999  David Taylor  <taylor@texas.cygnus.com>

	* breakpoint.c (disable_breakpoints_in_shlibs): new parameter,
	silent, controls whether to print message about removal of shared
	library breakpoints.
	* breakpoint.h (disable_breakpoints_in_shlibs): decl updated.
	* irix5-nat.c (clear_solib): call disable_breakpoints_in_shlibs.
	* osfsolib.c (clear_solib): ditto.
	* solib.c (clear_solib): ditto.
	* somsolib.c (som_solib_restart): update call to
	disable_breakpoints_in_shlibs.

	* target.h (child_post_attach): only declare if CHILD_POST_ATTACH
	is define.

Tue Jan 19 18:07:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* corelow.c (solib_add_stub): Ditto.
	(core_file_to_sym_file): Cast make_cleanup parameter.

	* solib.c (symbol_add_stub, solib_map_sections): Change argument
 	to PTR insted of a char*.  Matches catch_errors interface.

Mon Jan 18 14:01:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-array.c (array_open): Don't use fprintf_filtered to send
 	data to the log file.

	* remote-array.c (handle_load_dll): Change argument type to PTR so
 	that it is compatible with catch_errors.
	* ocd.c (ocd_start_remote): Ditto.
	* remote-sds.c (sds_start_remote): Ditto.

	* win32-nat.c (win32_child_thread_alive): Namespace proof
 	child_thread_alive.
	(init_child_ops): Update.

Mon Jan 18 12:03:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-rdi.c (arm_rdi_open): Set gdb_hostif.hostosarg and
 	gdb_hostif.dbgarg to NULL instead of stdout.
	(voiddummy, myprint, mywritec): Use gdb_stdout instead of stdout.

Mon Jan 18 16:40:50 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* ser-ocd.c (ocd_open): Handle Unix case gracefully.

	* target.c (dummy_target): Don't initialize statically.
	(init_dummy_target): New function, fills in dummy_target.
	(initialize_targets): Use it.
	* hpux-thread.c (hpux_thread_ops): Don't initialize statically.
	(init_hpux_thread_ops): New function, fills in hpux_thread_ops.
	(_initialize_hpux_thread): Use it.
	* m3-nat.c (m3_ops): Don't initialize statically.
	(init_m3_ops): New function, fills in m3_ops.
	(_initialize_m3): Use it.

1999-01-18  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* sol-thread.c: delete compile time initialization of target_ops
	  (_initialize_sol_thread): initialize target_ops at run time.
	* hpux-thread.c: added target_ops entry.
	* m3-nat.c: ditto.

Mon Jan 18 15:19:13 1999  David Taylor  <taylor@texas.cygnus.com>

	* procfs.c (procfs_ops): delete compile time initialization.
	(_initialize_procfs): initialize procfs_ops at run time.

Mon Jan 18 12:51:44 1999  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Ensure that -luser32 is always linked in
	for cygwin build.
	* configure: Regenerated.

Mon Jan 18 08:38:05 1999  Mark Alexander  <marka@cygnus.com>

	* values.c (value_virtual_fn_field): Clear the pointed-to
	offset when casting to the base class.

Mon Jan 18 10:30:51 1999  David Taylor  <taylor@texas.cygnus.com>

	* remote-udi.c (init_udi_ops): change non-existant udi_run_ops to
	udi_ops; delete NULL initializers.

Mon Jan 18 12:03:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c (serial_close): gdb_fclose tages gdb_file** arg, not
 	gdb_file*.

	* f-valprint.c, target.c, gdbarch.c: Pass gdb_stderr not stderr.

Mon Jan 18 10:46:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stack.c (print_frame_info_base): Don't cast call to
 	catch_errors.
	(print_args_stub): Change char* arg to PTR.
	* symmisc.c (print_symbol): Ditto.
	* top.c (quit_cover): Ditto.
	* remote.c (remote_open_1, remote_start_remote): Ditto.
	* infrun.c (normal_stop, hook_stop_stub, restore_selected_frame):
 	Ditto.

	* stack.c (backtrace_command): Cast first arg of make_cleanup to
 	make_cleanup_func.
	* remote.c (remote_kill): Cast putpkt arg to catch_errors_ftype.

Mon Jan 18 08:47:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>
	
	* defs.h (catch_errors_ftype): Define.
	(catch_errors): Replace char* arg with PTR arg.
	* top.c (catch_errors): Update

	* breakpoint.c (bpstat_stop_status, bpstat_stop_status,
 	delete_breakpoint, breakpoint_re_set): Delete all casts in call to
 	catch_errors.
 	(breakpoint_cond_eval, watchpoint_check,
 	cover_target_enable_exception_callback, breakpoint_re_set_one):
 	Arg is PTR not char*.
	
	* breakpoint.c (cover_target_enable_exception_callback): Change
 	type to int. Check for cast values of 0 and -1.  Return a result!
	(insert_breakpoints): Move declaration of SAL and ARGS to where
 	they are used.

1999-01-16  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote.c (remote_query): new function - creates proper interface
	to the remote protocol "q" command.	

Fri Jan 15 17:11:48 EST 1999  Zdenek Radouch   (radouch@cygnus.com)

	* config/fr30/tm-fr30.h:  Changed ABI to match GCC change
	  (always use pointer for structs passed by value).

1999-01-15  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* target.h: added entry for target queries (to_query)
	  target.c: ditto.

Thu Jan 14 18:29:17 1999  David Taylor  <taylor@texas.cygnus.com>

	* remote-mm.c (mm_wait): fix stream arg to gdb_flush.
	* remote-udi.c (udi_wait): fix stream arg to fwrite.
	* symmisc.c (maintenance_check_symtabs): fix stream argument to
	print_address_numeric.
	
Wed Jan 13 19:33:16 1999  David Taylor  <taylor@texas.cygnus.com>

	* breakpoint.c (insert_breakpoints): insert cast to eliminate
	warning.

Wed Jan 13 14:59:02 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (set/show scheduler-locking) New command.  Set a
	  mode bit that will control how GDB attempts to control thread
	  scheduling for step, continue, etc.  (resume): make use of
	  the schedule-locking mode.
	* target.h (struct target_ops): new field to_has_thread_control.
	* sol-thread.c: initialize target_ops to_has_thread_control.
	* procfs.c: ditto.
	* target.c: ditto.
	* m3-nat.c: ditto.
	* remote.c: ditto.
	* hpux-thread.c: ditto.
	* thread.c: cull duplicate prototypes.  Move prototypes to top.
	* serial.c: indentation cleanup.
	* breakpoint.c: add casts to eliminate compiler warnings.
	
Tue Jan 12 17:00:00 1999  Edith Epstein  <eepstein@sophia.cygnus.com>

	* inftarg.c (child_create_inferior): fixed HPUXHPPA specific
	  call to fork_inferior. The shell param is now NULL.

1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (init_base_monitor_ops): Whitespace cleanup.
	(_initialize_remote_monitors): Same.

1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (init_monitor_ops): Initialize the monitor_ops
	structure if it hasn't already been done.

Tue Jan 12 14:50:10 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* inftarg.c (child_ops): Don't initialize statically.
	(init_child_ops): New function, fills in child_ops.
	(_initialize_inftarg): Use it.
	(child_post_attach): Declare extern.
	(child_wait): Fix ambiguous parens.
	(child_attach_to_process): Remove unused local wstatus.
	(child_insert_fork_catchpoint, child_remove_fork_catchpoint,
	child_insert_vfork_catchpoint, child_remove_vfork_catchpoint,
	child_has_forked, child_insert_exec_catchpoint,
	child_remove_exec_catchpoint): Return a value.

Mon Jan 11 16:43:44 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Add inferior_pid to thread list only
	if it is not already there.

1999-01-11  Jason Molenda  (jsm@bugshack.cygnus.com)

	* scm-tags.h: Update FSF's address on copyright notice.
	* ser-e7kpc.c: Same.
	* gnu-nat.h: Same.

Mon Jan 11 13:45:57 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* dwarf2read.c (dump_die):  Change stderr to gdb_stderr.
	* expprint.c (print_subexp):  fprintf => fprintf_unfiltered.
	* jv-typeprint.c (java_type_print_base):  fputs => fputs_filtered.
	* stack.c (struct function_bounds):  Remove superfluous `typedef'.
	* symfile.c (list_overlays_command):  stdout => gdb_stdout.
	* symmisc.c (maintenance_check_symtabs):  stdout => gdb_stdout.
	* utils.c (print_spaces):  Make more efficient.
	
Mon Jan 11 13:55:51 1999  David Taylor  <taylor@texas.cygnus.com>

	* utils (print_spaces): fix arg to strcat; fix formatting.

Fri Jan  8 11:57:24 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* exec.c (exec_ops): Don't initialize statically.
	(init_exec_ops): New function, fills in exec_ops.
	(_initialize_exec): Use it.

Thu Jan  7 17:50:15 EST 1999  Zdenek Radouch   (radouch@cygnus.com)

	Beta FR30 port.
	* fr30-tdep.c
	* config/fr30/tm-fr30.h
	
Wed Jan  6 12:28:35 1999  David Taylor  <taylor@texas.cygnus.com>

	* configure.in: Add an --enable-tui argument.  Construct
 	tui/Makefile from tui/Makefile.in.  Use AM_PROG_CC_STDC.  If we
 	have the GUI, then we need this to process libgui.h.
	(ENABLE_CFLAGS): define and export BUILD_TUI.
	(AC_CHECK_HEADERS): Add check for term.h.
	
	* configure.host (hppa-*-hpux10.20, hppa-*-hpux11.0*): New configs.

	* config.in, configure : regenerated.

	* Makefile.in: Allow the TUI code to be conditionally enabled.
	(TUI_LIBRARY): New variable, value are set by the configuration
 	script.  Set to the empty string when the TUI isn't enabled.
	(gdb$(GDBEXT)): Use those, instead of referring to all-tui and
 	tui/libtui.a directly.
	(BUILD_TUI): build the tui -- only when configured with
 	--enable-tui.
	(YLWRAP): use ylwrap to avoid problems on systems w/o bison.
	(gdb$(EXEEXT)): make it dependent on BUILD_TUI.
	(all-tui): remove dependency from phony target.
	(c-exp.tab.c): use ylwrap instead of bison.
	(jv-exp.tab.c): ditto.
	(f-exp.tab.c): ditto.
	(m2-exp.tab.c): ditto.
	(ALLDEPFILES): add somread.c, hp-psymtab-read.c, hp-symtab-read.c.
	(SFILES): remove the above files
	(COMMON_OBS): remove somread.o
	(SFILES): Add the tui files to this, so they get included in etags
 	tables.
	(gdb$(EXEEXT)): Add all-tui to the list of dependencies, and add
 	tui/libtui.a to the link list.
	(all-tui): New rule, which does a recursive make in the tui
 	subdir.
	(tui/libtui.a): When recursing, pass down ${FLAGS_TO_PASS}.  And
 	don't echo the make command.  This is closer to what the other
 	recursions do.
	(HFILES_NO_SRCDIR): add hpread.h
	(COMMON_OBS): add hp-psymtab-read.o, hp-symtab-read.o
        (SFILES): add hp-psymtab-read.c, hp-symtab-read.c add rules for
 	the new files.  Remove hpread.c, hpread.o
	(gdb$(EXEEXT)): Depend on the actual tui library, not on a
 	fictitious target.  Since the fictitious target never existed,
 	make would always relink.
	(tui/libtui.a): Always recurse to make sure the library is up to
 	date.

Wed Jan  6 12:05:12 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c: Pacify --enable-build-warnings, reformat code
	to conform to standards, fix spelling errors.
	(ishex, stubhex, record_currthread, etc): Declare.
	(ishex, stubhex): Declare char arg as int.
	(pack_string): Comment out, never used but possibly useful.
	(threadref_to_int, remote_get_threadinfo, etc): Make static.

Wed Jan  6 11:43:32 1999  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by Elena Zannoni
 	<ezannoni@cygnus.com> and Edith Epstein <eepstein@cygnus.com> as
 	part of a project to merge in changes made by HP.

	* c-exp.y: use external flag hp_som_som_object_present to decide
 	whether code was compiled by HP's compilers.  Add two new C++
 	tokens for true and false.
        (yylex): check for template name is done differently for the
 	HP/aCC compiler case.  Change some of the template processing code
 	for handling HP aCC templates.  Handle true and false tokens.
	
Tue Jan  5 11:13:36 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (record_curthread): Must not modify inferior_pid when
 	called from wait_for_inferior.  Instead, if a new thread-id is
 	detected, call add_thread.
	(MAGIC_NULL_PID): new macro, use instead of the magic number
 	"42000".
	(remote_find_new_threads): if inferior_pid is unknown, get and use
 	the current thread id.
	(remote_start_remote): on connecting, attempt to get the current
 	thread id for inferior_pid.
	(remote_resume): If pid == -1, then resume any-thread (not the
 	current thread specifically).  Also some cosmetic fixups.
	
	* thread.c (info_threads_command): don't initialize current_pid 
	until after call to FIND_NEW_THREADS (which may change inferior_pid).
	Also some cosmetic fixups.
	* infrun.c: cosmetic fixups and casts to avoid warnings.
	* infcmd.c: cosmetic fixups, mainly long lines.
	
Tue Jan  5 11:55:57 1999  David Taylor  <taylor@texas.cygnus.com>

	* target.c (noprocess): terminate sentence with a period.
	* breakpoint.c (catch_command_1): ditto.

	* c-valprint.c (c_value_print): remove hack^2 from HP; it causes
	testsuite losses with no real gain.

	* inferior.h (START_INFERIOR_TRAPS_EXPECTED): restore, but only
	if tm-*.h hasn't overridden default value.

1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Fix whitespace indentation for --help.
	* configure: Regenerated.

1999-01-04  Manuel Bouyer <bouyer@antioche.lip6.fr>

	* main.c: Add --write command line option, document -w.
	* gdb.1: Document --write.

1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Require autoconf 2.12.1 or higher.
	* doc/configure.in: Ditto.
	* nlm/configure.in: Ditto.
	* rdi-share/configure.in: Ditto.
	* testsuite/configure.in: Ditto.
	* doc/Makefile.in: Don't hardcode $(SHELL).
	* nlm/Makefile.in: Ditto.
	* rdi-share/Makefile.in: Ditto.
	* testsuite/Makefile.in: Ditto.

Mon Jan  4 12:53:03 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-vx.c (init_vx_ops, init_vx_run_ops): Remove unneeded
	inits of new fields, including ref to bogus field.
	(vx_ops, vx_run_ops): Make static.

Mon Jan  4 15:05:29 1999  David Taylor  <taylor@texas.cygnus.com>

	* inferior.h (START_INFERIOR_TRAPS_EXPECTED): delete,
	already defined in tm.h.

	* inftarg.c: change <sys/unistd.h> to <unistd.h> and
	conditionalize its inclusion.
	* infttrace.c: ditto.

For older changes see ChangeLog-98

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
