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

	* dcache.c (set_dcache_state): New function.
	* dcache.h: Declare set_dcache_state().

Sat Dec  4 15:17:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (build_remote_packet_sizes): Reduce the default packet
 	size of 400 bytes by one to 399.  Stops GDB trashing stubs that
 	append a trailing NUL to an already full buffer.

Sat Dec  4 01:16:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c (remote_get_noisy_reply): Add parameter sizeof_buf.
	(finish_tfind_command): Add parameter sizeof_msg.
	
	* remote.c (remote_threads_info): Move assignment operator to
 	outside of function call.
	(remote_send): Add parameter sizeof_buf.
	(getpkt): Add parameter sizeof_buf. Call read_frame passing in
 	sizeof_buf.

	* remote.h (getpkt): Update.
	
	* tracepoint.c (remote_set_transparent_ranges,
 	remote_get_noisy_reply, trace_start_command, trace_stop_command,
 	trace_status_command, finish_tfind_command, trace_find_pc_command,
 	trace_find_tracepoint_command, trace_find_line_command,
 	trace_find_range_command, trace_find_outside_command): Update.

	* remote.c (set_thread, remote_thread_alive,
 	remote_get_threadinfo, remote_get_threadlist,
 	remote_current_thread, remote_threads_info,
 	extended_remote_restart, get_offsets, remote_open_1,
 	remote_async_open_1, remote_wait, remote_async_wait,
 	remote_fetch_registers, check_binary_download, remote_write_bytes,
 	remote_read_bytes, remote_send, remote_detach,
 	remote_async_detach, remote_fetch_registers,
 	store_register_using_P, store_register_using_P,
 	remote_fetch_registers, remote_store_registers, putpkt_binary,
 	remote_insert_breakpoint, remote_remove_breakpoint,
 	compare_sections_command, remote_rcmd, packet_command,
 	remote_info_process, remote_query, remote_insert_watchpoint,
 	remote_search, remote_remove_watchpoint,
 	remote_insert_hw_breakpoint, remote_remove_hw_breakpoint): Update.

Fri Dec  3 17:38:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* (read_frame): Add sizeof_buf parameter. Don't allow repeat when
 	first character.  Always leave space at the end of the buffer.
  	Return size of packet or -1.
	(getpkt): Update.  Pass in PBUFSIZ.

Thu Dec  2 17:14:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c: Include <string.h> for memset().

1999-12-01  Christopher Faylor  <cgf@cygnus.com>

	* config/i386/tm-cygwin.h: Change tm-i386.h include back to tm-i386v.h.

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

	* inf-loop.c (inferior_event_handler): In case of
 	INF_EXEC_CONTINUE, don't do all the regular continuations, but
 	just the intermediate ones.

	* infcmd.c (step_once): Add the continuation to the
 	intermediate_continuation list instead of the regular continuation
 	list.

	* utils.c (add_intermediate_continuation): New function, to add
 	continuations to the intermedite_continuation list.
	(do_all_intermediate_continuations): New function, do all the
 	continuations in the intermediate list.
	(discard_all_intermediate_continuations): New function, discard
 	all the continuations in the intermediate list.
	(intermediate_continuation): New global list for use by step_1().

	* defs.h: Export intermediate_continuation,
 	add_intermediate_continuation, do_all_intermediate_continuations,
 	discard_all_intermediate_continuations.

1999-11-30  Christopher Faylor  <cgf@cygnus.com>

	* win32-nat.c (mappings): Reorganize slightly for new uniform i386
	register configuration.
	(do_child_fetch_inferior_registers): Handle special case floating point
	registers.
	(handle_output_debug_string): Handle cygwin-specific signals broadcast
	from the cygwin DLL.
	(handle_exceptions): Add code to properly allow continuation after a
	CTRL-C.
	(child_continue): Accept propagated "continue_status" which controls
	how the inferior should be continued.
	(get_child_debug_event): New function.
	(child_wait): Use above function to handle debug events.
	(child_create_inferior): Add more intelligent method for running the
	inferior to the appropriate point before handing it off to the rest of
	gdb.
	(child_stop): Specifically send a CTRL-C to the debugged process.
	(child_kill_inferior): Set global continue status here to cause
	inferior to run to completion.
	(child_resume): Eliminate code which attempts to decide how to continue
	the inferior.  This is now handled by child_continue.
	* config/i386/tm-cygwin.h: Gut and reorganize for consistency with new
	tm-i386.h.

	Patch from Egor Duda (deo@logos-m.ru)
	* win32-nat.c (psapi_get_dll_name): New function.
	(handle_load_dll): Correctly load DLL symbol tables after attaching to
	a running pid.

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

	* infrun.c (handle_inferior_pid): revert 11-29 change: resuming
	a thread other than the current thread with a signal.  Apparently
	target_resume with a specific pid, a specific signal, and no step
	means to continue ALL threads but to only send the signal to one
	(and not, as I had assumed, to continue only the specified thread).
	* i386-linux-nat.c (fill_gregset): guard against invalid input.
	
1999-11-30  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (step_once): New function. Used to do just one step
 	operation.
	(step_1_continuation): New function. Figure out if we need to step
 	again before returning control to the user.
	(step_1): If we are in asynchronous mode, don't do the for loop,
 	but rather delegate to continuations the task of repeating the
 	step operation.

	* utils.c (do_all_continuations): Copy the continuation list aside
 	before working on it.

	* target.h (enum inferior_event_type): Add new enum
 	INF_EXEC_CONTINUE.

	* inf-loop.c (inferior_event_handler): Handle new case
 	INF_EXEC_CONTINUE.

	* infrun.c (fetch_inferior_event): If we are in the middle of a
 	'step n' type command, don't say that the execution is complete,
 	but that it will have to continue.

1999-11-30  Kevin Buettner  <kevinb@cygnus.com>

	* utils.c (verror): Don't traverse va_list argument twice.  Also,
	removed extraneous va_end() call.

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

	* infrun.c (handle_inferior_pid): If a child thread stops on a 
	signal that we are ignoring, and GDB silently resumes the child, 
	resume ALL threads (not just the one that got the signal).  All
	threads are stopped, so all must be resumed.
	(handle_inferior_pid): on detecting a thread context switch, 
	swap infrun_state ONLY if both the old thread and the new one
	are in the thread list.  Otherwise state information will be lost!
	Problem may arise with flaky back-ends.
	
1999-11-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (bpstat_stop_status): Don't decrease hit_count
	in case of a wp that has not changed.

Mon Nov 29 12:14:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbtypes.c (init_simd_type): Make static.

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

	* i386b-nat.c: Include "gdbcore.h".
	* fork-child.c: Include "command.h".

	* remote.c (remote_cisco_section_offsets,
 	remote_start_remote_dummy, store_register_using_P,
 	remote_info_process, remote_cisco_open, remote_cisco_close,
 	readsocket, readtty, minitelnet, remote_cisco_wait,
 	init_remote_async_ops, init_extended_async_remote_ops,
 	set_remote_cmd), infrun.c (default_skip_permanent_breakpoint): Use
 	ISO-C syntax for function definition.

Mon Nov 29 11:28:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stabsread.c: Revert 1999-11-09 Jim Blandy
 	<jimb@zwingli.cygnus.com> and 1999-11-08 Jim Blandy
 	<jimb@zenia.red-bean.com>.  Broken on non-Linux targets.

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

	* symfile.c (show_load_progress): Add total sent so far to the
 	information passsed to the hook users.
	(generic_load): Collect total sent so far and pass that to the
 	progress hook.

	* defs.h (show_load_progress): Update.

1999-11-25  Nick Clifton  <nickc@cygnus.com>

	* coffread.c (coff_symfile_read): Treat "epoc-pe" targets as "pe"
	targets.
	* dbxread.c (dbx_read_symfile): Treat "epoc-pe" targets as "pe"
	targets. 

Wed Nov 24 17:07:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (init.c): Add SUBDIR_INIT_FILES so that sub
 	directories can hook in extra init files.

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

	* defs.h (show_load_progress): Export.

	* symfile.c (show_load_progress): New hook for download.
	(generic_load): Collect total size of executable to load. 
	Call progress hook when downloading.

Thu Nov 18 11:54:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* arc-tdep.c (codestream_fill): Rewrite byte swap code using
 	function extract_unsigned_integer.

Wed Nov 17 17:01:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* arm-xdep.c: #include "arm-opcode.h" -> "opcode/arm.h".

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

	* Makefile.in (i386-tdep.o): Update list of dependencies.

1999-11-22  Jim Blandy  <jimb@zenia.red-bean.com>

	* config/i386/tm-i386v.h (NUM_REGS, REGISTER_NAMES,
	REGISTER_BYTES, REGISTER_BYTE, REGISTER_RAW_SIZE,
	REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE,
	MAX_REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE): Deleted.  All
	of these should inherit identical or compatible values from
	tm-i386.h, as long as you don't define HAVE_SSE_REGS or
	HAVE_I387_REGS, which are new anyway.

Mon Nov 22 21:39:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (do_target_signal_to_host): New function.  Indicate of
 	the conversion was successful to the caller via an additional
 	parameter.
	(target_signal_to_host_p): New function. Return non-zero if the
 	GDB signal exists on the host system.
	(target_signal_to_host): Rewrite.  Use do_target_signal_to_host.
	* target.h (target_signal_to_host_p): Add declaration. Document
 	target_singal vs host signal vs target OS signal confusion.
	
	From 1999-11-08 Jimmy Guo <guo@cup.hp.com>:
	* hppah-nat.c (require_notification_of_events): Start by ignoring
 	all signals and then adding back in ones we're interested in.
	
Thu Nov 18 18:12:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* jv-typeprint.c (java_type_print_base), kod-cisco.c
 	(cisco_kod_open), kod.c (kod_set_os), xcoffread.c
 	(process_linenos), symfile.c (add_symbol_file_command),
 	remote-rdi.c (arm_rdi_open, rdilogfile_command), main.c
 	(captured_main), go32-nat.c (go32_create_inferior), exec.c
 	(exec_file_attach), corefile.c (core_file_command,
 	reopen_exec_file): Replace strdup with xstrdup.

Mon Nov 22 12:02:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* bcache.c (print_bcache_statistics): Fix printf_filtered
 	arguments.
	(print_percentage): Make function void.

1999-11-21  Jim Blandy  <jimb@zenia.red-bean.com>

	Make the bcache hash table grow.
	* bcache.h (BCACHE_NUM_BUCKETS): Delete definition.
	(struct bcache): Add new element: num_buckets.  Make bucket be a
	pointer to an array, not an array.
	(free_bcache): New extern declaration.
	* bcache.c (CHAIN_LENGTH_THRESHOLD): New constant.
	(expand_hash_table): New function.
	(bcache): Grow the hash table if the average chain length reaches
	CHAIN_LENGTH_THRESHOLD.
	(free_bcache): New function.
	(print_bcache_statistics): Don't assume that the number of buckets
	is constant any more.
	(BSTRING_SIZE): Moved down to just above 'bcache' function, where
	it's used.
	* objfiles.c (free_objfile): Call free_bcache, instead of just 
	freeing the bcache's obstack directly.
	* symfile.c (reread_symbols): Same.

1999-11-20  Jim Blandy  <jimb@zenia.red-bean.com>

	* bcache.c, bcache.h: Rewritten.  New version imposes less memory
	overhead, and has a more effective hash function, so it's probably
	faster, too.

	* config/nm-linux.h: No need to check whether __STDC__ is
	#defined --- GDB requires ANSI C now.

	* config/i386/nm-linux.h (linuxthreads_pid_to_str,
	linuxthreads_prepare_to_proceed): Delete declarations --- they're
	provided by config/nm-linux.h now.

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

	* top.c (print_command_lines): Remove unused var.

1999-11-19  Jim Kingdon  <kingdon@redhat.com>

        Patch applied by Jim Blandy <jimb@cygnus.com>:

	Enable threads for all linux architectures:
	* config/nm-linux.h: New file.
	config/alpha/nm-linux.h, config/i386/nm-linux.h,
	config/m68k/nm-linux.h, config/sparc/nm-linux.h: Use it.
	* config/tm-linux.h: New file.
	* config/i386/tm-linux.h, config/m68k/tm-linux.h,
	config/sparc/tm-linux.h, config/alpha/tm-alphalinux.h: Use it.
	* config/m68k/linux.mh, config/sparc/linux.mh,
	config/alpha/alpha-linux.mh: Add linux-thread.o.

1999-11-18  Tom Tromey  <tromey@cygnus.com>

	* tracepoint.h (get_tracepoint_by_number): Updated declaration.
	* tracepoint.c (trace_pass_command): Better error message.  Fixed
	logic when `all' not specified.
	(get_tracepoint_by_number): Added `optional_p' argument.  Fixed
	all callers.

Wed Nov 17 17:40:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* findvar.c (SWAP_FLOATING): Delete macro. Unused.

1999-11-16  Mark Salter  <msalter@cygnus.com>

	* monitor.c (monitor_supply_register): Initialize value to zero.

1999-11-15  Eli Zaretskii  <eliz@is.elta.co.il>

	(Patches applied by Jim Blandy <jimb@zwingli.cygnus.com>)
	
	Change DJGPP target use the common register layout in
	config/i386/tm-i386.h.
	* config/i386/tm-go32.h: #include "i386/tm-i386.h", not 
	"i386/tm-i386v.h".
	(HAVE_I387_REGS): Define.
	(HAVE_SSE_REGS): Undefine.
	(NUM_FREGS, NUM_REGS, REGISTER_NAMES, FP_REGNUM, SP_REGNUM,
	PS_REGNUM, PC_REGNUM, FP0_REGNUM, FPC_REGNUM, FPCWD_REGNUM,
	FPSWD_REGNUM, FPTWD_REGNUM, FPIPO_REGNUM, FPIPS_REGNUM,
	FPOOS_REGNUM, FPOPS_REGNUM, REGISTER_BYTES, REGISTER_BYTE,
	REGBYTE_0, REGBYTE_10 REGBYTE_16, REGBYTE_24, REGBYTE_29,
	REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE,
	MAX_REGISTER_VIRTUAL_SIZE, REGISTER_CONVERTIBLE): Definitions
	deleted.
	(i387_to_double, double_to_i387): Declarations deleted.
	(REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW,
	REGISTER_VIRTUAL_TYPE): Use definitions from
	config/i386/tm-i386.h, unless LD_I387 is #defined.
	
	* go32-nat.c (go32_fetch_registers, store_register)
	(go32_create_inferior, init_go32_ops): Replace fatal with
	internal_error.
	(sig_map): Map exception 7 to TARGET_SIGNAL_EMT.

	* utils.c (notice_quit): Doc fixes.

1999-11-15  Kevin Buettner  <kevinb@cygnus.com>

	* gdbserver/server.h (initialize_low): Declare this target
	specific function.
	* gdbserver/server.c (main): Call initialize_low.
	* gdbserver/low-hppabsd.c, gdbserver/low-linux.c,
	gdbserver/low-sim.c, gdbserver/low-sparc.c, gdbserver/low-sun3.c
	(initialize_low): Renamed from initialize.  Also removed
	initialization of inferior_pid.
	(have_inferior_p): Removed.
	* gdbserver/low-lynx.c (initialize_low): New function.

1999-11-12  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote-rdi.c: Fix indentation accordingly to GNU standards.

Thu Oct 28 00:28:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_gdbarch_init): Make the d10v:ts3 the default.

Tue Oct 26 09:57:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Re-sync with Cagney's earlier const change.

Sun Oct 24 20:07:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (struct gdbarch_tdep): Replace nr_a_regs,
 	imap0_regnum, nr_imap_regs, dmap0_regnum, with dmap_register and
 	imap_register.
	(R0_REGNUM, LR_REGNUM, PSW_REGNUM, NR_IMAP_REGS, NR_A_REGS):
 	Convert to enums.
	(TS2_NR_A_REGS, TS2_NR_IMAP_REGS, TS3_NR_IMAP_REGS,
 	TS3_NR_A_REGS): Delete.
	(d10v_ts2_dmap_register, d10v_ts3_dmap_register,
 	d10v_ts2_imap_register, d10v_ts3_imap_register): New functions.
	(d10v_dmap_register, d10v_imap_register,
 	d10v_ts2_register_sim_regno, d10v_ts3_register_sim_regno,
 	show_regs): Update.
	(remote_d10v_translate_xfer_address): Rewrite.  Use
 	sim_d10v_translate_addr to translate addresses.
	(d10v_gdbarch_init): Initialize tdep members dmap_register and
 	imap_register.

Sun Oct 24 00:12:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (struct gdbarch_tdep): Declare.
	(NR_IMAP_REGS, NR_DMAP_REGS, A0_REGNUM, NR_A_REGS): Redefine using
 	value in gdbarch_tdep.
	(d10v_dmap_register, d10v_imap_register): Ditto.
	(d10v_ts2_register_name, d10v_ts2_register_sim_regno): Rename
 	d10v_register_name and d10v_register_sim_regno
	(enum ts3_regnums, d10v_ts3_register_name,
 	d10v_ts3_register_sim_regno, d10v_register_sim_regno): New.
	(d10v_gdbarch_init): Configure registers and G packet according to
 	d10v/ts2 and d10v/ts3.

Sat Oct 23 21:28:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (IMAP0_REGNUM, IMAP1_REGNUM, DMAP_REGNUM):
 	Delete macro.
	(R0_REGNUM, LR_REGNUM, PSW_REGNUM, A0_REGNUM): Move from here.
	* d10v-tdep.c: To here.

	* d10v-tdep.c: (NR_DMAP_REGS, NR_IMAP_REGS, NR_A_REGS): Define.
	(d10v_dmap_register, d10v_imap_register): New functions.
	(remote_d10v_translate_xfer_address): Make static.
	(d10v_register_virtual_size): Use TYPE_LENGTH of
 	REGISTER_VIRTUAL_TYPE.
	(d10v_register_byte, do_d10v_pop_frame,
 	remote_d10v_translate_xfer_address, show_regs,
 	d10v_register_raw_size): Ditto.
	(d10v_register_virtual_type): Ditto. Use explicitly sized builtin
 	types.

Sat Oct 23 19:08:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c: Include "sim-d10v.h".
	(enum ts2_regnums): Declare.
	(d10v_register_sim_regno): New function.

	* config/d10v/tm-d10v.h: Delete pre multi-arch code.
  	(REGISTER_SIM_REGNO): Define.
	(d10v_register_sim_regno): Declare.
	
Sat Oct 23 16:39:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (initialize_current_architecture): Make ``choice''
 	const.

Wed Nov 10 16:10:22 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Fix typo in error message.

Wed Nov 10 16:47:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (error_last_message): Use gdb_file_xstrdup.

	* defs.h (verror, internal_verror): Declare.

	* utils.c (verror, internal_error): New functions.
	(error, internal_error): Use verror / internal_verror.
	(error_stream): Use gdb_file_xstrdup.  Correctly handle %s in
 	error message body.
	(error_init): Use mem_fileopen.

	* corefile.c (memory_error): Use mem_fileopen instead of
 	tui_sfileopen.  Don't call error_begin.
	* remote-sim.c (gdb_os_error): Rewrite using verror. Don't call
 	error_begin.

Wed Nov 10 14:21:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_xstrdup): New function.
	* utils.c (gdb_file_xstrdup, do_gdb_file_xstrdup): Implement.

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

	* exec.c (exec_file_attach), irix5-nat.c, osfsolib.c, solib.c
 	(info_sharedlibrary_command), pa64solib.c
 	(pa64_sharedlibrary_info_command), somsolib.c
 	(som_sharedlibrary_info_command): Replace "exec file" with
	"executable file" in messages.

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

	Finish the job attempted by the previous change.
	* stabsread.c (read_range_type): Make n2 and n3 LONGEST.  Adjust
	the various tests that check for maximum values, bit counts, etc.
	In the long run, it might have been simpler just to give GDB bignums.
	
Tue Nov  9 18:34:13 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* defs.h (gdb_file_put): Add parameter write.
	(gdb_file_put_method_ftype): New typedef.
	* utils.c (gdb_file_put, mem_file_put, tui_file_put,
 	null_file_put): Update.
	
	* utils.c (struct gdb_file): Add field magic.
	(gdb_file_new): Initialize.
	(gdb_file_data): Verify.

	* utils.c (mem_file_fputs): Delete.  Replaced by.
	(mem_file_write): New function. Rewrite mem_file.
	(mem_file_new): Update.
	
Tue Nov  9 17:51:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-sim.c (gdb_os_write_stdout): Use gdb_file_write.
	(gdb_os_flush_stdout): Flush gdb_stdtarg instead of gdb_stdout.

Tue Nov  9 15:33:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (procfs.o): Don't compile with -Werror for moment.
	* sol-thread.c (info_cb): Move assignments to outside of if
 	statement.
	(info_cb): Use paddr when printing addresses.

1999-11-08  Jim Blandy  <jimb@zenia.red-bean.com>

	* defs.h (ULONGEST_MAX, LONGEST_MAX): New definitions.
	* stabsread.c (read_huge_number): Parse and return LONGEST values.

1999-11-08  Mark Salter  <msalter@cygnus.com>

	* utils.c (floatformat_to_doublest): Fix conversion of denormals.

Mon Nov  8 20:14:13 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (get_memory_read_packet_size): For moment limit read
 	size to PBUFSIZ.
	(putpkt_binary): Remove check on packet size.  Allocate ``cnt +
 	6'' characters for output buffer.
	(get_memory_packet_size): When packet size is ``fixed'' and the
 	size is zero, return MAX_REMOTE_PACKET_SIZE.  Check that packets
 	are at least MIN_REMOTE_PACKET_SIZE.
	(set_memory_packet_size): Print usage when ``args'' is NULL.

Mon Nov  8 18:18:07 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h, utils.c (gdb_file_deallocate): Delete.
	* corefile.c (memory_error): Use make_cleanup_gdb_file_delete.

	* defs.h, utils.c (gdb_file_init_astring): Delete.

	* defs.h, utils.c (tui_file_get_strbuf): Rename
 	gdb_file_get_strbuf.
	(tui_file_adjust_strbuf): Rename gdb_file_adjust_strbuf.
	* utils.c (error_stream, error_last_message): Update.
	
Mon Nov  8 16:28:00 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h, utils.c (gdb_fclose): Delete.
	* defs.h (make_cleanup_gdb_file): Declare.
	* utils.c (make_cleanup_gdb_file_delete, do_gdb_file_delete): New
 	functions.

	* symmisc.c (maintenance_print_symbols,
 	maintenance_print_psymbols, maintenance_print_msymbols): Use
 	make_cleanup_gdb_file_delete.
	* serial.c (do_serial_close): Use gdb_file_delete.

Mon Nov  8 14:16:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_write_ftype, set_gdb_file_write,
 	gdb_file_write): Declare.

	* utils.c (struct gdb_file): Add to_write member.
	(gdb_file_write, set_gdb_file_write): New functions.
	(gdb_file_new): Initialize the write method.
	(null_file_write): New function.
	(null_file_fputs, null_file_write): ``write'' calls ``fputs'' and
 	``fputs'' calls ``write'' when the other is implemented.
	(stdio_file_new): Initialize write method.
	(stdio_file_write): New function.

	* utils.c (putchar_unfiltered, fputc_unfiltered): Use
 	gdb_file_write.

Thu Nov  4 11:59:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (get_memory_packet_size, set_memory_packet_size,
 	build_memory_packet_size): New functions. Set / compute / update
 	the size of a memory read / write packet.
	(set_memory_read_packet_size, set_memory_write_packet_size): New
 	functions.  Verify changes to the memory read / write packet size.
	(prefered_memory_write_packet_size,
 	current_memory_write_packet_size, prefered_memory_read_packet_size,
 	current_memory_read_packet_size): New variables.
	(get_memory_read_packet_size, get_memory_write_packet_size): New
 	functions. Determine the current memory read/write packet size.  A
 	function is needed as ``current_register_packet_size'', a variable
 	is used in the calculation.
	(register_remote_packet_sizes, build_remote_packet_sizes):
 	Initialize packet sizes according the current architecture.
	(remote_fetch_registers, remote_write_bytes, remote_read_bytes,
 	build_remote_gdbarch_data): Update.
	(_initialize_remote): Add the commands ``set remote
 	memory-read-packet-size'' and ``set remote
 	memory-write-packet-size''.  Deprecate ``set remotepacketsize''.

Sun Nov  7 18:09:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.h, target.c (target_load): Replace macro with a function.

	* config/i960/tm-nindy960.h (ADDITIONAL_OPTION_HANDLER): Rewrite
 	replacing SET_TOP_LEVEL with catch_command_errors.
	(nindy_open): Add extern declaration.

	* top.h (top_level_val, SET_TOP_LEVEL): Delete.
	* defs.h (catch_command_errors_ftype, catch_command_errors): Add
 	declarations.
	* top.c (struct captured_command_args): Declare.
	(do_captured_command, catch_command_errors): New functions. Call
 	the command function via catch_errors.
	(catch_errors): Add more comments.
	
	* main.c (struct captured_main_args): Define.
 	(captured_main): New.  Rewrite main.  Replace SET_TOP_LEVEL with
 	calls to catch_command_errors. Delete calls to do_cleanups which
 	are now handled by catch_errors. Call the command loop via
 	captured_command_loop and catch_errors.
	(main): Move code body to captured_main.  Call captured_main via
 	catch_errors.
	(captured_command_loop): New function. Wrap call to command_loop.

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

	* procfs.c (unconditionally_kill_inferior) (init_procinfo)
 	(create_procinfo) (procfs_exit_handler) (proc_set_exec_trap)
 	(do_attach) (do_detach) (procfs_wait) (set_proc_siginfo)
 	(procfs_resume) (info_proc_mappings)
 	(modify_run_on_last_close_flag) (procfs_lwp_creation_handler)
 	(procfs_thread_alive): Remove unused variables, conditionalize
 	vars declarations to eliminate compiler warnings.

Fri Nov  5 16:32:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LENGTH,
 	CALL_DUMMY_STACK_ADJUST, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS, PUSH_DUMMY_FRAME, FIX_CALL_DUMMY,
 	STORE_STRUCT_RETURN), d10v-tdep.c (print_insn), d30v-tdep.c
 	(print_insn), target.h (SOFTWARE_SINGLE_STEP): Call internal_error
 	instead of abort.

	* utils.c (stdio_file_delete, stdio_file_flush, stdio_file_fputs,
 	stdio_file_isatty, tui_file_delete, tui_file_isatty,
 	tui_file_rewind, tui_file_put, gdb_file_init_astring,
 	gdb_file_get_strbuf, gdb_file_adjust_strbuf): Call internal_error
 	instead of error.

1999-11-04  Kevin Buettner  <kevinb@cygnus.com>

	* remote.c (build_remote_gdbarch_data): Set remote_address_size...
	(_initialize_remote) ...but don't set it here.  Also, tie
	remote_address_size to the target architecture via call to
	register_gdbarch_swap().

1999-11-04  Jeff Holcomb  <jeffh@cygnus.com>

	* remote-rdp.c (send_rdp): Fix typo.

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

	* breakpoint.c (commands_command): remove unprotected ref to 
	args pointer (which may be null).

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

	* infcmd.c (print_return_value): New function. Print return value
 	from finish command.
	(finish_command_continuation): Call print_return_value().
	(finish_command): Ditto.

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

	* infrun.c (handle_inferior_event): Add calls to print_stop_reason()
	for end of stepping range cases.
	
Thu Nov  4 17:46:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* event-loop.c (gdb_do_one_event): Delete SET_TOP_LEVEL call.
  	Move error code to start_event_loop.
	(start_event_loop): Call gdb_do_one_event via catch_errors.
  	Handle caught errors.

Thu Nov  4 17:36:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (get_number): Delete static declaration.

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

	* breakpoint.c (map_breakpoint_numbers): use a match count
	instead of a goto.

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

	* config/mcore/tm-mcore.h (TARGET_BYTE_ORDER_DEFAULT): Change to
	little endian.

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

	* target.h (target_new_objfile) replace macro with function pointer
	hook.  Any module needing notification of new objfiles may claim
	this hook.  Multiple notification clients must cooperate by saving
	the previous pointer (if any) and calling it.
	* sol-thread.c (_initialize_sol_thread): point new_objfile hook at
	sol_thread_new_objfile.  Save old pointer if any.
	(sol_thread_new_objfile): call old owner of event hook if any.
	* hpux-thread.c (_initialize_hpux_thread, hpux_thread_new_objfile):
	ditto.
	* linux-thread.c (_initialize_linux_thread, linux_thread_new_objfile):
	ditto.
	symfile.c (symbol_file_add, clear_symtab_users) call the new
	function pointer hook, instead of the macro.
	* config/sparc/nm-sun4sol2.h: remove define of target_new_objfile.
	* config/pa/nm-hppah.h: ditto.
	* config/i386/nm-i386sol2.h: ditto.
	* config/i386/nm-linux.h: ditto.
	
1999-11-02  Tom Tromey  <tromey@cygnus.com>

	* NEWS: Mention breakpoint ranges.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* rdi-share/devsw.c (openLogFile): Change a call to setlinebuf()
	to an equivalent call to setvbuf() to prevent an unresolved
	reference when building on cygwin.

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

	* infrun.c (inferior_stop_reason): New enum, explicitly name the
 	resons for which the inferior stops.
	(handle_inferior_event): Case TARGET_WAITKIND_EXITED: replace
 	printf's with call to print_stop_reason(). Case
 	TARGET_WAITKIND_SIGNALLED: Same.  When stopped by random signal:
 	Same.
	(print_stop_reason): New static function. Print relevant messages
 	when stopping.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* rdi-share/Makefile.in: Rename dependency from bytesex.o to
	angel_bytesex.o.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

        * kod.c: Remove prototype for show_kod() which is no longer used.

1999-11-01  Michael Snyder <msnyder@cygnus.com>
	    Tom Tromey  <tromey@cygnus.com>

	* tracepoint.h (get_tracepoint_by_number): Updated declaration.
	* tracepoint.c (get_tracepoint_by_number): Added `multi_p'
	argument.  Now uses get_number_or_range and get_number.
	(trace_pass_command): Allow a tracepoint range.
	* breakpoint.h (get_number, get_number_or_range): Declare.
	* breakpoint.c (get_number_trailer): New function.
	(get_number): Rewrote to use get_number_trailer.
	(get_number_or_range): New function.
	(condition_command): Check `get_number' return value.
	(commands_command): Likewise.
	(ignore_command): Likewise.
	(map_breakpoint_numbers): Use get_number_or_range.

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

	* remote-rdi.c (_initialize_remote_rdi): Make log commands
	subcommands of maintenance. Remove improper identation from
	command documentation.

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

	From Grant Edwards <grante@visi.com>:
	* rdi-share/etherdrv.c (fetch_ports): Print out additional TCP/IP
	port information in ethernet driver if the DEBUG flag is set.
	* rdi-share/hostchan.c (Adp_addToQueue): Changed #if statement in
	hostchan.c to avoid compiler complaint when DEBUG macro was
	undefined.
	* rdi-share/unixcomm.c (Unix_ReadSerial): Print system error code
	if read() system call fails.

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

	* rdi-share/bytesex.h: Deleted. Conflicts with a system header file
	on some systems like Linux Red Hat 5.2.
        * rdi-share/angel_bytesex.h: New file. Replaces the above.
        * rdi-share/bytesex.c: Deleted. Name changed to match the header
	mentioned above (this is the implementation file).
        * rdi-share/angel_bytesex.c: New file. Replaces the above.
        * rdi-share/Makefile.am: Reflect above changes.
        * rdi-share/Makefile.in: Reflect above changes.

1999-11-01  Jimmy Guo  <guo@cup.hp.com>

	* annotate.c (breakpoints_changed, annotate_ignore_count_change,
 	annotate_stopped): Provide annotation for breakpoint ignore_count
 	changes but only provide once at annotate_stopped time for
 	sucessive ignore_count triggered breakpoint changes, to make GUIs
 	happy yet lazy.
	* annotate.h (annotate_ignore_count_change): Declare.
	* breakpoint.c (bpstat_stop_status): Call
	annotate_ignore_count_change when ignore_count changes.

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

	From Grant Edwards <grante@visi.com>:
	* rdi-share/ardi.c (HandleStoppedMessage): Changed code that
	handles the "stop" message so that unrecognized errors are
	returned as "Error" rather than "NoError".  The old code resulted
	in some error conditions not being reported to the user.

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

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (arm_rdi_open): Added a call to Adp_CloseDevice()
	before attempting to open a connection.  This allows the user to
	issue the "target rdi" command multiple times (in case the user
	needs to change options or re-initialize the link).

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

	From Grant Edwards <grante@visi.com>:
	* rdi-share/endian.h: Deleted.  Name clash with
	/usr/include/endian.h. This was causing the wrong  byte order to
	be used by htons() in the RDI Ethernet driver.
	* rdi-share/angel_endian.h: New file.  Replaces the above.
	* rdi-share/ardi.c: Replace include to reflect the above change.
	* rdi-share/etherdrv.c: Ditto.
	* rdi-share/hsys.c: Ditto.
	* rdi-share/msgbuild.c: Ditto.
	* rdi-share/params.c: Ditto.
	* rdi-share/rx.c: Ditto.
	* rdi-share/tx.c: Ditto.
        * rdi-share/Makefile.am: Reflect above changes.
        * rdi-share/Makefile.in: Reflect above changes.

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

	From Grant Edwards <grante@visi.com>:
        * remote-rdi.c (_initialize_remote_rdi): Added command
	rdilogenable. Allows the user to log ADP packets that are
	exchanged between gdb and the target.  Both the raw packets are
	shown and some minimal decoding is attempted. Default state is
	disabled.
	(_initialize_remote_rdi): Added command rdilogfile. Allows the
	user to specify the filename to which the ADP packet log is to be
	written. Default state is "rdi.log".
	(rdilogenable_command): New function. Related to rdilogenable.
	(rdilogfile_command): New function. Related to rdilogfile.
	* rdi-share/devsw.c (openLogFile, closeLogFile,
	DevSW_SetLogEnable, DevSW_SetLogfile, dumpPacket): New
	functions. Implement logging.
	(DevSW_Read): Log if requested.
	(DevSW_Write): Log if requested.
	* rdi-share/devsw.h: Add prototypes for DevSW_SetLogfile and
	DevSW_SetLogEnable.
	* rdi-share/hostchan.c (Adp_SetLogEnable, Adp_SetLogfile): New
	functions.  Related to rdilogenable and rdilogfile.
	* rdi-share/hostchan.h: Add prototypes for the above functions.

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

        From Grant Edwards <grante@visi.com>:
        * remote-rdi.c (arm_rdi_open): Added code to split the arguments
        to the 'target rdi' command at the first space.  The first word is
        passed to Adp_OpenDevice as the device name, the tail is passed as
        the "arguments" parameter.  This allows user specified baud rates
        -- among other things that still need to be documented [e.g. (gdb)
        target rdi /dev/ttyS1 19200]. NB: With very limited testing, the
        ARM Embedded-ICE seems to run at 19.2K (though it is reported to
        be unreliable above 9600), and the EPI Jeeni seems to run at
        38.4K.

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

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (_initialize_remote_rdi): Added the boolean
	set/show variable rdiromatzero. Should be set to true if the
	target has ROM at address 0.  If true, then gdb will not tell the
	target to trap fetches to interrupt vectors (which are located at
	address 0).  Using the Angel monitor, attempting to set
	breakpoints in ROM is an error.  Using JTAG debugging of the
	ARM7TDMI, attempting to set more than two breakpoints in ROM is an
	error. Default state is false (vectors will be trapped) -- used to
	be hardwired false.

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

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (_initialize_remote_rdi): Added the boolean
	set/show variable rdiheartbeat. This enables or disables ADP
	link-check "heartbeat" packets sent by the host to the target.
	Heartbeat packets can cause both the ARM Embedded-ICE and the EPI
	Jeeni to malfunction: If a heartbeat packet is received by the
	target while it is sending a packet, that packet will be aborted,
	and the ADP protocol engine then gets very confused. Default state
	is off -- used to hardwired on.

1999-10-29  Kevin Buettner  <kevinb@cygnus.com>

	* i386-linux-nat.c (dummy_sse_values): Also define for systems
	without PTRACE_GETXFPREGS.

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

	Hardware watchpoint fix from Eli Zaretskii <eliz@gnu.org>:
	
	* breakpoint.c (insert_breakpoints): Fetch the value of the
 	expression we need to watch.  If it's a lazy memory lvalue, then
	we need to fetch it now, before we start the inferior again.
	(insert_breakpoints, remove_breakpoint, bpstat_stop_status,
 	can_use_hardware_watchpoint): Only those values representing
 	memory we actually fetched need to be watched.

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

	* breakpoint.h (bpstat_print): Return 'enum print_stop_action',
 	not 'int'.

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

	* acconfig.h: Fix entries for HAVE_STRUCT_SAVE_STATE_T,
 	HAVE_STRUCT_MEMBER_SS_WIDE, and HAVE_PTRACE_GETXFPREGS.
	* config.h.in: Regenerated.
	
1999-10-28  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fixes for warnings from Andreas Jaeger <aj@suse.de>.
	* linux-thread.c (linuxthreads_sig_restart,
	linuxthreads_sig_cancel, linuxthreads_sig_debug): Add missing
	initializers to avoid gcc warnings.
	(resume_thread): Add braces as recommended by gcc -Wparentheses.
	(stop_thread): Likewise.
	(linuxthreads_wait): Likewise.
	(linuxthreads_find_trap): Likewise.

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

	* infcmd.c: Fix typo.

1999-10-28  Jim Blandy  <jimb@zenia.red-bean.com>

	* gdbtypes.c (init_simd_type): The upper bound to
	create_range_type is inclusive, not exclusive.

	Add preliminary support for the Pentium-III's Streaming SIMD
	Extensions --- specifically, the ability to read the XMM
	registers.
	* Configure.in: Check for PTRACE_GETXFPREGS, and #define
	HAVE_PTRACE_GETXFPREGS if we have it.
	* acconfig.h: Add entry for HAVE_PTRACE_GETXFPREGS.
	* configure, config.in: Regenerated.
	* config/i386/tm-linux.h (HAVE_SSE_REGS): #define, iff the
	configure script #defined HAVE_PTRACE_GETXFPREGS.
	(REGISTER_VIRTUAL_TYPE): Provide the proper types for the pointer
	registers and the SSE registers. 
	* i386-linux-nat.c (GETREGS_SUPPLIES, GETFPREGS_SUPPLIES,
	GETXFPREGS_SUPPLIES): New macros.
	(have_ptrace_getxfpregs): New variable.
	(FPREGSET_T_FPREG_ADDR): Renamed from FPREGSET_T_FPREG_OFFSET.
	(supply_fpregset, convert_to_fpregset): Callers changed.
	(supply_xfpregset, convert_to_xfpregset, fetch_xfpregs,
	store_xfpregs, dummy_sse_values): New functions.
	(fetch_inferior_registers, store_inferior_registers): Use the
	*_SUPPLIES macros to decide how to fetch a given register.  Use
	{fetch,store}_xfpregs and dummy_sse_values to provide access to
	the SSE registers, on systems where they are present.

1999-10-28  Kevin Buettner  <kevinb@cygnus.com>

	* gdbserver/gdbreplay.c (config.h, errno.h): Include.
	(perror_with_name): Don't declare sys_nerr, sys_errlist, or errno
	when STDC_HEADERS is defined.
	* gdbserver/utils.c (STDC_HEADERS): Likewise.

	* gdbserver/low-hppabsd.c, gdbserver/low-linux.c,
	gdbserver/low-lynx.c, gdbserver/low-sim.c, gdbserver/low-sparc.c,
	gdbserver/low-sun3.c (my_registers): Declare.
	(registers): Changed from array type to pointer type in order
	to match declaration in inferior.h in main gdb sources.
	* gdbserver/server.h (registers): Likewise.
	* gdbserver/remote-utils.c (outreg): Removed declaration of
	registers[].

	* gdbserver/low-linux.c (fetch_register): Changed PTRACE_PEEKUSR to
	PTRACE_PEEKUSER.  [Note the missing 'E'.]
	(store_inferior_registers): Likewise for PTRACE_POKEUSER.

	* gdbserver/low-linux.c (sys/ptrace.h): Move include to
	avoid conflict with #defines coming from <sys/user.h>.
	(sys/reg.h): Only include when HAVE_SYS_REG_H is defined.
	(PTRACE_XFER_TYPE): Provide a default type in case
	the target doesn't define it.
	(fetch_register, read_inferior_memory, write_inferior_memory):
	Use PTRACE_XFER_TYPE instead of int for ptrace() transfers.
	(I386_GNULINUX_TARGET): Use #ifdef with this symbol instead
	of assuming it's an x86 target when it's not a m68k target.
	(i386_register_raw_size, i386_register_byte): Define these arrays
	to match other changes that've been occuring to the x86 target
	in the main gdb sources.
	(initialize_arch): New (static) function for doing target arch
	specific initializations.

	* gdbserver/server.h (MAXBUFBYTES, PBUFSIZ): New defines
	[actually stolen from remote.c].
	* gdbserver/remote-utils.c (putpkt): Use PBUFSIZ to make
	sure that buffer is big enough.
	* gdbserver/server.c (main): Ditto.

	* gdbserver/remote-utils.c (outreg): Allow register numbers
	bigger than 255.
	(prepare_resume_reply):  Provide alternate mechanism,
	GDBSERVER_RESUME_REGS, for defining list of registers to send
	to gdb.
	* gdbserver/Makefile.in (INTERNAL_CFLAGS): Swapped order of
	INCLUDE_CFLAGS and BFD_CFLAGS to ensure that gdb's config.h
	gets found before bfd's config.h.  Also added -DGDBSERVER
	switch.
	(INCLUDE_CFLAGS): Added -I.. .

1999-10-27  Nick Clifton  <nickc@cygnus.com>

	* arm-tdep.c (THUMB_BE_BREAKPOINT): Change to 0xbebe.
	(THUMB_LE_BREAKPOINT): Change to 0xbebe.

Mon Oct 25 18:22:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c: Document future of compare_sections_command.
	(remote_insert_breakpoint, remote_remove_breakpoint,
 	remote_insert_watchpoint, remote_insert_watchpoint,
 	remote_remove_watchpoint, remote_insert_hw_breakpoint,
 	remote_remove_hw_breakpoint): Use alloca instead of GCC's dynamic
 	array feature.

Mon Oct 25 18:08:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (REGISTER_GDBARCH_SWAP): Define.
	* gdbarch.sh: Update.

Sat Oct 23 16:39:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (initialize_current_architecture): Make ``choice''
 	const.

1999-10-22  Tom Tromey  <tromey@cygnus.com>

	* gdbarch.sh: Updated for gdbarch.[ch] changes.
	* top.c (gdb_init): Call initialize_current_architecture.
	* gdbarch.h (initialize_current_architecture): Declare.
	* gdbarch.c (initialize_current_architecture): New function.

1999-10-21  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* utils.c (chars_per_line): fix typo in comment.

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

	* breakpoint.h (bp_print_how): New enum, used for deciding how to
 	print bpstat information when we stop, instead of having 3
 	different functions.
	(struct bpstat): Change print_it field to be an enum instead of a
 	function pointer.

	* breakpoint.c (print_it_typical): New name for print_it_normal().
	(print_bp_stop_message): New function. High level routine for
 	printing of why we stopped.
	(bpstat_print): Call print_bp_stop_message instead of using the
 	print_it function pointer.
	(print_it_done, print_it_noop): Delete these functions.
	
1999-10-21  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (print_it_normal): Reorganize into a switch
 	statement.

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

	* Makefile.in (event-top.o): Add dependency on target.h.
	* event-top.c: Make dependency on target.h explicit.

	* breakpoint.c (bpstat_print): Clean up logic. Remove recursion.
	(catch_exec_command_1): Surround with appropriate ifdef's,
	to avoid compiler warnings.
	(catch_fork_command_1): Ditto.

1999-10-20  Jim Blandy  <jimb@cris.red-bean.com>

	* Makefile.in (dwarf2read.o): Note that this depends on bfd/elf-bfd.h.
	(elf_bfd_h): New variable.

1999-10-19  Jim Blandy  <jimb@zenia.red-bean.com>

	* config/i386/tm-i386.h (REGISTER_NAMES): Change names of FPU
	instruction and operand pointer registers to improve consistency,
	following J. T. Conklin's suggestions.

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

	* breakpoint.h: Change return type of field print_it of struct
 	bpstats to enumeration print_stop_action.
	Define new enumeration print_stop_action.

	* breakpoint.c (print_it_normal): Change return type to
 	enumeration type print_stop_action. Handle bp_shlib_event here
 	instead of in normal_stop().
	(bpstat_print): Change return type to enumeration type
 	print_stop_action.
	(print_it_done): Ditto.
	(print_it_noop): Ditto.
	
	* infrun.c (is_internal_shlib_eventpoint): Delete this function.
	(stopped_for_internal_shlib_event): Delete.
	(normal_stop): Move logic to handle bp_shlib_event from here to
 	print_it_normal(). Use switch to handle return value from
 	bpstat_print().

Mon Oct 18 17:32:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Rewrite.  Make the size of each
 	chunk/block write a run-time option. Check for quit_flag.
	Use target_write_memory_partial for downloads.

1999-10-18  Jim Blandy  <jimb@zenia.red-bean.com>

	Change Linux x86 register support to use the new tm-i386.h layout.
	* config/i386/tm-linux.h (HAVE_I387_REGS): #define this, so we get
	the full set of FP register definitions from tm-i386.h.
	(REGISTER_RAW_SIZE, REGISTER_NAMES, REGISTER_BYTES, REGISTER_BYTE,
	MAX_REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE, NUM_REGS,
	NUM_FREGS): Remove #undefs and subsequent redefinitions: we're
	using the values from tm-i386.h now.
	(FPSTART_REGNUM, FPCONTROL_REGNUM, FPSTATUS_REGNUM, FPTAG_REGNUM,
	FPDATA_REGNUM, FPEND_REGNUM, FPENV_BYTES, FPREG_RAW_SIZE,
	FPREG_BYTES): Deleted.
	(TARGET_LONG_DOUBLE_BIT): Deleted.
	(REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
	REGISTER_CONVERT_TO_RAW): Redefine these only if LD_I387 is #defined.
	* i386-linux-nat.c (convert_to_gregset, convert_to_fpregset,
	FPREGSET_T_FPREG_OFFSET): New functions and macros.
	(supply_gregset, fill_gregset, supply_fpregset,
	fill_fpregset, fetch_fpregs, store_fpregs, fetch_regs,
	store_regs, fetch_inferior_registers, store_inferior_registers):
	Adjusted to use new macros from tm-i386.h.
	
	* config/i386/tm-i386.h: Provide a decent x86 FPU description here,
	so that the various i386 targets can share more FPU handling code.
	(NUM_GREGS): New macro.
	(NUM_SSE_REGS): New macro, dependent on HAVE_SSE_REGS
	(NUM_FREGS): Depend on HAVE_I387_REGS.
	(NUM_REGS, REGISTER_BYTES): Define in terms of NUM_GREGS,
	NUM_FREGS, and NUM_SSE_REGS.
	(MAX_NUM_REGS): New macro.
	(REGISTER_NAMES): Expand name list with FPU control registers and
	SSE registers.
	(FP7_REGNUM, FCTRL_REGNUM, FSTAT_REGNUM, FTAG_REGNUM, FCS_REGNUM,
	FCOFF_REGNUM, FDS_REGNUM, FDOFF_REGNUM, FOP_REGNUM,
	FIRST_FPU_CTRL_REGNUM, LAST_FPU_CTRL_REGNUM): New macros, more
	fully describing the FPU register set.
	(XMM0_REGNUM, XMM7_REGNUM, MXCSR_REGNUM): New macros, describing
	the SSE register set.
	(IS_FP_REGNUM, IS_SSE_REGNUM, FPU_REG_RAW_SIZE, SIZEOF_GREGS,
	SIZEOF_FPU_REGS, SIZEOF_FPU_CTRL_REGS, SIZEOF_SSE_REGS): New
	convenience macros.
	(REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE): Turn
	these into tables, since the register sizes are pretty irregular.
	(i386_register_byte, i386_register_raw_size,
	i386_register_virtual_size): New extern declarations.
	(TARGET_LONG_DOUBLE_BIT): Define.
	(MAX_REGISTER_RAW_SIZE): Bump to 16, for the SSE registers.
	(REGISTER_VIRTUAL_TYPE, REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW): New macros
	for handling floating-point registers.
	(i387_to_double, double_to_i387): New extern declarations.
	* i386-tdep.c (i386_register_byte, i386_register_raw_size,
	i386_register_virtual_size): New arrays.
	(_initialize_i386_tdep): Initialize i386_register_byte and
	i386_register_virtual_size.

	* i386-tdep.c (_initialize_i386_tdep): Move new_cmd to a block
	created specially for its use.

Mon Oct 18 23:36:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Cleanup the validate code - remove
 	#ifdef, use paddr to print address.
	(validate_download): Static, replace VALIDATE_DOWNLOAD
	
	* symfile.c (generic_load): Use strtoul to scan the optional load
 	offset.  Allocate a filename of the correct size.

Mon Oct 18 17:32:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Don't filter output. Use
 	print_transfer_performance for summary. Use paddr for addresses.
	(print_transfer_performance): New function.  Includes write count.
	(report_transfer_performance): Call
 	print_transfer_performance. Deprecate.

	* defs.h (print_transfer_performance): Add declaration.
	(generic_load): Move declaration to here.
	* symfile.h (generic_load): From here.

Mon Oct 18 16:29:52 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (remote_write_bytes): Re-write.  Transfer a single
 	packet and then return the that packets byte size.

Sun Oct 17 15:09:00 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_console_output): Flush gdb_stdtarg after
 	processing an ``O'' packet.
	* remote.h (remote_console_output): Strip PARAMS.
	
Sun Oct 17 15:12:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (target_xfer_memory_partial): New function. Simple
 	implementation of partial memory reads.
	(target_read_memory_partial): New function.  Replaces old
 	target_read_memory_partial.
	(target_write_memory_partial): New function.
	* target.h: Update.

	* valprint.c (partial_memory_read): New function, based on old
 	memory_read_partial.  Implement partial memory reads the way that
 	val_print_string likes.
	(val_print_string): Use partial_memory_read.

Sun Oct 17 13:58:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (ui_load_progress_hook): Add declaration.
	* dsrec.c (ui_load_progress_hook): Delete extern declaration.
	
	* symfile.c (ui_load_progress_hook): Make first argument const.
	(generic_load): Don't cast the result of bfd_get_section_name.
  	Replace ``sect'' with ``sect_name'', use consistently.

1999-10-15  Jim Blandy  <jimb@zenia.red-bean.com>

	Add beginnings of support for SIMD register types.
	* gdbtypes.c (init_simd_type): New function for building
	types for registers consisting of arrays of objects.
	(builtin_type_v4sf): New built-in type.
	(build_gdbtypes): Initialize it.
	(_initialize_gdbtypes): Arrange for gdbarch swapping.
	* gdbtypes.h (builtin_type_v4sf): Add external decl.

Fri Oct 15 18:20:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-hms.c: Commented out H8 code.

Fri Oct 15 17:46:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* dcache.c (dcache_p): Rename variable remote_dcache.  Make
 	static.
	(_initialize_dcache): Fix description of ``set remotecache''.
  	Cache is OFF by default.

1999-10-13  Jim Blandy  <jimb@zenia.red-bean.com>

	* valops.c (value_push): Don't forget to initialize container_len.

Wed Oct 13 17:58:20 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (tui_file_flush): Don't call flush_hook.  Don't try to
 	flush ``astring''.
	* gdb-events.sh: Update
	* top.c (flush_hook): Delete.

1999-10-13  Kevin Buettner  <kevinb@cygnus.com>

	* mem-break.c (memory_insert_breakpoint,
	memory_remove_breakpoint): Added missing return statements.

Wed Oct 13 20:53:42 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (mem_fileopen, mem_file_delete, mem_file_new,
 	mem_file_rewind, mem_file_put, mem_file_fputs): New functions.
	* defs.h (mem_fileopen): Declare.
	
1999-10-13  Kevin Buettner  <kevinb@cygnus.com>

	* mem-break.c (default_memory_insert_breakpoint): Renamed from
	memory_insert_breakpoint.
	(default_memory_remove_breakpoint): Renamed from
	memory_remove_breakpoint.
	(memory_insert_breakpoint, memory_remove_breakpoint,
	MEMORY_INSERT_BREAKPOINT, MEMORY_REMOVE_BREAKPOINT):  New
	wrappers.
	* target.h (default_memory_remove_breakpoint,
	default_memory_insert_breakpoint): Added declarations.
	* gdbarch.sh (MEMORY_INSERT_BREAKPOINT, MEMORY_REMOVE_BREAKPOINT):
	New methods.
	* gdbarch.h, gdbarch.c (MEMORY_INSERT_BREAKPOINT,
	MEMORY_REMOVE_BREAKPOINT, gdbarch_memory_insert_breakpoint,
	gdbarch_memory_remove_breakpoint, set_gdbarch_memory_insert_breakpoint,
	set_gdbarch_memory_remove_breakpoint) : Generated from gdbarch.sh.

Wed Oct 13 19:15:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h: Remove PARAMS from all declarations.  Re-indent.  Clean
 	up the gdb_file declarations.

Tue Oct 12 12:19:07 1999  David Taylor  <taylor@texas.cygnus.com>

	* i386-linux-nat.c (supply_fpregset, fill_fpregset): copy
	from/to start of fpregsetp not start of st_space as the first
	stuff we copy is the FP control registers not the actual FP values.

1999-10-12  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* eval.c (evaluate_subexp_standard): Fix gdb invocation of
	inferior C functions when debugging C++ code.
	* valops.c (find_overload_match): Ditto.
	* symtab.c (make_symbol_overload_list): Ditto.

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

	* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): It's not
	enough to #define this; you have to give it a non-zero value.

1999-10-11  Jim Blandy  <jimb@zenia.red-bean.com>

	Fix from Jim Kingdon <kingdon@redhat.com>, with tweaks to make it
	gdbarch- and bigendian-friendly:
	* valops.c (PARM_BOUNDARY): If not #defined, default to zero.
	(value_push): If PARM_BOUNDARY is not zero, align arguments to
	that boundary.
	* config/i386/tm-i386.h: Define PARM_BOUNDARY.

Mon Oct 11 14:23:55 1999  Fred Fish  <fnf@cygnus.com>

	* config/mips/tm-irix3.h (PS_REGNUM): Don't undef if we aren't
	going to redefine it to something else.

1999-10-11  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfread.c (read_func_scope): Don't try to set main_func_*;
	we handle that in blockframe.c:inside_main_func.
	* dwarf2read.c (read_func_scope): Likewise.
	(dwarf2_add_field, dwarf2_add_member_fn): Get member function name
	directly, not from mangled name.
	(skip_member_fn_name): Lose.

Mon Oct 11 12:24:52 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (enum serial_rc): Clarify SERIAL_TIMEOUT and
 	restrictions on TIMEOUT in ASYNC mode.

	* serial.c (serial_readchar): Check for invalid timeout when in
 	async mode.  Disable test.

Thu Oct  7 17:20:01 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* monitor.c (monitor_printable_string): Add length argument. Don't
 	return final string length.
	(monitor_printf_noecho, monitor_printf, monitor_expect): Update.
	(monitor_error): Pass real_len to monitor_printable_string.
	(monitor_error): Rewrite. Replace printf fmt string parameter with
 	function name and message parameters.
	(monitor_read_memory_single, monitor_read_memory): Update.

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

	* main.c (print_gdb_help): Fix bug reporting address.
	* gnu-regex.h, gnu-regex.c: Ditto.

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

	* parse.c (SYMBOLS_CAN_START_WITH_DOLLAR): New macro,
	whose value can be overridden by target files.
	(write_dollar_variable): Don't check the symbol table for
	identifiers beginning with `$' unless
	SYMBOLS_CAN_START_WITH_DOLLAR is non-zero.
	* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): Define.
	* doc/gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document.

	Remove all traces of the BINOP_SCOPE operator.  It's never
 	generated, and not implemented.
	* expression.h (enum exp_opcode): Delete BINOP_SCOPE.
	* c-lang.c (c_op_print_tab): Delete entry for BINOP_SCOPE.
	* eval.c (evaluate_subexp_standard): Doc fix.
	* expprint.c (op_name): Remove case for BINOP_SCOPE.
	(dump_subexp): Same.

	* dwarf2read.c (dwarf2_const_value): Treat DW_FORM_data1,
	DW_FORM_data2, DW_FORM_data4, and DW_FORM_data8 as signed values,
	since that's what read_var_value will do anyway.

1999-10-07  Fred Fish  <fnf@cygnus.com>

	* objfiles.h (struct objfile): Delete is_solib member, now handled
	by OBJF_SHARED bit in struct objfile's flags.
	* objfiles.c (objfile_purge_solibs): Check OBJF_SHARED bit in flags
	instead of old is_solib int member in objfile struct.

	* objfiles.c (allocate_objfile): Remove is_solib arg.  Now passed
	as a bit in combined flags arg.
	* symfile.c (symbol_file_add): Ditto.
	* objfiles.h (allocate_objfile): Adjust prototype after removal
	of is_solib arg.
	* symtab.h (symbol_file_add): Ditto.

	* cxux-nat.c (add_shared_symbol_files): Remove zero passed to
	symbol_file_add in old is_solib arg, defaults to zero now in
	flags.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	(add_symbol_file_command): Ditto.

	* coff-solib.c (coff_solib_add): Call symbol_file_add with
	OBJF_SHARED in flags bit, rather than 1 in old is_solib
	arg.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* objfiles.c (allocate_objfile): Remove old args "mapped" and
	"user_loaded".  Replaced with new arg "flags" containing specific
	If global var mapped_symbol_files is nonzero
	then set OBJF_MAPPED in flags arg.  Check for OBJF_MAPPED bit in
	flags where we used to check mapped arg.
	Pass flags to open_mapped_file instead of mapped arg.
	Ensure that OBJF_MAPPED bit is reset in flags when the objfile
	is not mapped.  Add passed flags bits to objfile's flags bits.
	(open_mapped_file): Replace "mapped" arg with new "flags" arg.
	Adjust prototype.  Pass flags to open_existing_mapped_file.
	(open_existing_mapped_file): Replace "mapped" arg with new "flags".
	Check flags for OBJF_MAPPED.
	* objfiles.h (allocate_objfile): Adjust prototype.
	* rs6000-nat.c (add_vmap): Pass zero for combined flags, rather
	than separate zero ints for old "mapped" and "user_loaded" flags.
	* symfile.c (symbol_file_add): Pass allocate_objfile combined flags
	rather than individual mapped and user loaded bits.

	* symfile.c (symbol_file_add): Delete user_loaded arg.
	* symtab.h (symbol_file_add): Adjust prototype for deleted
	user_loaded arg.
	* objfiles.h (struct objfile): Delete user_loaded member.
	(OBJF_USERLOADED): New flag bit to replace user_loaded.

	* symfile.c (symbol_file_command): Add OBJF_USER_LOADED to flags
	passed to symbol_file_add.  Delete previous passing of explicit 1
	for user_loaded.
	(add_symbol_file_command): Ditto.

	* coff-solib.c (coff_solib_add): No longer pass zero for user loaded,
	now defaults to zero in flags.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

Thu Oct  7 19:24:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (monitor.o): Allow monitor.o to be compiled with
 	-Werror.

	* monitor.c (monitor_debug_p): New variable. Replaces macro.
	(EXTRA_RDEBUG): Delete.  Update all uses.
	(monitor_debug): New function.  Replaces macro.
 	(RDEBUG): Delete macro.  Update all uses.
 	debug output to gdb_stdlog and not the console.

	* monitor.c: Fix printf formating.  Replace printf calls with
 	fprintf_unfiltered.

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

	* MAINTAINERS: Switch ARM target maintenance from Elena
	Zannoni to Jim Ingham.

1999-10-06  Frank Ch. Eigler  <fche@cygnus.com>

	* remote.c (hexnumnstr): New function.  Allow setting of width.
	(hexnumstr): Call the above.
	(remote_write_bytes): Fill in X-protocol address field more
	reliably.

1999-10-06  Fred Fish  <fnf@cygnus.com>

	* xcoffread.c (xcoff_symfile_offsets): Fix typo, addr->addrs.

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

	* remote.c (handle_remote_sigint_twice): Make this signal be
 	handled by inferior_event_handler, via the wrapper function.
	(async_remote_interrupt_twice): Make not static. Add debug print.
	* remote.h (async_remote_interrupt_twice): Export for use in
 	inf-loop.c.

	* inf-loop.c (inferior_event_handler_wrapper): New function.
	(inferior_event_handler): Handle a request to quit and kill the
 	target.
	Include remote.h.
	* inf-loop.h (inferior_event_handler_wrapper): Export.

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

	* remote-rdi.c (arm_rdi_open): If the angel_RDI_Open fails, close
	the serial port and raise an error.  If you try to go on, you will 
	stall forever down in the rdi-share code.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* printcmd.c (output_command): Makes sure result from the output
	command is printed before the next prompt.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* printcmd.c (print_formatted): Add missing stream parameter.
	(do_examine, print_command_1, output_command, do_one_display):
	Adjust call to print_formatted().

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

	* infcmd.c: Remove include of event-loop.h.
	* utils.c: Ditto.
	* top.c: Ditto.

	* infrun.c (fetch_inferior_event): Call inferior_event_handler
 	when inferior stops, instead of doing work ourselves.  
	(fetch_inferior_event): Use void* instead of gdb_client_data.
	Remove includes of event-top.h and event-loop.h. Add include of
 	inf-loop.h.
	(complete_execution): Move from here.

	* inf-loop.c (complete_execution): To here.
	(inferior_event_handler): Handle inferior's execution completion
 	case as well.
	* inf-loop.h: Add def of INF_LOOP_H.
	
	* event-top.h: Don't use gdb_client_data, use void*, to avoid
 	dependency on event-loop.h.
	
	* remote.c (remote_async_resume): Set target_executing only after we
	actually register the inferior with the event loop.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* corefile.c (memory_error): Use error_stream() and eliminate call
	to return_to_top_level().

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (error): Save error message text (w/o new line).
	(error_last_message): New function. Returns the last message
	issued by gdb.
	(error_init): New function. Initializes error handling machinery.
	(error_stream): New function. Allows the error message to be
	passed on a stream buffer.
	* defs.h: Add prototypes for error_stream() and
	error_last_message().
	* main.c (main): Add call to error_init().

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (tui_sfileopen): New function.  Replaces
	gdb_file_init_astring().
	* defs.h: Add prototype for the above.

Mon Oct  4 19:25:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (add_symbol_file_command): Fix -Wformat on query call.

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

	* target.c (cleanup_target): Type of to_async param is now
 	function with enum inferior_event_type param.
	
	* target.h (target_ops): Adjust to_async accordingly. Move enum
 	inferior_event_type to this file.  Don't have a typedef for
 	inferior_event_type. Add more enumeration constants INF_QUIT_REQ,
 	INF_EXEC_COMPLETE. Remove INF_SIGINT_FIRST, INF_SIGINT_SECOND.

	* inf-loop.c (inferior_event_handler): Change first param to tell
 	the type of event we are dealing with. Deal with INF_ERROR and
 	INF_REG_EVENT, for the moment. 
	Include target.h.

	* inf-loop.h (inferior_event_handler): Adjust prototype. Remove
 	enum inferior_event_type from here.
	
	* remote.c (remote_async_serial_handler): Pass INF_REG_EVENT to
 	the client callback.
	(remote_async): Change callback's param type to inferior_event_type.
	(async_client_callback): Change type as above.
	
1999-10-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (stdin_event_handler): Delete fd parameter, use
 	input_fd instead.
	* event-top.h (stdin_event_handler): Delete fd parameter.

	* inf-loop.c (inferior_event_handler): Delete fd parameter.  Use
 	target_async() to unregister the inferior fd in case of errors.
	* inf-loop.h(inferior_event_handler): Delete fd parameter. 

	* ser-unix.c (fd_event): Delete fd parameter. Use scb->fd,
 	instead.

	* remote.c (async_client_callback):  Delete fd parameter.
	(remote_async_serial_handler): Ditto.
	(remote_async): Adjust to new type of callback function.

	* target.c (cleanup_target): Adjust parameters for to_async
 	default case.
	* target.h (*to_async): Delete fd parameter from cb function.

	* event-loop.h (handler_func): Delete fd parameter.
	* event-loop.c (handle_file_event): Delete fd param from call to
 	proc. Do not include inferior.h.
	
1999-10-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (inferior_event_handler,
 	inferior_event_handler_wrapper): Move from here.
	* inf-loop.c: To here. New file.
	
	* event-loop.h (inferior_event_handler): Move from here.
	* inf-loop.h: To here. New file.

	* remote.c: Include inf-loop.h.
	(set_extende_protocol): Remove unused prototpye.

	* Makefile.in (SFILES): Add inf-loop.c. 
	(inf_loop_h): Define.
	(COMMON_OBS): Add inf-loop.o.
	(inf-loop.o): Add rule.
	(remote.o): Add dependency on inf-loop.h.

Fri Oct  1 19:59:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.c: Add some notes on how the async code works.

Fri Oct  1 01:45:32 1999  Jeffrey A Law  (law@cygnus.com)

	* somread.c (som_symfile_offsets): Fix typo in last change.

1999-09-30  Fred Fish  <fnf@cygnus.com>

	* coff-solib.c (coff_solib_add): Adjust call to symbol_file_add.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* irix5-nat.c (symbol_add_stub): Add section_addrs, zero it.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* irix5-nat.c (symbol_add_stub): Use section_addrs to pass text addr.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* coff-solib.c (coff_solib_add): Call symbol_file_add with NULL ptr.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* symfile.c (symbol_file_command): Ditto.

	* dstread.c (dst_symfile_offsets): Take "section_addr_info *"
	instead of CORE_ADDR.
	* somread.c (som_symfile_offsets): Ditto.
	* symfile.c (default_symfile_offsets): Ditto.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.

	* symfile.h (default_symfile_offsets): Adjust prototype.
	(syms_from_objfile): Ditto.
	* symtab.h (symbol_file_add): Ditto.

	* rs6000-nat.c (objfile_symbol_add): Call syms_from_objfile with NULL.
	* xcoffsolib.c (solib_add): Ditto.
	* gdb-stabs.h (SECT_OFF_MAX): Increase from 4 to 16.
	* symtab.h (MAX_SECTIONS): Define.
	(struct section_addr_info): New struct for better control over
	changing load addresses of sections.
	* objfiles.h (OBJF_READNOW): Add new flag bit.
	* symfile.h (sym_offsets): Change second param from CORE_ADDR to
	"section_addr_info *".

	* symfile.c (symbol_file_add): Replace scalar arg "CORE_ADDR addr"
	with "struct section_addr_info *addrs".
	(syms_from_objfile): Ditto.
	(add_symbol_file_command): Remove local variables "readnow" and
	"mapped".  Replaced with general "flags" variable.
	(symbol_file_command): Ditto.
	(add_symbol_file_command): Add local variables i, sec_num, argcnt,
	expecting_option, option_index, and opt. Rework option parsing code
	to handle additional options.
	(_initialize_symfile): Adjust add-symbol-file usage to match new
	option handling.
	(symbol_file_add): Remove parameters "mapped" and "readnow",
	replace with general "flags".
	(symbol_file_add): In call to allocate_objfile, replace "mapped"
	with extracted OBJF_MAPPED bit from flags.
	(symbol_file_add): Use OBJF_READNOW bit from flags, instead of
	"readnow" variable.
	(symbol_file_command): Set OBJF_MAPPED and OBJF_READNOW bits
	from parsed options.  Pass flags to symbol_file_add.
	(add_symbol_file_command): Ditto.
	(syms_from_objfile): Add local variables i, sect, lower_sect,
	lower_offset, and local_addr.  Substitute local_addr for addrs
	when addrs is NULL.  Find lowest loadable section to be used as
	starting point for contiguous sections.  Adjust offsets if segments
	are not contiguous.  Call sym_offsets with section_addr_info
	instead of single addr.
	(default_symfile_offsets): Initialize objfile's section_offsets
	with user specified offsets.
	(symbol_file_add): Call syms_from_objfile with offsets.
	(unknown_option_complaint): Add.
	(add_symbol_file_command): Add "section_addrs", zero it with memset.

1999-09-30  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Call config.sub explicitly instead of misusing the
	autoconf internal variable $ac_config_sub.
	* configure: Regenerated.

Thu Sep 30 15:53:59 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (readchar): When EOF mourn the inferior.
	(getpkt): Try QUIT.  Might not be a watchdog timer timeout.
	(remote_async_serial_handler): Pass ``-1'' as the dummy FD.  Safer
 	than ZERO == STDIN.

	* serial.h (enum serial_rc): Replace #define SERIAL_ERROR,
 	SERIAL_TIMEOUT and SERIAL_EOF.
	(struct _serial_t): Add more notes on termios specific fields.

	* ser-unix.c (generic_readchar): Make SERIAL_ERROR sticky.
	(do_hardwire_readchar, do_unix_readchar): Don't use bufcnt as a
 	tempoary for the return-value from read.

	* serial.c (serial_logchar): Add a stream parameter.
	(serial_readchar, serial_write, serial_send_break): Update.
	(serial_readchar): Add serial debug trace.

Thu Sep 30 12:07:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct _serial_t): Add field async_state.  Better
 	document field bufcnt.
	(SERIAL_ERROR): Delete comment about errno.
	* serial.c (serial_open, serial_fdopen): Initialize async_state.

	* ser-unix.c (push_event, fd_event, reschedule): New functions.
  	Handle ASYNC serial input.
	(ser_unix_async): Update.
	(generic_readchar): New function. Handle event scheduling. Make
 	EOF condition sticky.
	(do_unix_readchar): Rename ser_unix_readchar.
	(ser_unix_readchar): New function, call do_unix_readchar via
 	generic_readchar.
	(do_hardwire_readchar, hardwire_readchar): Ditto.

	* ser-unix.c (ser_unix_readchar): Delete code working around ASYNC
 	fifo bugs.
	(hardwire_readchar): Delete code working around ASYNC fifo bugs.

Wed Sep 29 21:27:16 1999  Jeffrey A Law  (law@cygnus.com)

	* breakpoint.c (insert_breakpoints): Addresses are CORE_ADDRs,
	not "int"s.
	(remove_breakpoint): Likewise.

1999-09-29  Fred Fish  <fnf@cygnus.com>

	* breakpoint.c (breakpoint_1):  Replace cast "(CORE_ADDR) - 1"
	with the more obviously intended expression "(CORE_ADDR) -1".
	* dwarf2read.c (scan_partial_symbols, read_file_scope): Ditto.
	* gnu-nat.c (gnu_create_inferior): Ditto.
	* go32-nat.c (go32_create_inferior): Ditto.
	* hppa-tdep.c (hppa_pop_frame): Ditto.
	* infcmd.c (continue_command, step_1, signal_command): Ditto.
	(until_next_command, finish_command): Ditto.
	* infrun.c (proceed): Ditto.
	* inftarg.c (child_create_inferior): Ditto.
	* m3-nat.c (m3_create_inferior): Ditto.
	* mac-nat.c (child_create_inferior): Ditto.
	* procfs.c (procfs_create_inferior): Ditto.
	* remote-sim.c (gdbsim_create_inferior): Ditto.
	* target.c (target_link): Ditto.
	* win32-nat.c (child_create_inferior): Ditto.

Thu Sep 30 10:36:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.c (ser_unix_flush_input): New function.  Discard input
 	buffer.
	(hardwire_flush_input): Use ser_unix_flush_input.
	(ser_unix_nop_flush_input): Delete.
	* ser-unix.h (ser_unix_flush_input): Update.
	ser-tcp.c (_initialize_ser_tcp), ser-pipe.c
 	(_initialize_ser_pipe): Update.
	
	* ser-unix.c (hardwire_write): Delete.
	(_initialize_ser_hardwire): Update, use ser_unix_write.

Thu Sep 30 10:16:50 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (pipe_open): Don't make the FD non-blocking.  Already
 	being handled in ser_unix_wait_for by a select.
	
Thu Sep 30 10:00:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct _serial_t): Add field debug_p.
	(SERIAL_DEBUG, SERIAL_DEBUG_P): Define.

	* serial.c (serial_open, serial_fdopen): Initialize debug_p.
	(serial_debug, serial_debug_p): New functions.
	(global_serial_debug_p): New variable.
	(_initialize_serial): Add ``set serialdebug'' command.

Thu Sep 30 09:09:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (serial_event_ftype): Replace FD and ERROR args with
 	SERRIAL_T arg.
	* ser-unix.c (ser_unix_event): Update.

	* remote.c (remote_async_serial_handler): New function.  Handle
 	serial events.
	(remote_async): Pass remote_async_serial_handler to SERIAL.
	(async_client_callback, async_client_context): New variables.

	* remote.c (extended_remote_async_create_inferior): Use
 	target_async to register the inferior event handler.

Thu Sep 30 00:02:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_FUNCS): Test for sigprocmask.
	* configure, config.in: Re-generate.
	* event-top.c (async_stop_sig): Use sigprocmask when available.  

1999-09-29  Doug Evans  <devans@casey.cygnus.com>

	* sh-stub.c (handle_exception): Fix typo in patch of 1999-08-26.
	* m68k-stub.c (handle_exception): Ditto.

1999-09-28  Fred Fish  <fnf@cygnus.com>

	* alpha-nat.c (alpha_osf_core_fns, alpha_elf_core_fns):
	Add default entries for check_format and core_sniffer.
	* core-aout.c (aout_core_fns): Ditto.
	* core-regset.c (regset_core_fns): Ditto.
	* core-sol2.c (solaris_core_fns): Ditto.
	* i386aix-nat.c (i386aix_core_fns): Ditto.
	* i386mach-nat.c (i386mach_core_fns): Ditto.
	* irix4-nat.c (irix4_core_fns): Ditto.
	* irix5-nat.c (irix5_core_fns): Ditto.
	* lynx-nat.c (lynx_core_fns): Ditto.
	* mips-nat.c (mips_core_fns): Ditto.
	* ns32knbsd-nat.c (nat_core_fns): Ditto.
	* rs6000-nat.c (rs6000_core_fns): Ditto.
	* sparc-nat.c (sparc_core_fns): Ditto.
	* sun-nat.c (sun3_core_fns): Ditto.
	* ultra3-nat.c (ultra3_core_fns): Ditto.

	* corelow.c (core_vec): New, for selected core file handler.
	(sniff_core_bfd): New function.
	(gdb_check_format): New function.
	(default_check_format): New function.
	(default_core_sniffer): New function.
	(sniff_core_bfd): New function.
	(core_close): Reset core_vec to NULL.
	(core_open): Fall back to gdb_check_format if bfd_check_format
	does not identify the file format.  Call sniff_core_bfd to pick
	a core file handler.
	(get_core_registers): Remove code that is now in sniff_core_bfd.
	Use current core_vec.

	* gdbcore.h (check_format): New core_fns function, points to function
	to try and identify a core file format.
	(core_sniffer): New core_fns function, points to function to select
	a specific handler for the selected core file format.
	(default_core_sniffer): Add prototype.
	(default_check_format): Add prototype.

	* i960-tdep.c (inferior.h): Include.
	* mips-tdep.c (read_next_frame_reg): Use ADDR_BITS_REMOVE
	on addresses pulled from stack.

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

	* event-loop.c (poll_timers): Check whether the timer list has any
 	element on it by looking at the first element pointer, instead of
 	num_timers.

Wed Sep 29 18:02:31 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* command.c: Attempt to include POSIX <sys/wait.h> before
 	<wait.h>.

	* ser-unix.c (hardwire_print_tty_state): Ditto.
	* inflow.c (child_terminal_info): Fix printf args.

1999-09-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c (remote_async_resume): Register the inferior with the
 	event loop.
	(remote_async_open_1): Don't put the target in async mode here,
 	just do it when executing.

	* infrun.c (complete_execution): Unregister the inferior from the
 	event loop.

	* event-top.c (async_disable_stdin): Don't add
 	async_enable_stdin() to the exec_cleanups chain.

Tue Sep 28 11:08:34 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Ignore IMPORT_SHLIB stubs
	except for hpux11 native.  Break out of the loop to find a
	stub as soon as we find an IMPORT stub.
	(skip_prologue_hard_way): Also recognize copy %ret1,target and
	all PA64 argument stores as prologue instructions.

1999-09-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c, defs.h, event-top.c, infcmd.c, infrun.c, main.c,
 	remote.c, top.c, tracepoint.c, utils.c (async_p): Change var name
 	to event_loop_p.
	
1999-09-28  Jim Blandy  <jimb@cris.red-bean.com>

	* hppa-tdep.c (skip_prologue_hard_way): Recognize ldo insns
	which generate pointers into the argument list.

Tue Sep 28 13:56:49 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.h (cleanup_sigint_signal_handler,
 	initialize_sigint_signal_handler): Delete extern declarations.
	* event-top.c, infrun.c: No longer need to include "remote.h".
	* remote.c (cleanup_sigint_signal_handler,
 	initialize_sigint_signal_handler): Make static.
	* Makefile.in (event-top.o): Delete dependency on "remote.h".

	* remote.c (remote_async_terminal_ours_p): New static global. Keep
 	track of who currently owns the terminal.
 	(remote_async_open_1): Initialize.
	(remote_async_terminal_inferior): Test
 	remote_async_terminal_ours_p.  Claim CNTRL-C handler as part of
 	transfering the terminal to the target.
	(remote_async_terminal_ours): Similar.

Mon Sep 27 12:33:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (async_interrupt_query): Delete function.  Merged into
 	interrupt_query.  Async cases handled by target_terminal_ours,
 	target_terminal_inferior and SERIAL_CLOSE.
	(async_remote_interrupt_twice): Update.
	(remote_async_terminal_ours, remote_async_terminal_inferior): New
 	functions. Steal STDIN from GDB's CLI.
	(init_remote_async_ops): Initialize to_terminal_ours and
 	to_terminal_inferior.

	* event-top.c (async_disable_stdin, async_disable_stdin): Use
 	target_terminal_ours / target_terminal_inferior to transfer
 	ownership of the terminal between GDB and the target.

1999-09-27  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (run_command): Call async_disable_stdin() only if
	dealing with an asynchronous target.

Mon Sep 27 11:48:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.h (struct target_ops): Add to_can_async_p, to_is_async_p,
 	to_async.  Delete to_has_async.  These correspond well with
 	SERIAL* async methods.
	(target_can_async_p, target_is_async_p, target_async): Define.
	* target.c (update_current_target, cleanup_target): Update.

	* remote.c (remote_async_open_1): Change target to async using
 	target_async.
	(remote_can_async_p, remote_is_async_p, remote_async): New
 	functions.
	(remote_async_wait, remote_async_open_1): Add FIXME about how
 	wait_forever_enabled_p can almost be deleted once the client can
 	enable/disable target_async.

	* breakpoint.c (until_break_command), infrun.c (proceed), infcmd.c
 	(run_command, continue_command, step_1, jump_command,
 	until_command, finish_command, interrupt_target_command), top.c
 	(return_to_top_level, execute_command), event-top.c
 	(command_handler): Replace target_has_async with
 	target_can_async_p.

Sun Sep 26 02:10:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): If we go into async mode, never
 	wait for ever.

	* infcmd.c: Include "event-top.h".
	(run_command, continue_command, jump_command, until_command,
 	finish_command): Use async_disable_stdin to disable the console
 	for synchronous commands.

	* remote.c (async_interrupt_query): Only disconnect the console
 	from the terminal when sync_execution.

	* remote.c (initialize_sigint_signal_handler): Move declaration
 	from here.
	* remote.h: To here.  Make non-static.

	* remote.c (remote_async_resume, async_interrupt_query): Move
 	prompt code from here.
	* event-top.c (async_disable_stdin, async_enable_stdin): To
 	here. New function.

	* infrun.c (start_remote): Delete commented out code.

Fri Sep 24 12:38:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): Perform the initial async_open
 	using only synchronous calls.  Only after the target is fully
 	connected, switch to async mode.  Include FIXME about now it
 	currently works VS how it should be working.
	(remote_async_open_1, set_extended_protocol): Delete function
 	set_extended_protocol.  All open communication is now done
 	synchronously.
	(forever_enabled_p): New variable.  Determine if remote_async_wait
 	should block FOREVER when fetching target information.
	(remote_cisco_open, remote_open_1): Set forever_enabled_p.

	* infrun.c (start_remote): During the initial connect, always use
 	a synchronous wait.

Sat Sep 25 18:13:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (event-top.o): Add dependency.
	* event-top.c: Include "remote.h".
	* remote.c (async_interrupt_query), event-top.c:
 	(async_enable_stdin): Pass dummy parameter to
 	cleanup_sigint_signal_handler.
	* remote.c (cleanup_sigint_signal_handler), remote.h
 	(cleanup_sigint_signal_handler), event-top.c (async_enable_stdin),
 	event-top.h (async_enable_stdin): Change signature to match
 	make_exec_error_cleanup handler pararameter.

Thu Sep 23 20:48:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (enum command_class): Move from here.
	* command.h (command_class): To here.

1999-09-24  Kevin Buettner  <kevinb@cygnus.com>
	* breakpoint.c (bpstat_stop_status): Use not_a_breakpoint to
	help properly set bp_addr.
	* infrun.c (handle_inferior_event): Simplify calls to
	bp_stop_status.

1999-09-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (return_to_top_level): Do exec_error cleanups if are
 	interrupting a simulated synchronous execution command.

	* infrun.c (start_remote): Create a cleanup to enable stdin in
 	case of error from this command.
	(complete_execution): Do the enabling of stdin via the exec_error
 	cleanups, when needed.

	* remote.c (remote_async_resume): Make sure we re-enable stdin in
 	case of error from the target.
	(handle_remote_sigint_twice): The handler to be set is
 	async_remote_interrupt_twice, not async_remote_interrupt.
	(async_remote_interrupt_twice): Don't do anything if the target
 	has been killed already. Call async_interrupt_query, instead of
 	interrupt_query.
	(async_interrupt_query): New function. Async case of
 	interrupt_query().
	
	* event-top.c (async_enable_stdin): New function. Reinstate stdin
 	with the event loop.
	* event-top.h (async_enable_stdin): Export.

	* utils.c (exec_error_cleanup_chain): New cleanup chain.
	(make_exec_error_cleanup, do_exec_error_cleanups,
 	discard_exec_error_cleanups): New functions.
	* defs.h (make_exec_error_cleanup, do_exec_error_cleanups,
 	discard_exec_error_cleanups): Export.

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

	* ax-gdb.c (expr_to_agent): Don't forget to pass argument to
 	new_agent_expr.

1999-09-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (fetch_inferior_event_wrapper): New
 	function. Wrapper to pass to catch_errors.
	(inferior_event_handler): Pop the target if things go bad with it.
	Call fetch_inferior_event() from within catch_errors(). 

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

	* ax-gdb.c: Use internal_error instead of error, where
	appropriate.

1999-09-23  James Ingham  <jingham@leda.cygnus.com>

	* target.c (target_resize_to_sections): New function.  Gather the
	resizing code for the to_sections field into one place, and make
	sure you update the other targets that are sharing the to_sections 
	structure.
	* target.h: Declare the target_resize_to_sections function.
	* solib.c (solib_add): use target_resize_to_sections.
	* somsolib.c (som_solib_load_symbols): ditto
	* rs6000-nat.c (xcoff_relocate_core): ditto
	* pa64solib.c (pa64_solib_load_symbols): ditto
	* irix5-nat.c (solib_add):ditto

	* top.c: Define the attach & detach hooks
	* defs.h: Declare the attach & detach hooks.
	* infcmd.c (attach_command): call the attach hook if it exists.
	(detach_command): call the detach hook if it exists.

	* complaints.c (complain): Send the complaints to stderr rather
	than stdout, so they don't get mixed into the result stream from
	commands. 

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

	* event-loop.c (poll_timers): Use correct timeval field names,
 	when setting the notifier timeouts, in case of select() used.
	(gdb_wait_for_event): Pass a pointer to the timeout structure to
 	select(), not the structure.

Wed Sep 22 10:35:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (init.c): Change generated file to include "defs.h"
 	and "call-cmds.h". Use initialize_file_ftype when declaring
 	each initialize functions.
	(call_cmds_h): Add definition.
	(init.o): Add target and dependencies.
	(init.c): Don't grep for _initialize* in init.c.

	* defs.h (initialize_file_ftype): Add function typedef.

1999-09-22  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* procfs.c (init_procinfo): move fltset initialization to caller.
	(do_attach, create_procinfo): initialize fltset.

1999-09-22  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c, event-top.c, event-loop.h: Rerun indent.

1999-09-21  Doug Evans  <devans@casey.cygnus.com>

	* m32r-stub.c (handle_exception): Fix typo in patch of 1999-08-26.

Tue Sep 21 14:55:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From 1999-08-20 J.T. Conklin  <jtc@redback.com>:
	* remote.c (read_frame): expand cisco run-length encoding variant
 	inline as is done for the standard encoding.
	(remote_cisco_expand): Removed.

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

	* event-loop.c: Include <sys/time.h>.

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

	* ser-ocd.c: (ser_ocd_open, ser_ocd_raw, ser_ocd_readchar,
 	ser_ocd_setbaudrate, ser_ocd_write, ser_ocd_close,
 	ser_ocd_get_tty_state, ser_ocd_set_tty_state): Remove unused
 	prototypes.
	(ocd_readremote): Remove.
	(ocd_write): Remove unused var 'c'.

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

	* event-top.c (change_line_handler): Cleanup dead code. Add comments.
	* event-loop.c: Cleanup #if 0 code.

	* event-loop.h (timer_handler_func): New function type.
	(create_timer): Export function.
	(delete_timer): Export function.

	* event-loop.c: Add timeout and timeout_valid fields to
 	gdb_notifier.  New structures gdb_timer and timer_list.
	(gdb_do_one_event): Check whether there are any timers tht are
 	ready, before going to wait.
	(gdb_wait_for_event): If the timeout structure is meaningful, pass
 	that to select()/poll().
	(create_timer): New function. Creates a timer.
	(delete_timer): New function. Deletes a timer.
	(handle_timer_event): New function. Deals with timers that are ready.
	(poll_timers): New Function. Chack whether timers have expired.

Mon Sep 20 17:00:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (getpkt, putpkt, remote_console_output): Move
 	declaration from here.
	* remote.h: To here. New file.
	* tracepoint.c(putpkt, getpkt, remote_console_output): Delete
 	declarations. Moved to "remote.h".
	* Makefile.in (remote_h): Define.
	* remote.c, tracepoint.c: Include "remote.h".
	* Makefile.in (tracepoint.o, remote.o): Add dependency on
 	"remote.h".

	* remote.h (remote_cisco_objfile_relocate,
 	cleanup_sigint_signal_handler): Add declaration.  Include FIXME.
	* infrun.c: Include "remote.h".
	(complete_execution): Delete local extern declaration
 	of ``cleanup_sigint_signal_handler''.
	* Makefile.in (infrun.o): Add dependency on remote.h.

Mon Sep 20 13:41:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* kod.c (ecos_kod_open, ecos_kod_request, ecos_kod_close,
 	cisco_kod_open, cisco_kod_request, cisco_kod_close): Move
 	declarations from here.
	* kod.h: To here. New file.
	* kod-cisco.c, kod.c: Include "kod.h".
	* Makefile.in (kod-cisco.o, kod.o): Add dependency on "kod.h".

	* kod.h (kod_display_callback_ftype, kod_query_callback_ftype):
 	New function types.
	* kod.h (kod_cisco_open): Use in declaration.
	* kod.c (gdb_kod_open): Update definition.
	* kod-cisco.c (cisco_kod_open): Update definition.

Mon Sep 20 12:13:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (_initialize_mn10300_tdep): Add declaration.

	* breakpoint.c (until_break_command_continuation): Add
 	declaration.  Make static.
	* event-top.c (rl_callback_read_char_wrapper): Ditto.

Fri Sep 17 19:28:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* source.c: Include "source.h".
	(open_source_file, find_source_lines): Move declaration from here.
	* source.h: New file. To here.
	* Makefile.in (source.o): Add dependency on source.h.

	* breakpoints.c (delete_command): Move declaration from here.
	* breakpoints.h (delete_command): To here.
	
1999-09-18  Jim Blandy  <jimb@cris.red-bean.com>

	* hppa-tdep.c (in_solib_call_trampoline): If we can't recognize
	the instruction we're at, we're not in a stub.

Sat Sep 18 07:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* dwarf2read.c (dwarf_decode_lines): Correctly handle
	DW_LNS_const_add_pc.

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

	* remote.c (remote_async_open_1): Use inferior_event_handler to
 	handle inferior events.
	(extended_remote_async_create_inferior): Ditto.

	* serial.h (serial_event_ftype): Add two pars. 

	* ser-unix.c (ser_unix_event): Add two parameters, error and fd.
	Pass those into the call to the actual inferior event handler.

	* infrun.c (complete_execution): Stdin handler is stdin_event_handler.

	* event-top.h (stdin_event_handler): Export new function.

	* event-top.c (stdin_event_handler): New function. Smarter handler
 	for events on stdin.
	(change_line_handler): Don't need to update the handler for stdin
 	here anymore.
	(_initialize_event_loop): Stdin handler is now stdin_event_handler.

	* event-loop.h: (handler_func): Change signature, adding two new
 	args.
	(sig_handler_func): New function type. It is the old handler_func.
	(create_async_signal_handler): Update to use sig_handler_func.
	(delete_async_signal_handler): Prototype for new function.

	* event-loop.c: Include "inferior.h".
	(struct file_handler): Add field error, to indicate error
 	condition on fd.
	(struct async_signal_handler): Rename type of proc field.
	(add_file_handler): Add exception condition as something select()
 	should report.
	(handle_file_event): In case of error on the fd, record this in
 	the file_handler structure. Update call to (*proc)() to match new
 	signature.
	(gdb_wait_for_event): If select() or poll() return error, report
 	this to user.
	(create_async_signal_handler): Change first param type to
 	sig_handler_func*.
	(inferior_event_handler): New function. Smarter inferior event
 	handling.

1999-09-18  Jim Blandy  <jimb@cris.red-bean.com>

	* pa64solib.c (pa64_solib_create_inferior_hook): Remove code which
	tries to set __d_pid; it's not relevant to PA64 shared libraries.

	A psymtab's texthigh element, and a block's endaddr element, are
	the address past the end of the address range, never the address
	of the last byte.  These data structures mean the same thing on
	forty different architectures; there's no reason they should be
	different on HP/UX.
	* symtab.c (find_pc_sect_psymtab): Remove special case for HP/UX.
	(find_pc_sect_symtab): Same.
	* objfiles.c (find_pc_sect_section): Same.

Sat Sep 18 07:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (internalize_unwinds): Handle PA64 shared libraries
	correctly

	* hppa-tdep.c (in_solib_call_trampoline): Handle PA64 shared library
	trampolines.

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

	* breakpoint.c (permanent_breakpoint_here_p): Delete.
  	Accidentally left over from previous changes.

1999-09-17  Jim Blandy  <jimb@cris.red-bean.com>

	* config/pa/tm-hppa64.h (ARGS_GROW_DOWNWARD): Deleted.  There are
	many more differences between the 32- and 64-bit ABI's than the
	direction the arguments grow, so this name is misleading.
	(PA20W_CALLING_CONVENTIONS): Define this instead.
	* config/pa/tm-hppa.h (ARGS_GROW_DOWNWARD): Delete.
	* hppa-tdep.c (hppa_push_arguments): Split into two separate
	functions, depending on whether PA20W_CALLING_CONVENTIONS is
	#defined.  These implement completely separate specifications,
	they don't really share that much code anyway, and this is much
	more readable.  Specifically: leave a 16-byte, not 32-byte, frame
	marker; correctly align objects larger than eight bytes; promote
	all integral scalar arguments smaller than eight bytes to a full
	register width; pad aggregates smaller than eight bytes on the
	right.

Thu Sep 16 17:33:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): Use SERIAL_ASYNC to
 	enable/disable async event callback on serial port.  Use
 	SERIAL_CAN_ASYNC_P / SERIAL_IS_ASYNC_P to determine if / when
 	async mode.
	(remote_async_resume, remote_async_detach, remote_async_kill,
 	extended_remote_async_create_inferior, remote_async_wait): Ditto.

	* ser-unix.c (hardwire_readchar): When ASYNC, only read a single
 	character.
	(ser_unix_readchar): Ditto.  Problems occure with back-to-back
 	data from a target.  The ASYNC code can loose the second data
 	chunk.

	* serial.c (serial_fdopen): Initialize async_handler and
 	async_context.

1999-09-16  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* utils.c (discard_all_continuations): New function.
	* defs.h: (discard_all_continuations): Add prototype.

1999-09-16  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* valops.c: Remove prototype for search_struct_field_aux(). THe
 	function was nowhere in the file.
	(value_ind): Remove unused var real_val.
	(value_find_oload_method_list): Remove unused var v. 
	(find_overload_match): Remove extra declaration of var jj.

	* Makefile.in (event_top_h): Define. Add dependency on this for
 	every file that includes event-top.h.

Thu Sep 16 17:33:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c (serial_open): Delete ``&'' device.
	* ser-unix.c (_initialize_ser_hardwire): Make the "hardwire"
 	device async.  Delete temporary "async-hardwire" device.

Thu Sep 16 16:27:13 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (SERIAL_IS_ASYNC_P): Define.  Non-zero when serial
 	device is in async mode.
	(SERIAL_CAN_ASYNC_P): Rename SERIAL_ASYNC_P.
	* serial.c (serial_is_async_p): Implement.
	(serial_can_async_p): Rename serial_async_p.
	(serial_open): Initialize ASYNC_HANDLER and ASYNC_CONTEXT. Save
 	the original name in SCB instead of the stripped name.

Thu Sep 16 12:20:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct serial_ops): Add field ASYNC.
	(SERIAL_ASYNC, SERIAL_ASYNC_P): New macros.
	(struct _serial_t): Add fields async_context and async_handler.
	* serial.c (serial_async, serial_async_p): Implement.

	* ser-unix.c: Include "event-loop.h".
	(ser_unix_async), ser-unix.c: New function.  Implement async mode.
	(async_event): Handle async events.
	* ser-unix.c (_initialize_ser_hardwire), ser-tcp.c
 	(_initialize_ser_tcp), ser-pipe.c (_initialize_ser_pipe): Enable
 	ASYNC.

	* serial.c (serial_open): Discard leading ``|'' before opening a
 	pipe device.
	* ser-pipe.c (pipe_open): Adjust.
	* serial.c (serial_open): Add ``&'' prefix so that
 	"async-hardwire" device can be explicitly selected.  Work in
 	progress.
	* ser-unix.c: Register "async-hardwire" device.
  
Thu Sep 16 09:04:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.h: New file.  Declare generic ser_unix functions.
	* ser-unix.c (ser_unix_nop_get_tty_state,
 	ser_unix_nop_set_tty_state, ser_unix_nop_raw, ser_unix_wait_for,
 	ser_unix_readchar, ser_unix_nop_noflush_set_tty_state,
 	ser_unix_nop_print_tty_state, ser_unix_nop_setbaudrate,
 	ser_unix_nop_setstopbits, ser_unix_write,
 	ser_unix_nop_flush_output, ser_unix_nop_flush_input,
 	ser_unix_nop_send_break, ser_unix_nop_drain_output): New
 	functions.
	* ser-unix.c: Include <sys/wait.h>, <sys/socket.h>,
 	"gdb_string.h".
	
 	* ser-tcp.c (_initialize_ser_tcp), ser-unix.c
 	(_initialize_ser_hardwire), ser-pipe.c (_initialize_ser_tcp):
 	Initialize ops vector using assignment.

	* ser-pipe.c, ser-tcp.c, ser-unix.c: Include ser-unix.h.
	
	* ser-pipe.c (pipe_get_tty_state, pipe_set_tty_state,
 	pipe_return_0, pipe_raw, wait_for, pipe_readchar,
 	pipe_noflush_set_tty_state, pipe_print_tty_state,
 	pipe_setbaudrate, pipe_setstopbits, pipe_write), ser-tcp.c
 	(tcp_get_tty_state, tcp_set_tty_state, tcp_return_0, tcp_raw,
 	wait_for, tcp_readchar, tcp_noflush_set_tty_state,
 	tcp_print_tty_state, tcp_setbaudrate, tcp_setstopbits, tcp_write):
 	Delete functions.

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

	* d10v-tdep.c (remote_d10v_translate_xfer_address): Move to here
	from remote-d10v.c, also change the memory translation to its
	previous version.
	* remote-d10v.c: Remove.
	* config/d10v/d10v.mt (TDEPFILES): Remove remote-d10v.o.

1999-09-15  Jim Blandy  <jimb@cris.red-bean.com>

	* breakpoint.c (remove_breakpoint): Return zero, not nothing.

1999-09-14  Jim Blandy  <jimb@cris.red-bean.com>

	* hppa-tdep.c (frame_chain): If the unwind info says we've saved
	r3, don't trust it.  Call get_frame_saved_regs and see if we can
	actually find an address for r3 there.

	* pa64solib.c (pa64_sharedlibrary_info_command): Text fix.

Tue Sep 14 14:34:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (DEPRECATED_SERIAL_FD): Define.
	* serial.c (deprecated_serial_fd): New function.

	* remote.c (remote_async_open_1, remote_async_open_1,
 	remote_async_detach, remote_async_kill,
 	extended_remote_async_create_inferior, minitelnet): Update.
	* remote-es.c (es1800_open, es1800_close, es1800_transparent): Update.

	* remote-st.c (connect_command), remote-os9k.c (connect_command):
 	Fix.  Call FD_SET et.al. with FD instead of serial_t.

1999-09-14  Jim Blandy  <jimb@cris.red-bean.com>

	* hppa-tdep.c (hppa_frame_find_saved_regs): The two possible
	instructions for saving the return pointer (32- and 64-bit) save
	it at different offsets.

	* config/pa/tm-hppa64.h: Doc fix.

	* defs.h (continuation): Make this a typedef.

	* Makefile.in (gdbtk.o, gdbtk-cmds.o): Depend on $(top_h).

	* Makefile.in (i386-linux-nat.o): Depend on symfile.h, not
	$(symfile_h); the latter has no definition.

	* breakpoint.c (breakpoint_here_p): Remove meaningless code,
	testing b->enable against shlib_disabled and call_disabled after
	we know it is enabled.

	Implement "permanent breakpoints" --- breakpoints that are
	hardwired into the inferior's code.  GDB knows they're there, but
	doesn't try to insert or remove them, etc.
	* breakpoint.h (enum enable): Add `permanent' enablement state.
	* breakpoint.c (make_breakpoint_permanent): New function.
	* breakpoint.h (make_breakpoint_permanent): Add declaration.
	* breakpoint.c (insert_breakpoints): Don't bother to insert
	permanent breakpoints...
	(remove_breakpoint): ... or remove them.
	(breakpoint_here_p): Handle `permanent' like `enabled'.  Change
	return value to indicate whether it's a permanent breakpoint here,
	or an ordinary breakpoint.
	* breakpoint.h (enum breakpoint_here): New enum.
	(breakpoint_here_p): Change declaration.
	* breakpoint.h (breakpoint_1): Extend bpenables to cover all the
	enablement states.
	(describe_other_breakpoints): Describe permanent breakpoints.
	(check_duplicates): If one of the breakpoints at ADDRESS is a
	permanent breakpoint, treat all the others as the duplicates, so
	we don't try to insert or remove any of them.  Verify that only
	the permanent breakpoint is actually inserted.
	(delete_breakpoint): Complain if we discover that another
	breakpoint was inserted at the same place as a permanent
	breakpoint.
	(disable_breakpoint): Fail silently if asked to disable a
	permanent breakpoint.
	(do_enable_breakpoint): Don't change a permanent breakpoint's
	enablement to ordinary `enabled'.  Leave it alone.
	(create_solib_event_breakpoint): Return the
	breakpoint object created.
	* breakpoint.h (create_solib_event_breakpoint): Fix declaration.
	* pa64solib.c (pa64_solib_create_inferior_hook): Do turn on the
	DT_HP_DEBUG_CALLBACK flag in the dynamic linker, so it will call
	__dld_break, which contains the permanent breakpoint, when interesting
	things happen.	Tell GDB that the breakpoint in __dld_break is
	permanent.
	* gdbtk-cmds.c (gdb_get_breakpoint_info): Report a permanent
	breakpoint as enabled.
	* infrun.c (SKIP_PERMANENT_BREAKPOINT): Provide default	definition.
	(default_skip_permanent_breakpoint): New function.
	(resume): If we're trying to resume at a permanent breakpoint, use
	SKIP_PERMANENT_BREAKPOINT to step over it.
	* hppa-tdep.c (hppa_skip_permanent_breakpoint): New function.
	* config/pa/tm-hppa.h (hppa_skip_permanent_breakpoint): Declare.
	(SKIP_PERMANENT_BREAKPOINT): Define.
	
1999-09-14  Kevin Buettner  <kevinb@cygnus.com>

	* symtab.h, minsyms.c (find_stab_function_addr): Changed
	type of second parameter from partial_symtab * to char *.
	Fixed all callers.
	* minsyms.c (find_stab_function_addr): Look for minimal
	symbol without filename if filename based search fails.
	* dbxread.c (process_one_symbol): Call find_stab_function_addr()
	in place of inline code with identical functionality.
	* partial-stab.h (case N_FUN, descriptors 'F' and 'f'): Look
	up symbol's address from minimal symbol table when N_FUN
	address is missing.  Also, make sure this value is used for
	calculating the value of the texthigh field.

1999-09-14  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (create_file_handler): Increment the total number
 	of file descriptors for the poll case, only if this is a new file
 	desc.

1999-09-14  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c: misc minor cleanups and fixes missed in last patch.

Tue Sep 14 12:37:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (SERIAL_PRINT_TTY_STATE): Add STREAM parameter.
	(union serial_ops): Update.

	* ser-unix.c (hardwire_print_tty_state, ser-tcp.c
 	(tcp_print_tty_state), ser-pipe.c (pipe_print_tty_state,
 	ser-go32.c (dos_print_tty_state, ser-mac.c (mac_print_tty_state,
 	ser-ocd.c (ocd_print_tty_state, ser-e7kpc.c
 	(e7000pc_print_tty_state): Update.
	* inflow.c (child_terminal_info): Update.
	* serial.c (serial_print_tty_state): Update.

Tue Sep 14 11:41:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c, serial.h, ser-tcp.c, ser-unix.c, ser-pipe.c: Convert
 	all functions to ISO-C.
	* serial.h, serial.c: Move all indirect macro function calls from
 	serial.h into serial.c.
	(serial_drain_output, serial_flush_output, serial_flush_input,
 	serial_raw, serial_get_tty_state, serial_set_tty_state,
 	serial_print_tty_state, serial_noflush_set_tty_state,
 	serial_setbaudrate, serial_setstopbits): New functions.
	(do_serial_close): Rename serial_close.
	(serial_close, serial_un_fdopen): New functions. Call
 	do_serial_close.

1999-09-13  James Ingham  <jingham@leda.cygnus.com>

	* symtab.c (decode_line_1): Find the rightmost parenthesis in the
	expression, not the leftmost.  This allows us to parse function
	declarations with embedded function prototypes.

Mon Sep 13 18:39:31 1999  Jeffrey A Law  (law@cygnus.com)

	* pa64solib.c (pa64_sharedlibrary_info_command): Fix typos.

1999-09-13  Kevin Buettner  <kevinb@cygnus.com>

	* i386-tdep.c (i386_extract_return_value): ifdef'd so that
	non-linux targets will work again.
	(i386_do_registers_info, i386_print_register): Revert changes
	of 1999-09-03; these functions have been removed because they
	are Linux specific and break non-Linux builds.  This functionality
	will be restored after FP support unification has been achieved.
	* i387-tdep.c (i387_print_register, void i387_float_info):
	Likewise.
	* config/i386/tm-linux.h (i387_float_info, FLOAT_INFO,
	DO_REGISTERS_INFO, i386_do_registers_info,
	i387_print_register):  Likewise.

1999-09-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (call_readline): Change to accept gdb_client_data as
 	param.
	(rl_callback_read_char_wrapper): New function to match what the
 	event loop expects and what readline expects.
	(change_line_handler): Make call_readline point to
 	rl_callback_read_char_wrapper, instead of rl_callback_read_char.
	(_initialize_event_loop): Ditto.
	(gdb_readline2): Change parameter to gdb_client_data.
	* event-top.h (call_readline, gdb_readline2): Change accordingly.

	* event-loop.c (add_file_handler): Change 2nd par to
 	handler_func*.  No more need for casting.
	* event-loop.h (create_async_signal_handler): Change accordingly.

	* inferior.h (fetch_inferior_event): Change parameter to void*.
	* infrun.c (fetch_inferior_event): Ditto.

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

	* infrun.c (step_into_function): New function, broken out from the
 	step_into_function label in handle_inferior_event.
	(handle_inferior_event): Change a goto into a function call.

1999-09-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.h: New file. All the exported vars and functions from
 	event-top.c.

	* event-loop.h (struct gdb_event, event_handler_func,
 	file_handler, async_signal_handler, SELECT_MASK, fd_mask, NBBY,
 	FD_SETSIZE, howmany, NFDBITS, MASK_SIZE): Move to event-loop.c.
	(struct prompts, PROMPT, PREFIX, SUFFIX, display_gdb_prompt,
 	async_init_signals, set_async_editing_command,
 	set_async_annotation_level, set_async_prompt, handle_stop_sig,
 	handle_sigint, pop_prompt, push_prompt, gdb_readline2,
 	mark_async_signal_handler_wrapper, async_request_quit,
 	async_command_editing_p, exec_done_display_p,
 	async_annotation_suffix, new_async_prompt, the_prompts,
 	call_readline, input_handler, input_fd): Move to event-top.h.
	(All function prototypes): Don't use PARAMS anymore.

	* event-loop.c: (struct gdb_event, event_handler_func,
 	file_handler, async_signal_handler, SELECT_MASK, fd_mask, NBBY,
 	FD_SETSIZE, howmany, NFDBITS, MASK_SIZE): Move to here from
 	event-loop.h.
	Include event-top.h. Remove use of PARAMS. ANSIfy functions headers.
		
	* event-top.c: Include event-top.h. Include "signals.h", not
 	<signals.h>.
	Remove use of PARAMS. ANSIfy functions headers.
	(handle_stop_sig): move prototype to event-top.h.

	* remote.c: Include event-top.h. Make it understand
 	async_signal_handler type.
	* infrun.c: Include event-top.h.
	* mi-main.c: Ditto.
	* top.c Ditto.
	* utils.c: Ditto.
	
Mon Sep 13 18:54:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Describe each of the fields.
	
Mon Sep 13 17:51:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From 1999-09-12 Jim Blandy <jimb@cris.red-bean.com>:
	* gdbarch.sh (generating setters): Use sed to generate the proper
	indentation, not tr; tr's behavior is notoriously unportable.

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

	* i387-tdep.c (print_387_control_bits): Don't print newline; the
	callers take care of that.  (Thanks to H.J. Lu.)

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

	* d10v-tdep.c (DMEM_START): Set to 0x2000000.
	(itrace, iuntrace, info itrace, itdisassemble, itracedisplay,
 	itracesource): Add 'i' prefix to commands, so as not to conflict
 	with generic trace commands.

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

	* remote.c (_initialize_remote): Fix the specification of the
	"remote" prefix to set and show commands.

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

	* event-loop.c (create_file_event): New function. Creates a gdb
 	event for a given fd.
	(gdb_wait_for_event): Use create_file_event().  
	* event-loop.h: export create_file_event().

	* event-loop.c (delete_file_handler): Move the clearing of the
 	mask to later on in the function, because we need it in order to
 	deactivate the correct fd when using select().

	* m32r-tdep.c (decode_prologue): Fix typo. Instructions starting
 	with 0xf are branch instructions.
	(m32r_scan_prologue): Initialize framesize to 0.

1999-09-07  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c (exceptionHook, oldExceptionHook): Removed.
	(handle_exception): Removed #if'd out exception hook code.

	* i386-stub.c, m68k-stub.c (error): Removed unused variable.

	* i386-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
	sparcl-stub.c, sparclet-stub.c (remcomInBuffer, remcomOutBuffer):
	Make static.

Tue Sep  7 14:06:22 1999  Kevin Buettner  <kevinb@cygnus.com>

	* config/i386/tm-linux.h (SOFUN_ADDRESS_MAYBE_MISSING): 
	Define.

Tue Sep  7 08:18:01 1999  Kevin Buettner  <kevinb@cygnus.com>

	From Jim Blandy <jimb@cygnus.com>:
	
	Step into calls to functions in shared libraries properly.  See
	the comments for SKIP_SOLIB_RESOLVER atop infrun.c for details.
	* infrun.c (SKIP_SOLIB_RESOLVER): New macro.

1999-09-05  Fred Fish  <fnf@cygnus.com>

	* elfread.c (elf_symtab_read): Remove separately passed bfd
	pointer and offset.  Pick up bfd pointer from objfile, and
	get offset from objfile's section_offsets.

Fri Sep  3 22:29:39 1999  Kevin Buettner  <kevinb@cygnus.com>

	* config/i386/tm-linux.h (REGISTER_NAMES): Changed register
	named "foo" to "fopo" which more accurately describes the FPU
	Operand Pointer Offset.  The real reason for this change, of
	course, is that many programmers use $foo as a convenience
	variable and are likely to be unpleasantly surprised to find
	that they're unwittingly changing the state of their ia32 FPU.

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

	* monitor.c (monitor_supply_register): Stop scanning val string
	if a newline is encountered.

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

        monitor.c (TARGET_BUF_SIZE): New macro, defined to 2048.
        (monitor_expect_regexp, monitor_wait, monitor_dump_reg_block,
        monitor_dump_reg_block): Dump hard-coded constants in favor
        of TARGET_BUF_SIZE.

        (readchar): Re-enable output of characters read from monitor when
        remotedebug is set.

        (monitor_supply_register): Use ULONGEST to hold value.
        Replace strtoul() call with hand-coded loop to handle values
        larger than 'long'.

        (monitor_store_register): Use ULONGEST to hold value.

Fri Sep  3 00:47:44 1999  Kevin Buettner  <kevinb@cygnus.com>

	[Merged linux/x86 floating point code from Bill Metzenthen,
	Jim Blandy, Anthony Green, H. J. Lu, and possibly others.  The
	following remarks are Jim Blandy's.]

	* findvar.c (extract_floating): Call TARGET_EXTRACT_FLOATING, if
	#defined.
	(store_floating): Call TARGET_STORE_FLOATING, if #defined.

	* i386-tdep.c (i386_print_register, i386_do_registers_info): New
	functions.
	(i386_extract_return_value): GNU/Linux returns floating point
	values in a floating point register too.
	(set_disassembly_flavor): Add prototype.
	(i386_extract_return_value): Use FPDATA_REGNUM, not FP0_REGNUM (
	which wasn't the first FP data register).
	(i386_do_registers_info): Use FPSTART_REGNUM and FPEND_REGNUM as
	the limits of the FPU-related registers.
	(i386_extract_return_value): Tell GDB how to find return values
	larger than four bytes.  (Thanks to Paul N. Hilfinger for the bug
	report.)

	* i387-tdep.c (print_387_control_word): Break out bit-splitting into...
	(print_387_control_bits): New function.
	(print_387_status_word): Break out bit-splitting into...
	(print_387_status_bits): New function.
	(i387_print_register, i387_float_info, i387_hex_float_input): New
	functions.
	(i387_extract_floating, i387_store_floating): New functions.

	* valprint.c (print_floating): Use macro TARGET_ANALYZE_FLOATING,
	if it's #defined.  Tolerate values of `nonnegative' other than
	zero and one.

	* i386-linux-nat.c: New file.
	* Makefile.in (ALLDEPFILES): Mention i386-linux-nat.c.
	(i386-linux-nat.o): New rule, listing dependencies.
	* config/i386/linux.mh (NATDEPFILES): Use i386-linux-nat.o, not
	the plain i386v4-nat.o.
	* config/i386/nm-linux.h (FETCH_INFERIOR_REGISTERS): Define.
	* config/i386/xm-linux.h: Define HOST_I386.

	* config/i386/tm-linux.h (FP0_REGNUM): Replaced by...
	(FPSTART_REGNUM, FPCONTROL_REGNUM, FPSTATUS_REGNUM, FPTAG_REGNUM,
	FPDATA_REGNUM, FPEND_REGNUM): New definitions.
	(REGISTER_BYTES): Changed accordingly.
	(SKIP_SOLIB_RESOLVER): #define this.
	(i386_linux_skip_solib_resolver): New declaration.
	(i387_float_info): Added extern decl for this function.
	(TARGET_EXTRACT_FLOATING, TARGET_STORE_FLOATING,
	TARGET_ANALYZE_FLOATING): Define.
	(i387_extract_floating, i387_store_floating): New extern decls.
	(I386_GNULINUX_TARGET): Define.
	(NUM_REGS, NUM_FREGS, REGISTER_NAMES, FP0_REGNUM, FPDATA_REGNUM,
	FPENV_BYTES, FPREG_RAW_SIZE, FPREG_BYTES, REGISTER_BYTES,
	REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE,
	MAX_REGISTER_RAW_SIZE, MAX_REGISTER_VIRTUAL_SIZE,
	TARGET_LONG_DOUBLE_BIT, FLOAT_INFO, DO_REGISTERS_INFO): New
	definitions, perhaps overriding those inherited from
	config/i386/tm-i386.h.
	(i386_do_registers_info, i387_print_register, double_to_i387,
	i387_to_double): New declarations.
	(LD_I387): Define iff both the host and target are using i387
	FPU's.
	(HEX_FLOAT_INPUT, REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW,
	REGISTER_VIRTUAL_TYPE): Define these if LD_I387 is defined.

	* source.c (list_command): List the right number of source lines,
	even if we're at the top of the file.

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

	* infrun.c (step_over_function): New function, broken out from the
 	step_over_function label in handle_inferior_event.
	(handle_inferior_event): Change a goto into a function call.

Thu Sep  2 18:26:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (GDB_WERROR_CFLAGS, GBB_WARN_CFLAGS): Define.
 	(INTERNAL_CFLAGS): Update
	* configure.in (WERROR_CFLAGS, WARN_CFLAGS): Sync with
 	../sim/common/aclocal.m4.
	* configure: Re-generate.
	
Thu Sep  2 00:27:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (z8k-tdep.o): For moment, don't try to compile with
 	-Werror.  See Makefile.in.
	* z8k-tdep.c (z8k_set_pointer_size): Document problem.

	* config/z8k/tm-z8k.h (z8k_print_register_hook, z8k_frame_chain,
 	z8k_saved_pc_after_call, z8k_frame_saved_pc,
 	z8k_set_pointer_size): Declare.
	(z8k_skip_prologue): Fix typo. Was mz8k_skip_prologue.
	(FRAME_CHAIN, PRINT_REGISTER_HOOK, FRAME_SAVED_PC,
 	SAVED_PC_AFTER_CALL): Update.
	* z8k-tdep.c (z8k_print_register_hook): Rename
 	z8k_print_register_hook.
	(z8k_frame_chain): Rename frame_chain.
	(z8k_saved_pc_after_call): Rename saved_pc_after_call.
	(z8k_frame_saved_pc): Rename frame_saved_pc.
	(z8k_print_register_hook): Fix printf.
	(read_memory_pointer): Add declaration.
	("value.h"): Include.
	* Makefile.in (z8k-tdep.o): Add dependency on value.h.

	* config/sparc/tm-sparc.h (PRINT_EXTRA_FRAME_INFO): Fix
 	printf. calls
	* Makefile.in (remote-e7000.o): For moment, don't try to compile
 	with -Werror.  See Makefile.in.
	* sh-tdep.c (sh_show_regs): Fix printf calls.
	* xcoffsolib.c (solib_info): Fix Printf calls.
	* dink32-rom.c: #include "symfile.h" for generic_load and
 	"inferior.h" for write_pc.
	* Makefile.in (dink32-rom.o): Update.

	* config/mn10300/tm-mn10300.h (mn10300_store_struct_return),
 	config/mn10200/tm-mn10200.h (mn10200_store_struct_return): Add
 	declarations.

Tue Aug 31 00:48:27 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-tx49el.h (REGISTER_SIM_REGNO): Define.

	* remote-sim.c (gdbsim_fetch_register, gdbsim_store_register):
 	Pass REGISTER_SIM_REGNO converted register number to the
 	simulator.

1999-09-01  Tom Tromey  <tromey@cygnus.com>

	* config/i386/nm-linux.h (PREPARE_TO_PROCEED): Added argument.

1999-09-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* values.c (value_virtual_fn_field): Remove unused var(s).
	* thread.c (prune_threads): Ditto.
	* symtab.c (lookup_transparent_type): Ditto.
	(decode_line_1): Ditto.
	(make_symbol_overload_list): Ditto. 
	* rs6000-tdep.c (frame_get_saved_regs): Ditto.
	(set_processor): Ditto.
	* remote.c (remote_remove_breakpoint): Ditto.
	(remote_query): Ditto.
	(readtty): Ditto.
	* remote-sds.c (sds_fetch_registers): Ditto.
	(putmessage): Ditto.
	* ppcbug-rom.c (ppcbug_supply_register): Ditto.
	(ppcbug_open): Remove unused prototype.
	* parse.c (parse_nested_classes_for_hpacc): Remove unused var(s).
	* ocd.c (ocd_open): Ditto.
	(ocd_get_packet): Ditto.
	* monitor.c (monitor_error): Ditto.
	(monitor_wait_srec_ack): Ditto.
	* main.c (main): Ditto.
	* gdbtypes.c (count_virtual_fns): Ditto.
	* exec.c (exec_file_command): Ditto.

	* event-top.c: Include handle_sigwinch() function prototype within
 	appropriate #ifdef.

	* eval.c (evaluate_subexp_standard): Remove unused variable.
	(evaluate_subexp_standard): Remove unused variables.
	* dink32-rom.c (dink32_supply_register): Remove unused variable.
	* dbxread.c (elfstab_build_psymtabs): Ditto.
	* command.c (do_setshow_command): Ditto.
	* breakpoint.c (solib_load_unload_1): Remove unused variables 'i'
 	and 'sal'.
	(until_break_command): Remove unused variables 'arg1' and 'arg2'.
	(create_exception_catchpoint): Remove unused variable 'i'.
	* ax-gdb.c (gen_sub): Remove unused variable.
	(_initialize_ax_gdb): Ditto.

	* ser-pipe.c (pipe_readchar): If timeout is expired return
 	SERIAL_TIMEOUT.
	* ser-tcp.c (tcp_readchar): If timeout is expired return
 	SERIAL_TIMEOUT.

Wed Sep  1 15:07:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* version.h: New file.
	* Makefile.in (version_h): Define.
	(version.o): Add target.

	* remote-array.c: #include "version.h".
 	(version): Delete extern declarations.
	* Makefile.in (remote-array.o): Add dependency on version.h.

	* top.c: #include "version.h".
	(version, host_name, target_name): Delete extern declarations.
	* Makefile.in (top.o): Add dependency on version.h.

	* remote.c (remote_remove_watchpoint, remote_insert_watchpoint),
 	remote-array.c (array_open), remote-mips.c (send_srec),
 	dve3900-rom.c (store_bitmapped_register): Fix Printfs.

	* mips-tdep.c (mips_print_extra_frame_info, print_unpack),
 	m32r-rom.c (m32r_load_section), m32r-tdep.c (m32r_frame_chain),
 	dsrec.c (load_srec): Fix printf problems.
	
Wed Sep  1 13:16:49 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (monitor.o): For moment, don't try to compile with
 	-Werror.  monitor.c has -Wformat problems.  See Makefile.in for
 	more info.

Tue Aug 31 21:23:38 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (prologue_inst_adjust_sp): Correct offset computation
	for doubleword store instructions.
	(hppa_frame_find_saved_regs): Similarly.

Wed Sep  1 09:22:50 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d30v-tdep.c (d30v_print_register): 
	(tdisassemble_command): 

	* d10v-tdep.c (show_regs, trace_info, tdisassemble_command): Fix
 	printf problems.

	* remote-sim.c (dump_mem), remote-rdi.c (arm_rdi_create_inferior):
 	Fix printf arguments.

	* remote-mips.c, mips-tdep.c: Move declaration of
 	``mips_set_processor_type_command'' from here.
	* config/mips/tm-mips.h: To here.
	* remote-array.c: #include "inferior.h".
	* config/mips/tm-embed.h (remote_mips_stopped_by_watchpoint): Add
 	declaration.
	* remote-mips.c (remote_mips_stopped_by_watchpoint): Define using
 	ISO-C prototype.
	(monitor_supports_breakpoints): Integer variable.

	* m32r-rom.c: #include "inferior.h" and <ctype.h>
	* config/m32r/tm-m32r.h (m32r_write_sp): Add declaration.

	* config/i960/tm-i960.h (leafproc_return, i960_pop_frame): Add
 	declaration.
	(POP_FRAME): Call i960_pop_frame.
	* i960-tdep.c (i960_pop_frame): Rename pop_frame.
	* mon960-rom.c: #include "inferior.h" for declaration of write_pc.

1999-08-15  Fred Fish  <fnf@cygnus.com>

	* objfiles.c (objfile_relocate): Use SIZEOF_SECTION_OFFSETS when
	allocating section_offsets array.
	* remote-os9k.c (rombug_wait): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* remote.c (get_offsets): Ditto.
	(remote_cisco_objfile_relocate): Ditto.
	* rs6000-nat.c (vmap_symtab): Ditto.

	* dstread.c (dst_symfile_offsets): Set section_offsets directly instead
	of returning a pointer to section offsets.
	* somread.c (som_symfile_offsets): Ditto.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.
	* symfile.c (default_symfile_offsets): Ditto.
	(syms_from_objfile): The sym_offsets function has already set section
	offsets and no longer returns a value.

	* xcoffread.c (scan_xcoff_symtab): Eliminate section_offsets passed
	separate from objfile.
	(xcoff_start_psymtab): Ditto.
	(START_PSYMTAB): Ditto.
	* os9kread.c (read_minimal_symbols): Ditto.
	(read_os9k_psymtab): Ditto.
	(os9k_start_psymtab): Ditto.
	(record_minimal_symbol): Ditto.
	* dbxread.c (START_PSYMTAB): Ditto.
	(start_psymtab): Ditto.
	* mdebugread.c (START_PSYMTAB): Ditto.
	(elfmdebug_build_psymtabs): Ditto.
	(mdebug_build_psymtabs): Ditto.
	(parse_partial_symbols): Ditto.
	(new_psymtab): Ditto.
	* dwarfread.c (dwarf_build_psymtabs): Ditto.
	* partial-stab.h (START_PSYMTAB): Ditto.
	* stabsread.h (start_psymtab): Ditto.
	* dwarf2read.c (dwarf2_build_psymtabs): Ditto.
	(dwarf2_build_psymtabs_easy): Ditto.
	(dwarf2_build_psymtabs_hard): Ditto.
	* hp-psymtab-read.c (hpread_build_psymtabs): Ditto.
	(hpread_quick_traverse): Ditto.
	(hpread_start_psymtab): Ditto.
	(scan_procs): Ditto.
	* hpread.c (hpread_build_psymtabs): Ditto.
	* symfile.h (dwarf2_build_psymtabs): Ditto.

	* dbxread.c (read_dbx_symtab): Use ANOFFSET to access section
	offsets.
	* coffread.c (enter_linenos): Pass objfile instead of section
	offsets.

	* dbxread.c (dbx_symfile_read): No need to explicitly pass
	text addr and size.  Let read_dbx_symtab find them.
	(read_dbx_symtab): Get text addr and size from objfile.
	(dbx_symfile_read): Remove dead code (call to strlen);
	
1999-08-31  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* Makefile.in: add rule for sol-thread.o.
	Add rule for linux-thread.o.

1999-08-13  Jim Kingdon  <kingdon@redhat.com>

	Threads code from gdb 4.18-codefusion-990706
	[Thanks to Eric Paire, H. J. Lu, Jim Blandy and others]
	* infrun.c (signal_stop_update, signal_print_update,
	signal_pass_update): new functions.
	* inferior.h: new prototypes for above functions.
	* target.h (enum strata): add thread stratum.
	* linux-thread.c: new file.  Support for debugging linux threads.
	* config/i386/nm-linux.h: several new prototypes for above.
	* config/i386/linux.mh: add linux-thread.o to NATDEPFILES.

	More threads code from the same place:
	* config/i386/tm-linux.h (REALTIME_LO, REALTIME_HI): Add
	definitions.
	* target.h (enum target_signal): Add TARGET_SIGNAL_REALTIME_32.
	* target.c (signals, target_signal_from_host,
	target_signal_to_host): Add clauses for
	TARGET_SIGNAL_REALTIME_32.
	
1999-08-31  Neil Schellenberger <neil.schellenberger@crosskeys.com>

	* sol-thread.c (sol_thread_detach): strip thread-id out of 
	inferior_pid, so that procfs_detach can't choke on it.

1999-08-31  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub.c, sparclet-stub.c (getpacket): Remove 'buffer' arg,
	define it as a pointer to &remcomInBuffer[0].
	(handle_exception): Update.

	* sparc-stub.c, sparcl-stub.c, sparclet-stub.c (handle_exception):
 	Removed #ifdef'd out code which implements the non-standard 'b'
	(set baud rate) command.

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

	* infrun.c (keep_going): New function, broken out from the
 	keep_going label in handle_inferior_event.
	(handle_inferior_event): Change more gotos into function calls.

Tue Aug 31 02:29:27 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (read_unwind_info): Handle multiple unwind sections.

Tue Aug 31 15:28:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/alpha/tm-alpha.h (PRINT_EXTRA_FRAME_INFO): Fix printf
 	format argument.
	* alpha-tdep.c (heuristic_proc_start): Ditto.

	From Stan Shebs <shebs@andros.cygnus.com>:
	* defs.h (strlen_paddr): Fix prototype - add void argument list.

Tue Aug 31 14:02:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_print_host_address), utils.c
 	(gdb_print_host_address): Rename gdb_print_address.

	* expprint.c, gdbtypes.c, symmisc.c: Update.

	*expprint.c: Use gdb_print_host_address when displaying native
 	pointers.

Sat Aug 28 14:23:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* scm-valprint.c (scm_ipruk), jv-valprint.c (java_value_print),
 	cp-valprint.c (cp_print_class_member), exec.c (exec_files_info),
 	remote.c (putpkt_binary, compare_sections_command,
 	remote_cisco_section_offsets), dcache.c (dcache_info),
 	breakpoint.c (break_at_finish_at_depth_command_1,
 	break_at_finish_command_1), symfile.c (generic_load),
 	(report_transfer_performance), top.c (get_prompt_1), f-valprint.c
 	(f_val_print), maint.c (maintenance_translate_address): Fix printf
 	-Wformat warnings.  Use paddr, paddr_nz, sizeof_paddr, paddr_u and
 	paddr_d to print addresses. Change ``d'' to ``ld''.

	* utils.c (strlen_paddr): New function.
	
Tue Aug 31 01:36:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d30v/tm-d30v.h (d30v_frame_chain,
 	d30v_init_frame_pc): Add declaration.

	* arc-tdep.c (arc_pop_frame): Rename pop_frame.
	(arc_push_dummy_frame): Rename push_dummy_frame.
	(arc_set_cpu_type_command): Add declaration.
	
	* config/arc/tm-arc.h (arc_pop_frame, arc_push_dummy_frame): Add
 	declaration.
	
1999-08-30  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (prepare_to_wait): New function, broken out from the
 	wfi_continue label in handle_inferior_event.
	(handle_inferior_event): Change more gotos into function calls.

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

	* tracepoint.c: -Wall warning cleanup. 
	(parse_and_eval_memrange): remove (unused).
	(output_command, args_info, locals_info, registers_info): add decls.
	(getpkt, putpkt, remote_console_output): add decls.
	(isalnum, isspace): cast arg to avoid warning.
	(printf, fprintf, sprintf): use [fs]printf_vma for printing addrs.
	
Mon Aug 30 21:47:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c: #include "language.h".

Mon Aug 30 20:38:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Check for <time.h>.
	* configure, acconfig.in: Re-generate.

	* remote-rdp.c: #include <time.h>

	* config/arm/tm-arm.h (arm_float_info): Add declaration.

	* arm-tdep.c (convert_from_extended, convert_to_extended): Change
 	double ptr arg to void ptr arg.

	* config/arm/tm-arm.h (arm_frameless_function_invocation): Add
 	declaration.
	(arm_frame_find_saved_regs): Rename frame_find_saved_regs.
	(convert_from_extended, convert_to_extended): Add declaration.

Mon Aug 30 19:05:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (WERR_CFLAGS): Separate the -Werror flag.
	* configure: Re-generate.

	* Makefile.in (INTERNAL_CFLAGS): Re-define using
 	INTERNAL_WARN_CFLAGS.
	(INTERNAL_WARN_CFLAGS): Define.  Leave off WERR_CFLAGS.
	(tracepoint.o): Add explicit rule.
	(WERR_CFLAGS): Add definition.

Mon Aug 30 17:52:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c: #include "event-loop.h" for declaration of
 	async_request_quit.
	* Makefile.in (utils.o): Add dependency on event-loop.h.

	* event-top.c (mark_async_signal_handler_wrapper,
 	async_request_quit): Move declaration from here.
	* event-loop.h: To here.
	
	* defs.h: Add declaration of exec.c:exec_set_section_offsets.

	* event-top.c: #include "gdbcmd.h" which includes "command.h" and
 	hence expose declaration of function dont_repeat.

	* top.c (ISATTY), tracepoint.c (ISATTY), utils.c (ISATTY),
 	event-top.c (ISATTY): Move definitions from here.
	* defs.h (ISATTY): To here. #include <unistd.h>.

	* sol-thread.c, solib.c, source.c, sparcl-tdep.c, tracepoint.c,
 	utils.c, win32-nat.c, wince.c, top.c, symfile.c, ser-unix.c,
 	ser-tcp.c, procfs.c, maint.c, infttrace.c, hppa-tdep.c,
 	ser-pipe.c, remote-rdp.c, main.c, inftarg.c, inflow.c,
 	hpux-thread.c, hp-psymtab-read.c, go32-nat.c, fork-child.c,
 	corelow.c, command.c: Do not #include <unistd.h>, moved to defs.h.

Mon Aug 30 15:14:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (struct tui_stream, enum streamtype): Move from here.
	* utils.c: To here.

	* main.c (tui_file_fputs): Move from here.
	* utils.c: To here.

Sun Aug 29 10:03:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h, gdb-events.c, gdb-events.sh: New files.

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

	* solib.c (open_symbol_file_object): new function.
	Called when attaching to a new process, if there is no loaded
	symbol file.  Attempts to locate the executable file for the
	attached process and load symbols from it.
	(solib_add): Call open_symbol_file_object if attaching to a
	new process and no open symbol file.	

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

	* config/i386/tm-sun386.h (GDB_TARGET_IS_SUN386): Definition
	removed--no longer checked anywhere in gdb.

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

	* infrun.c (stop_stepping): New function, broken out from
	stop_stepping label in handle_inferior_event.
	(handle_inferior_event): Change gotos into function calls.

Fri Aug 27 20:13:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (LONGEST): Move definition to earlier in file - to just
 	after BFD.
	(paddr_u, paddr_d): Declare.
	* utils.c (decimal2str): New function.
	(paddr_u, paddr_d): Define.

	* remote.c (remote_cisco_section_offsets,
 	compare_sections_command): Fix XprintfX arguments.  Use paddr...
	(putpkt_binary): Fix XprintfX arguments.

Tue Aug 24 21:30:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

        * arm-tdep.c (arm_init_extra_frame_info): Add braces.  Recommended
        by gcc -Wparentheses.

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

	* infrun.c (check_sigtramp2): New function, broken out from
	check_sigtramp2 label in handle_inferior_event.
	(handle_inferior_event): Change gotos into function calls.

	Declare Tahoe configuration obsolete.
	* configure.host, configure.tgt: Comment out Tahoe configs.
	* Makefile.in: Comment out Tahoe-related action.
	* tahoe-tdep.c, config/tahoe/*: Comment out.
	* NEWS: Mention obsolete status.

1999-08-26  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sh-stub.c,
	sparc-stub, sparcl-stub.c sparclet-stub.c (getpacket): If '$',
	the packet start character is received in the 'middle' of a 
	packet, assume that packet end character has been lost and
	start a new packet.

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub.c sparclet-stub.c (getpacket): Changed to return ptr
 	to first character of input buffer.  Removed & 0x7f masks.
	(handle_exception): Don't access remcomInBuffer directly.

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

	* breakpoint.c (disable_breakpoints_in_shlibs): Only disable
	enabled breakpoints.

Tue Aug 24 14:59:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c, remote.c, pa64solib.h, value.h, somsolib.h,
 	solib.h, scm-lang.h, language.h, inferior.h, defs.h, coff-solib.h,
 	ch-lang.h, breakpoint.h, annotate.h: Remove #if __STDC__ wrapping
 	struct declarations.

	* config/sparc/nm-sun4sol2.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/i386/tm-i386.h,
 	config/i386/tm-i386v.h, config/i386/nm-i386sol2.h,
 	config/pa/nm-hppah.h, config/rs6000/nm-rs6000.h,
 	config/sparc/tm-sp64.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.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/m68k/tm-m68k.h,
 	config/m32r/tm-m32r.h, config/i960/tm-mon960.h,
 	config/fr30/tm-fr30.h, config/h8300/tm-h8300.h,
 	config/arm/tm-arm.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Ditto.

Wed Aug 25 10:45:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (gdb$(EXEEXT)): Add dependency on TDEPLIBS.

	* config/arm/arm.mt (TDEPLIBS): Define.  Move libangsd.a to here.
	(TDEPFILES): From here.

1999-08-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (init_main): Add new set/show command exec-done-display,
 	default value is off.
	* event-loop.h: Export exec_done_display_p.
	* event-top.c: New variable exec_done_display_p.
	* infrun.c (complete_execution): Print completion message if
 	corresponding flag is set.

	* top.c (DEFAULT_PROMPT): Add space after "(gdb)" at end of prompt.

	From: J.T. Conklin  <jtc@redback.com> 
	* top.c (DEFAULT_PROMPT): Set to "(gdb)" if not already defined.
	(init_main): Always use DEFAULT_PROMPT.

Tue Aug 24 03:23:31 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c: Remove useless "purecov: deadcode" comments.
	(hppa_use_struct_convention): Update for PA64.
	(hppa_frame_saved_pc): Properly extract the saved PC in a call
	dummy frame.
	(in_solib_call_trampoline): Return nonzero if we are in a function
	called ".stub".
	(prologue_inst_adjust_sp): Handle std,ma.
	(skip_prologue_hard_way): Handle more PA2.0/PA64 insns.
	(hppa_frame_find_saved_regs): Similarly.  Handle indirect save of
	%r3 into the stack.

	* config/pa/tm-hppa64.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): Define.
	(CALL_DUMMY_BREAKPOINT_OFFSET): Define.

Tue Aug 24 14:59:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (gdb$(EXEEXT)): Add dependency on main.o that was
 	lost when libgdb.a was added.

Tue Aug 24 14:26:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c, gdbarch.h: Convert to pure ISO-C.
	
	* gdbarch.sh: New file.
	* gdbarch.c, gdbarch.h: Add note describing gdbarch.sh

Mon Aug 23 19:36:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (libgdb.a): New target.
	(gdb$(EXEEXT)): Add dependency on libgdb.a.
	(libgdb-files, LIBGDB_OBS, libgdb, LIBGDBDEPS, LIBGDBFILES): Delete.

Mon Aug 23 10:16:32 1999  Jeffrey A Law  (law@cygnus.com)

	* infttrate.c (child_pid_to_exec_file): Find the correct base
	of the stack for PA64.

	* pa64solib.c: Fix some minor whitespace problems.
	(bfd_lookup_symbol): New function.
	(pa64_solib_create_inferior_hook): Find the address __dld_break
	in the dynamic linker.  Try to set a shlib event breakpoint in
	that function.
	(add_to_solist): Do not add the same shared library to the shlib
	list more than once.

Sun Aug 22 14:49:40 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* value.h (enum lval_type): Move declaration from here.
	* defs.h (enum lval_type): To here.
	* frame.h, gdbarch.h: Delete incomplete declaration of ``enum
 	lval_type''.
	
1999-08-20  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.c (can_use_hardware_watchpoint): reject expressions
	that refer to registers or register variables.

Fri Aug 20 10:53:38 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Provide PA2.0W aware code.

	* pa64solib.c pa64solib.h: New files.

	* config/pa/hppa64.mt: Delete commented out code that is and
	never will be appropriate for this target.
	* config/pa/hpux11w.mt (TDEPFILES): Remove SOM references.  Also
	remove pa64solib.o.
	* config/pa/hpux11w.mh (NATDEPFILES): Remove SOM references.

	* configure.host; Use "hpux11w" and "hpux11" instead of
	"hpux1100w" and "hpux1100" respectively
	* config/pa/hpux11w.mh: Renamed from hpux1100w.mh.
	* config/pa/hpux11w.mt, config/pa/hpux11.mh: Likewise.
	* config/pa/hpux11.mt: Likewise.

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

	* breakpoint.h (target_hw_bp_type): new enum.
	* breakpoint.c (insert_breakpoints): use enum instead of consts.
	(remove_breakpoint): use enum instead of consts.
	(throughout): use "warning" instead of "fprintf(stderr, ..."
	[Also clean up a bunch of excessively long lines.]
	
1999-08-19  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c (waitabit): Removed.
	(breakpoint): Update.

	* i386-stub.c, m32r-stub.c, sparc-stub.c, sparcl-stub.c,
 	sparclet-stub.c (set_debug_traps): Don't send gratuitous ACK.

	* m68k-stub.c (putpacket): Restore code so that packets are sent
 	until an ACK is received.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* breakpoint.c (bpstat_stop_status): Accept triggered addresses
	anywhere inside the region occupied by a watched variable as a
	sign that the watchpoint fired.  Don't stop if some watchpoint
	was triggered, but its address doesn't match the address of this 
	watchpoint.
	(TARGET_REGION_OK_FOR_HW_WATCHPOINT): New macro.
	Default definition is to call TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT.
	(can_use_hardware_watchpoint): Call TARGET_REGION_OK_FOR_HW_WATCHPOINT;
	if it returns zero, return zero immediately. 
	(insert_breakpoints): Try to insert watchpoints for all the values
	on the value chain, even if some of them fail to insert.  Remove
	the breakpoint if parts of its value chain couldn't be inserted.
	
1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (go32_stopped_by_watchpoint): Remove unused code.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (tcgetpgrp, tcsetpgrp): New functions.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (go32_wait): If we are in a single-step mode, and the
	next instruction is INT nn or INTO, use a temporary breakpoint to
	simulate single-step mode, and reset the trace flag.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (wp_op): New typedef.
	(SHOW_DR): Print the length of watched region as well.
	(go32_insert_aligned_watchpoint): Remove unused argument PID.  All
	callers and the prototype changed.
	(go32_handle_nonaligned_watchpoint): Renamed from
	go32_insert_nonaligned_watchpoint.  Now handles all operations on
	non-aligned watchpoints: insertion, deletion, and counting.  If
	called with wp_count as the first argument, return the count of
	debug registers needed to watch the region.  Don't break out of
	the loop before all the addresses in the region are processed.
	(go32_remove_watchpoint): Call go32_remove_aligned_watchpoint to
	do the actual work.
	(go32_remove_aligned_watchpoint): New function, modeled after
	go32_insert_aligned_watchpoint.  Removes watchpoints that watch
	regions of arbitrary length by calling
	go32_handle_nonaligned_watchpoint as needed.
	(go32_region_ok_for_watchpoint): New function, called from
	can_use_hardware_watchpoint via the new macro
	TARGET_REGION_OK_FOR_HW_WATCHPOINT.

	* config/i386/nm-go32.h (TARGET_REGION_OK_FOR_HW_WATCHPOINT):
	Define to call go32_region_ok_for_watchpoint.
	(DECR_PC_AFTER_HW_BREAK): Define back to zero (previous redefinition
	to 1 was due to a bug in go32-nat.c).

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (cleanup_dregs): New function.
	(go32_mourn_inferior): Call it.
	(IS_REG_FREE, LOCAL_ENABLE_REG, GLOBAL_ENABLE_REG, DISABLE_REG,
	SET_BREAK, SET_WATCH, IS_WATCH, WATCH_HIT): Protect arguments with
	parentheses.
	(SET_BREAK): Increment the debug register's reference count.
	(DR_DEF): New macro, returns the access and length bits of the
	breakpoint.
	(SHOW_DR): Print the reference count of each register.  Disable or
	enable print-out depending on an environment variable GDB_SHOW_DR.
	(go32_insert_aligned_watchpoint): Look for an occupied debug
	register with the same address and access/length bits, and reuse
	it by incrementing reference the count, before occupying another
	register.  Return zero upon success.
	(go32_insert_nonaligned_watchpoint): Pass the read/write bits to
	go32_remove_watchpoint.
	(go32_remove_watchpoint): Accept an additional parameter: the
	read/write bits of the watchpoint to remove, and only remove a
	watchpoint if it's occupied and its address and read/write bits
	match.  Only disable the register if its reference count is zero;
	otherwise just decrease the reference count.
	(go32_remove_hw_breakpoint): Only decrease reference count and
	disable the debug register if it is occupied and its access bits
	match those of an instruction breakpoint.
	(go32_insert_hw_breakpoint): Before occupying another debug
	register, look for an already occupied register that defines an
	instruction breakpoint with the same address.  If found, increment
	its reference count.  Call SHOW_DR even if failed to insert a
	breakpoint.

	* config/i386/nm-go32.h (target_remove_watchpoint): Accept the
	TYPE argument as well.

Wed Aug 18 17:47:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c: Add more comments.

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

	* blockframe.c: Don't use PARAMS anymore, remove obsolete comment
	about frameless functions.

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

	* thread.c (delete_thread): delete any step_resume breakpoint
	held by the thread.  (prune_threads): call delete_thread.
	* breakpoint.c (breakpoint_init_inferior): if startup, then
	delete any remaining step_resume breakpoints.
	* infrun.c (handle_inferior_event): add cautionary comment.

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

	* remote.c (remote_async_mourn): New function. Async version of
	remote_mourn().

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* terminal.h [__GO32__]: Remove conditional; DJGPP now supports
	termios.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* command.c (CANT_FORK) [__MSDOS__]: Define.
	(shell_escape) [CANT_FORK]: If ARG is NULL, pass an empty string
	to `system'.
	[__DJGPP__]: Return to the original directory after the shell
	exits.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* config/i386/xm-go32.h (ROOTED_P): Don't reference X[1] if X[0]
	is a null character.

	* config/i386/nm-go32.h (DECR_PC_AFTER_HW_BREAK): Define to 1.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (redir_cmdline_parse, redir_cmdline_delete,
	redir_to_child, redir_to_debugger, redir_debug_init)
	[__DJGPP_MINOR__ < 3]: Dummy stubs for redirecting debuggee's
	standard handles.
	(print_387_status): Print "last FP instruction", not "last
	exception".  Restore the upper 5 bits of the opcode that aren't
	stored in the FPU state.  Print the FPU stack in its physical
	order, not relative to ST(0).  Print "special", not "trap" for
	unnormals and infinities.  Print all 10 bytes of each FP register,
	and print them with 19 significant digits.
	(regno_mapping): Make the mapping consistent with tm-go32.h.
	(sig_map): Add mappings for SIGQUIT, SIGFPE, SIGALRM.  Map NMI to
	SIGBUS.
	(excep_map): New variable, maps GDB signals to DJGPP exceptions.
	(go32_attach): Signal an error: we cannot attach to other
	processes.
	(go32_resume): Record the signal with which the inferior should be
	resumed, mapped to the DJGPP exception number.
	(go32_wait): Pass the signal recorded in go32_resume to the
	debuggee.  Save and restore debugger's and debuggee's current
	working directory.
	[__DJGPP_MINOR__ < 3]: Save and restore inferior's FPU state.
	(store_register): FPU regsiters have numbers less than 31.
	(go32_kill_inferior): Delete the parsed command-line storage.
	(go32_create_inferior): Initialize the parsed command-line
	storage.  Parse the command line and create the redirections for
	inferior's standard handles.
	[__DJGPP_MINOR__ < 3]: Init the inferior's FPU state.
	(ignore2): Function deleted.
	(device_mode): New function, switches a character device between
	raw and cooked mode.
	(go32_terminal_init): Invalidate the raw/cooked mode information.
	(go32_terminal_info): Print whether the inferior's terminal is in
	raw or cooked mode.
	[__DJGPP_MINOR__ > 2]: Say if standard handles are redirected or
	closed by the inferior.
	(go32_terminal_inferior): Switch standard handles to the
	inferior's files/devices.  Put the inferior's input device to
	raw/cooked mode, exactly like we found it last time.
	(go32_terminal_ours): Restore debugger's standard handles and put
	the terminal into cooked mode.  Save the mode of inferior's input
	device.
	(init_go32_ops): Assign go32_ops.to_attach,
	go32_ops.to_terminal_info, go32_ops.to_terminal_ours_for_output.
	Initialize inferior's cwd and the command-line storage.

Mon Aug 16 14:29:30 1999  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (ARGS_GROW_DOWNWARD): Define.
	* config/pa/tm-hppa64.h (ARGS_GROW_DOWNWARD): Undefine.
	* hppa-tdep.c (hppa_push_arguments): Handle arguments growing in
	both directions depending ARGS_GROW_DOWNWARD.
	(hppa_find_saved_regs): Update for 64bit wide registers & pointers
	and PA64 ABI. 

	* hppa-tdep.c (hppa_pop_frame): Various fixes for 64bit wide
	registers and pointers.
	(hppa_fix_call_dummy, skip_trampoline_code): Likewise.
	(restore_pc_queue): Update tests for width of memory loads.
	(hppa_push_arguments): Delete version that was #if 0'd out.

	* hppa-tdep.c (push_dummy_frame): Handle the new 64it ABI.
	(find_dummy_frame_regs): Corresponding changes.

	* hppa-tdep.c (read_unwind_info): Initialize obj_private->dp.
	(internalize_unwinds): Improve test for when to use segment
	relative code for unwinder bounds.
	(rp_saved): Fix offset of saved return pointer for the 64bit ABI.
	(hppa_frame_saved_pc): Various updates to handle 64bit registers
	and pointers.
	(frame_chain, restore_pc_queue): Likewise.

	* hppa-tdep.c (rp_saved): RP is saved at frame-16 when
	pointers are 64bits wide.

	* hppa-tdep.c (record_text_segment_lowaddr): New function.
	(internalize_unwinds): Use it if addressess are 8 bytes wide. 

	* symfile.c (syms_from_objfile): No longer warn if the lowest
	section does not have SEC_CODE set.

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

	* hppah-nat.c (store_inferior_registers): Do not try to write a
	nonzero value to the high part of IPSW.  Fix typo in unable to store
	warning.

	* config/pa/tm-hppa.h (opd_data structure): Delete.  Not actually
	needed.
	(struct obj_private_struct): Add new entry for the objfile's DP
	value.
	* config/pa/tm-hppa64.h (CALL_DUMMY): Add a nop to make it an even
	number of instructions.  Pack the dummy into word sized hunks.
	(CALL_DUMMY_LENGTH): Update appropriately.
	(PC_IN_CALL_DUMMY, CALL_DUMMY_LOCATION_AFTER_TEXT_END): Delete.

Mon Aug 16 19:08:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in: Try -lsocket when looking for socketpair.
	* configure, config.h: Re-generate.

1999-08-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Christopher Faylor <cgf@cygnus.com>:
	
	* event-loop.c (gdb_wait_for_event): Before going to wait for
 	another event with select or poll, flush the error and the output
 	streams.

	* event-top.c (gdb_readline2): Do not buffer the input, because
 	doing so can interfere with select/poll in bad ways.

Fri Aug 13 17:36:56 1999  Eli Zaretskii  <eliz@is.elta.co.il>

	* maint.c (maintenance_dump_me) [__DJGPP__]: Simulate a core dump
 	with SIGABRT.
	* utils.c (quit) [__MSDOS__]: Don't mention SIGINT, since it's not
 	gonna happen.
	(notice_quit): No need to define this function for the DJGPP port.

1999-08-13  James Ingham  <jingham@leda.cygnus.com>

	* arm-tdep.c (arm_frameless_function_invocation): SKIP_PROLOGUE
	macro no longer modifies its argument.  Update uses to accord.

	* config/arm/arm.mt (TDEPFILES): Add the remote-rdi.o to the
	TDEPFILES.
	* configure.tgt: Add rdi-share to configdir for the Arm targets.

Fri Aug 13 11:16:32 1999  Jeffrey A Law  (law@cygnus.com)

	* hppah-nat.c (store_inferior_registers): Revamp to be PA2.0W
	aware.

	* infttrace.c (ttrace_write_reg_64): New function.

	* hp-symtab-read.c (is_in_import_list): Delete extern declaration.
	* somread.c (is_in_import_list): Delete function.
	* objfiles.c (is_in_import_list): New function.
	* objfiles.h (is_in_import_list): Declare.

	* config/pa/tm-hppa64.h (GDB_TARGET_IS_HPPA20W): Define before
	including tm-hppah.h.
	(PC_IN_CALL_DUMMY): Define.
	(HPUX_1100): Similarly.
	* config/pa/tm-hppa.h (somsolib.h, pa64solib.h): Conditionalize
	includes on GDB_TARGET_IS_HPPA20W.

	* configure.host: Distinguish between wide and narrow modes
	for hpux11.
	* config/pa/hpux1100w.mh, config/pa/hpux1100w.mt: New files.

	* config/pa/tm-hppa64.h (STACK_ALIGN): Redefine.
	(REG_PARM_STACK_SPACE): Likewise.

	* config/pa/tm-hppa.h (CLEAN_UP_REGISTER_VALUE): Handle 64bit
	PA target correctly.
	(REG_PARM_STACK_SPACE): Define.
	(struct unwind_table_entry): region_start and region_end are
	CORE_ADDRs.
	(typedef opd_data): New.
	(obj_private_data_t): Include pointer to opd_data structure.

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

	* stabsread.c (stabsread_clear_cache): New funciton which clears
	an optimization cache of the reader.

	* coffread.c (coff_symfile_finish): Give stabs reader a chance to
	clean up.

	* win32-nat.c (handle_load_dll): Don't suppress re-reading symbols
	from a DLL if an objfile for it already exists. (Not that this should
	happen anymore anyway...)

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

	* config/mcore/tm-mcore.h (SAVE_DUMMY_FRAME_TOS): Define for MCore,
	which also requires that the stack pointer be saved for call
	dummies BEFORE arguments get pushed onto it.

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

	From Eli Zaretskii  <eliz@is.elta.co.il>:
	* source.c (mod_path) [_WIN32 || __DJGPP__]: Don't remove trailing
	slash from "d:/".  Don't overstep the beginning of name.
	[_WIN32 || __MSDOS__]: Convert "d:" to "d:.", otherwise appending
	a slash changes its meaning.
	(openp): Use SLASH_P, not equality with SLASH_CHAR.
	(print_source_lines_base) [CRLF_SOURCE_FILES]: Skip \r only before
	a \n.
	(forward_search_command) [CRLF_SOURCE_FILES]: Remove \r at the end
	of all lines.
	(reverse_search_command) [CRLF_SOURCE_FILES]: Likewise.

	* gnu-regex.c (CHAR_CLASS_MAX_LENGTH): Don't use wide characters
 	unless HAVE_BTOWC is defined.

Fri Aug 13 10:20:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From J.T. Conklin <jtc@redback.com>:
	* gdbinit.in: Change the template .gdbinit to match the recent
 	fatal error handling change.

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

	* maint.c (maintenance_internal_error): Fix typo in prototype.

Wed Aug 11 15:38:05 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (remote_rcmd): Pass an empty command across to the
 	target.  Check for and handle an ``Enn'' return status.

Tue Aug 10 13:59:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* maint.c (_initialize_maint_cmds): Add ``maintenance
 	internal-error'' command.
	(maintenance_internal_error): New function.

1999-08-10  James Ingham  <jingham@leda.cygnus.com>

	* top.c: Remove the disassembly_flavor_hook, use the new set_hook
	instead. 
	* defs.h: Ditto.
	* arm-tdep.c (set_disassembly_flavor_sfunc):  Ditto.

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

	* config/i386/nm-i386sol2.h (FIND_NEW_THREADS): remove, obsolete.
	* config/sparc/nm-sun4sol2.h (FIND_NEW_THREADS): remove, obsolete.
		
1999-08-10  J.T. Conklin  <jtc@redback.com>

	* configure.tgt (i[3456]86-*-aout*, i[3456]86-*-coff*,
 	i[3456]86-*-elf*): Use embed.mt.
	* config/i386/embed.mt: New file.

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

	* remote.c (remote_async_open_1): Remove casting in call to
 	add_file_handler.
	(extended_remote_async_create_inferior): Ditto.

	* event-top.c (change_line_handler): Ditto.
	(_initialize_event_loop): Ditto.

	* infrun.c (complete_execution): Ditto.

	* event-loop.c (add_file_handler): Change proc parameter to be ptr
 	to func with void parameter, rather than void*. Coerce second
 	paramter in calls to create_file_handler. Replace
 	async_handler_func and file_handler_func with handler_func.

	* event-loop.h: Get rid of typedefs for file_handler_func and
 	async_handler_func, just have one, and call it handler_func.
  	Replace async_handler_func and file_handler_func occurrences with
 	handler_func.

Tue Aug 10 03:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c: Delete random #if 0 code.
	(is_branch): Handle new branching opcodes from PA2.0
	(inst_saves_gr, inst_saves_fr): Handle additional instructions
	used to save general and floating point registers in the stack.
	(skip_prologue_hard_way): Handle additional instructions to
	save the return pointer in the stack.
	(after_prologue): Fix mis-guided and incorrect code to find
	the end of the prologue using debug symbols.
	(hppa_skip_prologue): Generally clean up comments, lose code
	which does not apply to the PA, etc.

Sun Aug  8 17:53:41 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* MAINTAINERS: Make Andrew Cagney the mn10300 maintainer.
  	Transfer responsibility for the PowerPC from Andrew Cagney to
 	Elena Zannoni.

Tue Aug 10 13:59:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	Based on code from J.T. Conklin <jtc@redback.com>:
	* utils.c (internal_error): Make quit? and coredump? separate
 	questions so that the user can dump-core and not quit.
	(internal_error): Cleanup error message.

1999-08-09  Tom Tromey  <tromey@cygnus.com>

	* kod-cisco.c (cisco_kod_open): Removed incorrect `arg' argument.

Sun Aug  8 12:06:47 1999  Fred Fish  <fnf@cygnus.com>

	* coffread.c (process_coff_symbol): Remove section_offsets from
	prototype and function definition.  Get section_offsets from the
	passed objfile and pass it on to callees the same way.
	(coff_symtab_read): Ditto.
	(coff_symfile_read): Ditto.
	* dbxread.c (read_dbx_dynamic_symtab): Ditto.
	(read_dbx_symtab): Ditto.
	(dbx_symfile_read): Ditto.
	(coffstab_build_psymtabs): Ditto.
	(elfstab_build_psymtabs): Ditto.
	(stabsect_build_psymtabs): Ditto.
	* dstread.c (dst_symfile_read): Ditto.
	* elfread.c (elf_symfile_read): Ditto.
	* jv-class.c (jv_class_symfile_read): Ditto.
	* mipsread.c (mipscoff_symfile_read): Ditto.
	* nlmread.c (nlm_symfile_read): Ditto.
	* os9kread.c (os9k_symfile_read): Ditto.
	* somread.c (som_symfile_read): Ditto.
	* stabsread.h (elfstab_build_psymtabs): Ditto.
	* xcoffread.c (xcoff_initial_scan): Ditto.

	* symfile.h (sym_read): Remove section_offsets from prototype.
	* symfile.c (syms_from_objfile): Call sym_read without
 	section_offsets.
	(reread_symbols): Ditto.

	* elfread.c (elfstab_offset_sections): Use SIZEOF_SECTION_OFFSETS
	to allocate sections offsets array.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.

	* partial-stab.h (section_offsets): Get from objfile.
	* dbxread.c (read_dbx_symtab): Fix typo that made -1 casted
	to a CORE_ADDR look like an subtraction expression.
	* objfiles.h: Add some comments.
	* symfile.c: Add some comments.
	* objfiles.c: Add some comments.
	(objfile_relocated): Use ALL_OBJFILE_OSECTIONS to iterate over
	sections.
	(find_pc_sect_sections): Use ALL_OBJSECTIONS to iterate over all
	sections in all objfiles.
	* symfile.c (syms_from_objfile): Use ALL_OBJFILE_OSECTIONS.

	* irix5-nat.c (symbol_add_stub): Fix typo that made taking the
	address of lowest_sect with '&' look like a bitwise and op.
	* osfsolib.c (symbol_add_stub): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* symfile.c (syms_from_objfile): Ditto.

	* dwarf2read.c (dwarf2_build_psymtabs_hard): Minor format tweak.
	* symfile.c (syms_from_objfile): Ditto, and fix typo.
	* top.c (init_main): Fix typo in comment (DEFULAT_PROMPT).
	* doc/gdbint.texinfo (find_sym_fns): This replaces symfile_init.

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

	* remote.c (remote_insert_breakpoint): Fix typo in Z packet support. 
	Also move Z packet support OUTSIDE of REMOTE_BREAKPOINT ifdef,
	since this is not set for all targets that support the Z packet.

Fri Aug  6 17:17:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (fatal): Delete declaration.
	(internal_error): Declare.
	* utils.c (nomem): Call internal_error instead of fatal.
	(fatal_dump_core): Delete.
	(malloc_botch): Print message direct to stderr.
	(fatal): Delete definition.
	* utils.c (internal_error): Define.
	
	* gdbarch.h, gdbarch.c, hppah-nat.c, ch-exp.c, dsrec.c, sh-tdep.c,
 	infptrace.c, f-lang.c, symm-nat.c, top.c, m3-nat.c, v850-tdep.c,
 	remote-vx.c, remote-sim.c, remote-mips.c, source.c, infcmd.c,
 	findvar.c, remote.c: Replace fatal with call to internal_error.

Sun Aug  8 15:28:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Move
 	definition from here.
	* defs.h: To here.
	
Sat Aug  7 21:44:59 1999  Fred Fish  <fnf@cygnus.com>

	* remote.c (remote_insert_breakpoint): Fix typo, missing ';'.

Sun Aug  8 11:26:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): Add break; to the default case.

Fri Aug  6 19:26:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h: Delete #if ANSI_PROTOTYPES code, GDB assumes ISO-C.
	* remote-rdp.c (send_rdp), remote-os9k.c (printf_monitor),
 	remote-mips.c: (mips_error), remote-array.c: (printf_monitor,
 	debuglogs), complaints.c (complain), monitor.c:
 	(monitor_printf_noecho, monitor_printf), language.c (type_error,
 	range_error), remote-st.c: (printf_stdebug), remote-sim.c
 	(gdb_os_printf_filtered, gdb_os_vprintf_filtered,
 	gdb_os_evprintf_filtered, gdb_os_error), serial.c (serial_printf),
 	utils.c (warning, error, fatal, fatal_dump_core, (query,
 	fprintf_filtered, fprintf_unfiltered, fprintfi_filtered,
 	printf_filtered, printf_unfiltered, printfi_filtered): Delete
 	legacy #ifndef ANSI_PROTOTYPES varargs code.

	* defs.h: Don't #include <varargs.h>.
	* remote-rdp.c, remote-os9k.c, remote-mips.c, remote-array.c,
 	monitor.c, remote-st.c: Don't include <varargs.h> or <stdarg.h>.

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

	* configure.in, configure: add the --enable-multi-ice to determine 
	whether to configure and build the multi-ice-gdb-server.  Note,
	for now this only builds on cygwin, so don't enable it for other
	platforms... 

1999-08-06  Tom Tromey  <tromey@cygnus.com>

	* Makefile.in (SFILES): Added kod.c and kod-cisco.c.
	(COMMON_OBS): Added kod.o and kod-cisco.o.
	(kod-cisco.o): New target.
	(kod.o): New target.
	* kod-cisco.c: New file.
	* kod.c: New file.

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

	These are some fixups for the Arm, and support for the
	disassembly-flavor for the ARM.
	
	* defs.h: Declare the disassembly_flavor_hook
	* top.c: Define the disassembly_flavor_hook
	* i386-tdep.c: Remove unnecessary declaration of the
	disassembly_flavor_hook.

	* config/arm/tm-arm.h: Change definition of
	arm_init_extra_frame_info.
	Add a few more comments.
	* arm-tdep.c (arm_init_extra_frame_info): Listen to and use the
	fromleaf parameter passed into init_extra_frame_info.
	(set_disassembly_flavor_sfunc): New Function.
	(set_disassembly_flavor): New Function.
	(arm_othernames): Use the set_disassembly_flavor.
	(_initialize_arm_tdep): Setup the disassembly flavor commands, and 
	initialize the flavor.
	(arm_frameless_function_invocation): Adjust for
	frameless functions that have 1 or 2 instructions that mimic the
	standard APCS form.
	(arm_scan_prologue): Be more careful about scanning the function
	prologue.  Don't match things that just have a few of the prologue 
	instructions out of order, and don't get thrown by the scheduler
	migrating instructions into the prologue.

	Add support for the "Z" and "z" packets to request the stub
	to set a breakpoint.
	
	* remote.c (set_remote_protocol_Z_packet_cmd): New function.
	(show_remote_protocol_Z_packet_cmd): New Function.
	(remote_open_1): Init the Z packet config.
	(remote_async_open_1): Init the Z packet config.
	(remote_insert_breakpoint): Use the "Z" packet if supported.
	(remote_remove_breakpoint): Use the "z" packet if supported.
	(remote_insert_watchpoint): New Function - currently wired to
	nothing. 
	(remote_remove_watchpoint): Ditto.
	(remote_insert_hw_breakpoint): Ditto.
	(remote_remove_hw_breakpoint): Ditto.

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

	* infcmd.c: Include parser-defs.h.
	(interrupt_target_command): Declare.
	(stack_dummy_testing): Remove old funky flag.
	(run_stack_dummy): Remove unused reference to old funky flag.

1999-08-06  Tom Tromey  <tromey@cygnus.com>

	* command.c (do_setshow_command): Call set_hook if not NULL.
	* top.c (set_hook): New hook definition.
	* defs.h (set_hook): Declare.

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

	* infrun.c: Convert code to pure standard C, elim some warnings.
	(stopped_for_shlib_catchpoint): Remove, never used.

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

	* NEWS: Mention new Motorola MCore target.

	* sparc-tdep.c (gdb_print_insn_sparc): Print insns of the current
	architecture.

Thu Aug  5 20:41:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (configdirs): Add check for socketpair.
	* configure, config.in: Re-generate.

	From Mon Jul 19 10:46:18 1999 Philippe De Muyter <phdm@macqel.be>:
	* ser-pipe.c (sys/wait.h): Include this file only #if HAVE_SYS_WAIT_H.
	(STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Macros defined if needed.

Thu Aug  5 20:04:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (debug_to_open, debug_to_attach, debug_to_post_attach,
 	debug_to_require_attach, debug_to_detach, debug_to_require_detach,
 	debug_to_wait, debug_to_post_wait, debug_to_fetch_registers,
 	debug_to_store_registers, debug_to_prepare_to_store,
 	debug_to_xfer_memory, debug_to_files_info,
 	debug_to_insert_breakpoint, debug_to_remove_breakpoint,
 	debug_to_terminal_init, debug_to_terminal_inferior,
 	debug_to_terminal_ours_for_output, debug_to_terminal_ours,
 	debug_to_terminal_info, debug_to_kill, debug_to_load,
 	debug_to_lookup_symbol, debug_to_create_inferior,
 	debug_to_post_startup_inferior,
 	debug_to_acknowledge_created_inferior,
 	debug_to_clone_and_follow_inferior,
 	debug_to_post_follow_inferior_by_clone,
 	debug_to_insert_fork_catchpoint, debug_to_remove_fork_catchpoint,
 	debug_to_insert_vfork_catchpoint,
 	debug_to_remove_vfork_catchpoint, debug_to_has_forked,
 	debug_to_has_vforked, debug_to_can_follow_vfork_prior_to_exec,
 	debug_to_post_follow_vfork, debug_to_insert_exec_catchpoint,
 	debug_to_remove_exec_catchpoint, debug_to_has_execd,
 	debug_to_reported_exec_events_per_exec_call,
 	debug_to_has_syscall_event, debug_to_has_exited,
 	debug_to_mourn_inferior, debug_to_can_run,
 	debug_to_notice_signals, debug_to_thread_alive, debug_to_stop,
 	debug_to_query, debug_to_rcmd, debug_to_enable_exception_callback,
 	debug_to_get_current_exception_event, debug_to_pid_to_exec_file,
 	debug_to_core_file_to_sym_file, debug_to_close): Send trace output
 	to ``gdb_stdlog'' instead of ``gdb_stderr''.

Thu Aug  5 16:22:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (init_remote_ops): Initialize remote_ops.to_rcmd.
	(init_remote_async_ops): Initialize remote_async_ops.to_query.
	(remote_rcmd): New function.

	* monitor.c (monitor_rcmd): Rename monitor_command.
	(init_base_monitor_ops): Initialize monitor_ops.to_rcmd.
	(_initialize_remote_monitors): Move "monitor" command from here.
	* target.c (initialize_targets): To here.
	(monitor_command): New function.  Implement "monitor" command.

	* target.c (cleanup_target): de_fault to_rcmd.
	(update_current_target): INHERIT to_rcmd.
	(debug_to_rcmd): New function.
	(setup_target_debug): Initialize current_target.to_rcmd.

	* target.h (struct target_ops): Add field to_rcmd.
	(target_rcmd): Define.

Thu Aug  5 14:24:07 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c: Replace comment describing remote protocol with
 	pointer to official document.
	
Thu Aug  5 11:59:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_protocol_binary_download): New variable.
  	Replace ``remote_binary_download'' and ``remote_binary_checked''.
	(set_remote_protocol_binary_download_cmd,
 	show_remote_protocol_binary_download_cmd): New functions.
	(remote_open_1, remote_async_open_1, remote_cisco_open):
 	Initialize ``remote_protocol_binary_download'' instead of
 	``remote_binary_download''.
	(check_binary_download): Re-write.
	(remote_write_bytes): Ditto.
	(_initialize_remote): Add ``set remote X-packet'' and ``show
 	remote X-packet'' commands.  Disable old ``set
 	remotebinarydownload'' command.

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

	* remote-rdi.c (arm_rdi_close): Close the transport device, too.

Wed Aug  4 10:42:58 1999  Fred Fish  <fnf@cygnus.com>

	* xcoffread.c (scan_xcoff_symtab): Change main_aux into
	an array of 5 internal_auxent to leave room for bfd to
	write n_numaux entries.  Change code to use the first one.

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

	* c-valprint.c (c_val_print): When printing decimal equivalent
	of a char, cast appropriately.

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

	From Jonathan Larmour <jlarmour@cygnus.co.uk>:
	* main.c (print_gdb_help): Use gdbinit variable to determine file
 	name used for --nx help

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

	* config/mips/tm-mips.h (BIG_ENDIAN): Don't define here.

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

	* stabsread.c (read_range_type): Handle an unsigned range type
	whose length in bytes is any power of two, not just a few
	common ones.

	* monitor.c (monitor_expect): When we receive a character that
	isn't part of the string we were expecting, don't just start
	matching again at the beginning of the string --- some shorter
	suffix of the input might be a prefix of the string too.

1999-07-31  Fred Fish  <fnf@cygnus.com>

	* symfile.c (symbol_file_command): Fix typo that made -1 casted
	to a CORE_ADDR look like an subtraction expression.
	(add_symbol_file_command): Ditto.

1999-07-30  Jim Blandy  <jimb@cris.red-bean.com>

	* hppa-tdep.c (pa_print_registers): Frob register output some more.

1999-07-29  Jim Blandy  <jimb@cris.red-bean.com>

	* config/pa/nm-hppah.h (PTRACE_ARG3_TYPE): After more
	consideration, make this a CORE_ADDR, like WDB did. 

	Rather than casting every single use of really_free_pendings to 
	make_cleanup_func, why not actually make it have that type?  Golly!
	* buildsym.c (really_free_pendings): Change argument type to PTR.
	buildsym.h (really_free_pendings): Fix declaration.
	* dbxread.c (dbx_symfile_read, dbx_psymtab_to_symtab_1),
	dwarf2read.c (psymtab_to_symtab_1), dwarfread
	(psymtab_to_symtab_1), hp-psymtab-read.c (hpread_build_psymtabs),
	os9kread.c (os9k_symfile_read, os9k_psymtab_to_symtab_1),
	xcoffread.c (xcoff_psymtab_to_symtab_1, xcoff_initial_scan):
	Remove casts.

	Pass a CORE_ADDR safely through catch_errors.
	* hppa-tdep.c (args_for_find_stub): New member, return_val.
	(cover_find_stub_with_shl_get): Change argument and return type to
	match catch_errors.  Save return value of find_stub_with_shl_get
	in *args.
	(initialize_hp_cxx_exception_support): Collect value of
	eh_notify_callback_addr from args. 

	Get rid of some noise.  It would be nice to get helpful warnings
	from the compiler about lossy conversions.
	* hppa-tdep.c (eh_notify_hook_addr, eh_notify_callback_addr,
	eh_break_addr, eh_catch_catch_addr, eh_catch_throw_addr,
	break_callback_sal): Initialize these to zero, not NULL, to shush
	warnings.
	* infttrace.c (thread_fake_step): Compare signal to
	TARGET_SIGNAL_0, not NULL, to avoid warnings.
	(_initialize_infttrace): Add sanity check.

	* config/pa/nm-hppah.h (PTRACE_ARG3_TYPE): Define this to be
	long, so we can pass arguments properly to ptrace.

	* hppah-nat.c (child_xfer_memory): Correctly compute mask to round
	address to an int boundary.

1999-07-29  Jim Blandy  <jimb@savonarola.red-bean.com>

	Change from Ian Lance Taylor <ian@zembu.com>.  The
	i386_linux_sigtramp* functions should be moved to
	i386-linux-tdep.c, when that file is introduced.

	* config/i386/tm-linux.h (LINUX_SIGCONTEXT_SIZE): Define.
	(LINUX_SIGCONTEXT_PC_OFFSET): Define.
	(LINUX_SIGCONTEXT_SP_OFFSET): Define.
	(SIGCONTEXT_PC_OFFSET): Don't define.
	(I386_LINUX_SIGTRAMP): Define.
	(IN_SIGTRAMP): Define.
	(i386_linux_sigtramp): Declare.
	(sigtramp_saved_pc): Define.
	(i386_linux_sigtramp_saved_pc): Declare.
	(FRAMELESS_SIGNAL): Define.
	(FRAME_CHAIN, FRAME_SAVED_PC): Define after #undef.
	* i386-tdep.c (i386_linux_sigtramp_start): New static function if
	I386_LINUX_SIGTRAMP.
	(i386_linux_sigtramp): New function if I386_LINUX_SIGTRAMP.
	(i386_linux_sigtramp_saved_pc): Likewise.
	(i386_linux_sigtramp_saved_sp): Likewise.

1999-07-28  Jim Blandy  <jimb@savonarola.red-bean.com>

	* infrun.c (handle_inferior_event): Don't try to use the code for
	stepping over a function call to also handle stepping out of a
	sigtramp on HP-UX.  That ends up trashing step-resume breakpoints.
	This change reverts some of David Taylor's change of 31 Dec 1998.
	The HP-UX maintainer needs to submit a new change for whatever
	problem the original change was trying to fix.

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

	* event-top.c (command_line_handler): Don't treat an empty line
 	from readline the same way as a multiline command. This avoids
 	missing detecting when the user presses just 'enter'.

1999-07-28  Jim Blandy  <jimb@savonarola.red-bean.com>

	Provide more sanity checking:
	* infrun.c (handle_inferior_event): Before assigning a new
	breakpoint to step_resume_breakpoint, make sure it's not already
	pointing at one; if it is, that's a bug.
	(check_for_old_step_resume_breakpoint): New function.

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

	From Eli Zaretskii  <eliz@is.elta.co.il>:
	* top.c (gdb_init) [__MSDOS__]: Arrange for GDB to return to the
	original directory before exiting.
	(cd_command) [_WIN32 || __MSDOS__]: Canonicalize the new directory
	name explicitly.  Handle "d:/" names correctly.
	(init_history) [__MSDOS__]: Use _gdb_history as the default GDB
	history file name.

Mon Jul 26 17:13:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (enum packet_support, enum packet_detect, struct
 	packet_config): Define.
	(set_packet_config_cmd, show_packet_config_cmd,
 	add_packet_config_cmd, init_packet_config): New functions.
  	Generic support for optional packets.
	(remote_protocol_P): Replace stub_supports_P.
 	(set_remote_protocol_P_packet_cmd, show_remote_protocol_P_packet_cmd):
 	New functions.
	(_initialize_remote): Add ``set remote-protocol-P-packet'' command.
	(remote_open_1, remote_async_open_1, remote_cisco_open):
 	Initialize ``remote_protocol_P''.
	(remote_store_registers): Re-write ``P'' probe logic.
	(store_register_using_P): New function.

	From Ian Lance Taylor <ian@airs.com>:
	(remote_prepare_to_store): Only read registers when ``P'' packet
 	is in state unsupported or support-unknown.
	
1999-07-24  Fred Fish  <fnf@cygnus.com>

	* symfile.c (default_symfile_offsets): Clear section_offsets
	before filling it in.

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

	* remote.c (_initialize_remote): "remotebreak" should be a var_boolean.

1999-07-15  Jim Blandy  <jimb@cris.red-bean.com>
	
	Make the output from "info registers" fit withinin 80 columns.
	* hppa-tdep.c (pa_print_registers): Make it easy to change row and
	column counts.  Switch to three columns, instead of four, and
	adjust spacing.

	First cut at supporting HPPA2.0 in "wide" (64-bit) mode.
	* configure.tgt: Add hppa2.0w target.
	* config/pa/hppa64.mt, config/pa/tm-hppa64.h: New files.
	* hppa-tdep.c (hppa_fix_call_dummy): Dyke out code to tweak the
	call dummy, if target is PA2.0w.  This is temporary, until I get
	function calls working.
	* hppah-nat.c (fetch_register): Rewritten to handle both narrow
	and wide register requests.
	(HPPAH_OFFSETOF): New macro.

	* gdbtypes.c (is_integral_type): New function.
	* gdbtypes.h: Prototype for above.

1999-07-15  J.T. Conklin  <jtc@redback.com>

	* configure.tgt (i[3456]86-*-vxworks*): New target.
	* config/i386/vxworks.mt: New file, x86 VxWorks target
	* config/i386/tm-vxworks.h: New file.

	* configure.tgt (powerpc-*-vxworks*): New target.
	* config/powerpc/vxworks.mt: New file, PowerPC VxWorks target
	* config/powerpc/tm-vxworks.h: New file.

	* NEWS: Mention the new configs.

1999-07-15  Fernando Nasser  <fnasser@cygnus.com>

	* target.c (target_preopen): Prevent query when not from_tty.
	* infcmd.c (run_command): Prevent query when not from_tty.

1999-07-15  Fernando Nasser  <fnasser@cygnus.com>

	* event-loop.c: Fix typo in comment.

Wed Jul 14 17:29:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (struct pipe_state): Define.
 	(pipe_close): Retain the PID of the sub-process using ``struct
 	pipe_state''.  Delete #ifdef code that used popen().
	(pipe_close): Kill of the sub-process as part of the cleanup.

	* serial.h (struct _serial_t): Add field ``state''.

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

	* event-top.c (display_gdb_prompt): Don't display the prompt if we
 	are in the middle of an execution command. Also trick readline so
 	it doesn't try to display the prompt.
	(command_line_handler): Get rid of change_prompt, unused variable.
	Use {push, pop}_prompt mechanism in case of multiline commands.

	* infrun.c (complete_execution): Set target_executing to 0 as
 	first thing, so that display_gdb_prompt does the right thing.

Tue Jul 13 20:29:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parse.c (build_parse): Fix conditional increment of num_std_regs
 	for SP_REGNUM. Was conditional on FP_REGNUM.

Tue Jul 13 16:44:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Revert 1999-07-07 Stan Shebs
 	<shebs@andros.cygnus.com> indentation change.  Don't let indent
 	mess with these files.

Mon Jul 12 11:15:09 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/mips/tm-mips.h (REGISTER_CONVERT_TO_RAW,
 	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERTIBLE): Define.
	(REGISTER_RAW_SIZE): Re-define as mips_register_convert_to_raw.
	* mips-tdep.c (mips_register_convert_to_raw,
 	mips_register_convert_to_virtual, ): New functions.
	(mips_register_raw_size, mips_register_convertible): New
 	functions.  Handle bug introduced by ``Wed Apr 1 23:13:23 1998
 	Andrew Cagney <cagney@b1.cygnus.com>'' where remote mips64 target
 	transfers SR as 64 bits yet GDB expected only 32 bits.
	(mips64_transfers_32bit_regs): New static variable.
	(_initialize_mips_tdep): Add obscure command ``set
 	remote-mips64-transfers-32bit-regs'' that provides backward
 	compatibility.
	(do_gp_register_row): Extract register values from raw buffer.

	* NEWS: Document protocol change.

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

	* rdi-share/unixcomm.c (Unix_ResetSerial): Remove CYGWIN32
	conditional.  It's no longer needed.
	(SERPORT1, SERPORT2): Linux serial ports are "/dev/ttyX", not
	"/dev/cuaX" (X=0,1,2,3,...).

Mon Jul 12 02:02:00 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* defs.h, utils.c (fputstrn_filtered, fputstrn_unfiltered,
 	fputstrnn_unfiltered): New functions.
	(gdb_printchar): Delete.

	* remote.c (print_packet): Replace gdb_printchar with
 	fputstrn_filtered.
	(getpkt): Use fputstrn_unfiltered to dump packet received.
	(putpkt_binary): Use fputstrnn_unfiltered to dump packet sent.

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

	* blockframe.c (blockvector_for_pc_sect): When looking for a block,
	we want the one whose end is greater than our PC, not greater or equal.

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

	* sparcl-tdep.c (init_sparclite_ops): Fix doc strings, remove
	useless inits.
	(sparclite_ops): Remove redundant decl.

Thu Jul  8 16:48:40 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (pipe_open): Bi-directional popen found on both
 	NetBSD and OpenBSD.
	* ser-pipe.c: New file.  Implement popen() style serial interface.
	* NEWS: Mention.
	* Makefile.in (ALLDEPFILES): Add ser-pipe.c.
	(ser-pipe.o): Add new target.  Specify dependencies.
	(SER_HARDWIRE): Add ser-pipe.o.
	* serial.c (serial_open): Recognize a serial pipe ``|''.

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

	* All C files except *-stub.c and *-share/*: Indent to GNU
	standard, using indent 1.9.1.
	* defs.h: Make indent ignore this file, macros confuse it.

	* 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-10  Keith Seitz  <keiths@cygnus.com>

	* mcore-rom.c (picobug_dumpregs): Return a value. Any value, it
	doesn't matter.
	* mcore-tdep.c (mcore_analyze_prologue): Set NO_MORE_FRAMES
	if the start of the function is the entry point.
	(mcore_analyze_prologue): rotli takes an immediate, not an
	offset immediate.
	(mcore_push_arguments): Fix compiler warning.

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''.
	mips-tdep.c (mips_gdbarch_init): Add mips_init_extra_frame_info.

	* 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.
	(mips_gdbarch_init): Add mips_register_name.

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.

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

	* config/mcore/tm-mcore.h (FRAME_NUM_ARGS): 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.

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>

	* config/mcore/tm-mcore.h (BELIEVE_PCC_PROMOTION): Define. We
	really do want to believe what gcc tells us about types...

1999-05-19  Keith Seitz  <keiths@cygnus.com>

	* config/mcore/tm-mcore.h (FRAME_ARGS_ADDRESS): Define to a function.
	 (FRAME_LOCALS_ADDRESS): Ditto.
	* mcore-tdep.c (mcore_frame_args_addcress): New function.
	(mcore_frame_locals_address): New function.

	* 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.

	* mcore-rom.c (init_picobug_cmds): Add number of breakpoints supported
	by picobug monitor.

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  Keith Seitz  <keiths@cygnus.com>

	* configure.tgt: Add MCore target.
	* Makefile.in: Add mcore-tdep.c and mcore-rom.c
	* config/mcore/tm-mcore.h: New file.
	* config/mcore/mcore.mt: New file.
	* mcore-rom.c: New file.
	* mcore-tdep.c: New file.

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.

Thu Apr 15 15:15:07 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* mips-tdep.c (struct gdbarch_tdep): Rename elf_abi to
 	elf_flags. Check ABFD is elf_flavour before extracting elf_flags.
  	Match ARCH against entire elf_flags instead of just the
 	EF_MIPS_ABI field.
	(mips_gdbarch_init): Extract/print ef_mips_arch and
 	ef_mips_bitptrs and ef_mips_abi fields from elf_flags.

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.

	* mips-tdep.c (mips_gdbarch_init): Initialize above

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.
	
Thu Jan 28 18:58:02 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	From John Metzler <jmetzler@cygnus.com>:
	* mips-tdep.c (struct gdbarch_tdep): Add mips_saved_regsize.
	(MIPS_SAVED_REGSIZE): Define.
	(mips_find_saved_regs, read_next_frame_reg, mips_pop_frame):
 	Read/write MIPS_SAVED_REGSIZE bytes of register on stack instead
 	of MIPS_REGSIZE.
	(mips_gdbarch_init): Initialize mips_saved_regsize.

	* mips-tdep.c (mips_frame_saved_pc, mips16_heuristic_proc_desc,
 	mips_push_arguments, mips_push_dummy_frame,
 	mips_use_struct_convention): Ditto.  For MIPS_SAVED_REGSIZE <
 	REGISTER_RAW_SIZE, handle little/big endian issues from only using
 	half the register.
	(STACK_ARGSIZE): Default to MIPS_SAVED_REGSIZE instead of
 	MIPS_REGSIZE.

	* mips-tdep.c (struct gdbarch_tdep, FP_REGISTER_DOUBLE,
 	mips_gdbarch_init): Apply similar changes.  Add
 	mips_fp_register_double to struct.

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.

Wed Jan 27 15:09:22 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): Trace e_flags from BFD
 	elf_info.

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>

	* mips-tdep.c (mips_gdbarch_init): fix stream arg in
	fprintf_unfiltered calls.
	* 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:
