Sun Dec 19 18:56:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (mention): Delete ui-out breakpoint code.  Mention
 	calls breakpoint_create_event and that, eventually, calls
 	gdb_breakpoint_query which displays the breakpoint details.
	(hbreak_command_wrapper, thbreak_command_wrapper): Delete.

Wed Dec 29 17:41:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (create_breakpoints, parse_breapoint_sals,
 	breakpoint_sals_to_pc): New functions.
	(break_command_1): Rewrite. Use create_breakpoints,
 	parse_breapoint_sals, breakpoint_sals_to_pcto create the list of
 	breakpoints specified in ``sals''.  Delete unused variables.
  	Pre-allocate addr_strings for all breakpoints.  Allocate a
 	separate cond and cond_string for each breakpoint.
	(gdb_breakpoint, do_captured_breakpoint, struct
 	captured_breakpoint_args): Provide a library interface into
 	create_breakpoints.

	* defs.h (gdb_breakpoint): Add declaration.

1999-12-22  Michael Chastain  <chastain@cygnus.com>

	* dbxread.c (process_one_symbol): check for nested LBRAC
	symbols before calling finish_block rather than after.  Do not
	call define_symbol for these symbols.

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

	* blockframe.c (generic_pop_current_frame): Cosmetic changes to
	clarify.

1999-12-20  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* procfs.c: Completely rewritten.  All functions replaced, to make
	maintainence easier in the presence of two very different versions
	of /proc (ioctl vs. read/write).
	* proc_api.c: New file, pretty-print /proc diagnostic trace info.
	* proc_events.c: New file, pretty-print /proc signals, exceptions.
	* proc_flags.c: New file, pretty-print /proc flags.
	* proc_why.c: New file, pretty-print /proc reasons for stopping.
	* Makefile.in: Add rules for above new files.
	* config/i386/i386sol2.mh: Add above new files to NATDEPFILES.
	* config/sparc/sun4sol2.mh: ditto.
	* config/i386/i386dgux.mh: ditto.
	* config/i386/i386v4.mh: ditto.
	* config/i386/i386v42mp.mh: ditto.
	* config/i386/ncr3000.mh: ditto.
	* config/m68k/m68kv4.mh: ditto.
	* config/m88k/delta88v4.mh: ditto.
	* config/mips/irix4.mh: ditto.
	* config/mips/irix5.mh: ditto.
	* config/mips/mipsv4.mh: ditto.
	* config/powerpc/solaris.mh: ditto.
	* config/alpha/alpha-osf2.mh: ditto.
	* config/alpha/alpha-osf3.mh: ditto.
	* acconfig.h: remove obsolete def HAVE_MULTIPLE_PROC_FDS, 
	add new def NEW_PROC_API
	* config.in; ditto.
	* configure.in: Detect sparc solaris 7 and all versions of 
	UnixWare, and define NEW_PROC_API.
	* configure: auto-generate.
	* infrun.c (MAY_SWITCH_FROM_INFERIOR_PID): remove define, make it
	the default behavior.  (switched_from_inferior_pid): rename to
	previous_inferior_pid.  (handle_inferior_event): remove the
	[Switching to thread...] message.  (normal_stop): move the
	[Switching to thread...] message to here.
	* sol-thread.c (sol_find_new_threads): add a call to 
	procfs_find_new_threads, so that new LWPs are found too.
	* config/mips/nm-irix5.h (TARGET_CAN_USE_HARDWARE_WATCHPOINT): 
	define to always use.  (target_insert_watchpoint) define to use
	new procfs call (one additional parameter).
	(target_remove_watchpoint): ditto.
	(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT) define always true.
	* config/mips/nm-irix4.h: ditto.
	
1999-12-21  Jim Blandy  <jimb@cygnus.com>

	* Makefile.in (elf_bfd_h): Look for elf-bfd.h in BFD_SRC, not
	BFD_DIR.  Unlike bfd.h, it is not a generated file.
	
Fri Dec 17 18:24:58 1999  David Taylor  <taylor@texas.cygnus.com>

	* language.c (_initialize_language): move settings of language,
 	range, and type and corresponding function calls
 	set_language_command, set_type_command, and set_range_command
 	closer together to match the model of having the user set the
 	variable via the 'set {language | range | type}' commands.
	This eliminates startup noise introduced by Jimmy Guo's change
	of Dec 13th.

1999-12-17  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* configure.in: test for <stdint.h>, which is not available
	on earlier versions of Linux.
	* config.in: define HAVE_STDINT_H if it's present.
	* configure: autoconfiscate.
	* lin-thread.c: if not HAVE_STDINT_H, stub out the entire module.
	
Fri Dec 17 20:45:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (find_target_beneath): Change ``='' in if to ``==''.

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

	* defs.h (TIDGET): add default definition.
	* lin-thread.c (check_for_thread_event): for now, just provide
	an empty definition (to be filled in later).

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

	* varobj.c (varobj_list): Improve the test and the text of the
	assertion that guards against wrong tally of root varobjs.
	(uninstall_variable): Fix for a bug in which the number of root
	varobjs was not decremented if the first one in the list was deleted.

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

	* linux-thread.c: Remove printf-debugging code.
	* lin-thread.c: ditto.
	* config/alpha/nm-linux.h: protect with NM_LINUX_H.

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

	* lin-thread.c: new file.  Implements multi-thread debugging on
	Linux using the thread_db API first implemented on Solaris.  This
	frees GDB from any dependency on the internal implementation of
	the thread library.  Future versions of the thread library will
	implement a libthread_db API for debuggers, which GDB will use.
	* config/i386/linux.mh: add lin-thread.o to the link, and add
	-ldl and -rdynamic since libthread_db is a dynamic library.
	* config/alpha/alpha-linux.mh: ditto.
	* configure.in: test for thread_db.h, proc_service.h
	* configure: autoconf.
	* config.in: conditionally define HAVE_THREAD_DB_H
	and HAVE_PROC_SERVICE_H
	* gdb_thread_db.h: new file, used when the system doesn't have it.
	* gdb_proc_service.h: ditto.
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* linux-thread.c: changes to accomodate the new lin-thread.c
	module based on the thread_db API.  These changes make parts of
	linux-thread.c shareable with lin-thread.c.
	(linuxthreads_wait_mask): replace with linuxthreads_block_mask.
	(using_thread_db): new variable.  Allows linux-thread module to 
	detect when lin-thread (thread_db API) module is in use.
	(save_inferior_pid, restore_inferior_pid): make 32/64 bit safe.
	(check_all_signal_numbers) make extern, shared with lin-thead.c.
	(linuxthreads_new_objfile): use target_new_objfile_chain to share
	this hook with the lin-thread module.  Call the other module FIRST.
	If using_thread_db is turned on by the other thread module, do not
	set linuxthreads_debug and do not call update_stop_threads.  Do call
	check_all_signal_numbers, to be sure it gets set before target_wait.
	(linux_child_wait): new function.  Abstracts out the "child_wait"
	functionality, so that it can be shared with the lin-thread module.
	(linuxthreads_wait): call linux_child_wait, instead of doing the
	waiting inline.  If using_thread_db, do not call update_stop_threads
	and do not turn on linuxthreads_debug.
	(linuxthreads_mourn_inferior): abstract out the clearing of global
	state, so that it can be shared with the lin-thread.c module.
	(_initialize_linuxthreads): use linuxthreads_wait_mask to block
	SIGCHLD exactly ONCE, and leave it blocked!  Then linux_child_wait
	will call sigsuspend when it wants to wait for this signal.
	(thread_attach): abstract out ptrace attach to share with lin-thread.c
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	Make target_pid_to_str a target_ops vector.
	* target.h (target_pid_to_str): redefine to use a target_ops vector.
	(target_tid_to_str): default to using target_pid_to_str.
	(target_pid_or_tid_to_str): ditto.
	* target.c (update_current_target): inherit to_pid_to_str method.
	(find_target_beneath): new function.  Find target stratum below 
	the given one.
	* config/nm-gnu.h: don't define target_pid_to_str.
	* config/i386/tm-i386sol2.h: ditto.
	* config/sparc/tm-sun4sol2.h: ditto.
	* gnu-nat.c (init_gnu_ops): initialize to_pid_to_str vector.
	* linux-thread.c (init_linuxthreads_ops): ditto.
	* sol-thread.c (init_sol_thread_ops: ditto.
	* procfs.c (init_procfs_ops): ditto.
	* win32-nat.c (init_child_ops): ditto.
	* config/i386/tm-cygwin.h: don't define target_pid_to_str.
	* inftarg.c (child_pid_to_str): new function, used to initialize
	to_pid_to_str vector.  May be suppressed by defining CHILD_PID_TO_STR.
	(init_child_ops): initialize to_pid_to_str using child_pid_to_str.
	Derivative modules may substitute their own child_pid_to_str func
	by defining CHILD_PID_TO_STR.
	* lynx-nat.c (lynx_pid_to_str): rename to child_pid_to_str.
	* config/nm-lynx.h: define CHILD_PID_TO_STR.  
	Don't define target_pid_to_str.
	* hppah-nat.c (hppa_pid_to_str): rename to child_pid_to_str.
	* infttrace.c (hppa_pid_or_tid_to_str): call child_pid_to str 
	instead of hppa_pid_to_str.
	* config/pa/nm-hppah.h: define CHILD_PID_TO_STR.
	Don't define target_pid_to_str.
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* i386-linux-nat.c: introduce PIDGET/TIDGET macros as on Solaris, 
	preparatory to using the thread_db debugging API for Linux.
	(fill_gregset): guard against invalid input.
	(fetch_regs): add a pid/thread_id argument, so we can fetch regs
	from multiple processes/clones/threads.  (store_regs): ditto.
	(fetch_fpregs): ditto.  (store_fpregs): ditto.
	(fetch_xfpregs): ditto.  (store_xfpregs): ditto.
	(fetch_inferior_registers): use TIDGET to extract an appropriate
	thread/clone/process id from inferior_pid, if there's one there, 
	and pass it to fetch_regs etc.  (store_inferior_registers): ditto.

	* infptrace.c: include every available version of wait.h.
	introduce PIDGET/TIDGET macros for use with thread_db API on Linux.
	(call_ptrace): rearrange lines that were split by an ifdef.
	(fetch_register): use TIDGET to extract an appropriate process ID
	from inferior_pid, in case we are debugging more than one process.
	(store_register): ditto.  This is for Linux.
	(child_xfer_memory): use PIDGET to extract the main process id from
	inferior_pid, in case we are debugging multiple processes that share
	the same address space (as on Linux).

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

	* win32-nat.c: Add a missing register to mappings array.
	(child_fetch_inferior_registers): Use precalculated index into mappings
	array as supply_registers argument.
	(handle_output_debug_string): Avoid considering every debug string as a
	cygwin signal.
	(handle_exception): Trap first chance exceptions.
	(child_create_inferior): Initialize Microsoft thread walking API.
	(sgmb): New function.  Used by Microsoft API for stack walking.
	(child_frame_chain): New function.  Uses Microsoft API for stack
	walking.
	(child_frame_chain_saved_pc): Ditto.
	* config/i386/tm-cygwin.h: Define frame handling stuff.

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

	ARM GNU/Linux support and general ARM target fixes/cleanup from
 	Scott Bambrough <scottb@netwinder.org>, plus obsoletion of the old
 	RISCix support.
	* NEWS: Mention addition and obsoletion.
	* configure.host: Recognize arm* instead of just arm.
 	(arm*-*-linux*): Recognize.
	* configure.tgt: Ditto, plus assume arm*-*-* is embedded.
	* config/arm/arm.mh, config/arm/arm.mt, config/arm/nm-arm.h,
 	config/arm/xm-arm.h: Mark as OBSOLETE.
	* config/arm/embed.mt, config/arm/tm-embed.h: New files.
	* config/arm/linux.mh, config/arm/linux.mt, config/arm/nm-linux.h,
 	config/arm/tm-linux.h, config/arm/xm-linux.h: Ditto.
	* config/arm/tm-arm.h: Add more comments, eliminate PARAMS.
	(STACK_END_ADDR): Remove.
	(ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT, THUMB_LE_BREAKPOINT,
	THUMB_BE_BREAKPOINT): Move to here from arm-tdep.c.
	(NUM_REGS): Define as sum.
	(NUM_FREGS, NUM_SREGS, NUM_GREGS): New definitions.
	(FP_REGISTER_RAW_SIZE, FP_REGISTER_VIRTUAL_SIZE,
 	STATUS_REGISTER_SIZE): Define.
	(REGISTER_BYTES, REGISTER_BYTE, REGISTER_RAW_SIZE,
	REGISTER_VIRTUAL_SIZE): Rewrite to use symbolic values.
	(REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
	REGISTER_CONVERT_TO_RAW, USE_STRUCT_CONVENTION,
	EXTRACT_RETURN_VALUE): Rewrite to use new functions.
	(IN_SIGTRAMP): Remove definition.
	* arm-convert.s: Mark as OBSOLETE.
	* arm-linux-nat.c: New file.
	* Makefile.in: Add build rule for it.
	* arm-tdep.c (struct frame_extra_info): New struct.
	(arm_use_struct_convention): Rewrite.
	(arm_push_arguments): Rewrite to handle more cases.
	(arm_register_convertible, arm_register_convert_to_virtual,
 	arm_register_convert_to_raw, arm_extract_return_value): New
 	functions.
	(LITTLE_BREAKPOINT, BIG_BREAKPOINT): Remove.
	* arm-xdep.c: Mark as OBSOLETE.

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

	* infcmd.c (run_stack_dummy): Temporarily lie about the target
 	ability to support asynchronous execution.

	* remote.c (remote_can_async_p, remote_is_async_p): Return true
 	iff to_async_mask_value is true too.
	(remote_async): Error out if called when to_async_mask_value is 0.
	(init_remote_async_ops): Initialize to_async_mask_value to 1.
	(remote_async_detach, remote_async_resume, remote_async_wait,
 	remote_async_kill): Change SERIAL_IS_ASYNC_P call to
 	target_is_async_p call.
	(remote_async_resume): Change SERIAL_CAN_ASYNC_P call to
 	target_can_async_p call.
	
	* target.c (update_current_target): Inherit to_async_mask_value.
	(target_async_mask): New function. To temporarily turn the target
 	into a synchronous one for inferior function calls, and back to
 	asynchronous.

	* target.h (to_async_mask_value): New entry in the target
 	vector.
	(target_async_mask): Export.
	(target_async_mask_value): Define.
 	
Wed Dec 15 11:24:32 1999  Jeffrey A Law  (law@cygnus.com)

	* hp-psymtab-read.c (trans_lang): Use HP_LANGUAGE_FORTRAN instead
	of HP_LANGUAGE_F77.

Wed Dec 15 13:37:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h, gdb-events.c (set_gdb_event_hooks): Return the old
 	event hooks vector.

1999-08-13  Jim Kingdon  <http://developer.redhat.com/>

        * breakpoint.c (bpstat_stop_status): Revert 1998-09-08 change
        to ->frame matching.  The change did not match the ChangeLog
        entry, looked fishy, and caused infinite stepping when running
        "next" from main on sparc w/ RH Linux.  Thanks to Jakub for the
	report.

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

	* arm-tdep.c (arm_get_next_pc): Add argument to shifted_reg_val
	call.

1999-12-14  Mark Salter  <msalter@cygnus.com>

	* mips-tdep.c (mips_print_register): Fix printing of individual
	registers when REGISTER_VIRTUAL_SIZE != REGISTER_RAW_SIZE.

Tue Dec 14 23:29:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (mcalloc): Delcare.
	* utils.c (xcalloc, mcalloc): New functions.

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

	* config/arm/tm-arm.h: Reformat comments, in preparation for
	real changes.
	* arm-tdep.c: Similarly, plus change function definitions to
	modern form.

1999-12-13  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.h (enum bptype): add new BP type bp_thread_event.
	This will be used when a target needs to set an invisible 
	breakpoint to detect events such as thread creation.
	* breakpoint.c (interlan_breakpoint_number): remove ifdefs.
	(create_thread_event_breakpoint): new function.
	(remove_thread_event_breakpoints): new function.
	(bpstat_what): don't stop at invisible thread_event breakpoints.
	(update_breakpoints_after_exec): if bp_thread_event breakpoins
	still exist after an exec, delete them.  They'll need to be 
	found and installed anew anyway.
	(print_it_typical): don't announce bp_thread_event breakpoints.
	(print_one_breakpoint): account for new breakpoint type.
	(mention): don't mention invisible bp_thread_event breakpoints.
	(delete_command): don't delete invisible bp_thread_event bp's.
	(breakpoint_re_set_one): don't touch bp_thread_event bp's.
	
Mon Dec 13 11:10:59 1999  Jimmy Guo	<guo@cup.hp.com>

	* language.h (longest_raw_hex_string, longest_local_hex_string,
	longest_local_hex_string_custom): Declare.
	* language.c: New functions, and misc. fixes.
	(longest_raw_hex_string, longest_local_hex_string,
	longest_local_hex_string_custom): New functions.

	* c-typeprint.c
	(c_type_print_varspec_prefix,c_type_print_varpsec_suffix): Add
	TYPE_CODE_TEMPLATE case and default case.
	(c_type_print_base): Revise how demangled_no_class is found;
	print '}' before printing local file:line info.
	* c-valprint.c (c_value_print): print reference type to class.

	* valarith.c (value_binop): Add support for exponentiation,
	equal, not equal.
	(value_strcmp): New function.
	(value_equal,value_less): Add string equality comparison support.

	* m2-exp.y (lex): add default case statement to capture
	unhandled token and call error().

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

	* main.c (main): Remove unused variable.

	From Hubert VERSTRAETE (hubertV@bigfoot.com):
	* main.c (captured_main): Disambiguate command line option '-d' by
 	preferring --directory over --dbx.

	* top.c (return_to_top_level): Do not do exec cleanups if the
 	target is executing. Those cleanups are supposed to be done when
 	the target has stopped.

Mon Dec 13 20:52:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (do_captured_breakpoint_query,
 	gdb_breakpoint_query): New functions.  Implement a breakpoint
 	query.

	* defs.h (enum gdb_rc): Declare.
	(gdb_breakpoint_query): Declare.

Mon Dec 13 14:18:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h: Fix typo in description of breakpoint events.
	* gdb-events.sh: Update.

Mon Dec 13 13:57:26 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (ep_type_description_t): Delete.
	(print_one_breakpoint): Add local declaration of struct
 	ep_type_description.

Mon Dec 13 12:38:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* top.h: Delete #include <setjmp.h>.  Moved to top.c.
	(SIGJMP_BUF, SIGSETJMP, SIGLONGJMP, SIGJMP_BUF, SIGSETJMP,
 	SIGLONGJMP): Delete.  Moved to top.c
	(error_return, quit_return): Delete extern declarations.

	* top.c: #include <setjmp.h>.
 	(error_return, quit_return): Make static.
	(SIGJMP_BUF, SIGSETJMP, SIGLONGJMP, SIGJMP_BUF, SIGSETJMP,
 	SIGLONGJMP): Define.

Mon Dec 13 11:54:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c (trace_start_command, tracepoints_info): Print
 	step_count using %ld.
	* Makefile.in (tracepoint.o): Compile tracepoint.o with -Werror.

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

	* target.h (enum target_waitkind): Add new enumeration value
 	TARGET_WAITKIND_IGNORE. For inferior events that we should do
 	nothing about.

	* remote.c (remote_async_wait): After each character of console
 	output from the inferior, return to the event loop with an event
 	kind of TARGET_WAITKIND_IGNORE instead of looping here.

	* infrun.c (handle_inferior_event): In case of
 	TARGET_WAITKIND_IGNORE, return immediately, and set things up so
 	that we are still waiting for the inferior.

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

	* event-loop.c (handle_timer_event): When calling the timer
 	procedure, use the saved_timer data, not the timer_ptr data,
 	because the latter has been already freed.

Fri Dec 10 12:01:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* eval.c (evaluate_subexp): Only inline when GNUC and not STDC.

Sat Dec 11 17:52:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (print_one_breakpoint): New function.  Move
 	breakpoint print code to here.
	(breakpoint_1): From here.
	(print_one_breakpoint): Merge in ui-out code.
	(print_one_breakpoint): Add local variabls ``stb'' and
 	``old_chain''.
	(breakpoint_1): Use print_one_breakpoint when UI.
	(print_one_breakpoint): Print breakpoint type when UI.
	(breakpoint_1): Merge UI out code into non UI function.

	* ui-out.c (make_cleanup_ui_out_stream_delete): New function. Wrap
 	make_cleanup.
	(do_stream_delete): New function.  Wrap ui_out_stream_delete.
	* ui-out.h (make_cleanup_ui_out_stream_delete): Declare.

Sat Dec 11 00:12:41 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (breakpoint_1): Clone breakpoint_1 creating UI
 	and non-UI versions.

Mon Dec  6 20:31:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Replace field init_p with invalid_p.
	(TARGET_BFD_VMA_BIT): New architecture vector method.  Defaults to
 	architecture bits_per_address.
	* gdbarch.h, gdbarch.c: Update.
	* defs.h (TARGET_BFD_VMA_BIT): Provide default of TARGET_PTR_BIT
 	for non- multi-arch case.

	* gdbtypes.h (builtin_type_bfd_vma, builtin_type_ptr,
 	builtin_type_CORE_ADDR): New GDB specific address types.
	* gdbtypes.c (_initialize_gdbtypes, build_gdbtypes): Initialize
 	new builtin types.

Wed Dec  8 17:48:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/sparc/nm-nbsd.h (FETCH_INFERIOR_REGISTERS): Delete
 	definition.  Already defined in config/nm-nbsd.h.  Include the
 	more explicit config/nm-nbsd.h.

	* config/sparc/nbsd.mt (TDEPFILES): Move solib.o from here.
	* config/sparc/nbsd.mh (NATDEPFILES): To here.
	* config/xm-nbsd.h: #include <sys/param.h> to get definition of
 	NGROUPS needed by <limits.h> and missing on some systems.
	* config/nm-nbsd.h: Only macro's that match NetBSD definitions
 	with what is expected by solib.c when not SVR4_SHARED_LIBS.

	* configure.host: Add patterns for sparc-*-netbsdaout* and
 	sparc-*-netbsdelf*.
	* config/sparc/nm-nbsdelf.h: New file.
	* config/sparc/nbsdelf.mh: New file.

Wed Dec  8 19:56:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h, blockframe.c: Rename default_frame_chain_valid to
 	file_frame_chain_valid.  Rename alternate_frame_chain_valid to
 	func_frame_chain_valid.

	* config/sparc/tm-sparclite.h, config/mips/tm-mipsv4.h,
 	config/m88k/tm-delta88v4.h, config/m68k/tm-m68kv4.h,
 	config/m68k/tm-monitor.h, config/i386/tm-i386nw.h,
 	config/i386/tm-i386v4.h, config/h8300/tm-h8300.h: Update.
	* mips-tdep.c (mips_gdbarch_init): Update.
	
Wed Dec  8 19:12:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (generic_file_frame_chain_valid): Rename
 	generic_file_frame_chain_valid.
	* frame.h: Update.
	* config/fr30/tm-fr30.h, config/m32r/tm-m32r.h,
 	config/mn10200/tm-mn10200.h, config/mn10300/tm-mn10300.h,
 	config/sh/tm-sh.h, config/v850/tm-v850.h, config/mcore/tm-mcore.h:
 	Update.

	* blockframe.c (generic_func_frame_chain_valid): New function.
  	Implement dummy-frame equivalent of function based frame chain
 	valid.
	* frame.h (generic_func_frame_chain_valid): Declare.

Wed Dec  8 16:26:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (alternate_frame_chain_valid,
 	default_frame_chain_valid): Swap implementations.  The change Mon
 	Nov 30 11:18:48 1998 Andrew Cagney <cagney@chook> which converted
 	several macros to functions was backwards.

	* mips-tdep.c (mips_gdbarch_init): Update.  Call
 	alternate_frame_chain_valid and not default_frame_chain_valid.

Wed Dec  8 15:29:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* infptrace.c: Simplify handling of <sys/wait.h>. Always include
 	"wait.h" from the ../include/wait.h directory.  #include
 	<sys/wait.h> was added as part of Mon Nov 29 12:14:10 1999 Andrew
 	Cagney <cagney@b1.cygnus.com> but the ChangeLog was omitted.

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

	Add support for SSE registers in core files.
	* corelow.c (get_core_register_section): New function.
	(get_core_registers): Fetch the new ".reg-xfp" sections,
	in addition to the traditional ".reg" and ".reg2" sections.
	Check for per-thread variants of all three.  Use
	get_core_register_section, instead of writing it out over and over
	again.
	* i386-linux-nat.c (i386_linux_fetch_core_registers): New function.
	(i386_linux_nat_core_fns): New core_fns structure.  We do our own
	core handling now, instead of using the generic code in core-regset.c.
	(_initialize_i386_linux_nat): New function, needed to register
	i386_linux_nat_core_fns.
	* config/i386/linux.mh (NATDEPFILES): Remove core-regset.o;
	i386-linux-nat.c has its own sniffer now.
	* gdbcore.h: (struct core_fns): Doc fix.

	* i386v-nat.c (i386_float_info): Definition is #if 0'd; delete it
	altogether.  This should use the function i387-tdep.c.

	Patch from Mark Kettenis  <kettenis@gnu.org>:

	* config/i386/tm-i386.h (FLOAT_INFO): New define.
	* i387-tdep.c (print_i387_value, print_i387_ext,
	print_i387_status_word, print_i387_control_word, i387_float_info):
	New functions, used to implement generic `info float' command.

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.

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

	* breakpoint.c (print_it_typical): Print reason for stopping in
 	case of bp_until.

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

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

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

	* gdbtypes.c (builtin_type_v4si, builtin_type_v8qi,
	builtin_type_v4hi, builtin_type_v2si): New SIMD types.
	(build_gdbtypes): Initialize them.
	(_initialize_gdbtypes): Gdbarch_swap them.
	* gdbtypes.h (builtin_type_v4si, builtin_type_v8qi,
	builtin_type_v4hi, builtin_type_v2si): Declare them. 

	* findvar.c (read_register_bytes, write_register_bytes): Correctly
	determine how the region the caller is writing overlaps with each
	register's bytes.

	* value.h (struct value): Doc fixes.

	* valops.c (value_assign): Clarify error message.

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

	* stack.c (return_command_wrapper): New function, to export
 	return_command().

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_event): 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>

	* infrun.c (print_stop_reason): Don't print end of stepping reason
 	if we are in the middle of a multistep command (same condition as
 	in normal_stop).
	
	* 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@cygnus.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.

Wed Nov 24 11:41:01 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ui-out.h (field_string_ftype, ui_out_field_string): Make string
 	parameter const.
	* cli-out.c (cli_field_string): Update.
	* ui-out.c (uo_field_string, ui_out_field_string,
 	default_field_string): Update.

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.
        Add output for ui case.
	(print_transfer_performance): Add output for ui case.

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  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* stack.c (print_frame_info_base): Adjust output for stepi/nexti case.

1999-11-22  Jim Blandy  <jimb@cygnus.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.

	* varobj.c (varobj_gen_name, c_name_of_child, c_value_of_variable,
 	cplus_value_of_variable): Replace strdup with xstrdup.
	* ui-out.c (ui_out_table_begin): Ditto.

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@cygnus.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@cygnus.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.

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

	* breakpoint.h: Export {watch, awatch, rwatch}_command_wrapper().

	* breakpoint.c (print_it_typical): Add output for bp_watchpoint,
 	bp_hardware_watchpoint, read_watchpoint, access_watchpoint cases.
	(watchpoint_check): Add output for when the watchpoint goes out of
 	scope.
	(mention): Add output for bp_watchpoint, bp_hardware_watchpoint,
 	read_watchpoint, access_watchpointcases.  Move end of list to end
 	of function.
	({watch, awatch, rwatch}_command_wrapper): New functions, to
 	export {watch, awatch, rwatch}_command().

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.
	* varobj.c (c_value_of_variable): Use mem_fileopen () and
 	gdb_file_xstrdup() instead of strdup and tui_sfileopen.
	* 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.
	* ui-out.c (ui_out_stream_new): Simplify, XMALLOC doesn't return
 	if malloc failed.  Use mem_fileopen and gdb_file_xstrdup.

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@cygnus.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.

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

	* breakpoint.c (hbreak_command_wrapper): New function, to export
 	hbreak_command.
	(thbreak_command_wrapper): New function, to export thbreak_command.

	* symtab.c (rbreak_command_wrapper): New function, to export
 	rbreak_command.

	* breakpoint.h (hbreak_command_wrapper, thbreak_command_wrapper,
 	rbreak_command_wrapper): Export.

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.
	* varobj.c (varobj_get_type, c_value_of_variable): Use
 	make_cleanup_gdb_file_delete.
	* ui-out.c (ui_out_stream_delete): Use gdb_file_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.
	* varobj.c (varobj_get_type, c_value_of_variable): Update.
	* ui-out.c (ui_out_field_stream): 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.

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

	* infcmd.c (print_return_value): Add output for UI.

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>

	* breakpoint.c (print_it_typical): Print reason for stopping in
 	case of bp_finish.

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.
	(print_stop_reason): Add output for END_STEPPING_RANGE, EXITED,
 	SIGNAL_EXITED, SIGNAL_RECEIVED cases.

	* breakpoint.c (print_it_typical): Add printing of stop reason for
 	bp_breakpoint case.
	
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  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* stack.c (print_frame_info_base): Do not change printing of stack
 	frame info if not running with our interpreter.

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  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* stack.c (select_frame_command_wrapper): Fix typo.

	* infcmd.c (interrupt_target_command_wrapper): Wrapper to allow use of
 	static interrupt_target_command outside of file.

	* stack.c (select_frame_command_wrapper): Wrapper to allow use of
 	static select_frame_command outside of file.

1999-10-28  Jim Blandy  <jimb@cygnus.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.

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

	* stack.c (print_frame_info_base): Don't print the arguments
 	during a backtrace.
	* stack.c (print_frame_info_base): When setting source to 0, save
 	and restore old value. Do this only if source is greater than
 	zero.

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-22  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* stack.c (print_frame_info_base): Check for value of source
 	parameter equal to 2, and print address anyway.  Set source to 0
 	later, to avoid printing file & line info again.

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@cygnus.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@cygnus.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>

	* stack.c (print_frame_info_base): Add printing of list
	begin and end.

	* 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@cygnus.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@cygnus.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@cygnus.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@cygnus.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.

	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>

	* varobj.c (varobj_get_type): Call tui_sfileopen() instead of
	deprecated gdb_file_init_astream().
	(c_value_of_variable): Ditto.
	* ui-out.c (ui_out_stream_new): Ditto.

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.
	* varobj.c (varobj_create, new_root_variable): 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@cygnus.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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* varobj.c (varobj_set_value): Fix handling of baseclasses and
	correct the behavior when it is not a baseclass (both cases were
	dumping core).

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

	* varobj.c (varobj_update): Fix setting of child error field.

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.

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

	* varobj.c (varobj_gen_name): Dynamically allocate variable object
	name string.
	(varobj_update): Fix creation of result list.

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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* varobj.c (_initialize_varobj): Rename varobjdebug to debugvarobj
	to avoid conflict with "set var".

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

	* varobj.c (varobj_get_type, c_value_of_variable): Remove
	dependency on ui_out.[ch].

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

	* varobj.c (varobj_update): Fix order in which changed variables
	are reported to match that of the old code.

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

	* varobj.c (type_changeable): Fix for testsuite case 2.12.  Do not
	report as changed a structure when one of it's children has changed.
	(get_type, get_type_deref): Remove uneeded initialization.

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.

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

	* varobj.c (_initialize_varobj): Add set/show for varobjdebug.
	(uninstall_variable): Test for varobjdebug before printing trace
	and send it to gdb_stdlog.

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

	* varobj.c (c_type_of_child): Fix missing break, improve comment
	and add warning.
	(c_number_of_children): Add comment.

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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* varobj.c (varobj_update): Test for illegal invocation for
	non-root variable object.

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

	* varobj.c (my_value_equal): Style. Eliminate side-effects.
	(varobj_update): Adjust calls to reflect the above change.

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

	* varobj.c (c_value_of_variable): Fix return value for struct
	members when parent is a invalid pointer.

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

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

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

	* varobj.c (cplus_number_of_children): Coding style improvement.
	(cplus_value_of_child): Ditto.

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

	* varobj.c (c_name_of_child): Add missing default clause in switch
	statement.
	(c_type_of_child): Ditto.
	(varobj_set_value): Test for NULL type.

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

	* varobj.c (varobj_set_value): Wrap call to evaluate_expression.

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

	* varobj.c (format_string[]): Remove unused variable(s).
	(varobj_set_value): Ditto.
	(c_value_of_root): Ditto.
	(cplus_value_of_child): Ditto.

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

	* varobj.c: Add missing header file include.
	(new_variable, new_root_variable): Fix prototype and header.
	(_initialize_varobj): Add prototype.

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 16:15:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ui-out.h (ui_out_test_flags): Add missing declaration.

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.

Mon Sep 20 10:54:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (varobj.o): Disable warnings. Currently
 	work-in-progress.

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@cygnus.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@cygnus.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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* wrapper.h: Add missing define brackets.

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@cygnus.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.

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

	* Makefile.in: Add entries for varobj.[cho] and wrapper.[cho].
	gdbtk-varobj.[co].  gdbtk-varobj.o is not yet on the COMMON_OBS
	list because it conflicts with the older gdbtk-variable.o which
	is still the default. 

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

	* varobj.h: New file. GDB variable objects API.
	* varobj.c: New file. Implementation of the GDB variable objects
	API.

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

	* wrapper.h: New file. Longjump free calls to gdb internal
	routines.
	* wrapper.c (gdb_evaluate_expression, wrap_evaluate_expression,
	gdb_value_fetch_lazy, wrap_value_fetch_lazy, gdb_value_equal,
	wrap_value_equal, gdb_value_ind, wrap_value_ind): New functions.

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@cygnus.com>

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

1999-09-14  Jim Blandy  <jimb@cygnus.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@cygnus.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@cygnus.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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* command.c (print_doc_line): Update to use ui_out.
	(do_setshow_command): Ditto.
	(cmd_show_list): Ditto.

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).

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.

Sun Aug  8 17:24:09 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ui-out.c (ui_out_table_begin, ui_out_table_body,
 	ui_out_table_end, ui_out_table_header, ui_out_list_begin,
 	ui_out_list_end, ui_out_stream_new, verify_field_proper_position,
 	verify_field_alignment): Replace incorrect calls to error with
 	calls to internal_error.

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.

Wed Aug  4 19:58:15 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ui-out.h (cli_out_new): Move declaration from here.
	* cli-out.h: To here. New file.
	* Makefile.in (ui-out.o): Add missing dependencies.
	(cli-out.o): Ditto.
	* top.c, cli-out.c: #include "cli-out.h".

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@cygnus.com>

	* hppa-tdep.c (pa_print_registers): Frob register output some more.

1999-07-29  Jim Blandy  <jimb@cygnus.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@cygnus.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@cygnus.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@cygnus.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@cygnus.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@totem.to.cygnus.com>

	* ui-out.c (struct ui_out): Remove deprecated fields.

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.

1999-07-15  Fernando Nasser  <fnasser@cygnus.com>

	* breakpoint.c (breakpoint_1): Fix output when no breakpoins are
	found.

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

	* event-top.c (display_gdb_prompt): Don't do anything if we are
 	running under the interpreter.

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 20:39:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* main.c (main): Recognize --ui.  Will eventually replace
 	--interpreter.
	
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-16  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* cli-out.c (cli_out_new): Add flags argument to ui-out-new call.
	* source.c (print_source_lines_base): Test for ui_source_list flag
	and use ui_out for file and line output.
	* ui-out.c (struct ui_out): Add flags field to struct and to default
	initialization.
	(ui_out_set_flags): New function.  Handle flags.
	(ui_out_clear_flags): New function. Ditto.
	(ui_out_test_flags): New function. Ditto.
	(ui_out_new): Add flags parameter.
	* ui-out.h: Add flags argument to ui_out_new declaration.
	Add declarations for ui_out_*_flags functions.
	(enum ui_flags): New enum. Defines ui_out flags.
	* top.c (gdb_init): Fix misspelling typo.

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.
	(simplified_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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* top.c (gdb_init): Add pre-processor test for UI_OUT.

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.

	* cli-out.c (cli_spaces): Replace gdb_stdout with data->stream.
	(cli_text, cli_message, cli_flush, out_field_fmt,
 	field_separator): Ditto.

Fri Jun 11 16:08:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* cli-out.c (cli_out_new): Replace init_cli_out,
	* top.c (gdb_init): Call cli_out_new.
	* main.c (main): Delete call to set_ui_out_impl.

	* ui-out.h (set_ui_out_impl, cli_ui_out_impl), ui-out.c: Delete.
	(cli_out_new): Add declaration.  Will move later.

	* ui-out.c (ui_out_new, ui_out_data), ui-out.h: New functions.
 	(struct ui_out): Add field data.
	(ui_out_new): Replace init_ui_out_state.
	
	* ui-out.c (XMALLOC): Define.
	(ui_out_stream_new, append_header_to_list): Use XMALLOC instead of
 	xmalloc.
	* cli-out.c (XMALLOC): Define.

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

	* ui-out.c (ui_out_field_int, ui_out_field_skip,
 	ui_out_field_fmt): Rewrite statements to remove infix operators.

	* ui-out.c (get_curr_header, verify_field_proper_position,
 	verify_field_alignment, init_ui_out_state, set_ui_out_impl,
 	append_header_to_list): Add explicit ui_out parameter.
	(struct ui_out): Move the local variables ``table_flag'',
 	``body_flag'', ``table_columns'', ``table_id'', ``list_flat'',
 	``field_count'', ``headerfirst'', ``headerlast'', ``headercurr''
 	into this struct.
	(typedef ui_out_hdr): Delete.
	(struct ui_out_hdr): Rename struct _ui_out_hdr.
	(ui_out_table_begin, ui_out_table_end, ui_out_table_body,
 	ui_out_table_header, ui_out_field_int, ui_out_list_begin,
 	ui_out_table_end, ui_out_list_end, ui_out_field_skip,
 	ui_out_table_body, ui_out_list_begin, ui_out_list_end,
 	ui_out_field_string, ui_out_field_fmt, init_ui_out_state,
 	verify_field_proper_position, verify_field_alignment,
 	clear_header_list, append_header_to_list, _initialize_ui_out):
 	Update.
	
	* ui-out.h (typedef streambuf): Delete.
	(struct _streambuf): Rename to struct ui_stream.
	* breakpoint.c (breakpoint_1), stack.c (print_frame_info_base),
 	printcmd.c (print_frame_args): Rename streambuf to struct
 	ui_stream.
	
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.

Wed Jun  9 16:42:16 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* top.h, top.c (simplified_command_loop): Make global.

	* main.c (main): Delete call to call_interp_loop. Interpreters
 	hook in using command_loop_hook.
	* top.c (call_interp_loop): Delete function.
	
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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* printcmd.c (print_frame_args): Convert some of the output to use
	ui_out.
	* stack.c (print_frame_info_base): Adjust the call to the above
	function.

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>

	* breakpoint.c (print_it_normal): Convertion of part of the output
	to use ui-out.
	(mention): Same as above.
	* infcmd.c (run_command): Same.
	* source.c (print_source_lines_base): Same.
	* stack.c (print_frame_info_base): Same.

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

	* breakpoint.c (breakpoint_1): Fix names of fields on ui_out
	produced output.
	* ui-out.h: Cosmetic change.

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.

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

	* top.c (print_command_lines): Simplified script format for
	non-console output.

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

	* top.c (print_command_lines): Fixed printing of if clauses.
	* breakpoint.c (breakpoint_1): Adjust call to the above.
	* top.c (show_user_1): Same as above.

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

	* top.c (call_interp_loop): Correct build problem with UI_OUT defined.

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  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* top.c (print_command_lines): New function, fix bug in printing
	while commands and uses ui_out.
	* gdbcmd.c: Add prototype for the above.
	* breakpoint.c (breakpoint_1): Fix breakpoint script printing.
	* command.c (show_user_1): Fix user command script printing.

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.
	
	* main.c (call_interp_loop): 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.
	* ui-out.c (_initialize_ui_out), cli-out.c (_initialize_cli_out):
	Ditto.

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.

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

	* breakpoint.c (breakpoint_1): Added ui_out output code but still
	uses old code by default.

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

	* Makefile.in: Added ui-ou files.
	* main.c (main): Install cli_out by default.
	* ui-out.c (ui_out_table_begin): Use saved table id.

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

	* ui-out.h: Export implementation vectors so they can be
	installed in main.c and top.c.

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

	* ui-out.h: New file. Defines the ui_out API.
	* ui-out.c: New file. Implements the ui_out API abstraction only.
	* cli-out.c: New file. Implements low-level ui-out primitives for
	CLI-based interaction.

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

	* top.c (simplified_command_loop): Reformat using GNU style.
	(call_interp_loop): Ditto.
	
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-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (simplified_command_loop): New function.  It is just a
 	bare minimal command_loop.
	(call_interp_loop): New function. Call the correct version of the
 	command loop, with the appropriate input reading function,
 	depending on which interpreter gdb was invoked with.
	
	* main.c (main): Recognize and handle the new command line option
 	--interpreter. If an interpreter is specified, call the appropriate
	command handling function.
	
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: 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-1998

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
