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.
	* testsuite/gdb.base/callfuncs.exp: make "next" test match the
	next source line, in case the "next" runs away.
	* 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.
	* testsuite/gdb.threads/linux-dp.exp: Make test for "New Thread"
	message more forgiving.  Ditto test for "info threads".
	
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.
	* doc/gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* 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).
	* doc/gdbint.texinfo (find_sym_fns): This replaces symfile_init.

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

	* remote.c (remote_insert_breakpoint): Fix typo in Z packet support. 
	Also move Z packet support OUTSIDE of REMOTE_BREAKPOINT ifdef,
	since this is not set for all targets that support the Z packet.

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, testsuite/gdb.chill/tests1.ch
	testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp:
	Update FSF address in copyright notices.

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

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

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

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

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

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

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

	* mips-tdep.c (return_value_location): New function. Merge/rewrite
 	of return-value code in mips_extract_return_value,
 	mips_store_return_value.  Stop buffer overflow when 64 bit value
 	in 32 bit registers.  Extract 64bit float from 32 bit register
 	pair of correct order.
	(mips_extract_return_value, mips_store_return_value): Call
 	return_value_location.  For store, ensure that remainder of
 	register is zero.
	
Thu Jan 28 18:58:02 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	From John Metzler <jmetzler@cygnus.com>:
	* mips-tdep.c (struct gdbarch_tdep): Add mips_saved_regsize.
	(MIPS_SAVED_REGSIZE): Define.
	(mips_find_saved_regs, read_next_frame_reg, mips_pop_frame):
 	Read/write MIPS_SAVED_REGSIZE bytes of register on stack instead
 	of MIPS_REGSIZE.
	(mips_gdbarch_init): Initialize mips_saved_regsize.

	* mips-tdep.c (mips_frame_saved_pc, mips16_heuristic_proc_desc,
 	mips_push_arguments, mips_push_dummy_frame,
 	mips_use_struct_convention): Ditto.  For MIPS_SAVED_REGSIZE <
 	REGISTER_RAW_SIZE, handle little/big endian issues from only using
 	half the register.
	(STACK_ARGSIZE): Default to MIPS_SAVED_REGSIZE instead of
 	MIPS_REGSIZE.

	* mips-tdep.c (struct gdbarch_tdep, FP_REGISTER_DOUBLE,
 	mips_gdbarch_init): Apply similar changes.  Add
 	mips_fp_register_double to struct.

Wed Feb 17 10:10:27 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

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

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

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

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

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

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

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

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

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

	* breakpoint.c (watch_command_1): Reformat comment.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* NEWS: Add mentions of various new things.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* inferior.h: Ran indent.

	* fork-child.c: Ran indent.

	* infrun.c : Ran indent.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wed Jan 27 15:09:22 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): Trace e_flags from BFD
 	elf_info.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* config.in, configure : regenerated.

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

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

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

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

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

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

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

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

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

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

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

	* configure.in: Fix whitespace indentation for --help.
	* configure: Regenerated.

1999-01-04  Manuel Bouyer <bouyer@antioche.lip6.fr>

	* main.c: Add --write command line option, document -w.
	* gdb.1: Document --write.

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

	* configure.in: Require autoconf 2.12.1 or higher.
	* doc/configure.in: Ditto.
	* nlm/configure.in: Ditto.
	* rdi-share/configure.in: Ditto.
	* testsuite/configure.in: Ditto.
	* doc/Makefile.in: Don't hardcode $(SHELL).
	* nlm/Makefile.in: Ditto.
	* rdi-share/Makefile.in: Ditto.
	* testsuite/Makefile.in: Ditto.

Mon Jan  4 12:53:03 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-vx.c (init_vx_ops, init_vx_run_ops): Remove unneeded
	inits of new fields, including ref to bogus field.
	(vx_ops, vx_run_ops): Make static.

Mon Jan  4 15:05:29 1999  David Taylor  <taylor@texas.cygnus.com>

	* inferior.h (START_INFERIOR_TRAPS_EXPECTED): delete,
	already defined in tm.h.

	* inftarg.c: change <sys/unistd.h> to <unistd.h> and
	conditionalize its inclusion.
	* infttrace.c: ditto.

For older changes see ChangeLog-1998

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
